summaryrefslogtreecommitdiffstats
path: root/src/render/renderers/opengl/renderer/renderer.cpp
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2018-12-11 15:08:00 +0100
committerLiang Qi <liang.qi@qt.io>2018-12-11 15:08:00 +0100
commitc9ce0deeb8f2bb79c446e41584f753f1b1bfe17f (patch)
tree5e9a06346ea22e6e9a2fafd6a2ac7394c73648c6 /src/render/renderers/opengl/renderer/renderer.cpp
parentf1b333c36a19cf85eab798fc1b1952ed063fedfe (diff)
parent0a0a7e4ca4f05c7d6da55ec64c8a9734d82853fe (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.cpp17
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);
}
}