summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMilian Wolff <milian.wolff@kdab.com>2014-10-29 19:28:52 +0100
committerSean Harmer <sean.harmer@kdab.com>2014-10-30 18:49:54 +0100
commit4b876e08f1e57321f55b1b6e5c5822ba5b3baa87 (patch)
tree9a85d67e34e6eadab82dc5706f49f35942f2ac6f
parent2da8c1fa62679ebb5e5bd42c0445f56cc75327b4 (diff)
downloadqt3d-4b876e08f1e57321f55b1b6e5c5822ba5b3baa87.tar.gz
Optimize QHash usage in RenderView::setShaderAndUniforms.
Do not allocate a temporary list of keys to iterate over. Use iterators directly. Change-Id: Ic422b2b6ec8ba80e94ff95a7fa1edb4ec3f6e666 Reviewed-by: Paul Lemire <paul.lemire@kdab.com> Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
-rw-r--r--src/render/backend/renderview.cpp15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/render/backend/renderview.cpp b/src/render/backend/renderview.cpp
index ea67d7c4d..fdc650a73 100644
--- a/src/render/backend/renderview.cpp
+++ b/src/render/backend/renderview.cpp
@@ -717,10 +717,17 @@ void RenderView::setShaderAndUniforms(RenderCommand *command, RenderRenderPass *
}
// If there are remaining parameters, those are set as uniforms
- Q_FOREACH (const QString &paramName, parameters.keys()) {
- if (uniformNames.contains(paramName))
- setUniformValue(command->m_uniforms, paramName, parameters.take(paramName));
- // Else param unused by current shader
+ if (!uniformNames.isEmpty() && !parameters.isEmpty()) {
+ QHash<QString, QVariant>::iterator it = parameters.begin();
+ while (it != parameters.end()) {
+ if (uniformNames.contains(it.key())) {
+ setUniformValue(command->m_uniforms, it.key(), it.value());
+ it = parameters.erase(it);
+ } else {
+ // Else param unused by current shader
+ ++it;
+ }
+ }
}
// Sets lights in shader