void showMinSpecWarning() { auto vrSystem = acquireOpenVrSystem(); auto vrOverlay = vr::VROverlay(); if (!vrOverlay) { qFatal("Unable to initialize SteamVR overlay manager"); } vr::VROverlayHandle_t minSpecFailedOverlay = 0; if (vr::VROverlayError_None != vrOverlay->CreateOverlay(FAILED_MIN_SPEC_OVERLAY_NAME, FAILED_MIN_SPEC_OVERLAY_FRIENDLY_NAME, &minSpecFailedOverlay)) { qFatal("Unable to create overlay"); } // Needed here for PathUtils QCoreApplication miniApp(__argc, __argv); vrSystem->ResetSeatedZeroPose(); QString imagePath = PathUtils::resourcesPath() + "/images/steam-min-spec-failed.png"; vrOverlay->SetOverlayFromFile(minSpecFailedOverlay, imagePath.toLocal8Bit().toStdString().c_str()); vrOverlay->SetHighQualityOverlay(minSpecFailedOverlay); vrOverlay->SetOverlayWidthInMeters(minSpecFailedOverlay, 1.4f); vrOverlay->SetOverlayInputMethod(minSpecFailedOverlay, vr::VROverlayInputMethod_Mouse); vrOverlay->ShowOverlay(minSpecFailedOverlay); QTimer* timer = new QTimer(&miniApp); timer->setInterval(FAILED_MIN_SPEC_UPDATE_INTERVAL_MS); // Qt::CoarseTimer acceptable, we don't need this to be frame rate accurate QObject::connect(timer, &QTimer::timeout, [&] { vr::TrackedDevicePose_t vrPoses[vr::k_unMaxTrackedDeviceCount]; vrSystem->GetDeviceToAbsoluteTrackingPose(vr::TrackingUniverseSeated, 0, vrPoses, vr::k_unMaxTrackedDeviceCount); auto headPose = toGlm(vrPoses[vr::k_unTrackedDeviceIndex_Hmd].mDeviceToAbsoluteTracking); auto overlayPose = toOpenVr(headPose * glm::translate(glm::mat4(), vec3(0, 0, -1))); vrOverlay->SetOverlayTransformAbsolute(minSpecFailedOverlay, vr::TrackingUniverseSeated, &overlayPose); vr::VREvent_t event; while (vrSystem->PollNextEvent(&event, sizeof(event))) { switch (event.eventType) { case vr::VREvent_Quit: vrSystem->AcknowledgeQuit_Exiting(); QCoreApplication::quit(); break; case vr::VREvent_ButtonPress: // Quit on any button press except for 'putting on the headset' if (event.data.controller.button != vr::k_EButton_ProximitySensor) { QCoreApplication::quit(); } break; default: break; } } }); timer->start(); QTimer::singleShot(FAILED_MIN_SPEC_AUTO_QUIT_INTERVAL_MS, &miniApp, &QCoreApplication::quit); miniApp.exec(); }
void MainLoop() { while ( true ) { std::this_thread::sleep_for( k_MonitorInterval ); #if defined( WIN32 ) MSG msg = { 0 }; while ( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) ) { TranslateMessage( &msg ); DispatchMessage( &msg ); } if ( msg.message == WM_QUIT ) break; #endif // Display instructions for user if we find any devices that need them ShowOverlay( BestOverlayForLeapDevices() ); vr::VREvent_t Event; while ( vr::VRSystem()->PollNextEvent( &Event, sizeof( Event ) ) ) { switch ( Event.eventType ) { case vr::VREvent_Quit: exit( 0 ); // NOTREAHED case vr::VREvent_TrackedDeviceActivated: case vr::VREvent_TrackedDeviceUpdated: UpdateTrackedDevice( Event.trackedDeviceIndex ); break; case vr::VREvent_VendorSpecific_Reserved_Start + 0: // User has made the "align" gesture. The driver can't see the HMD // coordinates, so we forward those from our client view. if ( IsLeapDevice( Event.trackedDeviceIndex ) ) { // printf("received event vr::VREvent_VendorSpecific_Reserved_Start + 0 for device %d\n", Event.trackedDeviceIndex); TriggerRealignCoordinates( Event ); } break; } } } }
void MainLoop() { while ( true ) { std::this_thread::sleep_for( k_MonitorInterval ); #if defined( WIN32 ) MSG msg = { 0 }; while ( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) ) { TranslateMessage( &msg ); DispatchMessage( &msg ); } if ( msg.message == WM_QUIT ) break; #endif // Display instructions for user if we find any devices that need them ShowOverlay( GetCurrentOverlayType() ); vr::VREvent_t Event; while ( vr::VRSystem()->PollNextEvent( &Event, sizeof( Event ) ) ) { switch ( Event.eventType ) { case vr::VREvent_Quit: case vr::VREvent_DriverRequestedQuit: // The driver has requested that SteamVR shut down exit( 0 ); // NOTREAHED case vr::VREvent_TrackedDeviceActivated: case vr::VREvent_TrackedDeviceUpdated: UpdateTrackedDevice( Event.trackedDeviceIndex ); break; case vr::VREvent_VendorSpecific_Reserved_Start + 0: // Driver has requested HMD pose. // The driver can't see the HMD coordinates, so we forward those from our client view. if ( IsPSController( Event.trackedDeviceIndex ) ) { SendHMDPose( Event ); } break; } } } }
void PaymentPreview::HideOverlay() { ShowOverlay(false); }
void PaymentPreview::ShowOverlay() { ShowOverlay(true); }