diff options
author | Liang Qi <liang.qi@qt.io> | 2018-12-11 15:08:00 +0100 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2018-12-11 15:08:00 +0100 |
commit | c9ce0deeb8f2bb79c446e41584f753f1b1bfe17f (patch) | |
tree | 5e9a06346ea22e6e9a2fafd6a2ac7394c73648c6 /src/render/renderers/opengl/renderer/renderer.cpp | |
parent | f1b333c36a19cf85eab798fc1b1952ed063fedfe (diff) | |
parent | 0a0a7e4ca4f05c7d6da55ec64c8a9734d82853fe (diff) |
Merge remote-tracking branch 'origin/5.12' into dev
Conflicts:
src/render/renderers/opengl/textures/gltexture.cpp
Change-Id: I57e9a296dc15f0b5dc3af3664f698bdc799c4bb5
Diffstat (limited to 'src/render/renderers/opengl/renderer/renderer.cpp')
-rw-r--r-- | src/render/renderers/opengl/renderer/renderer.cpp | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/src/render/renderers/opengl/renderer/renderer.cpp b/src/render/renderers/opengl/renderer/renderer.cpp index d270dc583..9aed183b0 100644 --- a/src/render/renderers/opengl/renderer/renderer.cpp +++ b/src/render/renderers/opengl/renderer/renderer.cpp @@ -632,18 +632,21 @@ void Renderer::doRender(bool scene3dBlocking) // Lock the mutex to protect access to the renderQueue while we look for its state QMutexLocker locker(m_renderQueue->mutex()); bool queueIsComplete = m_renderQueue->isFrameQueueComplete(); - const bool queueIsEmpty = m_renderQueue->targetRenderViewCount() == 0; + bool queueIsEmpty = m_renderQueue->targetRenderViewCount() == 0; // Scene3D Blocking Mode if (scene3dBlocking && !queueIsComplete && !queueIsEmpty) { int i = 0; // We wait at most 10ms to avoid a case we could never recover from - while (!queueIsComplete && i++ < 10) { - QThread::msleep(1); + while (!queueIsComplete && !queueIsEmpty && i++ < 10) { qCDebug(Backend) << Q_FUNC_INFO << "Waiting for ready queue (try:" << i << "/ 10)"; locker.unlock(); - queueIsComplete = m_renderQueue->isFrameQueueComplete(); + // Give worker threads a chance to complete the queue + QThread::msleep(1); locker.relock(); + queueIsComplete = m_renderQueue->isFrameQueueComplete(); + // This could become true if we've tried to shutdown + queueIsEmpty = m_renderQueue->targetRenderViewCount() == 0; } } @@ -1979,14 +1982,14 @@ void Renderer::performDraw(RenderCommand *command) reinterpret_cast<void*>(quintptr(command->m_indexAttributeByteOffset)), command->m_instanceCount, command->m_indexOffset, - command->m_firstVertex); + command->m_firstInstance); } else { Profiling::GLTimeRecorder recorder(Profiling::DrawArray); m_submissionContext->drawArraysInstancedBaseInstance(command->m_primitiveType, - command->m_firstInstance, + command->m_firstVertex, command->m_primitiveCount, command->m_instanceCount, - command->m_firstVertex); + command->m_firstInstance); } } |