summaryrefslogtreecommitdiffstats
path: root/src/plugins/renderers/opengl/renderer/shaderparameterpack.cpp
diff options
context:
space:
mode:
authorTarja Sundqvist <tarja.sundqvist@qt.io>2023-10-11 16:01:22 +0300
committerTarja Sundqvist <tarja.sundqvist@qt.io>2023-10-11 16:01:22 +0300
commite1b1a0d2970fd384bd52c734a72536d8452ad070 (patch)
tree494b70bc1a1e115d7ecce39e698d9621af717971 /src/plugins/renderers/opengl/renderer/shaderparameterpack.cpp
parentc1f8fa2578d99e07f5e581f26bd532695b9534f9 (diff)
parentb59fdcefdbce6a1870e49b0da14d30b51293dea6 (diff)
Merge remote-tracking branch 'origin/tqtc/lts-5.15.12' into tqtc/lts-5.15-opensourcev5.15.12-lts-lgpl
Diffstat (limited to 'src/plugins/renderers/opengl/renderer/shaderparameterpack.cpp')
-rw-r--r--src/plugins/renderers/opengl/renderer/shaderparameterpack.cpp20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/plugins/renderers/opengl/renderer/shaderparameterpack.cpp b/src/plugins/renderers/opengl/renderer/shaderparameterpack.cpp
index 43b0b90c1..bf7d5fce6 100644
--- a/src/plugins/renderers/opengl/renderer/shaderparameterpack.cpp
+++ b/src/plugins/renderers/opengl/renderer/shaderparameterpack.cpp
@@ -100,12 +100,28 @@ void ShaderParameterPack::setImage(const int glslNameId, int uniformArrayIndex,
// Contains Uniform Block Index and QNodeId of the ShaderData (UBO)
void ShaderParameterPack::setUniformBuffer(BlockToUBO blockToUBO)
{
- m_uniformBuffers.push_back(std::move(blockToUBO));
+ const auto uEnd = m_uniformBuffers.end();
+ auto it = std::find_if(m_uniformBuffers.begin(), uEnd, [&] (const BlockToUBO &block) {
+ return blockToUBO.m_blockIndex == block.m_blockIndex;
+ });
+
+ if (it == uEnd)
+ m_uniformBuffers.push_back(std::move(blockToUBO));
+ else
+ *it = std::move(blockToUBO);
}
void ShaderParameterPack::setShaderStorageBuffer(BlockToSSBO blockToSSBO)
{
- m_shaderStorageBuffers.push_back(std::move(blockToSSBO));
+ const auto uEnd = m_shaderStorageBuffers.end();
+ auto it = std::find_if(m_shaderStorageBuffers.begin(), uEnd, [&] (const BlockToSSBO &block) {
+ return blockToSSBO.m_blockIndex == block.m_blockIndex;
+ });
+
+ if (it == uEnd)
+ m_shaderStorageBuffers.push_back(std::move(blockToSSBO));
+ else
+ *it = std::move(blockToSSBO);
}
void ShaderParameterPack::setSubmissionUniformIndex(const int uniformIdx)