forked from pool/libqt5-qtbase
121 lines
5.8 KiB
Diff
121 lines
5.8 KiB
Diff
|
From 473ed1c1aa67ceb345b20d13c408ed8bd65a9e41 Mon Sep 17 00:00:00 2001
|
||
|
From: =?UTF-8?q?Martin=20Gr=C3=A4=C3=9Flin?= <mgraesslin@kde.org>
|
||
|
Date: Wed, 18 Jun 2014 13:03:15 +0200
|
||
|
Subject: [PATCH 1/1] Properly check which OpenGL features are supported
|
||
|
|
||
|
QOpenGLShaderProgram::hasOpenGLShaderPrograms tests whether
|
||
|
QOpenGLFunctions::Shaders is provided for the given context. As the
|
||
|
initialization code assumed OpenGL 2 this always was true. But
|
||
|
unfortunately we still cannot assume that OpenGL 2 is universally
|
||
|
supported. E.g. indirect rendering (no matter how bad that idea is)
|
||
|
does not support OpenGL 2 on all hardware and the Shader related
|
||
|
extensions are not available.
|
||
|
|
||
|
This change makes sure that only when OpenGL 2 is available the
|
||
|
features provided by OpenGL 2 are enabled. If OpenGL 2 is not
|
||
|
available the extensions are tested. The checks are slightly
|
||
|
reordered to not do the extension tests at all if OpenGL 2 is
|
||
|
available.
|
||
|
|
||
|
Task-number: QTBUG-39730
|
||
|
Change-Id: Ic775163e0dcc519925b1287f3c4ca5e8ebf101d5
|
||
|
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
|
||
|
---
|
||
|
src/gui/opengl/qopenglfunctions.cpp | 78 +++++++++++++++++++------------------
|
||
|
1 file changed, 40 insertions(+), 38 deletions(-)
|
||
|
|
||
|
diff --git a/src/gui/opengl/qopenglfunctions.cpp b/src/gui/opengl/qopenglfunctions.cpp
|
||
|
index a0d1775..bc4a714 100644
|
||
|
--- a/src/gui/opengl/qopenglfunctions.cpp
|
||
|
+++ b/src/gui/opengl/qopenglfunctions.cpp
|
||
|
@@ -283,46 +283,48 @@ static int qt_gl_resolve_features()
|
||
|
QSurfaceFormat format = QOpenGLContext::currentContext()->format();
|
||
|
QOpenGLExtensionMatcher extensions;
|
||
|
|
||
|
- // Recognize features by extension name.
|
||
|
- if (extensions.match("GL_ARB_multitexture"))
|
||
|
- features |= QOpenGLFunctions::Multitexture;
|
||
|
- if (extensions.match("GL_ARB_shader_objects"))
|
||
|
- features |= QOpenGLFunctions::Shaders;
|
||
|
- if (extensions.match("GL_EXT_framebuffer_object") ||
|
||
|
- extensions.match("GL_ARB_framebuffer_object"))
|
||
|
- features |= QOpenGLFunctions::Framebuffers;
|
||
|
- if (extensions.match("GL_EXT_blend_color"))
|
||
|
- features |= QOpenGLFunctions::BlendColor;
|
||
|
- if (extensions.match("GL_EXT_blend_equation_separate"))
|
||
|
- features |= QOpenGLFunctions::BlendEquationSeparate;
|
||
|
- if (extensions.match("GL_EXT_blend_func_separate"))
|
||
|
- features |= QOpenGLFunctions::BlendFuncSeparate;
|
||
|
- if (extensions.match("GL_EXT_blend_subtract"))
|
||
|
- features |= QOpenGLFunctions::BlendSubtract;
|
||
|
- if (extensions.match("GL_ARB_texture_compression"))
|
||
|
- features |= QOpenGLFunctions::CompressedTextures;
|
||
|
- if (extensions.match("GL_ARB_multisample"))
|
||
|
- features |= QOpenGLFunctions::Multisample;
|
||
|
- if (extensions.match("GL_ARB_texture_non_power_of_two"))
|
||
|
- features |= QOpenGLFunctions::NPOTTextures |
|
||
|
- QOpenGLFunctions::NPOTTextureRepeat;
|
||
|
-
|
||
|
- // assume version 2.0 or higher
|
||
|
- features |= QOpenGLFunctions::BlendColor |
|
||
|
- QOpenGLFunctions::BlendEquation |
|
||
|
- QOpenGLFunctions::Multitexture |
|
||
|
- QOpenGLFunctions::CompressedTextures |
|
||
|
- QOpenGLFunctions::Multisample |
|
||
|
- QOpenGLFunctions::BlendFuncSeparate |
|
||
|
- QOpenGLFunctions::Buffers |
|
||
|
- QOpenGLFunctions::Shaders |
|
||
|
- QOpenGLFunctions::StencilSeparate |
|
||
|
- QOpenGLFunctions::BlendEquationSeparate |
|
||
|
- QOpenGLFunctions::NPOTTextures |
|
||
|
- QOpenGLFunctions::NPOTTextureRepeat;
|
||
|
-
|
||
|
if (format.majorVersion() >= 3)
|
||
|
features |= QOpenGLFunctions::Framebuffers;
|
||
|
+ else if (extensions.match("GL_EXT_framebuffer_object") ||
|
||
|
+ extensions.match("GL_ARB_framebuffer_object"))
|
||
|
+ features |= QOpenGLFunctions::Framebuffers;
|
||
|
+
|
||
|
+ if (format.majorVersion() >= 2) {
|
||
|
+ features |= QOpenGLFunctions::BlendColor |
|
||
|
+ QOpenGLFunctions::BlendEquation |
|
||
|
+ QOpenGLFunctions::BlendSubtract |
|
||
|
+ QOpenGLFunctions::Multitexture |
|
||
|
+ QOpenGLFunctions::CompressedTextures |
|
||
|
+ QOpenGLFunctions::Multisample |
|
||
|
+ QOpenGLFunctions::BlendFuncSeparate |
|
||
|
+ QOpenGLFunctions::Buffers |
|
||
|
+ QOpenGLFunctions::Shaders |
|
||
|
+ QOpenGLFunctions::StencilSeparate |
|
||
|
+ QOpenGLFunctions::BlendEquationSeparate |
|
||
|
+ QOpenGLFunctions::NPOTTextures |
|
||
|
+ QOpenGLFunctions::NPOTTextureRepeat;
|
||
|
+ } else {
|
||
|
+ // Recognize features by extension name.
|
||
|
+ if (extensions.match("GL_ARB_multitexture"))
|
||
|
+ features |= QOpenGLFunctions::Multitexture;
|
||
|
+ if (extensions.match("GL_ARB_shader_objects"))
|
||
|
+ features |= QOpenGLFunctions::Shaders;
|
||
|
+ if (extensions.match("GL_EXT_blend_color"))
|
||
|
+ features |= QOpenGLFunctions::BlendColor;
|
||
|
+ if (extensions.match("GL_EXT_blend_equation_separate"))
|
||
|
+ features |= QOpenGLFunctions::BlendEquationSeparate;
|
||
|
+ if (extensions.match("GL_EXT_blend_subtract"))
|
||
|
+ features |= QOpenGLFunctions::BlendSubtract;
|
||
|
+ if (extensions.match("GL_EXT_blend_func_separate"))
|
||
|
+ features |= QOpenGLFunctions::BlendFuncSeparate;
|
||
|
+ if (extensions.match("GL_ARB_texture_compression"))
|
||
|
+ features |= QOpenGLFunctions::CompressedTextures;
|
||
|
+ if (extensions.match("GL_ARB_multisample"))
|
||
|
+ features |= QOpenGLFunctions::Multisample;
|
||
|
+ if (extensions.match("GL_ARB_texture_non_power_of_two"))
|
||
|
+ features |= QOpenGLFunctions::NPOTTextures |
|
||
|
+ QOpenGLFunctions::NPOTTextureRepeat;
|
||
|
+ }
|
||
|
|
||
|
const QPair<int, int> version = format.version();
|
||
|
if (version < qMakePair(3, 0)
|
||
|
--
|
||
|
1.9.3
|
||
|
|