From 834a2a5c3b2f2241a379175bfcab80db721b1639 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Thu, 15 Jun 2017 12:49:09 -0700 Subject: [PATCH 1/3] Ensure monitor never shows frozen SpectatorCamera preview --- .../src/display-plugins/hmd/HmdDisplayPlugin.cpp | 16 ++++++++++++++++ .../src/display-plugins/hmd/HmdDisplayPlugin.h | 2 ++ 2 files changed, 18 insertions(+) diff --git a/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp index ea91890f33..260ac5fa4c 100644 --- a/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp @@ -743,3 +743,19 @@ HmdDisplayPlugin::~HmdDisplayPlugin() { float HmdDisplayPlugin::stutterRate() const { return _stutterRate.rate(); } + +bool HmdDisplayPlugin::setDisplayTexture(const QString& name) { + // Note: it is the caller's responsibility to keep the network texture in cache. + if (name.isEmpty()) { + _displayTexture.reset(); + _clearPreviewFlag = true; + return true; + } + auto textureCache = DependencyManager::get(); + auto displayNetworkTexture = textureCache->getTexture(name); + if (!displayNetworkTexture) { + return false; + } + _displayTexture = displayNetworkTexture->getGPUTexture(); + return !!_displayTexture; +} diff --git a/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.h b/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.h index aaa6e347e0..78b3889179 100644 --- a/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.h +++ b/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.h @@ -46,6 +46,8 @@ public: float stutterRate() const override; + virtual bool setDisplayTexture(const QString& name) override; + protected: virtual void hmdPresent() = 0; virtual bool isHmdMounted() const = 0; From 1088d248e3bc0e21c7c8278110183954e16dcada Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Thu, 15 Jun 2017 13:13:58 -0700 Subject: [PATCH 2/3] Howard's CR comments --- .../src/display-plugins/OpenGLDisplayPlugin.cpp | 1 + .../src/display-plugins/OpenGLDisplayPlugin.h | 1 + .../src/display-plugins/hmd/HmdDisplayPlugin.cpp | 16 ---------------- .../src/display-plugins/hmd/HmdDisplayPlugin.h | 2 +- libraries/plugins/src/plugins/DisplayPlugin.h | 1 + 5 files changed, 4 insertions(+), 17 deletions(-) diff --git a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp index ba8842c2ec..92afa8ef22 100644 --- a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp @@ -706,6 +706,7 @@ bool OpenGLDisplayPlugin::setDisplayTexture(const QString& name) { // Note: it is the caller's responsibility to keep the network texture in cache. if (name.isEmpty()) { _displayTexture.reset(); + clearPreviewFlag(); return true; } auto textureCache = DependencyManager::get(); diff --git a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.h b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.h index cf874fb721..aa047b4538 100644 --- a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.h +++ b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.h @@ -58,6 +58,7 @@ public: } virtual bool setDisplayTexture(const QString& name) override; + virtual bool clearPreviewFlag() override { return false; }; QImage getScreenshot(float aspectRatio = 0.0f) const override; float presentRate() const override; diff --git a/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp index 260ac5fa4c..ea91890f33 100644 --- a/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp @@ -743,19 +743,3 @@ HmdDisplayPlugin::~HmdDisplayPlugin() { float HmdDisplayPlugin::stutterRate() const { return _stutterRate.rate(); } - -bool HmdDisplayPlugin::setDisplayTexture(const QString& name) { - // Note: it is the caller's responsibility to keep the network texture in cache. - if (name.isEmpty()) { - _displayTexture.reset(); - _clearPreviewFlag = true; - return true; - } - auto textureCache = DependencyManager::get(); - auto displayNetworkTexture = textureCache->getTexture(name); - if (!displayNetworkTexture) { - return false; - } - _displayTexture = displayNetworkTexture->getGPUTexture(); - return !!_displayTexture; -} diff --git a/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.h b/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.h index 78b3889179..58ef109525 100644 --- a/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.h +++ b/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.h @@ -46,7 +46,7 @@ public: float stutterRate() const override; - virtual bool setDisplayTexture(const QString& name) override; + virtual bool clearPreviewFlag() override { _clearPreviewFlag = true; return true; }; protected: virtual void hmdPresent() = 0; diff --git a/libraries/plugins/src/plugins/DisplayPlugin.h b/libraries/plugins/src/plugins/DisplayPlugin.h index 7bfdbddbc5..bce6c0c33a 100644 --- a/libraries/plugins/src/plugins/DisplayPlugin.h +++ b/libraries/plugins/src/plugins/DisplayPlugin.h @@ -186,6 +186,7 @@ public: // Set the texture to display on the monitor and return true, if allowed. Empty string resets. virtual bool setDisplayTexture(const QString& name) { return false; } + virtual bool clearPreviewFlag() { return false; }; virtual float devicePixelRatio() { return 1.0f; } // Rate at which we render frames From d7a9354b370098d8032d339be2a7e86fd47b07e1 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Thu, 15 Jun 2017 13:25:16 -0700 Subject: [PATCH 3/3] More CR comments; rename function --- .../display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp | 2 +- .../display-plugins/src/display-plugins/OpenGLDisplayPlugin.h | 2 +- .../display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.h | 2 +- libraries/plugins/src/plugins/DisplayPlugin.h | 1 - 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp index 92afa8ef22..67bbb452ca 100644 --- a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp @@ -706,7 +706,7 @@ bool OpenGLDisplayPlugin::setDisplayTexture(const QString& name) { // Note: it is the caller's responsibility to keep the network texture in cache. if (name.isEmpty()) { _displayTexture.reset(); - clearPreviewFlag(); + onDisplayTextureReset(); return true; } auto textureCache = DependencyManager::get(); diff --git a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.h b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.h index aa047b4538..7e7889ff47 100644 --- a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.h +++ b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.h @@ -58,7 +58,7 @@ public: } virtual bool setDisplayTexture(const QString& name) override; - virtual bool clearPreviewFlag() override { return false; }; + virtual bool onDisplayTextureReset() { return false; }; QImage getScreenshot(float aspectRatio = 0.0f) const override; float presentRate() const override; diff --git a/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.h b/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.h index 58ef109525..055328ee21 100644 --- a/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.h +++ b/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.h @@ -46,7 +46,7 @@ public: float stutterRate() const override; - virtual bool clearPreviewFlag() override { _clearPreviewFlag = true; return true; }; + virtual bool onDisplayTextureReset() override { _clearPreviewFlag = true; return true; }; protected: virtual void hmdPresent() = 0; diff --git a/libraries/plugins/src/plugins/DisplayPlugin.h b/libraries/plugins/src/plugins/DisplayPlugin.h index bce6c0c33a..7bfdbddbc5 100644 --- a/libraries/plugins/src/plugins/DisplayPlugin.h +++ b/libraries/plugins/src/plugins/DisplayPlugin.h @@ -186,7 +186,6 @@ public: // Set the texture to display on the monitor and return true, if allowed. Empty string resets. virtual bool setDisplayTexture(const QString& name) { return false; } - virtual bool clearPreviewFlag() { return false; }; virtual float devicePixelRatio() { return 1.0f; } // Rate at which we render frames