summaryrefslogtreecommitdiffstats
path: root/src/opengl/gl2paintengineex/qglengineshadermanager.cpp
diff options
context:
space:
mode:
authorAnton Kudryavtsev <a.kudryavtsev@netris.ru>2016-02-15 11:16:39 +0300
committerAnton Kudryavtsev <a.kudryavtsev@netris.ru>2016-04-08 19:35:26 +0000
commit89034600939bbfe241ba3d6136abf7bb6961db52 (patch)
tree569ed773351a496ddac552fff66859967695351f /src/opengl/gl2paintengineex/qglengineshadermanager.cpp
parentf931e5e72d4617023bbea46cba2c0d61bb1efa4f (diff)
QtBase: use erase and std::remove_if with QList and QVector
... instead of using removeAt in a loop, with quadratic complexity. Change-Id: I38b49e56b12c396db9fc0f1b75d8fb43c503a7f6 Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Diffstat (limited to 'src/opengl/gl2paintengineex/qglengineshadermanager.cpp')
-rw-r--r--src/opengl/gl2paintengineex/qglengineshadermanager.cpp15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/opengl/gl2paintengineex/qglengineshadermanager.cpp b/src/opengl/gl2paintengineex/qglengineshadermanager.cpp
index b239356c4a..fff64506ab 100644
--- a/src/opengl/gl2paintengineex/qglengineshadermanager.cpp
+++ b/src/opengl/gl2paintengineex/qglengineshadermanager.cpp
@@ -48,6 +48,8 @@
#include <QMetaEnum>
#endif
+#include <algorithm>
+
// #define QT_GL_SHARED_SHADER_DEBUG
QT_BEGIN_NAMESPACE
@@ -472,15 +474,16 @@ QGLEngineShaderProg *QGLEngineSharedShaders::findProgramInCache(const QGLEngineS
void QGLEngineSharedShaders::cleanupCustomStage(QGLCustomShaderStage* stage)
{
- // Remove any shader programs which has this as the custom shader src:
- for (int i = 0; i < cachedPrograms.size(); ++i) {
- QGLEngineShaderProg *cachedProg = cachedPrograms[i];
+ auto hasStageAsCustomShaderSouce = [stage](QGLEngineShaderProg *cachedProg) -> bool {
if (cachedProg->customStageSource == stage->source()) {
delete cachedProg;
- cachedPrograms.removeAt(i);
- i--;
+ return true;
}
- }
+ return false;
+ };
+ cachedPrograms.erase(std::remove_if(cachedPrograms.begin(), cachedPrograms.end(),
+ hasStageAsCustomShaderSouce),
+ cachedPrograms.end());
}