summaryrefslogtreecommitdiffstats
path: root/src/render/backend/renderer.cpp
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2015-11-10 15:34:10 +0100
committerAndy Nichols <andy.nichols@theqtcompany.com>2015-11-20 13:28:23 +0000
commit4fd95890b33c8bff58e458fc19b66eb4c4d542fc (patch)
treef9cc264d07180d5430498885513fa5089ace27bc /src/render/backend/renderer.cpp
parent8530caea126acce5f1554b6a772f3e32961f3cae (diff)
PlatformSurfaceFilter/Renderer: render only when surface is exposed
Change-Id: Idec2f0ee5f3ace590421698293742932e8843aae Reviewed-by: Andy Nichols <andy.nichols@theqtcompany.com>
Diffstat (limited to 'src/render/backend/renderer.cpp')
-rw-r--r--src/render/backend/renderer.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/render/backend/renderer.cpp b/src/render/backend/renderer.cpp
index 5ad77b19d..73d0b453e 100644
--- a/src/render/backend/renderer.cpp
+++ b/src/render/backend/renderer.cpp
@@ -143,6 +143,7 @@ Renderer::Renderer(QRenderAspect::RenderType type)
, m_vsyncFrameAdvanceService(new VSyncFrameAdvanceService())
, m_debugLogger(Q_NULLPTR)
, m_pickEventFilter(new PickEventFilter())
+ , m_exposed(0)
{
// Set renderer as running - it will wait in the context of the
// RenderThread for RenderViews to be submitted
@@ -332,7 +333,6 @@ void Renderer::initialize(QOpenGLContext *context)
if (enableDebugLogging)
sf.setOption(QSurfaceFormat::DebugContext);
-
QOpenGLContext* ctx = context ? context : new QOpenGLContext;
if (!context) {
qCDebug(Backend) << "Creating OpenGL context with format" << sf;
@@ -395,6 +395,12 @@ void Renderer::shutdown()
}
}
+void Renderer::setSurfaceExposed(bool exposed)
+{
+ qCDebug(Backend) << "Window exposed: " << exposed;
+ m_exposed.fetchAndStoreOrdered(exposed);
+}
+
void Renderer::setFrameGraphRoot(const Qt3DCore::QNodeId &frameGraphRootUuid)
{
m_frameGraphRootUuid = frameGraphRootUuid;
@@ -526,7 +532,10 @@ void Renderer::render()
// One framegraph description
while (m_running.load() > 0) {
- doRender();
+ if (m_exposed.load() > 0)
+ doRender();
+ else
+ QThread::msleep(250);
}
}