summaryrefslogtreecommitdiffstats
path: root/src/gui/opengl/qopengl.cpp
diff options
context:
space:
mode:
authorSean Harmer <sean.harmer@kdab.com>2012-07-20 16:21:47 +0100
committerQt by Nokia <qt-info@nokia.com>2012-08-07 18:55:43 +0200
commit46212d657e2e989dddd361a732e65b05748e8e91 (patch)
treecf63240dd6a273a9fd6516cb17cc9f2229af1d35 /src/gui/opengl/qopengl.cpp
parente81d7fd1e57fe2ce11cbe07636f890973116f7ab (diff)
Improve the QOpenGLExtensionMatcher class
Using a QSet<QByteArray> internally means that checking for the presence of an extension no longer uses an O(N) search. This patch also allows users of this class to easily get a list of the supported extensions. Change-Id: I02194e5345573c47be0876f3ea6eb6b69a2ead81 Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com> Reviewed-by: Gunnar Sletta <gunnar.sletta@nokia.com>
Diffstat (limited to 'src/gui/opengl/qopengl.cpp')
-rw-r--r--src/gui/opengl/qopengl.cpp33
1 files changed, 4 insertions, 29 deletions
diff --git a/src/gui/opengl/qopengl.cpp b/src/gui/opengl/qopengl.cpp
index 290fcb287e..ce6cb8a691 100644
--- a/src/gui/opengl/qopengl.cpp
+++ b/src/gui/opengl/qopengl.cpp
@@ -46,11 +46,6 @@
QT_BEGIN_NAMESPACE
-QOpenGLExtensionMatcher::QOpenGLExtensionMatcher(const char *str)
-{
- init(str);
-}
-
typedef const GLubyte * (QOPENGLF_APIENTRYP qt_glGetStringi)(GLenum, GLuint);
#ifndef GL_NUM_EXTENSIONS
@@ -62,7 +57,9 @@ QOpenGLExtensionMatcher::QOpenGLExtensionMatcher()
const char *extensionStr = reinterpret_cast<const char *>(glGetString(GL_EXTENSIONS));
if (extensionStr) {
- init(extensionStr);
+ QByteArray ba(extensionStr);
+ QList<QByteArray> extensions = ba.split(' ');
+ m_extensions = extensions.toSet();
} else {
// clear error state
while (glGetError()) {}
@@ -79,32 +76,10 @@ QOpenGLExtensionMatcher::QOpenGLExtensionMatcher()
for (int i = 0; i < numExtensions; ++i) {
const char *str = reinterpret_cast<const char *>(glGetStringi(GL_EXTENSIONS, i));
-
- m_offsets << m_extensions.size();
-
- while (*str != 0)
- m_extensions.append(*str++);
- m_extensions.append(' ');
+ m_extensions.insert(str);
}
}
}
}
-void QOpenGLExtensionMatcher::init(const char *str)
-{
- m_extensions = str;
-
- // make sure extension string ends with a space
- if (!m_extensions.endsWith(' '))
- m_extensions.append(' ');
-
- int index = 0;
- int next = 0;
- while ((next = m_extensions.indexOf(' ', index)) >= 0) {
- m_offsets << index;
- index = next + 1;
- }
-}
-
-
QT_END_NAMESPACE