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);
        }
    }
}
Beispiel #2
0
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();
}