diff options
author | Laszlo Agocs <laszlo.agocs@digia.com> | 2014-02-23 13:22:13 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-02-25 17:08:02 +0100 |
commit | 501bd0fa6709caff3d5425abc16fa8ef3f5c88af (patch) | |
tree | f15f6b7977a0af5006348736494e2029079e9232 /src/quick/items/qquickshadereffectsource.cpp | |
parent | aaea23708a46259094a8203f73ee0650c362d85f (diff) |
Fix crashes and incorrect extension queries on GL3+
glGetString(GL_EXTENSIONS) is deprecated in OpenGL 3.0+.
This means that in core profiles on 3.2+ (or without the fwd
compatibility bit on 3.0/3.1), the call is not supported and may
return NULL. This causes a crash in at least one place where we
try to blindly strstr the result. The correct solution is to use
QOpenGLContext::extensions() and hasExtension() which is prepared
to handle GL3+.
Change-Id: I52fec7dcee001cdc0933af03f5eed4b7c822b2bb
Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
Reviewed-by: Gunnar Sletta <gunnar.sletta@jollamobile.com>
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/quick/items/qquickshadereffectsource.cpp')
-rw-r--r-- | src/quick/items/qquickshadereffectsource.cpp | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/quick/items/qquickshadereffectsource.cpp b/src/quick/items/qquickshadereffectsource.cpp index 98203c51e5..f78a05ea9a 100644 --- a/src/quick/items/qquickshadereffectsource.cpp +++ b/src/quick/items/qquickshadereffectsource.cpp @@ -353,9 +353,9 @@ void QQuickShaderEffectTexture::grab() if (m_context->openglContext()->format().samples() <= 1) { m_multisampling = false; } else { - QList<QByteArray> extensions = QByteArray((const char *)glGetString(GL_EXTENSIONS)).split(' '); - m_multisampling = extensions.contains("GL_EXT_framebuffer_multisample") - && extensions.contains("GL_EXT_framebuffer_blit"); + const QSet<QByteArray> extensions = m_context->openglContext()->extensions(); + m_multisampling = extensions.contains(QByteArrayLiteral("GL_EXT_framebuffer_multisample")) + && extensions.contains(QByteArrayLiteral("GL_EXT_framebuffer_blit")); } m_multisamplingChecked = true; } |