diff options
Diffstat (limited to 'src')
-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 3f0f9061e..d456151e3 100644 --- a/src/plugins/renderers/opengl/renderer/renderview.cpp +++ b/src/plugins/renderers/opengl/renderer/renderview.cpp @@ -1323,6 +1323,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 std::vector<int> &standardUniformNamesIds = shader->standardUniformNameIds(); @@ -1347,8 +1348,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 826350596..0825c9c47 100644 --- a/src/plugins/renderers/opengl/renderer/shaderparameterpack_p.h +++ b/src/plugins/renderers/opengl/renderer/shaderparameterpack_p.h @@ -100,6 +100,11 @@ struct PackUniformHash values.reserve(count); } + size_t size() const + { + return keys.size(); + } + inline int indexForKey(int key) const { const auto b = keys.cbegin(); |