diff options
author | Sean Harmer <sean.harmer@kdab.com> | 2012-09-22 16:34:21 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-02-26 16:27:30 +0100 |
commit | 10aa64d74c0208ed9f42e88e6deb3000e9cad6df (patch) | |
tree | 4fb87da458d75f728c862fd3c34c483438249a14 /src/gui/opengl/qopenglversionfunctionsfactory.cpp | |
parent | 4b1332783e16423b3b2c54125b130247ee6bc5b2 (diff) |
OpenGL: Add a set of version and context specific OpenGL classes
This commit adds part of the output of utils/glgen and some simple
modifications to QOpenGLContext to allow easy access to classes
containing functions specific to a given OpenGL context and version.
This allows compile-time detection of mis-use of OpenGL features.
For example, trying to use glBegin(GL_TRIANGLES) with an OpenGL 3.2
Core Profile context will be detected by the compiler rather than at
runtime.
These capabilities make it much easier to add functionality to Qt and
applications that relies upon core features of OpenGL from specific
versions e.g. geometry shaders.
Change-Id: Ieb584a489792595f831bc77dee84935c03bb5a64
Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
Diffstat (limited to 'src/gui/opengl/qopenglversionfunctionsfactory.cpp')
-rw-r--r-- | src/gui/opengl/qopenglversionfunctionsfactory.cpp | 153 |
1 files changed, 153 insertions, 0 deletions
diff --git a/src/gui/opengl/qopenglversionfunctionsfactory.cpp b/src/gui/opengl/qopenglversionfunctionsfactory.cpp new file mode 100644 index 0000000000..fed2c1537a --- /dev/null +++ b/src/gui/opengl/qopenglversionfunctionsfactory.cpp @@ -0,0 +1,153 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Klaralvdalens Datakonsult AB (KDAB) +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/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 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt 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 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +** +** This file was generated by glgen version 0.1 +** Command line was: glgen +** +** glgen is Copyright (C) 2013 Klaralvdalens Datakonsult AB (KDAB) +** +** This is an auto-generated file. +** Do not edit! All changes made to it will be lost. +** +****************************************************************************/ + +#include "qopenglversionfunctionsfactory_p.h" + +#if !defined(QT_OPENGL_ES_2) +#include "qopenglfunctions_4_3_core.h" +#include "qopenglfunctions_4_3_compatibility.h" +#include "qopenglfunctions_4_2_core.h" +#include "qopenglfunctions_4_2_compatibility.h" +#include "qopenglfunctions_4_1_core.h" +#include "qopenglfunctions_4_1_compatibility.h" +#include "qopenglfunctions_4_0_core.h" +#include "qopenglfunctions_4_0_compatibility.h" +#include "qopenglfunctions_3_3_core.h" +#include "qopenglfunctions_3_3_compatibility.h" +#include "qopenglfunctions_3_2_core.h" +#include "qopenglfunctions_3_2_compatibility.h" +#include "qopenglfunctions_3_1.h" +#include "qopenglfunctions_3_0.h" +#include "qopenglfunctions_2_1.h" +#include "qopenglfunctions_2_0.h" +#include "qopenglfunctions_1_5.h" +#include "qopenglfunctions_1_4.h" +#include "qopenglfunctions_1_3.h" +#include "qopenglfunctions_1_2.h" +#include "qopenglfunctions_1_1.h" +#include "qopenglfunctions_1_0.h" +#else +#include "qopenglfunctions_es2.h" +#endif + +QT_BEGIN_NAMESPACE + +QAbstractOpenGLFunctions *QOpenGLVersionFunctionsFactory::create(const QOpenGLVersionProfile &versionProfile) +{ +#if !defined(QT_OPENGL_ES_2) + const int major = versionProfile.version().first; + const int minor = versionProfile.version().second; + + if (versionProfile.hasProfiles()) { + switch (versionProfile.profile()) { + case QSurfaceFormat::CoreProfile: + if (major == 4 && minor == 3) + return new QOpenGLFunctions_4_3_Core; + else if (major == 4 && minor == 2) + return new QOpenGLFunctions_4_2_Core; + else if (major == 4 && minor == 1) + return new QOpenGLFunctions_4_1_Core; + else if (major == 4 && minor == 0) + return new QOpenGLFunctions_4_0_Core; + else if (major == 3 && minor == 3) + return new QOpenGLFunctions_3_3_Core; + else if (major == 3 && minor == 2) + return new QOpenGLFunctions_3_2_Core; + break; + + case QSurfaceFormat::CompatibilityProfile: + if (major == 4 && minor == 3) + return new QOpenGLFunctions_4_3_Compatibility; + else if (major == 4 && minor == 2) + return new QOpenGLFunctions_4_2_Compatibility; + else if (major == 4 && minor == 1) + return new QOpenGLFunctions_4_1_Compatibility; + else if (major == 4 && minor == 0) + return new QOpenGLFunctions_4_0_Compatibility; + else if (major == 3 && minor == 3) + return new QOpenGLFunctions_3_3_Compatibility; + else if (major == 3 && minor == 2) + return new QOpenGLFunctions_3_2_Compatibility; + break; + + case QSurfaceFormat::NoProfile: + default: + break; + }; + } else { + if (major == 3 && minor == 1) + return new QOpenGLFunctions_3_1; + else if (major == 3 && minor == 0) + return new QOpenGLFunctions_3_0; + else if (major == 2 && minor == 1) + return new QOpenGLFunctions_2_1; + else if (major == 2 && minor == 0) + return new QOpenGLFunctions_2_0; + else if (major == 1 && minor == 5) + return new QOpenGLFunctions_1_5; + else if (major == 1 && minor == 4) + return new QOpenGLFunctions_1_4; + else if (major == 1 && minor == 3) + return new QOpenGLFunctions_1_3; + else if (major == 1 && minor == 2) + return new QOpenGLFunctions_1_2; + else if (major == 1 && minor == 1) + return new QOpenGLFunctions_1_1; + else if (major == 1 && minor == 0) + return new QOpenGLFunctions_1_0; + } + return 0; +#else + Q_UNUSED(versionProfile); + return new QOpenGLFunctions_ES2; +#endif +} + +QT_END_NAMESPACE |