X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=sidebyside;f=source%2Foculusriftdevice.cpp;h=f73371f6c77d921f4ccc7ad3a04b6d2fb86060de;hb=8d1197440f07062a1020d902619ae8e9a494baa0;hp=9857f78f2f3c7eb933fde613c211a6ba3af268d0;hpb=654b8083e06fb9f3338f7148bfd30b6305c7c5be;p=libs%2Fvr.git diff --git a/source/oculusriftdevice.cpp b/source/oculusriftdevice.cpp index 9857f78..f73371f 100644 --- a/source/oculusriftdevice.cpp +++ b/source/oculusriftdevice.cpp @@ -1,5 +1,6 @@ #include "oculusriftdevice.h" #include "oculusriftdevice_private.h" +#include "stereoview.h" using namespace std; @@ -9,7 +10,8 @@ namespace VR { unsigned OculusRiftDevice::n_instances = 0; OculusRiftDevice::OculusRiftDevice(): - priv(new Private) + priv(new Private), + frame_index(0) { if(!n_instances) ovr_Initialize(); @@ -33,6 +35,13 @@ OculusRiftDevice::~OculusRiftDevice() ovr_Shutdown(); } +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]); + view.set_eye_spacing(left_desc.HmdToEyeViewOffset.x-right_desc.HmdToEyeViewOffset.x); +} + OculusRiftCamera *OculusRiftDevice::create_camera(const GL::Camera &bc) const { return new OculusRiftCamera(*this, bc); @@ -43,5 +52,37 @@ OculusRiftCombiner *OculusRiftDevice::create_combiner() const return new OculusRiftCombiner(*this); } +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