diff options
author | Milian Wolff <milian.wolff@kdab.com> | 2014-10-29 19:28:52 +0100 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2014-10-30 18:49:54 +0100 |
commit | 4b876e08f1e57321f55b1b6e5c5822ba5b3baa87 (patch) | |
tree | 9a85d67e34e6eadab82dc5706f49f35942f2ac6f | |
parent | 2da8c1fa62679ebb5e5bd42c0445f56cc75327b4 (diff) | |
download | qt3d-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.cpp | 15 |
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 ¶mName, 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 |