Exemplo n.º 1
0
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;
                }
            }
        }
    }
Exemplo n.º 4
0
void PaymentPreview::HideOverlay()
{
  ShowOverlay(false);
}
Exemplo n.º 5
0
void PaymentPreview::ShowOverlay()
{
  ShowOverlay(true);
}