2 #include "openvrdevice.h"
9 unsigned OpenVRDevice::n_instances = 0;
11 OpenVRDevice::OpenVRDevice()
15 vr::EVRInitError init_err;
16 vr::VR_Init(&init_err, vr::VRApplication_Scene);
17 if(init_err!=vr::VRInitError_None)
18 throw runtime_error("OpenVR initialization failed");
22 vr::IVRCompositor *compositor = vr::VRCompositor();
24 throw runtime_error("OpenVR compositor initialization failed");
26 vr::VRCompositor()->SetTrackingSpace(vr::TrackingUniverseSeated);
29 OpenVRDevice::~OpenVRDevice()
35 OpenVRCamera *OpenVRDevice::create_camera(const GL::Camera &bc)
37 return new OpenVRCamera(*this, bc);
40 OpenVRCombiner *OpenVRDevice::create_combiner(GL::View &)
42 return new OpenVRCombiner(*this);
45 void OpenVRDevice::update_pose_matrices()
47 vector<vr::TrackedDevicePose_t> poses;
48 poses.resize(vr::k_unTrackedDeviceIndex_Hmd+1);
49 vr::VRCompositor()->WaitGetPoses(&poses[0], poses.size(), 0, 0);
51 vr::TrackedDevicePose_t &hmd_pose = poses[vr::k_unTrackedDeviceIndex_Hmd];
52 if(hmd_pose.bPoseIsValid)
54 for(unsigned i=0; i<3; ++i)
55 for(unsigned j=0; j<4; ++j)
56 hmd_matrix(i, j) = hmd_pose.mDeviceToAbsoluteTracking.m[i][j];