diff options
author | David Morgan <david.morgan@kdab.com> | 2014-09-23 16:43:32 +0100 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2015-02-09 11:39:18 +0000 |
commit | 18aae36a90c0753f1b1e615ba8437d8ebd1bd2fb (patch) | |
tree | ad5dc512088ea6399cc7a588e0ac0a3c27e41c45 /src/gui/opengl/qopenglfunctions_4_5_compatibility.cpp | |
parent | 38aafe1a17c5d3be81edf798dd4dbe745727f4fd (diff) |
OpenGL: Add versioned functions support for opengl 4.4 and 4.5
Previous errors in versioned function classes for OpenGL versions
prior to 4.4 have also been fixed to comply with the new OpenGL
xml specification. Such mistakes were due to either bugs in the
old plain text specification files or problems due to the
difficulty in parsing the old spec files.
In some cases this has meant adding in missing functions that were
absent previously.
The other class of problem was when functions were erroneously
included in the versioned function classes when they should not
have been present. That is, some core profile classes incorrectly
had member functions for deprecated functions that should only
be present in the compatibility profile classes. In these cases
these incorrect functions will now trigger a qFatal if
called. This is fine as any applications that called these by mistake
in the past would have been dereferencing a null pointer as the
function pointer resolution would have failed for these functions.
[ChangeLog][QtGui] Add version function classes for OpenGL 4.4 and 4.5
and deprecate some erroneously classified functions.
Task-Id: QTBUG-33671
Task-Id: QTBUG-44364
Change-Id: I224108dcaf4f8b4933bc121827511841e2a41590
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
Diffstat (limited to 'src/gui/opengl/qopenglfunctions_4_5_compatibility.cpp')
-rw-r--r-- | src/gui/opengl/qopenglfunctions_4_5_compatibility.cpp | 438 |
1 files changed, 438 insertions, 0 deletions
diff --git a/src/gui/opengl/qopenglfunctions_4_5_compatibility.cpp b/src/gui/opengl/qopenglfunctions_4_5_compatibility.cpp new file mode 100644 index 0000000000..846d87f9a4 --- /dev/null +++ b/src/gui/opengl/qopenglfunctions_4_5_compatibility.cpp @@ -0,0 +1,438 @@ +/**************************************************************************** +** +** Copyright (C) 2015 Klaralvdalens Datakonsult AB (KDAB) +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtWidgets module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** 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 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. +** +** 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. +** +** $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 "qopenglfunctions_4_5_compatibility.h" +#include "qopenglcontext.h" + +QT_BEGIN_NAMESPACE + +/*! + \class QOpenGLFunctions_4_5_Compatibility + \inmodule QtGui + \since 5.5 + \wrapper + \brief The QOpenGLFunctions_4_5_Compatibility class provides all functions for OpenGL 4.5 compatibility profile. + + This class is a wrapper for functions from OpenGL 4.5 compatibility profile. + See reference pages on \l {http://www.opengl.org/sdk/docs/}{opengl.org} + for function documentation. + + \sa QAbstractOpenGLFunctions +*/ + +QOpenGLFunctions_4_5_Compatibility::QOpenGLFunctions_4_5_Compatibility() + : QAbstractOpenGLFunctions() + , d_1_0_Core(0) + , d_1_1_Core(0) + , d_1_2_Core(0) + , d_1_3_Core(0) + , d_1_4_Core(0) + , d_1_5_Core(0) + , d_2_0_Core(0) + , d_2_1_Core(0) + , d_3_0_Core(0) + , d_3_1_Core(0) + , d_3_2_Core(0) + , d_3_3_Core(0) + , d_4_0_Core(0) + , d_4_1_Core(0) + , d_4_2_Core(0) + , d_4_3_Core(0) + , d_4_4_Core(0) + , d_4_5_Core(0) + , d_1_0_Deprecated(0) + , d_1_1_Deprecated(0) + , d_1_2_Deprecated(0) + , d_1_3_Deprecated(0) + , d_1_4_Deprecated(0) + , d_3_3_Deprecated(0) + , d_4_5_Deprecated(0) +{ +} + +QOpenGLFunctions_4_5_Compatibility::~QOpenGLFunctions_4_5_Compatibility() +{ + if (d_1_0_Core && !d_1_0_Core->refs.deref()) { + QAbstractOpenGLFunctionsPrivate::removeFunctionsBackend(d_1_0_Core->context, QOpenGLFunctions_1_0_CoreBackend::versionStatus()); + delete d_1_0_Core; + } + if (d_1_1_Core && !d_1_1_Core->refs.deref()) { + QAbstractOpenGLFunctionsPrivate::removeFunctionsBackend(d_1_1_Core->context, QOpenGLFunctions_1_1_CoreBackend::versionStatus()); + delete d_1_1_Core; + } + if (d_1_2_Core && !d_1_2_Core->refs.deref()) { + QAbstractOpenGLFunctionsPrivate::removeFunctionsBackend(d_1_2_Core->context, QOpenGLFunctions_1_2_CoreBackend::versionStatus()); + delete d_1_2_Core; + } + if (d_1_3_Core && !d_1_3_Core->refs.deref()) { + QAbstractOpenGLFunctionsPrivate::removeFunctionsBackend(d_1_3_Core->context, QOpenGLFunctions_1_3_CoreBackend::versionStatus()); + delete d_1_3_Core; + } + if (d_1_4_Core && !d_1_4_Core->refs.deref()) { + QAbstractOpenGLFunctionsPrivate::removeFunctionsBackend(d_1_4_Core->context, QOpenGLFunctions_1_4_CoreBackend::versionStatus()); + delete d_1_4_Core; + } + if (d_1_5_Core && !d_1_5_Core->refs.deref()) { + QAbstractOpenGLFunctionsPrivate::removeFunctionsBackend(d_1_5_Core->context, QOpenGLFunctions_1_5_CoreBackend::versionStatus()); + delete d_1_5_Core; + } + if (d_2_0_Core && !d_2_0_Core->refs.deref()) { + QAbstractOpenGLFunctionsPrivate::removeFunctionsBackend(d_2_0_Core->context, QOpenGLFunctions_2_0_CoreBackend::versionStatus()); + delete d_2_0_Core; + } + if (d_2_1_Core && !d_2_1_Core->refs.deref()) { + QAbstractOpenGLFunctionsPrivate::removeFunctionsBackend(d_2_1_Core->context, QOpenGLFunctions_2_1_CoreBackend::versionStatus()); + delete d_2_1_Core; + } + if (d_3_0_Core && !d_3_0_Core->refs.deref()) { + QAbstractOpenGLFunctionsPrivate::removeFunctionsBackend(d_3_0_Core->context, QOpenGLFunctions_3_0_CoreBackend::versionStatus()); + delete d_3_0_Core; + } + if (d_3_1_Core && !d_3_1_Core->refs.deref()) { + QAbstractOpenGLFunctionsPrivate::removeFunctionsBackend(d_3_1_Core->context, QOpenGLFunctions_3_1_CoreBackend::versionStatus()); + delete d_3_1_Core; + } + if (d_3_2_Core && !d_3_2_Core->refs.deref()) { + QAbstractOpenGLFunctionsPrivate::removeFunctionsBackend(d_3_2_Core->context, QOpenGLFunctions_3_2_CoreBackend::versionStatus()); + delete d_3_2_Core; + } + if (d_3_3_Core && !d_3_3_Core->refs.deref()) { + QAbstractOpenGLFunctionsPrivate::removeFunctionsBackend(d_3_3_Core->context, QOpenGLFunctions_3_3_CoreBackend::versionStatus()); + delete d_3_3_Core; + } + if (d_4_0_Core && !d_4_0_Core->refs.deref()) { + QAbstractOpenGLFunctionsPrivate::removeFunctionsBackend(d_4_0_Core->context, QOpenGLFunctions_4_0_CoreBackend::versionStatus()); + delete d_4_0_Core; + } + if (d_4_1_Core && !d_4_1_Core->refs.deref()) { + QAbstractOpenGLFunctionsPrivate::removeFunctionsBackend(d_4_1_Core->context, QOpenGLFunctions_4_1_CoreBackend::versionStatus()); + delete d_4_1_Core; + } + if (d_4_2_Core && !d_4_2_Core->refs.deref()) { + QAbstractOpenGLFunctionsPrivate::removeFunctionsBackend(d_4_2_Core->context, QOpenGLFunctions_4_2_CoreBackend::versionStatus()); + delete d_4_2_Core; + } + if (d_4_3_Core && !d_4_3_Core->refs.deref()) { + QAbstractOpenGLFunctionsPrivate::removeFunctionsBackend(d_4_3_Core->context, QOpenGLFunctions_4_3_CoreBackend::versionStatus()); + delete d_4_3_Core; + } + if (d_4_4_Core && !d_4_4_Core->refs.deref()) { + QAbstractOpenGLFunctionsPrivate::removeFunctionsBackend(d_4_4_Core->context, QOpenGLFunctions_4_4_CoreBackend::versionStatus()); + delete d_4_4_Core; + } + if (d_4_5_Core && !d_4_5_Core->refs.deref()) { + QAbstractOpenGLFunctionsPrivate::removeFunctionsBackend(d_4_5_Core->context, QOpenGLFunctions_4_5_CoreBackend::versionStatus()); + delete d_4_5_Core; + } + if (d_1_0_Deprecated && !d_1_0_Deprecated->refs.deref()) { + QAbstractOpenGLFunctionsPrivate::removeFunctionsBackend(d_1_0_Deprecated->context, QOpenGLFunctions_1_0_DeprecatedBackend::versionStatus()); + delete d_1_0_Deprecated; + } + if (d_1_1_Deprecated && !d_1_1_Deprecated->refs.deref()) { + QAbstractOpenGLFunctionsPrivate::removeFunctionsBackend(d_1_1_Deprecated->context, QOpenGLFunctions_1_1_DeprecatedBackend::versionStatus()); + delete d_1_1_Deprecated; + } + if (d_1_2_Deprecated && !d_1_2_Deprecated->refs.deref()) { + QAbstractOpenGLFunctionsPrivate::removeFunctionsBackend(d_1_2_Deprecated->context, QOpenGLFunctions_1_2_DeprecatedBackend::versionStatus()); + delete d_1_2_Deprecated; + } + if (d_1_3_Deprecated && !d_1_3_Deprecated->refs.deref()) { + QAbstractOpenGLFunctionsPrivate::removeFunctionsBackend(d_1_3_Deprecated->context, QOpenGLFunctions_1_3_DeprecatedBackend::versionStatus()); + delete d_1_3_Deprecated; + } + if (d_1_4_Deprecated && !d_1_4_Deprecated->refs.deref()) { + QAbstractOpenGLFunctionsPrivate::removeFunctionsBackend(d_1_4_Deprecated->context, QOpenGLFunctions_1_4_DeprecatedBackend::versionStatus()); + delete d_1_4_Deprecated; + } + if (d_3_3_Deprecated && !d_3_3_Deprecated->refs.deref()) { + QAbstractOpenGLFunctionsPrivate::removeFunctionsBackend(d_3_3_Deprecated->context, QOpenGLFunctions_3_3_DeprecatedBackend::versionStatus()); + delete d_3_3_Deprecated; + } + if (d_4_5_Deprecated && !d_4_5_Deprecated->refs.deref()) { + QAbstractOpenGLFunctionsPrivate::removeFunctionsBackend(d_4_5_Deprecated->context, QOpenGLFunctions_4_5_DeprecatedBackend::versionStatus()); + delete d_4_5_Deprecated; + } +} + +bool QOpenGLFunctions_4_5_Compatibility::initializeOpenGLFunctions() +{ + if ( isInitialized() ) + return true; + + QOpenGLContext* context = QOpenGLContext::currentContext(); + + // If owned by a context object make sure it is current. + // Also check that current context is capable of resolving all needed functions + if (((owningContext() && owningContext() == context) || !owningContext()) + && QOpenGLFunctions_4_5_Compatibility::isContextCompatible(context)) + { + // Associate with private implementation, creating if necessary + // Function pointers in the backends are resolved at creation time + QOpenGLVersionFunctionsBackend* d = 0; + d = QAbstractOpenGLFunctionsPrivate::functionsBackend(context, QOpenGLFunctions_1_0_CoreBackend::versionStatus()); + if (!d) { + d = new QOpenGLFunctions_1_0_CoreBackend(context); + QAbstractOpenGLFunctionsPrivate::insertFunctionsBackend(context, QOpenGLFunctions_1_0_CoreBackend::versionStatus(), d); + } + d_1_0_Core = static_cast<QOpenGLFunctions_1_0_CoreBackend*>(d); + d->refs.ref(); + + d = QAbstractOpenGLFunctionsPrivate::functionsBackend(context, QOpenGLFunctions_1_1_CoreBackend::versionStatus()); + if (!d) { + d = new QOpenGLFunctions_1_1_CoreBackend(context); + QAbstractOpenGLFunctionsPrivate::insertFunctionsBackend(context, QOpenGLFunctions_1_1_CoreBackend::versionStatus(), d); + } + d_1_1_Core = static_cast<QOpenGLFunctions_1_1_CoreBackend*>(d); + d->refs.ref(); + + d = QAbstractOpenGLFunctionsPrivate::functionsBackend(context, QOpenGLFunctions_1_2_CoreBackend::versionStatus()); + if (!d) { + d = new QOpenGLFunctions_1_2_CoreBackend(context); + QAbstractOpenGLFunctionsPrivate::insertFunctionsBackend(context, QOpenGLFunctions_1_2_CoreBackend::versionStatus(), d); + } + d_1_2_Core = static_cast<QOpenGLFunctions_1_2_CoreBackend*>(d); + d->refs.ref(); + + d = QAbstractOpenGLFunctionsPrivate::functionsBackend(context, QOpenGLFunctions_1_3_CoreBackend::versionStatus()); + if (!d) { + d = new QOpenGLFunctions_1_3_CoreBackend(context); + QAbstractOpenGLFunctionsPrivate::insertFunctionsBackend(context, QOpenGLFunctions_1_3_CoreBackend::versionStatus(), d); + } + d_1_3_Core = static_cast<QOpenGLFunctions_1_3_CoreBackend*>(d); + d->refs.ref(); + + d = QAbstractOpenGLFunctionsPrivate::functionsBackend(context, QOpenGLFunctions_1_4_CoreBackend::versionStatus()); + if (!d) { + d = new QOpenGLFunctions_1_4_CoreBackend(context); + QAbstractOpenGLFunctionsPrivate::insertFunctionsBackend(context, QOpenGLFunctions_1_4_CoreBackend::versionStatus(), d); + } + d_1_4_Core = static_cast<QOpenGLFunctions_1_4_CoreBackend*>(d); + d->refs.ref(); + + d = QAbstractOpenGLFunctionsPrivate::functionsBackend(context, QOpenGLFunctions_1_5_CoreBackend::versionStatus()); + if (!d) { + d = new QOpenGLFunctions_1_5_CoreBackend(context); + QAbstractOpenGLFunctionsPrivate::insertFunctionsBackend(context, QOpenGLFunctions_1_5_CoreBackend::versionStatus(), d); + } + d_1_5_Core = static_cast<QOpenGLFunctions_1_5_CoreBackend*>(d); + d->refs.ref(); + + d = QAbstractOpenGLFunctionsPrivate::functionsBackend(context, QOpenGLFunctions_2_0_CoreBackend::versionStatus()); + if (!d) { + d = new QOpenGLFunctions_2_0_CoreBackend(context); + QAbstractOpenGLFunctionsPrivate::insertFunctionsBackend(context, QOpenGLFunctions_2_0_CoreBackend::versionStatus(), d); + } + d_2_0_Core = static_cast<QOpenGLFunctions_2_0_CoreBackend*>(d); + d->refs.ref(); + + d = QAbstractOpenGLFunctionsPrivate::functionsBackend(context, QOpenGLFunctions_2_1_CoreBackend::versionStatus()); + if (!d) { + d = new QOpenGLFunctions_2_1_CoreBackend(context); + QAbstractOpenGLFunctionsPrivate::insertFunctionsBackend(context, QOpenGLFunctions_2_1_CoreBackend::versionStatus(), d); + } + d_2_1_Core = static_cast<QOpenGLFunctions_2_1_CoreBackend*>(d); + d->refs.ref(); + + d = QAbstractOpenGLFunctionsPrivate::functionsBackend(context, QOpenGLFunctions_3_0_CoreBackend::versionStatus()); + if (!d) { + d = new QOpenGLFunctions_3_0_CoreBackend(context); + QAbstractOpenGLFunctionsPrivate::insertFunctionsBackend(context, QOpenGLFunctions_3_0_CoreBackend::versionStatus(), d); + } + d_3_0_Core = static_cast<QOpenGLFunctions_3_0_CoreBackend*>(d); + d->refs.ref(); + + d = QAbstractOpenGLFunctionsPrivate::functionsBackend(context, QOpenGLFunctions_3_1_CoreBackend::versionStatus()); + if (!d) { + d = new QOpenGLFunctions_3_1_CoreBackend(context); + QAbstractOpenGLFunctionsPrivate::insertFunctionsBackend(context, QOpenGLFunctions_3_1_CoreBackend::versionStatus(), d); + } + d_3_1_Core = static_cast<QOpenGLFunctions_3_1_CoreBackend*>(d); + d->refs.ref(); + + d = QAbstractOpenGLFunctionsPrivate::functionsBackend(context, QOpenGLFunctions_3_2_CoreBackend::versionStatus()); + if (!d) { + d = new QOpenGLFunctions_3_2_CoreBackend(context); + QAbstractOpenGLFunctionsPrivate::insertFunctionsBackend(context, QOpenGLFunctions_3_2_CoreBackend::versionStatus(), d); + } + d_3_2_Core = static_cast<QOpenGLFunctions_3_2_CoreBackend*>(d); + d->refs.ref(); + + d = QAbstractOpenGLFunctionsPrivate::functionsBackend(context, QOpenGLFunctions_3_3_CoreBackend::versionStatus()); + if (!d) { + d = new QOpenGLFunctions_3_3_CoreBackend(context); + QAbstractOpenGLFunctionsPrivate::insertFunctionsBackend(context, QOpenGLFunctions_3_3_CoreBackend::versionStatus(), d); + } + d_3_3_Core = static_cast<QOpenGLFunctions_3_3_CoreBackend*>(d); + d->refs.ref(); + + d = QAbstractOpenGLFunctionsPrivate::functionsBackend(context, QOpenGLFunctions_4_0_CoreBackend::versionStatus()); + if (!d) { + d = new QOpenGLFunctions_4_0_CoreBackend(context); + QAbstractOpenGLFunctionsPrivate::insertFunctionsBackend(context, QOpenGLFunctions_4_0_CoreBackend::versionStatus(), d); + } + d_4_0_Core = static_cast<QOpenGLFunctions_4_0_CoreBackend*>(d); + d->refs.ref(); + + d = QAbstractOpenGLFunctionsPrivate::functionsBackend(context, QOpenGLFunctions_4_1_CoreBackend::versionStatus()); + if (!d) { + d = new QOpenGLFunctions_4_1_CoreBackend(context); + QAbstractOpenGLFunctionsPrivate::insertFunctionsBackend(context, QOpenGLFunctions_4_1_CoreBackend::versionStatus(), d); + } + d_4_1_Core = static_cast<QOpenGLFunctions_4_1_CoreBackend*>(d); + d->refs.ref(); + + d = QAbstractOpenGLFunctionsPrivate::functionsBackend(context, QOpenGLFunctions_4_2_CoreBackend::versionStatus()); + if (!d) { + d = new QOpenGLFunctions_4_2_CoreBackend(context); + QAbstractOpenGLFunctionsPrivate::insertFunctionsBackend(context, QOpenGLFunctions_4_2_CoreBackend::versionStatus(), d); + } + d_4_2_Core = static_cast<QOpenGLFunctions_4_2_CoreBackend*>(d); + d->refs.ref(); + + d = QAbstractOpenGLFunctionsPrivate::functionsBackend(context, QOpenGLFunctions_4_3_CoreBackend::versionStatus()); + if (!d) { + d = new QOpenGLFunctions_4_3_CoreBackend(context); + QAbstractOpenGLFunctionsPrivate::insertFunctionsBackend(context, QOpenGLFunctions_4_3_CoreBackend::versionStatus(), d); + } + d_4_3_Core = static_cast<QOpenGLFunctions_4_3_CoreBackend*>(d); + d->refs.ref(); + + d = QAbstractOpenGLFunctionsPrivate::functionsBackend(context, QOpenGLFunctions_4_4_CoreBackend::versionStatus()); + if (!d) { + d = new QOpenGLFunctions_4_4_CoreBackend(context); + QAbstractOpenGLFunctionsPrivate::insertFunctionsBackend(context, QOpenGLFunctions_4_4_CoreBackend::versionStatus(), d); + } + d_4_4_Core = static_cast<QOpenGLFunctions_4_4_CoreBackend*>(d); + d->refs.ref(); + + d = QAbstractOpenGLFunctionsPrivate::functionsBackend(context, QOpenGLFunctions_4_5_CoreBackend::versionStatus()); + if (!d) { + d = new QOpenGLFunctions_4_5_CoreBackend(context); + QAbstractOpenGLFunctionsPrivate::insertFunctionsBackend(context, QOpenGLFunctions_4_5_CoreBackend::versionStatus(), d); + } + d_4_5_Core = static_cast<QOpenGLFunctions_4_5_CoreBackend*>(d); + d->refs.ref(); + + d = QAbstractOpenGLFunctionsPrivate::functionsBackend(context, QOpenGLFunctions_1_0_DeprecatedBackend::versionStatus()); + if (!d) { + d = new QOpenGLFunctions_1_0_DeprecatedBackend(context); + QAbstractOpenGLFunctionsPrivate::insertFunctionsBackend(context, QOpenGLFunctions_1_0_DeprecatedBackend::versionStatus(), d); + } + d_1_0_Deprecated = static_cast<QOpenGLFunctions_1_0_DeprecatedBackend*>(d); + d->refs.ref(); + + d = QAbstractOpenGLFunctionsPrivate::functionsBackend(context, QOpenGLFunctions_1_1_DeprecatedBackend::versionStatus()); + if (!d) { + d = new QOpenGLFunctions_1_1_DeprecatedBackend(context); + QAbstractOpenGLFunctionsPrivate::insertFunctionsBackend(context, QOpenGLFunctions_1_1_DeprecatedBackend::versionStatus(), d); + } + d_1_1_Deprecated = static_cast<QOpenGLFunctions_1_1_DeprecatedBackend*>(d); + d->refs.ref(); + + d = QAbstractOpenGLFunctionsPrivate::functionsBackend(context, QOpenGLFunctions_1_2_DeprecatedBackend::versionStatus()); + if (!d) { + d = new QOpenGLFunctions_1_2_DeprecatedBackend(context); + QAbstractOpenGLFunctionsPrivate::insertFunctionsBackend(context, QOpenGLFunctions_1_2_DeprecatedBackend::versionStatus(), d); + } + d_1_2_Deprecated = static_cast<QOpenGLFunctions_1_2_DeprecatedBackend*>(d); + d->refs.ref(); + + d = QAbstractOpenGLFunctionsPrivate::functionsBackend(context, QOpenGLFunctions_1_3_DeprecatedBackend::versionStatus()); + if (!d) { + d = new QOpenGLFunctions_1_3_DeprecatedBackend(context); + QAbstractOpenGLFunctionsPrivate::insertFunctionsBackend(context, QOpenGLFunctions_1_3_DeprecatedBackend::versionStatus(), d); + } + d_1_3_Deprecated = static_cast<QOpenGLFunctions_1_3_DeprecatedBackend*>(d); + d->refs.ref(); + + d = QAbstractOpenGLFunctionsPrivate::functionsBackend(context, QOpenGLFunctions_1_4_DeprecatedBackend::versionStatus()); + if (!d) { + d = new QOpenGLFunctions_1_4_DeprecatedBackend(context); + QAbstractOpenGLFunctionsPrivate::insertFunctionsBackend(context, QOpenGLFunctions_1_4_DeprecatedBackend::versionStatus(), d); + } + d_1_4_Deprecated = static_cast<QOpenGLFunctions_1_4_DeprecatedBackend*>(d); + d->refs.ref(); + + d = QAbstractOpenGLFunctionsPrivate::functionsBackend(context, QOpenGLFunctions_3_3_DeprecatedBackend::versionStatus()); + if (!d) { + d = new QOpenGLFunctions_3_3_DeprecatedBackend(context); + QAbstractOpenGLFunctionsPrivate::insertFunctionsBackend(context, QOpenGLFunctions_3_3_DeprecatedBackend::versionStatus(), d); + } + d_3_3_Deprecated = static_cast<QOpenGLFunctions_3_3_DeprecatedBackend*>(d); + d->refs.ref(); + + d = QAbstractOpenGLFunctionsPrivate::functionsBackend(context, QOpenGLFunctions_4_5_DeprecatedBackend::versionStatus()); + if (!d) { + d = new QOpenGLFunctions_4_5_DeprecatedBackend(context); + QAbstractOpenGLFunctionsPrivate::insertFunctionsBackend(context, QOpenGLFunctions_4_5_DeprecatedBackend::versionStatus(), d); + } + d_4_5_Deprecated = static_cast<QOpenGLFunctions_4_5_DeprecatedBackend*>(d); + d->refs.ref(); + + QAbstractOpenGLFunctions::initializeOpenGLFunctions(); + } + return isInitialized(); +} + +bool QOpenGLFunctions_4_5_Compatibility::isContextCompatible(QOpenGLContext *context) +{ + Q_ASSERT(context); + QSurfaceFormat f = context->format(); + const QPair<int, int> v = qMakePair(f.majorVersion(), f.minorVersion()); + if (v < qMakePair(4, 5)) + return false; + + if (f.profile() == QSurfaceFormat::CoreProfile) + return false; + + return true; +} + +QOpenGLVersionProfile QOpenGLFunctions_4_5_Compatibility::versionProfile() +{ + QOpenGLVersionProfile v; + v.setVersion(4, 5); + v.setProfile(QSurfaceFormat::CompatibilityProfile); + return v; +} + +QT_END_NAMESPACE |