File 0002-Properly-check-which-OpenGL-features-are-supported.patch of Package libqt5-qtbase.9686

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

openSUSE Build Service is sponsored by