From 54839718555c23f11afc322bd9c693844cae97e0 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Fri, 15 Feb 2019 10:46:08 -0800 Subject: [PATCH] Fix crash in vive and interleaved stereo plugins --- .../src/display-plugins/OpenGLDisplayPlugin.cpp | 2 +- .../src/display-plugins/OpenGLDisplayPlugin.h | 5 +++++ libraries/oculusMobilePlugin/src/OculusMobileDisplayPlugin.h | 1 + 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp index e4deaf8f4b..20fc9a2290 100644 --- a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp @@ -720,7 +720,7 @@ void OpenGLDisplayPlugin::present() { } gpu::Backend::freeGPUMemSize.set(gpu::gl::getFreeDedicatedMemory()); - } else { + } else if (alwaysPresent()) { internalPresent(); } _movingAveragePresent.addSample((float)(usecTimestampNow() - startPresent)); diff --git a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.h b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.h index 5c653f8a0a..49a38ecb4c 100644 --- a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.h +++ b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.h @@ -88,6 +88,11 @@ protected: glm::uvec2 getSurfaceSize() const; glm::uvec2 getSurfacePixels() const; + // Some display plugins require us to always execute some present logic, + // whether we have a frame or not (Oculus Mobile plugin) + // Such plugins must be prepared to do the right thing if the `_currentFrame` + // is not populated + virtual bool alwaysPresent() const { return false; } void updateCompositeFramebuffer(); diff --git a/libraries/oculusMobilePlugin/src/OculusMobileDisplayPlugin.h b/libraries/oculusMobilePlugin/src/OculusMobileDisplayPlugin.h index 4a0a21e995..a98989655e 100644 --- a/libraries/oculusMobilePlugin/src/OculusMobileDisplayPlugin.h +++ b/libraries/oculusMobilePlugin/src/OculusMobileDisplayPlugin.h @@ -57,6 +57,7 @@ protected: void internalPresent() override; void hmdPresent() override { throw std::runtime_error("Unused"); } bool isHmdMounted() const override; + bool alwaysPresent() const override { return true; } static const char* NAME; mutable gl::Context* _mainContext{ nullptr };