summaryrefslogtreecommitdiffstats
path: root/src/plugins/renderers/opengl/renderer
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2020-02-12 16:20:20 +0100
committerPaul Lemire <paul.lemire@kdab.com>2020-02-13 06:39:16 +0100
commitfed75194371573cb1af24710deb2936f5f8024d1 (patch)
tree5cfcf470b987f4e89008ed6ea060701d771cca71 /src/plugins/renderers/opengl/renderer
parent26df8a284b745002f067cbde6da40fcdb921c19c (diff)
Shader fixes
- Make sure that shaders marked for destruction are un marked from destruction if recreated before having been destroyed. - When loading shaders, make sure the shader wasn't already loaded when loading it. This can happen is a shader is abandoned and then re adopted. Change-Id: I04597479d782bc6d31e4c7f78425c02c31217c7e Reviewed-by: Mike Krus <mike.krus@kdab.com>
Diffstat (limited to 'src/plugins/renderers/opengl/renderer')
-rw-r--r--src/plugins/renderers/opengl/renderer/renderer.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/plugins/renderers/opengl/renderer/renderer.cpp b/src/plugins/renderers/opengl/renderer/renderer.cpp
index d01f22847..af43a4fe5 100644
--- a/src/plugins/renderers/opengl/renderer/renderer.cpp
+++ b/src/plugins/renderers/opengl/renderer/renderer.cpp
@@ -1178,6 +1178,10 @@ void Renderer::reloadDirtyShaders()
HShader shaderHandle = m_nodesManager->shaderManager()->lookupHandle(renderPass->shaderProgram());
Shader *shader = m_nodesManager->shaderManager()->data(shaderHandle);
+ // Shader could be null if the pass doesn't reference one yet
+ if (!shader)
+ continue;
+
ShaderBuilder *shaderBuilder = nullptr;
for (const HShaderBuilder &builderHandle : activeBuilders) {
ShaderBuilder *builder = m_nodesManager->shaderBuilderManager()->data(builderHandle);
@@ -1205,7 +1209,7 @@ void Renderer::reloadDirtyShaders()
}
}
- if (shader != nullptr && shader->isDirty())
+ if (shader->isDirty())
loadShader(shader, shaderHandle);
}
}