void OpenVRContext::update() { if (getIsInitialized()) { // Fetch the latest tracking data on all tracked devices m_pVRSystem->GetDeviceToAbsoluteTrackingPose( vr::TrackingUniverseRawAndUncalibrated, 0.f, // no prediction needed m_pTrackedDeviceRawPoseArray, vr::k_unMaxTrackedDeviceCount); m_pVRSystem->GetDeviceToAbsoluteTrackingPose( vr::TrackingUniverseStanding, 0.f, // no prediction needed m_pTrackedDeviceStandingPoseArray, vr::k_unMaxTrackedDeviceCount); // Update the HMD pose if (m_hmdView != nullptr) { m_hmdView->applyHMDDataFrame( &m_pTrackedDeviceRawPoseArray[vr::k_unTrackedDeviceIndex_Hmd], &m_pTrackedDeviceStandingPoseArray[vr::k_unTrackedDeviceIndex_Hmd]); } // Process OpenVR events vr::VREvent_t event; while (m_pVRSystem->PollNextEvent(&event, sizeof(event))) { processVREvent(event); } } }
void VROpenVRInputDevice::appendNewInputEventsSinceLastCall(VRDataQueue* queue) { //process VR Events vr::VREvent_t event; vr::TrackedDevicePose_t pose; while( m_pHMD->PollNextEventWithPose(vr::VRCompositor()->GetTrackingSpace(), &event, sizeof(event), &pose ) ) { processVREvent( event, &pose ); } //Report current States reportStates(); for (int f = 0; f < _events.size(); f++) { queue->push(_events[f]); } _events.clear(); }