1 #include <msp/vr/stereoview.h>
2 #include "oculusriftdevice.h"
3 #include "oculusriftdevice_private.h"
10 unsigned OculusRiftDevice::n_instances = 0;
12 OculusRiftDevice::OculusRiftDevice():
20 priv->ovr_hmd = ovrHmd_Create(0);
24 throw runtime_error("rift hmd not found");
28 OculusRiftDevice::~OculusRiftDevice()
30 ovrHmd_Destroy(priv->ovr_hmd);
38 void OculusRiftDevice::configure_view(StereoView &view) const
40 ovrEyeRenderDesc left_desc = ovrHmd_GetRenderDesc(priv->ovr_hmd, ovrEye_Left, priv->ovr_hmd->DefaultEyeFov[ovrEye_Left]);
41 ovrEyeRenderDesc right_desc = ovrHmd_GetRenderDesc(priv->ovr_hmd, ovrEye_Right, priv->ovr_hmd->DefaultEyeFov[ovrEye_Left]);
42 view.set_eye_spacing(left_desc.HmdToEyeViewOffset.x-right_desc.HmdToEyeViewOffset.x);
45 OculusRiftCamera *OculusRiftDevice::create_camera(const GL::Camera &bc) const
47 return new OculusRiftCamera(*this, bc);
50 OculusRiftCombiner *OculusRiftDevice::create_combiner() const
52 return new OculusRiftCombiner(*this);
55 void OculusRiftDevice::begin_frame()
57 priv->frame_timing = ovrHmd_BeginFrameTiming(priv->ovr_hmd, ++frame_index);
61 void OculusRiftDevice::end_frame()
64 ovrHmd_EndFrameTiming(priv->ovr_hmd);
65 timing_active = false;
68 double OculusRiftDevice::get_tracking_time() const
71 throw logic_error("timing not active");
72 return priv->frame_timing.ScanoutMidpointSeconds;
75 double OculusRiftDevice::get_timewarp_time() const
78 throw logic_error("timing not active");
79 return priv->frame_timing.TimewarpPointSeconds;
82 double OculusRiftDevice::get_current_time() const
84 return ovr_GetTimeInSeconds();