+
+ ovrHmd hmd = device.get_private().ovr_hmd;
+
+ if(device.is_timing_active())
+ {
+ ovr_WaitTillTime(device.get_timewarp_time());
+ ovrTrackingState state = ovrHmd_GetTrackingState(hmd, device.get_tracking_time());
+
+ ovrMatrix4f matrices[2];
+ ovrHmd_GetEyeTimewarpMatrices(hmd, ovrEye_Left, state.HeadPose.ThePose, matrices);
+ left_shdata.uniform_matrix4_array("timewarp", 2, &matrices[0].M[0][0]);
+
+ ovrHmd_GetEyeTimewarpMatrices(hmd, ovrEye_Right, state.HeadPose.ThePose, matrices);
+ right_shdata.uniform_matrix4_array("timewarp", 2, &matrices[0].M[0][0]);
+ }
+ else
+ {
+ GL::Matrix matrices[2];
+ left_shdata.uniform_matrix4_array("timewarp", 2, matrices[0].data());
+ right_shdata.uniform_matrix4_array("timewarp", 2, matrices[0].data());
+ }