]> git.tdb.fi Git - libs/vr.git/blob - source/oculusriftdevice.cpp
LibOVR requires libudev
[libs/vr.git] / source / oculusriftdevice.cpp
1 #include "oculusriftdevice.h"
2 #include "oculusriftdevice_private.h"
3
4 using namespace std;
5
6 namespace Msp {
7 namespace VR {
8
9 OculusRiftDevice::OculusRiftDevice():
10         priv(new Private)
11 {
12         static OVR::System system(OVR::Log::ConfigureDefaultLog(OVR::LogMask_Debug));
13
14         priv->ovr_manager = OVR::DeviceManager::Create();
15         priv->ovr_hmd = priv->ovr_manager->EnumerateDevices<OVR::HMDDevice>().CreateDevice();
16         if(!priv->ovr_hmd)
17         {
18                 delete priv;
19                 throw runtime_error("rift hmd not found");
20         }
21 }
22
23 OculusRiftDevice::~OculusRiftDevice()
24 {
25         delete priv;
26 }
27
28 OculusRiftCamera *OculusRiftDevice::create_camera(const GL::Camera &bc) const
29 {
30         return new OculusRiftCamera(*this, bc);
31 }
32
33 OculusRiftCombiner *OculusRiftDevice::create_combiner() const
34 {
35         OculusRiftCombiner *combiner = new OculusRiftCombiner;
36
37         OVR::HMDInfo info;
38         if(priv->ovr_hmd->GetDeviceInfo(&info))
39         {
40                 combiner->set_view_distance(info.EyeToScreenDistance/info.HScreenSize);
41                 combiner->set_lens_separation(info.LensSeparationDistance/info.HScreenSize);
42                 combiner->set_distortion(info.DistortionK[0], info.DistortionK[1], info.DistortionK[2], info.DistortionK[3]);
43                 combiner->set_red_aberration(info.ChromaAbCorrection[0], info.ChromaAbCorrection[1]);
44                 combiner->set_blue_aberration(info.ChromaAbCorrection[2], info.ChromaAbCorrection[3]);
45         }
46
47         return combiner;
48 }
49
50 } // namespace VR
51 } // namespace Msp