diff options
Diffstat (limited to 'src/gui/opengl/qopenglfunctions.cpp')
-rw-r--r-- | src/gui/opengl/qopenglfunctions.cpp | 103 |
1 files changed, 40 insertions, 63 deletions
diff --git a/src/gui/opengl/qopenglfunctions.cpp b/src/gui/opengl/qopenglfunctions.cpp index be1a979c37..b55c878623 100644 --- a/src/gui/opengl/qopenglfunctions.cpp +++ b/src/gui/opengl/qopenglfunctions.cpp @@ -1,31 +1,37 @@ /**************************************************************************** ** -** Copyright (C) 2015 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QtGui module of the Qt Toolkit. ** -** $QT_BEGIN_LICENSE:LGPL21$ +** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 or version 3 as published by the Free -** Software Foundation and appearing in the file LICENSE.LGPLv21 and -** LICENSE.LGPLv3 included in the packaging of this file. Please review the -** following information to ensure the GNU Lesser General Public License -** requirements will be met: https://www.gnu.org/licenses/lgpl.html and -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. ** -** As a special exception, The Qt Company gives you certain additional -** rights. These rights are described in The Qt Company LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** @@ -2091,11 +2097,10 @@ template <typename Base, typename FuncType, int Policy, typename ReturnType> class Resolver { public: - Resolver(FuncType Base::*func, FuncType fallback, const char *name, const char *alternateName = 0) + Resolver(FuncType Base::*func, FuncType fallback, const char *name) : funcPointerName(func) , fallbackFuncPointer(fallback) , funcName(name) - , alternateFuncName(alternateName) { } @@ -2138,18 +2143,16 @@ private: FuncType Base::*funcPointerName; FuncType fallbackFuncPointer; QByteArray funcName; - QByteArray alternateFuncName; }; template <typename Base, typename FuncType, int Policy> class Resolver<Base, FuncType, Policy, void> { public: - Resolver(FuncType Base::*func, FuncType fallback, const char *name, const char *alternateName = 0) + Resolver(FuncType Base::*func, FuncType fallback, const char *name) : funcPointerName(func) , fallbackFuncPointer(fallback) , funcName(name) - , alternateFuncName(alternateName) { } @@ -2192,7 +2195,6 @@ private: FuncType Base::*funcPointerName; FuncType fallbackFuncPointer; QByteArray funcName; - QByteArray alternateFuncName; }; #define RESOLVER_COMMON \ @@ -2216,26 +2218,7 @@ private: funcs->*funcPointerName = (FuncType)context->getProcAddress(funcName + "ANGLE"); \ \ if ((Policy & ResolveNV) && !(funcs->*funcPointerName)) \ - funcs->*funcPointerName = (FuncType)context->getProcAddress(funcName + "NV"); \ - \ - if (!alternateFuncName.isEmpty() && !(funcs->*funcPointerName)) { \ - funcs->*funcPointerName = (FuncType)context->getProcAddress(alternateFuncName); \ - \ - if ((Policy & ResolveOES) && !(funcs->*funcPointerName)) \ - funcs->*funcPointerName = (FuncType)context->getProcAddress(alternateFuncName + "OES"); \ - \ - if (!(funcs->*funcPointerName)) \ - funcs->*funcPointerName = (FuncType)context->getProcAddress(alternateFuncName + "ARB"); \ - \ - if ((Policy & ResolveEXT) && !(funcs->*funcPointerName)) \ - funcs->*funcPointerName = (FuncType)context->getProcAddress(alternateFuncName + "EXT"); \ - \ - if ((Policy & ResolveANGLE) && !(funcs->*funcPointerName)) \ - funcs->*funcPointerName = (FuncType)context->getProcAddress(funcName + "ANGLE"); \ - \ - if ((Policy & ResolveNV) && !(funcs->*funcPointerName)) \ - funcs->*funcPointerName = (FuncType)context->getProcAddress(funcName + "NV"); \ - } + funcs->*funcPointerName = (FuncType)context->getProcAddress(funcName + "NV"); #define RESOLVER_COMMON_NON_VOID \ RESOLVER_COMMON \ @@ -2446,15 +2429,15 @@ void Resolver<Base, FuncType, Policy, void>::operator()(P1 p1, P2 p2, P3 p3, P4 } template <typename ReturnType, int Policy, typename Base, typename FuncType> -Resolver<Base, FuncType, Policy, ReturnType> functionResolverWithFallback(FuncType Base::*func, FuncType fallback, const char *name, const char *alternate = 0) +Resolver<Base, FuncType, Policy, ReturnType> functionResolverWithFallback(FuncType Base::*func, FuncType fallback, const char *name) { - return Resolver<Base, FuncType, Policy, ReturnType>(func, fallback, name, alternate); + return Resolver<Base, FuncType, Policy, ReturnType>(func, fallback, name); } template <typename ReturnType, int Policy, typename Base, typename FuncType> -Resolver<Base, FuncType, Policy, ReturnType> functionResolver(FuncType Base::*func, const char *name, const char *alternate = 0) +Resolver<Base, FuncType, Policy, ReturnType> functionResolver(FuncType Base::*func, const char *name) { - return Resolver<Base, FuncType, Policy, ReturnType>(func, 0, name, alternate); + return Resolver<Base, FuncType, Policy, ReturnType>(func, 0, name); } } // namespace @@ -2471,12 +2454,6 @@ Resolver<Base, FuncType, Policy, ReturnType> functionResolver(FuncType Base::*fu #define RESOLVE_FUNC_SPECIAL_VOID(POLICY, NAME) \ functionResolverWithFallback<void, POLICY>(&QOpenGLExtensionsPrivate::NAME, qopenglfSpecial##NAME, "gl" #NAME) -#define RESOLVE_FUNC_WITH_ALTERNATE(RETURN_TYPE, POLICY, NAME, ALTERNATE) \ - return functionResolver<RETURN_TYPE, POLICY>(&QOpenGLExtensionsPrivate::NAME, "gl" #NAME, "gl" #ALTERNATE) - -#define RESOLVE_FUNC_VOID_WITH_ALTERNATE(POLICY, NAME, ALTERNATE) \ - functionResolver<void, POLICY>(&QOpenGLExtensionsPrivate::NAME, "gl" #NAME, "gl" #ALTERNATE) - #ifndef QT_OPENGL_ES_2 // GLES2 + OpenGL1 common subset. These are normally not resolvable, @@ -2734,7 +2711,7 @@ static void QOPENGLF_APIENTRY qopenglfResolveActiveTexture(GLenum texture) static void QOPENGLF_APIENTRY qopenglfResolveAttachShader(GLuint program, GLuint shader) { - RESOLVE_FUNC_VOID_WITH_ALTERNATE(0, AttachShader, AttachObject)(program, shader); + RESOLVE_FUNC_VOID(0, AttachShader)(program, shader); } static void QOPENGLF_APIENTRY qopenglfResolveBindAttribLocation(GLuint program, GLuint index, const char* name) @@ -2809,12 +2786,12 @@ static void QOPENGLF_APIENTRY qopenglfResolveCompressedTexSubImage2D(GLenum targ static GLuint QOPENGLF_APIENTRY qopenglfResolveCreateProgram() { - RESOLVE_FUNC_WITH_ALTERNATE(GLuint, 0, CreateProgram, CreateProgramObject)(); + RESOLVE_FUNC(GLuint, 0, CreateProgram)(); } static GLuint QOPENGLF_APIENTRY qopenglfResolveCreateShader(GLenum type) { - RESOLVE_FUNC_WITH_ALTERNATE(GLuint, 0, CreateShader, CreateShaderObject)(type); + RESOLVE_FUNC(GLuint, 0, CreateShader)(type); } static void QOPENGLF_APIENTRY qopenglfResolveDeleteBuffers(GLsizei n, const GLuint* buffers) @@ -2839,12 +2816,12 @@ static void QOPENGLF_APIENTRY qopenglfResolveDeleteRenderbuffers(GLsizei n, cons static void QOPENGLF_APIENTRY qopenglfResolveDeleteShader(GLuint shader) { - RESOLVE_FUNC_VOID_WITH_ALTERNATE(0, DeleteShader, DeleteObject)(shader); + RESOLVE_FUNC_VOID(0, DeleteShader)(shader); } static void QOPENGLF_APIENTRY qopenglfResolveDetachShader(GLuint program, GLuint shader) { - RESOLVE_FUNC_VOID_WITH_ALTERNATE(0, DetachShader, DetachObject)(program, shader); + RESOLVE_FUNC_VOID(0, DetachShader)(program, shader); } static void QOPENGLF_APIENTRY qopenglfResolveDisableVertexAttribArray(GLuint index) @@ -2899,7 +2876,7 @@ static void QOPENGLF_APIENTRY qopenglfResolveGetActiveUniform(GLuint program, GL static void QOPENGLF_APIENTRY qopenglfResolveGetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders) { - RESOLVE_FUNC_VOID_WITH_ALTERNATE(0, GetAttachedShaders, GetAttachedObjects)(program, maxcount, count, shaders); + RESOLVE_FUNC_VOID(0, GetAttachedShaders)(program, maxcount, count, shaders); } static GLint QOPENGLF_APIENTRY qopenglfResolveGetAttribLocation(GLuint program, const char* name) @@ -2919,12 +2896,12 @@ static void QOPENGLF_APIENTRY qopenglfResolveGetFramebufferAttachmentParameteriv static void QOPENGLF_APIENTRY qopenglfResolveGetProgramiv(GLuint program, GLenum pname, GLint* params) { - RESOLVE_FUNC_VOID_WITH_ALTERNATE(0, GetProgramiv, GetObjectParameteriv)(program, pname, params); + RESOLVE_FUNC_VOID(0, GetProgramiv)(program, pname, params); } static void QOPENGLF_APIENTRY qopenglfResolveGetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length, char* infolog) { - RESOLVE_FUNC_VOID_WITH_ALTERNATE(0, GetProgramInfoLog, GetInfoLog)(program, bufsize, length, infolog); + RESOLVE_FUNC_VOID(0, GetProgramInfoLog)(program, bufsize, length, infolog); } static void QOPENGLF_APIENTRY qopenglfResolveGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* params) @@ -2934,12 +2911,12 @@ static void QOPENGLF_APIENTRY qopenglfResolveGetRenderbufferParameteriv(GLenum t static void QOPENGLF_APIENTRY qopenglfResolveGetShaderiv(GLuint shader, GLenum pname, GLint* params) { - RESOLVE_FUNC_VOID_WITH_ALTERNATE(0, GetShaderiv, GetObjectParameteriv)(shader, pname, params); + RESOLVE_FUNC_VOID(0, GetShaderiv)(shader, pname, params); } static void QOPENGLF_APIENTRY qopenglfResolveGetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog) { - RESOLVE_FUNC_VOID_WITH_ALTERNATE(0, GetShaderInfoLog, GetInfoLog)(shader, bufsize, length, infolog); + RESOLVE_FUNC_VOID(0, GetShaderInfoLog)(shader, bufsize, length, infolog); } static void QOPENGLF_APIENTRY qopenglfSpecialGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision) @@ -5795,7 +5772,9 @@ QOpenGLES3Helper::QOpenGLES3Helper() { m_supportedVersion = qMakePair(2, 0); - if (init()) { + if (Q_UNLIKELY(!init())) { + qFatal("Failed to load libGLESv2"); + } else { const QPair<int, int> contextVersion = QOpenGLContext::currentContext()->format().version(); qCDebug(lcGLES3, "Resolving OpenGL ES 3.0 entry points"); @@ -5993,8 +5972,6 @@ QOpenGLES3Helper::QOpenGLES3Helper() } m_supportedVersion = qMakePair(3, 1); } - } else { - qFatal("Failed to load libGLESv2"); } } |