X-Git-Url: http://git.tdb.fi/?p=libs%2Fvr.git;a=blobdiff_plain;f=source%2Fovr%2Foculusriftdevice.cpp;fp=source%2Fovr%2Foculusriftdevice.cpp;h=0000000000000000000000000000000000000000;hp=38fd20e68179d657cf05a7292818b2e038384c61;hb=b6de7d24475dec8f5d6b8148a69cf8b561bc0761;hpb=c07c707c480f4e989caee17541187f08f136d216 diff --git a/source/ovr/oculusriftdevice.cpp b/source/ovr/oculusriftdevice.cpp deleted file mode 100644 index 38fd20e..0000000 --- a/source/ovr/oculusriftdevice.cpp +++ /dev/null @@ -1,110 +0,0 @@ -#include -#include -#include "oculusriftdevice.h" -#include "oculusriftdevice_private.h" - -using namespace std; - -namespace Msp { -namespace VR { - -unsigned OculusRiftDevice::n_instances = 0; - -OculusRiftDevice::OculusRiftDevice(): - priv(new Private), - frame_index(0) -{ - if(!n_instances) - ovr_Initialize(); - ++n_instances; - - priv->ovr_hmd = ovrHmd_Create(0); - if(!priv->ovr_hmd) - { - delete priv; - throw runtime_error("rift hmd not found"); - } -} - -OculusRiftDevice::~OculusRiftDevice() -{ - ovrHmd_Destroy(priv->ovr_hmd); - delete priv; - - --n_instances; - if(!n_instances) - ovr_Shutdown(); -} - -void OculusRiftDevice::configure_window(Graphics::Window &window) const -{ - Graphics::WindowOptions win_opts = window.get_options(); - win_opts.width = priv->ovr_hmd->Resolution.w; - win_opts.height = priv->ovr_hmd->Resolution.h; - - const list &monitors = window.get_display().get_monitors(); - string hmd_name = priv->ovr_hmd->ProductName; - for(list::const_iterator i=monitors.begin(); i!=monitors.end(); ++i) - if(hmd_name.find(i->name)!=string::npos) - { - win_opts.fullscreen = true; - win_opts.fullscreen_monitor = &*i; - win_opts.fullscreen_exclusive = false; - } - - window.reconfigure(win_opts); -} - -void OculusRiftDevice::configure_view(StereoView &view) const -{ - ovrEyeRenderDesc left_desc = ovrHmd_GetRenderDesc(priv->ovr_hmd, ovrEye_Left, priv->ovr_hmd->DefaultEyeFov[ovrEye_Left]); - ovrEyeRenderDesc right_desc = ovrHmd_GetRenderDesc(priv->ovr_hmd, ovrEye_Right, priv->ovr_hmd->DefaultEyeFov[ovrEye_Left]); - const ovrVector3f &l = left_desc.HmdToEyeViewOffset; - const ovrVector3f &r = right_desc.HmdToEyeViewOffset; - view.set_eye_matrices(GL::Matrix::translation(GL::Vector3(l.x, l.y, l.z)), GL::Matrix::translation(GL::Vector3(r.x, r.y, r.z))); -} - -OculusRiftCamera *OculusRiftDevice::create_camera(const GL::Camera &bc) -{ - return new OculusRiftCamera(*this, bc); -} - -OculusRiftCombiner *OculusRiftDevice::create_combiner(GL::View &view) -{ - return new OculusRiftCombiner(*this, view); -} - -void OculusRiftDevice::begin_frame() -{ - priv->frame_timing = ovrHmd_BeginFrameTiming(priv->ovr_hmd, ++frame_index); - timing_active = true; -} - -void OculusRiftDevice::end_frame() -{ - glFinish(); - ovrHmd_EndFrameTiming(priv->ovr_hmd); - timing_active = false; -} - -double OculusRiftDevice::get_tracking_time() const -{ - if(!timing_active) - throw logic_error("timing not active"); - return priv->frame_timing.ScanoutMidpointSeconds; -} - -double OculusRiftDevice::get_timewarp_time() const -{ - if(!timing_active) - throw logic_error("timing not active"); - return priv->frame_timing.TimewarpPointSeconds; -} - -double OculusRiftDevice::get_current_time() const -{ - return ovr_GetTimeInSeconds(); -} - -} // namespace VR -} // namespace Msp