diff --git a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp index 31ed9572e9..db9b86b9dd 100644 --- a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp @@ -692,6 +692,9 @@ void OpenGLDisplayPlugin::present() { incrementPresentCount(); if (_currentFrame) { + auto correction = getViewCorrection(); + getGLBackend()->setCameraCorrection(correction, _prevRenderView); + _prevRenderView = correction * _currentFrame->view; { withPresentThreadLock([&] { _renderRate.increment(); diff --git a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.h b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.h index bf06486095..bde7984ec0 100644 --- a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.h +++ b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.h @@ -118,6 +118,7 @@ protected: void renderFromTexture(gpu::Batch& batch, const gpu::TexturePointer texture, glm::ivec4 viewport, const glm::ivec4 scissor, gpu::FramebufferPointer fbo); void renderFromTexture(gpu::Batch& batch, const gpu::TexturePointer texture, glm::ivec4 viewport, const glm::ivec4 scissor); virtual void updateFrameData(); + virtual glm::mat4 getViewCorrection() { return glm::mat4(); } void withOtherThreadContext(std::function f) const; @@ -137,6 +138,7 @@ protected: gpu::FramePointer _currentFrame; gpu::Frame* _lastFrame { nullptr }; + mat4 _prevRenderView; gpu::FramebufferPointer _compositeFramebuffer; gpu::PipelinePointer _hudPipeline; gpu::PipelinePointer _mirrorHUDPipeline; diff --git a/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp index 4e67ee3db8..2a32a7d5ce 100644 --- a/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp @@ -336,12 +336,14 @@ void HmdDisplayPlugin::updateFrameData() { } updatePresentPose(); +} +glm::mat4 HmdDisplayPlugin::getViewCorrection() { if (_currentFrame) { auto batchPose = _currentFrame->pose; - auto correction = glm::inverse(_currentPresentFrameInfo.presentPose) * batchPose ; - getGLBackend()->setCameraCorrection(correction, _prevRenderView); - _prevRenderView = correction * _currentFrame->view; + return glm::inverse(_currentPresentFrameInfo.presentPose) * batchPose; + } else { + return glm::mat4(); } } diff --git a/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.h b/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.h index 098005aa0d..3639952524 100644 --- a/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.h +++ b/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.h @@ -59,6 +59,7 @@ protected: void customizeContext() override; void uncustomizeContext() override; void updateFrameData() override; + glm::mat4 getViewCorrection() override; std::array _eyeOffsets; std::array _eyeProjections; @@ -79,7 +80,6 @@ protected: QMap _frameInfos; FrameInfo _currentPresentFrameInfo; FrameInfo _currentRenderFrameInfo; - mat4 _prevRenderView; RateCounter<> _stutterRate; bool _disablePreview { true };