From 5b2a050df7161cc9d647839e9fa8c53245dff725 Mon Sep 17 00:00:00 2001 From: Anthony Thibault Date: Sun, 20 Mar 2016 14:08:35 -0700 Subject: [PATCH] display-plugins: Pulled getHeadPose into common base class. * Moved getHeadPose and _headPoseCache out of each derived class and into HmdDisplayPlugin. * updated comment in application. --- interface/src/Application.cpp | 8 ++++---- .../src/display-plugins/hmd/HmdDisplayPlugin.cpp | 6 +++++- .../src/display-plugins/hmd/HmdDisplayPlugin.h | 5 ++++- plugins/oculus/src/OculusBaseDisplayPlugin.cpp | 4 ---- plugins/oculus/src/OculusBaseDisplayPlugin.h | 3 --- plugins/oculusLegacy/src/OculusLegacyDisplayPlugin.cpp | 4 ---- plugins/oculusLegacy/src/OculusLegacyDisplayPlugin.h | 3 --- plugins/openvr/src/OpenVrDisplayPlugin.cpp | 4 ---- plugins/openvr/src/OpenVrDisplayPlugin.h | 3 --- 9 files changed, 13 insertions(+), 27 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index dc969d4ab4..d17b8b89fc 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1418,10 +1418,6 @@ void Application::paintGL() { // FIXME not needed anymore? _offscreenContext->makeCurrent(); - // Tell the plugin what pose we're using to render. In this case we're just using the - // unmodified head pose because the only plugin that cares (the Oculus plugin) uses it - // for rotational timewarp. If we move to support positonal timewarp, we need to - // ensure this contains the full pose composed with the eye offsets. displayPlugin->updateHeadPose(_frameCount); // update the avatar with a fresh HMD pose @@ -1621,6 +1617,10 @@ void Application::paintGL() { mat4 eyeOffsetTransform = glm::translate(mat4(), eyeOffset * -1.0f * IPDScale); eyeOffsets[eye] = eyeOffsetTransform; + // Tell the plugin what pose we're using to render. In this case we're just using the + // unmodified head pose because the only plugin that cares (the Oculus plugin) uses it + // for rotational timewarp. If we move to support positonal timewarp, we need to + // ensure this contains the full pose composed with the eye offsets. displayPlugin->setEyeRenderPose(_frameCount, eye, headPose * glm::inverse(eyeOffsetTransform)); eyeProjections[eye] = displayPlugin->getEyeProjection(eye, baseProjection); diff --git a/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp index 67bd0fb369..c3782b907f 100644 --- a/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp @@ -160,4 +160,8 @@ void HmdDisplayPlugin::updateFrameData() { Parent::updateFrameData(); Lock lock(_mutex); _currentRenderEyePoses = _renderEyePoses[_currentRenderFrameIndex]; -} \ No newline at end of file +} + +glm::mat4 HmdDisplayPlugin::getHeadPose() const { + return _headPoseCache.get(); +} diff --git a/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.h b/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.h index 2d1b995ee6..659a3a16fa 100644 --- a/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.h +++ b/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.h @@ -7,6 +7,8 @@ // #pragma once +#include + #include #include "../OpenGLDisplayPlugin.h" @@ -24,7 +26,7 @@ public: void setEyeRenderPose(uint32_t frameIndex, Eye eye, const glm::mat4& pose) override final; bool isDisplayVisible() const override { return isHmdMounted(); } - + virtual glm::mat4 getHeadPose() const override; protected: virtual void hmdPresent() = 0; @@ -46,6 +48,7 @@ protected: using EyePoses = std::array; QMap _renderEyePoses; EyePoses _currentRenderEyePoses; + ThreadSafeValueCache _headPoseCache { glm::mat4() }; private: bool _enablePreview { false }; diff --git a/plugins/oculus/src/OculusBaseDisplayPlugin.cpp b/plugins/oculus/src/OculusBaseDisplayPlugin.cpp index 7a4bcc665b..9d0838606e 100644 --- a/plugins/oculus/src/OculusBaseDisplayPlugin.cpp +++ b/plugins/oculus/src/OculusBaseDisplayPlugin.cpp @@ -22,10 +22,6 @@ void OculusBaseDisplayPlugin::updateHeadPose(uint32_t frameIndex) { _headPoseCache.set(headPose); } -glm::mat4 OculusBaseDisplayPlugin::getHeadPose() const { - return _headPoseCache.get(); -} - bool OculusBaseDisplayPlugin::isSupported() const { return oculusAvailable(); } diff --git a/plugins/oculus/src/OculusBaseDisplayPlugin.h b/plugins/oculus/src/OculusBaseDisplayPlugin.h index 61179a632f..5455b61a60 100644 --- a/plugins/oculus/src/OculusBaseDisplayPlugin.h +++ b/plugins/oculus/src/OculusBaseDisplayPlugin.h @@ -8,7 +8,6 @@ #pragma once #include -#include #include @@ -22,7 +21,6 @@ public: // Stereo specific methods virtual void resetSensors() override final; virtual void updateHeadPose(uint32_t frameIndex) override; - virtual glm::mat4 getHeadPose() const override; protected: void customizeContext() override; @@ -38,5 +36,4 @@ protected: ovrHmdDesc _hmdDesc; ovrLayerEyeFov _sceneLayer; ovrViewScaleDesc _viewScaleDesc; - ThreadSafeValueCache _headPoseCache { glm::mat4() }; }; diff --git a/plugins/oculusLegacy/src/OculusLegacyDisplayPlugin.cpp b/plugins/oculusLegacy/src/OculusLegacyDisplayPlugin.cpp index b8a1d7c35f..73e18aa697 100644 --- a/plugins/oculusLegacy/src/OculusLegacyDisplayPlugin.cpp +++ b/plugins/oculusLegacy/src/OculusLegacyDisplayPlugin.cpp @@ -41,10 +41,6 @@ void OculusLegacyDisplayPlugin::updateHeadPose(uint32_t frameIndex) { _headPoseCache.set(toGlm(_trackingState.HeadPose.ThePose)); } -glm::mat4 OculusLegacyDisplayPlugin::getHeadPose() const { - return _headPoseCache.get(); -} - bool OculusLegacyDisplayPlugin::isSupported() const { if (!ovr_Initialize(nullptr)) { return false; diff --git a/plugins/oculusLegacy/src/OculusLegacyDisplayPlugin.h b/plugins/oculusLegacy/src/OculusLegacyDisplayPlugin.h index f100028beb..bf4ae26205 100644 --- a/plugins/oculusLegacy/src/OculusLegacyDisplayPlugin.h +++ b/plugins/oculusLegacy/src/OculusLegacyDisplayPlugin.h @@ -8,7 +8,6 @@ #pragma once #include -#include #include @@ -28,7 +27,6 @@ public: // Stereo specific methods virtual void resetSensors() override; virtual void updateHeadPose(uint32_t frameIndex) override; - virtual glm::mat4 getHeadPose() const override; virtual float getTargetFrameRate() override; @@ -54,7 +52,6 @@ private: //ovrTexture _eyeTextures[2]; // FIXME - not currently in use mutable int _hmdScreen { -1 }; bool _hswDismissed { false }; - ThreadSafeValueCache _headPoseCache { glm::mat4() }; }; diff --git a/plugins/openvr/src/OpenVrDisplayPlugin.cpp b/plugins/openvr/src/OpenVrDisplayPlugin.cpp index abc47577d1..843b70807d 100644 --- a/plugins/openvr/src/OpenVrDisplayPlugin.cpp +++ b/plugins/openvr/src/OpenVrDisplayPlugin.cpp @@ -143,10 +143,6 @@ void OpenVrDisplayPlugin::updateHeadPose(uint32_t frameIndex) { _headPoseCache.set(_trackedDevicePoseMat4[0]); } -glm::mat4 OpenVrDisplayPlugin::getHeadPose() const { - return _headPoseCache.get(); -} - void OpenVrDisplayPlugin::hmdPresent() { // Flip y-axis since GL UV coords are backwards. static vr::VRTextureBounds_t leftBounds{ 0, 0, 0.5f, 1 }; diff --git a/plugins/openvr/src/OpenVrDisplayPlugin.h b/plugins/openvr/src/OpenVrDisplayPlugin.h index 4f0320d237..caaf75a4d0 100644 --- a/plugins/openvr/src/OpenVrDisplayPlugin.h +++ b/plugins/openvr/src/OpenVrDisplayPlugin.h @@ -12,7 +12,6 @@ #include #include -#include const float TARGET_RATE_OpenVr = 90.0f; // FIXME: get from sdk tracked device property? This number is vive-only. @@ -29,7 +28,6 @@ public: // Stereo specific methods virtual void resetSensors() override; virtual void updateHeadPose(uint32_t frameIndex) override; - virtual glm::mat4 getHeadPose() const override; protected: void internalActivate() override; @@ -43,5 +41,4 @@ private: std::atomic _hmdActivityLevel { vr::k_EDeviceActivityLevel_Unknown }; static const QString NAME; mutable Mutex _poseMutex; - ThreadSafeValueCache _headPoseCache { glm::mat4() }; };