+++ /dev/null
-#include "oculusriftdevice.h"
-#include "oculusriftdevice_private.h"
-#include "stereoview.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_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);
-}
-
-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