From 34de4d67d80f6e9337d3f28ce6bc3dcf29ffcfba Mon Sep 17 00:00:00 2001 From: Howard Stearns Date: Mon, 7 Dec 2015 09:32:12 -0800 Subject: [PATCH] DisplayPlugin::getLastSynchronizedElapsed --- .../src/display-plugins/OpenGLDisplayPlugin.cpp | 6 ++++++ .../src/display-plugins/OpenGLDisplayPlugin.h | 4 ++++ libraries/plugins/src/plugins/DisplayPlugin.h | 1 + 3 files changed, 11 insertions(+) diff --git a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp index d306c23dc0..4668f8ba1a 100644 --- a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp @@ -156,8 +156,10 @@ OpenGLDisplayPlugin::OpenGLDisplayPlugin() { _container->releaseOverlayTexture(texture); }); + _synchronizedTimer.start(); connect(&_timer, &QTimer::timeout, this, [&] { if (_active && _sceneTextureEscrow.depth() <= 1) { + _synchronizedTimer.start(); emit requestRender(); } }); @@ -279,6 +281,10 @@ void OpenGLDisplayPlugin::submitOverlayTexture(GLuint sceneTexture, const glm::u } void OpenGLDisplayPlugin::updateTextures() { + const qint64 elapsed =_synchronizedTimer.elapsed(); + if (elapsed != 0) { + _lastSynchronizedElapsed = elapsed; + } _currentSceneTexture = _sceneTextureEscrow.fetchAndRelease(_currentSceneTexture); _currentOverlayTexture = _overlayTextureEscrow.fetchAndRelease(_currentOverlayTexture); } diff --git a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.h b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.h index ef78374994..4577777034 100644 --- a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.h +++ b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.h @@ -10,6 +10,7 @@ #include "DisplayPlugin.h" #include +#include #include #include @@ -30,6 +31,7 @@ public: virtual void submitSceneTexture(uint32_t frameIndex, uint32_t sceneTexture, const glm::uvec2& sceneSize) override; virtual void submitOverlayTexture(uint32_t overlayTexture, const glm::uvec2& overlaySize) override; virtual float presentRate() override; + virtual qint64 getLastSynchronizedElapsed() { return _lastSynchronizedElapsed; } virtual glm::uvec2 getRecommendedRenderSize() const override { return getSurfacePixels(); @@ -68,6 +70,8 @@ protected: virtual void internalPresent(); mutable QTimer _timer; + QElapsedTimer _synchronizedTimer; + qint64 _lastSynchronizedElapsed { 0 }; ProgramPtr _program; ShapeWrapperPtr _plane; diff --git a/libraries/plugins/src/plugins/DisplayPlugin.h b/libraries/plugins/src/plugins/DisplayPlugin.h index 83afbc9402..6fc6062214 100644 --- a/libraries/plugins/src/plugins/DisplayPlugin.h +++ b/libraries/plugins/src/plugins/DisplayPlugin.h @@ -58,6 +58,7 @@ public: /// By default, all HMDs are stereo virtual bool isStereo() const { return isHmd(); } virtual bool isThrottled() const { return false; } + virtual qint64 getLastSynchronizedElapsed() { return 0; } // Rendering support