void CoinRiftWidget::handlingSafetyWarning(void) { // Health and Safety Warning display state. ovrHSWDisplayState hswDisplayState; ovrHmd_GetHSWDisplayState(hmd, &hswDisplayState); if (hswDisplayState.Displayed) { // Dismiss the warning if the user pressed the appropriate key or if the user // is tapping the side of the HMD. // If the user has requested to dismiss the warning via keyboard or controller input... //if (Util_GetAndResetHSWDismissedState()) ovrHmd_DismissHSWDisplay(hmd); //else //{ // // Detect a moderate tap on the side of the HMD. // ovrTrackingState ts = ovrHmd_GetTrackingState(hmd, ovr_GetTimeInSeconds()); // if (ts.StatusFlags & ovrStatus_OrientationTracked) // { // const OVR::Vector3f v(ts.RawSensorData.Accelerometer.x, // ts.RawSensorData.Accelerometer.y, // ts.RawSensorData.Accelerometer.z); // // Arbitrary value and representing moderate tap on the side of the DK2 Rift. // if (v.LengthSq() > 250.f) // ovrHmd_DismissHSWDisplay(hmd); // } //} } }
void OculusInterface::oculusDisplayWarning() { // Health and Safety Warning display state. ovrHSWDisplayState hswDisplayState; ovrHmd_GetHSWDisplayState(m_hmd, &hswDisplayState); if (hswDisplayState.Displayed) { // Dismiss the warning if the user pressed the appropriate key or if the user // is tapping the side of the HMD. // If the user has requested to dismiss the warning via keyboard or controller input... if (m_warningOff) ovrHmd_DismissHSWDisplay(m_hmd); else { // Detect a moderate tap on the side of the HMD. ovrTrackingState ts = ovrHmd_GetTrackingState(m_hmd, ovr_GetTimeInSeconds()); if (ts.StatusFlags & ovrStatus_OrientationTracked) { const OVR::Vector3f v(ts.RawSensorData.Accelerometer.x, ts.RawSensorData.Accelerometer.y, ts.RawSensorData.Accelerometer.z); // Arbitrary value and representing moderate tap on the side of the DK2 Rift. if (v.LengthSq() > 250.f) ovrHmd_DismissHSWDisplay(m_hmd); } } } }
void OVR_SDL2_app::dismiss_warning() { ovrHSWDisplayState state; ovrHmd_GetHSWDisplayState(hmd, &state); if (state.Displayed) ovrHmd_DismissHSWDisplay(hmd); }
///@brief The HSW will be displayed by default when using SDK rendering. void RiftAppSkeleton::DismissHealthAndSafetyWarning() const { ovrHSWDisplayState hswDisplayState; ovrHmd_GetHSWDisplayState(m_Hmd, &hswDisplayState); if (hswDisplayState.Displayed) { ovrHmd_DismissHSWDisplay(m_Hmd); } }
void OculusInterface::disableWarningMessage() { // Health and Safety Warning display state. ovrHSWDisplayState hswDisplayState; ovrHmd_GetHSWDisplayState(m_hmd, &hswDisplayState); if (hswDisplayState.Displayed) { ovrHmd_DismissHSWDisplay(m_hmd); } }
// Returns true if the HSW needed to be removed from display, else false. bool clearHSW(ovrHmd hmd) { static bool dismissedHsw = false; if (!dismissedHsw) { ovrHSWDisplayState hswDisplayState; ovrHmd_GetHSWDisplayState(hmd, &hswDisplayState); if (hswDisplayState.Displayed) { ovrHmd_DismissHSWDisplay(hmd); return true; } else { dismissedHsw = true; } } return !dismissedHsw; }
void OcculusCameraComponent::update( float dt ) { //Occulus warning // Health and Safety Warning display state. ovrHSWDisplayState hswDisplayState; ovrHmd_GetHSWDisplayState(hmd, &hswDisplayState); if (hswDisplayState.Displayed) { // Dismiss the warning if the user pressed the appropriate key or if the user // is tapping the side of the HMD. // If the user has requested to dismiss the warning via keyboard or controller input... //if (Util_GetAndResetHSWDismissedState()) // ovrHmd_DismissHSWDisplay(hmd); //else { // Detect a moderate tap on the side of the HMD. ovrTrackingState ts = ovrHmd_GetTrackingState(hmd, ovr_GetTimeInSeconds()); if (ts.StatusFlags & ovrStatus_OrientationTracked) { const OVR::Vector3f v(ts.RawSensorData.Accelerometer.x, ts.RawSensorData.Accelerometer.y, ts.RawSensorData.Accelerometer.z); // Arbitrary value and representing moderate tap on the side of the DK2 Rift. if (v.LengthSq() > 250.f) ovrHmd_DismissHSWDisplay(hmd); } } } dt; // Query the HMD for the current tracking state. ovrTrackingState ts = ovrHmd_GetTrackingState(hmd, ovr_GetTimeInSeconds()); if (ts.StatusFlags & (ovrStatus_OrientationTracked | ovrStatus_PositionTracked)) { ovrPosef pose = ts.HeadPose.ThePose; //convert to mat4 if desired glm::mat4 transformMatrix = glm::mat4_cast( fromOVR( pose.Orientation ) ); //parent->gc<TransformComponent>()->setRotation( glm::mat3(transformMatrix) ); } parent->getStage()->subscribeRender( this ); }
//------------------------------------------------------------------------------------- void ProcessAndRender() { static ovrPosef eyeRenderPose[2]; // Start timing #if SDK_RENDER ovrHmd_BeginFrame(HMD, 0); #else ovrHmd_BeginFrameTiming(HMD, 0); // Retrieve data useful for handling the Health and Safety Warning - unused, but here for reference ovrHSWDisplayState hswDisplayState; ovrHmd_GetHSWDisplayState(HMD, &hswDisplayState); #endif // Adjust eye position and rotation from controls, maintaining y position from HMD. static float BodyYaw(3.141592f); static Vector3f HeadPos(0.0f, 1.6f, -5.0f); // HeadPos.y = ovrHmd_GetFloat(HMD, OVR_KEY_EYE_HEIGHT, HeadPos.y); bool freezeEyeRender = Util_RespondToControls(BodyYaw, HeadPos, eyeRenderPose[1].Orientation); pRender->BeginScene(); // Render the two undistorted eye views into their render buffers. if (!freezeEyeRender) // freeze to debug for time warp { pRender->SetRenderTarget ( pRendertargetTexture ); pRender->SetViewport (Recti(0,0, pRendertargetTexture->GetWidth(), pRendertargetTexture->GetHeight() )); pRender->Clear(); for (int eyeIndex = 0; eyeIndex < ovrEye_Count; eyeIndex++) { ovrEyeType eye = HMD->EyeRenderOrder[eyeIndex]; eyeRenderPose[eye] = ovrHmd_GetEyePose(HMD, eye); // Get view and projection matrices Matrix4f rollPitchYaw = Matrix4f::RotationY(BodyYaw); Matrix4f finalRollPitchYaw = rollPitchYaw * Matrix4f(eyeRenderPose[eye].Orientation); Vector3f finalUp = finalRollPitchYaw.Transform(Vector3f(0,1,0)); Vector3f finalForward = finalRollPitchYaw.Transform(Vector3f(0,0,-1)); Vector3f shiftedEyePos = HeadPos + rollPitchYaw.Transform(eyeRenderPose[eye].Position); Matrix4f view = Matrix4f::LookAtRH(shiftedEyePos, shiftedEyePos + finalForward, finalUp); Matrix4f proj = ovrMatrix4f_Projection(EyeRenderDesc[eye].Fov, 0.01f, 10000.0f, true); pRender->SetViewport(Recti(EyeRenderViewport[eye])); pRender->SetProjection(proj); pRender->SetDepthMode(true, true); pRoomScene->Render(pRender, Matrix4f::Translation(EyeRenderDesc[eye].ViewAdjust) * view); } } pRender->FinishScene(); #if SDK_RENDER // Let OVR do distortion rendering, Present and flush/sync ovrHmd_EndFrame(HMD, eyeRenderPose, &EyeTexture[0].Texture); #else // Clear screen pRender->SetDefaultRenderTarget(); pRender->SetFullViewport(); pRender->Clear(0.0f, 0.0f, 0.0f, 0.0f); // Setup shader ShaderFill distortionShaderFill(Shaders); distortionShaderFill.SetTexture(0, pRendertargetTexture); distortionShaderFill.SetInputLayout(VertexIL); for(int eyeNum = 0; eyeNum < 2; eyeNum++) { // Get and set shader constants Shaders->SetUniform2f("EyeToSourceUVScale", UVScaleOffset[eyeNum][0].x, UVScaleOffset[eyeNum][0].y); Shaders->SetUniform2f("EyeToSourceUVOffset", UVScaleOffset[eyeNum][1].x, UVScaleOffset[eyeNum][1].y); ovrMatrix4f timeWarpMatrices[2]; ovrHmd_GetEyeTimewarpMatrices(HMD, (ovrEyeType)eyeNum, eyeRenderPose[eyeNum], timeWarpMatrices); Shaders->SetUniform4x4f("EyeRotationStart", timeWarpMatrices[0]); //Nb transposed when set Shaders->SetUniform4x4f("EyeRotationEnd", timeWarpMatrices[1]); //Nb transposed when set // Perform distortion pRender->Render(&distortionShaderFill, MeshVBs[eyeNum], MeshIBs[eyeNum],sizeof(ovrDistortionVertex)); } pRender->SetDefaultRenderTarget(); pRender->Present( true ); // Vsync enabled // Only flush GPU for ExtendDesktop; not needed in Direct App Renering with Oculus driver. if (HMD->HmdCaps & ovrHmdCap_ExtendDesktop) pRender->WaitUntilGpuIdle(); ovrHmd_EndFrameTiming(HMD); #endif }