summaryrefslogtreecommitdiffstats
path: root/src/runtime/dragon/dragonrenderer.cpp
diff options
context:
space:
mode:
authorSvenn-Arne Dragly <s@dragly.com>2018-12-01 13:21:24 +0100
committerLaszlo Agocs <laszlo.agocs@qt.io>2018-12-04 13:21:05 +0000
commitb62a0c6d6ce988fb0af0e72ac00a5ead13ef8091 (patch)
treeaa3bcdb8091d7a368c9450750c6acdaa0721f6a5 /src/runtime/dragon/dragonrenderer.cpp
parent437c95b5f50b6a433587c1cfb93ecab6b62c7725 (diff)
Dragon: Clean up resources properly on shutdownv2.2.0-rcv2.2.0-beta3
In the threaded case, we need to release the semaphore for the next frame data. For the non-threaded case, we need to make an offscreen surface current before the resources are released. Change-Id: I9df38614eb66e7164651e062a32165fe11259639 Fixes: QT3DS-2530 Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
Diffstat (limited to 'src/runtime/dragon/dragonrenderer.cpp')
-rw-r--r--src/runtime/dragon/dragonrenderer.cpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/runtime/dragon/dragonrenderer.cpp b/src/runtime/dragon/dragonrenderer.cpp
index 0745858..4b0301d 100644
--- a/src/runtime/dragon/dragonrenderer.cpp
+++ b/src/runtime/dragon/dragonrenderer.cpp
@@ -696,6 +696,28 @@ Renderer::Frame Renderer::doRender(Renderer::Frame frame)
return frame;
}
+void Renderer::beginShutdown()
+{
+ QMutexLocker lock(&m_latestDataMutex);
+
+ m_running.store(0);
+ m_latestData.clear();
+ nextFrameSemaphore.release();
+
+ if (m_renderThread) {
+ m_renderThread->wait();
+ } else {
+ Q_ASSERT(m_offscreenHelper->offscreenSurface());
+ m_glContext->makeCurrent(m_offscreenHelper->offscreenSurface());
+ }
+}
+
+void Renderer::endShutdown()
+{
+ if (!m_renderThread)
+ m_glContext->doneCurrent();
+}
+
RenderThread::RenderThread(Renderer *renderer)
: QThread()
, m_renderer(renderer)