summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/render/backend/qgraphicshelpergl3.cpp2
-rw-r--r--src/render/backend/rendershader.cpp19
-rw-r--r--src/render/backend/rendershader_p.h1
-rw-r--r--src/render/backend/renderview.cpp5
4 files changed, 20 insertions, 7 deletions
diff --git a/src/render/backend/qgraphicshelpergl3.cpp b/src/render/backend/qgraphicshelpergl3.cpp
index 24c2d9d64..cd2a5033b 100644
--- a/src/render/backend/qgraphicshelpergl3.cpp
+++ b/src/render/backend/qgraphicshelpergl3.cpp
@@ -182,7 +182,7 @@ QVector<ShaderUniformBlock> QGraphicsHelperGL3::programUniformBlocks(GLuint prog
QVector<ShaderUniformBlock> blocks;
GLint nbrActiveUniformsBlocks = 0;
m_funcs->glGetProgramiv(programId, GL_ACTIVE_UNIFORM_BLOCKS, &nbrActiveUniformsBlocks);
- blocks.resize(nbrActiveUniformsBlocks);
+ blocks.reserve(nbrActiveUniformsBlocks);
for (GLint i = 0; i < nbrActiveUniformsBlocks; i++) {
QByteArray uniformBlockName(256, '\0');
ShaderUniformBlock uniformBlock;
diff --git a/src/render/backend/rendershader.cpp b/src/render/backend/rendershader.cpp
index 8d11443da..d4a3cbd70 100644
--- a/src/render/backend/rendershader.cpp
+++ b/src/render/backend/rendershader.cpp
@@ -180,8 +180,19 @@ QHash<QString, ShaderUniform> RenderShader::activeUniformsForBlock(int blockInde
ShaderUniformBlock RenderShader::uniformBlock(int blockIndex)
{
for (int i = 0; i < m_uniformBlocks.size(); ++i) {
- if (m_uniformBlocks[i].m_index == blockIndex)
+ if (m_uniformBlocks[i].m_index == blockIndex) {
return m_uniformBlocks[i];
+ }
+ }
+ return ShaderUniformBlock();
+}
+
+ShaderUniformBlock RenderShader::uniformBlock(const QString &blockName)
+{
+ for (int i = 0; i < m_uniformBlocks.size(); ++i) {
+ if (m_uniformBlocks[i].m_name == blockName) {
+ return m_uniformBlocks[i];
+ }
}
return ShaderUniformBlock();
}
@@ -298,7 +309,7 @@ void RenderShader::initializeUniforms(const QVector<ShaderUniform> &uniformsDesc
for (int i = 0; i < uniformsDescription.size(); i++) {
m_uniformsNames[i] = uniformsDescription[i].m_name;
if (uniformsDescription[i].m_blockIndex == -1) { // Uniform is in default block
- qCDebug(Shaders) << "Active Uniform in Default Block " << uniformsDescription[i].m_name;
+ qCDebug(Shaders) << "Active Uniform in Default Block " << uniformsDescription[i].m_name << uniformsDescription[i].m_blockIndex;
activeUniformsInDefaultBlock.insert(uniformsDescription[i].m_name, uniformsDescription[i]);
}
}
@@ -321,7 +332,7 @@ void RenderShader::initializeUniformBlocks(const QVector<ShaderUniformBlock> &un
m_uniformBlockNames.resize(uniformBlockDescription.size());
for (int i = 0; i < uniformBlockDescription.size(); ++i) {
m_uniformBlockNames[i] = uniformBlockDescription[i].m_name;
- qCDebug(Shaders) << "Initializing Uniform Block " << m_uniformBlockNames[i];
+ qCDebug(Shaders) << "Initializing Uniform Block {" << m_uniformBlockNames[i] << "}";
// Find all active uniforms for the shader block
QVector<ShaderUniform>::const_iterator uniformsIt = m_uniforms.begin();
@@ -338,7 +349,7 @@ void RenderShader::initializeUniformBlocks(const QVector<ShaderUniformBlock> &un
if (!m_uniformBlockNames[i].isEmpty() && !uniformName.startsWith(m_uniformBlockNames[i]))
uniformName = m_uniformBlockNames[i] + QStringLiteral(".") + *uniformNamesIt;
activeUniformsInBlock.insert(uniformName, *uniformsIt);
- qCDebug(Shaders) << "Active Uniform Block " << uniformName << " in block " << m_uniformBlockNames[i];
+ qCDebug(Shaders) << "Active Uniform Block " << uniformName << " in block " << m_uniformBlockNames[i] << " at index " << uniformsIt->m_blockIndex;
}
++uniformsIt;
++uniformNamesIt;
diff --git a/src/render/backend/rendershader_p.h b/src/render/backend/rendershader_p.h
index d0a4d1e0e..23d5a8672 100644
--- a/src/render/backend/rendershader_p.h
+++ b/src/render/backend/rendershader_p.h
@@ -84,6 +84,7 @@ public:
QHash<QString, ShaderUniform> activeUniformsForBlock(int blockIndex) const;
ShaderUniformBlock uniformBlock(int blockIndex);
+ ShaderUniformBlock uniformBlock(const QString &blockName);
private:
QOpenGLShaderProgram *m_program;
diff --git a/src/render/backend/renderview.cpp b/src/render/backend/renderview.cpp
index 36664515c..6ed9761b8 100644
--- a/src/render/backend/renderview.cpp
+++ b/src/render/backend/renderview.cpp
@@ -616,8 +616,9 @@ void RenderView::setShaderAndUniforms(RenderCommand *command, RenderRenderPass *
if (uniformNames.contains(it->name)) { // Parameter is a regular uniform
setUniformValue(command->m_uniforms, it->name, it->value);
it = parameters.erase(it);
- } else if (int idx = uniformBlockNames.indexOf(it->name) != -1) { // Parameter is a uniform block
- setUniformBlockValue(command->m_uniforms, shader, shader->uniformBlocks().at(idx), it->value);
+ } else if (uniformBlockNames.indexOf(it->name) != -1) { // Parameter is a uniform block
+ const ShaderUniformBlock &block = shader->uniformBlock(it->name);
+ setUniformBlockValue(command->m_uniforms, shader, block, it->value);
it = parameters.erase(it);
} else {
const QVariant &v = it->value;