diff options
author | Svenn-Arne Dragly <s@dragly.com> | 2018-12-01 13:21:24 +0100 |
---|---|---|
committer | Laszlo Agocs <laszlo.agocs@qt.io> | 2018-12-04 13:21:05 +0000 |
commit | b62a0c6d6ce988fb0af0e72ac00a5ead13ef8091 (patch) | |
tree | aa3bcdb8091d7a368c9450750c6acdaa0721f6a5 /src/runtime/dragon/dragonrenderer.cpp | |
parent | 437c95b5f50b6a433587c1cfb93ecab6b62c7725 (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.cpp | 22 |
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) |