summaryrefslogtreecommitdiffstats
path: root/src/render
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2019-10-11 09:15:12 +0200
committerPaul Lemire <paul.lemire@kdab.com>2019-10-14 20:36:43 +0200
commitda5a4af50076515abbf04691e8a5dfca5daaca9e (patch)
tree2e5a3d07febab846061cc62d0313181087d8fed4 /src/render
parentf8ab61438164a828e2f0c6e9e4a5cdeaa7b6a62c (diff)
ShaderBuilder: ensure no old updates are left over
Could result in trying to send updates to nodes which have been destroyed. Change-Id: I3709277e5005f25ec8cb9efe0a2152f879bea89f Reviewed-by: Mike Krus <mike.krus@kdab.com>
Diffstat (limited to 'src/render')
-rw-r--r--src/render/materialsystem/shaderbuilder.cpp1
-rw-r--r--src/render/materialsystem/shaderbuilder_p.h2
-rw-r--r--src/render/renderers/opengl/renderer/renderer.cpp4
3 files changed, 4 insertions, 3 deletions
diff --git a/src/render/materialsystem/shaderbuilder.cpp b/src/render/materialsystem/shaderbuilder.cpp
index 4e9327003..23f1400c9 100644
--- a/src/render/materialsystem/shaderbuilder.cpp
+++ b/src/render/materialsystem/shaderbuilder.cpp
@@ -145,6 +145,7 @@ void ShaderBuilder::cleanup()
m_enabledLayers.clear();
m_graphs.clear();
m_dirtyTypes.clear();
+ m_pendingUpdates.clear();
QBackendNode::setEnabled(false);
}
diff --git a/src/render/materialsystem/shaderbuilder_p.h b/src/render/materialsystem/shaderbuilder_p.h
index ac7a165b8..0a799afaa 100644
--- a/src/render/materialsystem/shaderbuilder_p.h
+++ b/src/render/materialsystem/shaderbuilder_p.h
@@ -95,7 +95,7 @@ public:
void syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime) override;
- QVector<ShaderBuilderUpdate> &updates() { return m_pendingUpdates; }
+ QVector<ShaderBuilderUpdate> takePendingUpdates() { return std::move(m_pendingUpdates); }
private:
void setEnabledLayers(const QStringList &layers);
diff --git a/src/render/renderers/opengl/renderer/renderer.cpp b/src/render/renderers/opengl/renderer/renderer.cpp
index 3da9b6c48..c3e986854 100644
--- a/src/render/renderers/opengl/renderer/renderer.cpp
+++ b/src/render/renderers/opengl/renderer/renderer.cpp
@@ -1115,7 +1115,7 @@ void Renderer::reloadDirtyShaders()
if (shaderBuilder->isShaderCodeDirty(shaderType)) {
shaderBuilder->generateCode(shaderType);
- m_shaderBuilderUpdates.append(std::move(shaderBuilder->updates()));
+ m_shaderBuilderUpdates.append(shaderBuilder->takePendingUpdates());
}
const auto code = shaderBuilder->shaderCode(shaderType);
@@ -1143,9 +1143,9 @@ void Renderer::sendShaderChangesToFrontend(Qt3DCore::QAspectManager *manager)
if (s->requiresFrontendSync()) {
QShaderProgram *frontend = static_cast<decltype(frontend)>(manager->lookupNode(s->peerId()));
QShaderProgramPrivate *dFrontend = static_cast<decltype(dFrontend)>(QNodePrivate::get(frontend));
+ s->unsetRequiresFrontendSync();
dFrontend->setStatus(s->status());
dFrontend->setLog(s->log());
- s->unsetRequiresFrontendSync();
}
}