diff options
-rw-r--r-- | src/plugins/renderers/opengl/renderer/renderview.cpp | 4 | ||||
-rw-r--r-- | src/plugins/renderers/opengl/renderer/shaderparameterpack_p.h | 5 |
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(); |