]> git.tdb.fi Git - libs/vr.git/blobdiff - source/oculusriftdevice.cpp
Add support for time warp on Oculus Rift
[libs/vr.git] / source / oculusriftdevice.cpp
index f521a0e18ba86ec423022526806968fca65933b6..f73371f6c77d921f4ccc7ad3a04b6d2fb86060de 100644 (file)
@@ -10,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();
@@ -51,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