From 018d945b85b258ecb2d62295e259113518f0b9f7 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Wed, 26 Oct 2016 14:13:02 -0700 Subject: [PATCH] Display warning overlay instead of scene when below min spec --- .../images/steam-min-spec-failed.png | Bin 0 -> 73490 bytes interface/src/main.cpp | 25 +++++- plugins/openvr/src/OpenVrDisplayPlugin.cpp | 3 - plugins/openvr/src/OpenVrHelpers.cpp | 82 ++++++++++++++++++ plugins/openvr/src/OpenVrHelpers.h | 2 + 5 files changed, 108 insertions(+), 4 deletions(-) create mode 100644 interface/resources/images/steam-min-spec-failed.png diff --git a/interface/resources/images/steam-min-spec-failed.png b/interface/resources/images/steam-min-spec-failed.png new file mode 100644 index 0000000000000000000000000000000000000000..adb380ee8be5d6a820eb35eb740d64b33c4bac24 GIT binary patch literal 73490 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 literal 0 HcmV?d00001 diff --git a/interface/src/main.cpp b/interface/src/main.cpp index 5b0da4f578..c33f7f8799 100644 --- a/interface/src/main.cpp +++ b/interface/src/main.cpp @@ -37,7 +37,9 @@ #include #endif - +extern "C" { + typedef int(__stdcall * CHECKMINSPECPROC) (); +} int main(int argc, const char* argv[]) { #if HAS_BUGSPLAT @@ -155,6 +157,27 @@ int main(int argc, const char* argv[]) { SteamClient::init(); +#ifdef Q_OS_WIN + // If we're running in steam mode, we need to do an explicit check to ensure we're up to the required min spec + if (SteamClient::isRunning()) { + QString appPath; + { + char filename[MAX_PATH]; + GetModuleFileName(NULL, filename, MAX_PATH); + QFileInfo appInfo(filename); + appPath = appInfo.absolutePath(); + } + QString openvrDllPath = appPath + "/plugins/openvr.dll"; + HMODULE openvrDll; + CHECKMINSPECPROC checkMinSpecPtr; + if ((openvrDll = LoadLibrary(openvrDllPath.toLocal8Bit().data())) && + (checkMinSpecPtr = (CHECKMINSPECPROC)GetProcAddress(openvrDll, "CheckMinSpec"))) { + if (!checkMinSpecPtr()) { + return -1; + } + } + } +#endif int exitCode; { diff --git a/plugins/openvr/src/OpenVrDisplayPlugin.cpp b/plugins/openvr/src/OpenVrDisplayPlugin.cpp index 25160c35e6..1a4067a847 100644 --- a/plugins/openvr/src/OpenVrDisplayPlugin.cpp +++ b/plugins/openvr/src/OpenVrDisplayPlugin.cpp @@ -379,9 +379,6 @@ void OpenVrDisplayPlugin::init() { emit deviceConnected(getName()); } -// FIXME remove once OpenVR header is updated -#define VRCompositor_ReprojectionAsync 0x04 - bool OpenVrDisplayPlugin::internalActivate() { if (!_system) { _system = acquireOpenVrSystem(); diff --git a/plugins/openvr/src/OpenVrHelpers.cpp b/plugins/openvr/src/OpenVrHelpers.cpp index 91cad67d46..35730a0d5e 100644 --- a/plugins/openvr/src/OpenVrHelpers.cpp +++ b/plugins/openvr/src/OpenVrHelpers.cpp @@ -12,11 +12,13 @@ #include #include +#include #include #include #include #include +#include #include #include #include @@ -324,3 +326,83 @@ controller::Pose openVrControllerPoseToHandPose(bool isLeftHand, const mat4& mat result.angularVelocity = angularVelocity; return result; } + +#define FAILED_MIN_SPEC_OVERLAY_NAME "FailedMinSpecOverlay" +#define FAILED_MIN_SPEC_OVERLAY_FRIENDLY_NAME "Minimum specifications for SteamVR not met" +#define OVERLAY_UPDATE_INTERVAL_MS 10 +#define OVERLAY_DISPLAY_INTERVAL_MS (MSECS_PER_SECOND * 10) +#define MIN_CORES_SPEC 5 + +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->ShowOverlay(minSpecFailedOverlay); + + QTimer* positionTimer = new QTimer(&miniApp); + positionTimer->setInterval(OVERLAY_UPDATE_INTERVAL_MS); + QObject::connect(positionTimer, &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); + }); + positionTimer->start(); + QTimer::singleShot(OVERLAY_DISPLAY_INTERVAL_MS, &miniApp, &QCoreApplication::quit); + miniApp.exec(); +} + + +bool checkMinSpecImpl() { + // If OpenVR isn't supported, we have no min spec, so pass + if (!openVrSupported()) { + return true; + } + + // If we have at least 5 cores, pass + auto coreCount = QThread::idealThreadCount(); + if (coreCount >= MIN_CORES_SPEC) { + return true; + } + + // Even if we have too few cores... if the compositor is using async reprojection, pass + auto system = acquireOpenVrSystem(); + auto compositor = vr::VRCompositor(); + if (system && compositor) { + vr::Compositor_FrameTiming timing; + memset(&timing, 0, sizeof(timing)); + timing.m_nSize = sizeof(vr::Compositor_FrameTiming); + compositor->GetFrameTiming(&timing); + releaseOpenVrSystem(); + if (timing.m_nReprojectionFlags & VRCompositor_ReprojectionAsync) { + return true; + } + } + + // We're using OpenVR and we don't have enough cores... + showMinSpecWarning(); + + return false; +} + +extern "C" { + __declspec(dllexport) int __stdcall CheckMinSpec() { + return checkMinSpecImpl() ? 1 : 0; + } +} diff --git a/plugins/openvr/src/OpenVrHelpers.h b/plugins/openvr/src/OpenVrHelpers.h index 4279e6a6ac..be79dd1155 100644 --- a/plugins/openvr/src/OpenVrHelpers.h +++ b/plugins/openvr/src/OpenVrHelpers.h @@ -82,5 +82,7 @@ struct PoseData { } }; +// FIXME remove once OpenVR header is updated +#define VRCompositor_ReprojectionAsync 0x04 controller::Pose openVrControllerPoseToHandPose(bool isLeftHand, const mat4& mat, const vec3& linearVelocity, const vec3& angularVelocity);