summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/renderers/opengl/renderer/renderview.cpp4
-rw-r--r--src/plugins/renderers/opengl/renderer/shaderparameterpack_p.h5
2 files changed, 8 insertions, 1 deletions
diff --git a/src/plugins/renderers/opengl/renderer/renderview.cpp b/src/plugins/renderers/opengl/renderer/renderview.cpp
index c26e1bb09..fbc1cd841 100644
--- a/src/plugins/renderers/opengl/renderer/renderview.cpp
+++ b/src/plugins/renderers/opengl/renderer/renderview.cpp
@@ -1080,6 +1080,7 @@ void RenderView::setShaderAndUniforms(RenderCommand *command,
command->m_parameterPack.reserve(shader->parameterPackSize());
}
+ const size_t previousUniformCount = command->m_parameterPack.uniforms().size();
if (shader->hasActiveVariables()) {
const QVector<int> &standardUniformNamesIds = shader->standardUniformNameIds();
@@ -1104,8 +1105,9 @@ void RenderView::setShaderAndUniforms(RenderCommand *command,
updateLightUniforms(command, entity);
}
+ const size_t actualUniformCount = command->m_parameterPack.uniforms().size();
// Prepare the ShaderParameterPack based on the active uniforms of the shader
- if (!updateUniformsOnly)
+ if (!updateUniformsOnly || previousUniformCount != actualUniformCount)
shader->prepareUniforms(command->m_parameterPack);
}
diff --git a/src/plugins/renderers/opengl/renderer/shaderparameterpack_p.h b/src/plugins/renderers/opengl/renderer/shaderparameterpack_p.h
index 4fa96f51d..4e678e567 100644
--- a/src/plugins/renderers/opengl/renderer/shaderparameterpack_p.h
+++ b/src/plugins/renderers/opengl/renderer/shaderparameterpack_p.h
@@ -105,6 +105,11 @@ struct PackUniformHash
values.reserve(count);
}
+ size_t size() const
+ {
+ return keys.size();
+ }
+
inline int indexForKey(int key) const
{
const auto b = keys.cbegin();