summaryrefslogtreecommitdiffstats
path: root/src/gui/rhi/qrhigles2.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/rhi/qrhigles2.cpp')
-rw-r--r--src/gui/rhi/qrhigles2.cpp7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/gui/rhi/qrhigles2.cpp b/src/gui/rhi/qrhigles2.cpp
index 52c5c70d3f..395ae4b93f 100644
--- a/src/gui/rhi/qrhigles2.cpp
+++ b/src/gui/rhi/qrhigles2.cpp
@@ -3256,11 +3256,12 @@ void QRhiGles2::gatherUniforms(GLuint program,
QByteArray prefix = ub.structName.toUtf8() + '.';
for (const QShaderDescription::BlockVariable &blockMember : ub.members) {
if (blockMember.type == QShaderDescription::Struct) {
- prefix += blockMember.name.toUtf8();
+ QByteArray structPrefix = prefix + blockMember.name.toUtf8();
+
const int baseOffset = blockMember.offset;
if (blockMember.arrayDims.isEmpty()) {
for (const QShaderDescription::BlockVariable &structMember : blockMember.structMembers)
- registerUniformIfActive(structMember, prefix, ub.binding, baseOffset, program, dst);
+ registerUniformIfActive(structMember, structPrefix, ub.binding, baseOffset, program, dst);
} else {
if (blockMember.arrayDims.count() > 1) {
qWarning("Array of struct '%s' has more than one dimension. Only the first dimension is used.",
@@ -3270,7 +3271,7 @@ void QRhiGles2::gatherUniforms(GLuint program,
const int elemSize = blockMember.size / dim;
int elemOffset = baseOffset;
for (int di = 0; di < dim; ++di) {
- const QByteArray arrayPrefix = prefix + '[' + QByteArray::number(di) + ']' + '.';
+ const QByteArray arrayPrefix = structPrefix + '[' + QByteArray::number(di) + ']' + '.';
for (const QShaderDescription::BlockVariable &structMember : blockMember.structMembers)
registerUniformIfActive(structMember, arrayPrefix, ub.binding, elemOffset, program, dst);
elemOffset += elemSize;