]> git.tdb.fi Git - libs/vr.git/blobdiff - source/ovr/oculusriftdevice.cpp
Use matrices for eye offsets instead of a simple spacing
[libs/vr.git] / source / ovr / oculusriftdevice.cpp
index 146f04a7c0ad32a12c94dead97ea46265bec34fa..38fd20e68179d657cf05a7292818b2e038384c61 100644 (file)
@@ -1,3 +1,4 @@
+#include <msp/graphics/display.h>
 #include <msp/vr/stereoview.h>
 #include "oculusriftdevice.h"
 #include "oculusriftdevice_private.h"
@@ -35,11 +36,32 @@ OculusRiftDevice::~OculusRiftDevice()
                ovr_Shutdown();
 }
 
+void OculusRiftDevice::configure_window(Graphics::Window &window) const
+{
+       Graphics::WindowOptions win_opts = window.get_options();
+       win_opts.width = priv->ovr_hmd->Resolution.w;
+       win_opts.height = priv->ovr_hmd->Resolution.h;
+
+       const list<Graphics::Monitor> &monitors = window.get_display().get_monitors();
+       string hmd_name = priv->ovr_hmd->ProductName;
+       for(list<Graphics::Monitor>::const_iterator i=monitors.begin(); i!=monitors.end(); ++i)
+               if(hmd_name.find(i->name)!=string::npos)
+               {
+                       win_opts.fullscreen = true;
+                       win_opts.fullscreen_monitor = &*i;
+                       win_opts.fullscreen_exclusive = false;
+               }
+
+       window.reconfigure(win_opts);
+}
+
 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);
+       const ovrVector3f &l = left_desc.HmdToEyeViewOffset;
+       const ovrVector3f &r = right_desc.HmdToEyeViewOffset;
+       view.set_eye_matrices(GL::Matrix::translation(GL::Vector3(l.x, l.y, l.z)), GL::Matrix::translation(GL::Vector3(r.x, r.y, r.z)));
 }
 
 OculusRiftCamera *OculusRiftDevice::create_camera(const GL::Camera &bc)