aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2021-03-11 15:31:17 +0100
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2021-03-12 06:16:50 +0000
commit9df5283e034d24e2339de04b3d61e6b03ff52aca (patch)
treef010ee81321c81d200f0dcebe8b4bf9299ed2718
parent5422f65496155fcc9056ed4dda2c8493716d5da8 (diff)
PySide6: Add QOpenGLVersionFunctionsFactory
Make it possible to obtain versioned OpenGL functions. Task-number: PYSIDE-1482 Fixes: PYSIDE-955 Change-Id: Ife315de0aa05ac83610e228389bcf55214e93e55 Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io> (cherry picked from commit 091f488479227c58fd3944d68c48fc7efe223f9e) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--sources/pyside6/PySide6/QtOpenGLFunctions/CMakeLists.txt3
-rw-r--r--sources/pyside6/PySide6/QtOpenGLFunctions/QtOpenGLFunctions_global.post.h.in1
-rw-r--r--sources/pyside6/PySide6/QtOpenGLFunctions/typesystem_openglfunctions.xml8
-rw-r--r--sources/pyside6/PySide6/glue/qtopenglfunctions.cpp98
4 files changed, 109 insertions, 1 deletions
diff --git a/sources/pyside6/PySide6/QtOpenGLFunctions/CMakeLists.txt b/sources/pyside6/PySide6/QtOpenGLFunctions/CMakeLists.txt
index 5ac197801..296c525cf 100644
--- a/sources/pyside6/PySide6/QtOpenGLFunctions/CMakeLists.txt
+++ b/sources/pyside6/PySide6/QtOpenGLFunctions/CMakeLists.txt
@@ -39,7 +39,8 @@ else()
${QtOpenGLFunctions_GEN_DIR}/qopenglfunctions_4_4_compatibility_wrapper.cpp
${QtOpenGLFunctions_GEN_DIR}/qopenglfunctions_4_4_core_wrapper.cpp
${QtOpenGLFunctions_GEN_DIR}/qopenglfunctions_4_5_compatibility_wrapper.cpp
- ${QtOpenGLFunctions_GEN_DIR}/qopenglfunctions_4_5_core_wrapper.cpp)
+ ${QtOpenGLFunctions_GEN_DIR}/qopenglfunctions_4_5_core_wrapper.cpp
+ ${QtOpenGLFunctions_GEN_DIR}/qopenglversionfunctionsfactory_wrapper.cpp)
message(STATUS "Qt${QT_MAJOR_VERSION}OpenGLFunctions: Adding Desktop OpenGL classes")
endif()
diff --git a/sources/pyside6/PySide6/QtOpenGLFunctions/QtOpenGLFunctions_global.post.h.in b/sources/pyside6/PySide6/QtOpenGLFunctions/QtOpenGLFunctions_global.post.h.in
index c25343e05..0f0744ba5 100644
--- a/sources/pyside6/PySide6/QtOpenGLFunctions/QtOpenGLFunctions_global.post.h.in
+++ b/sources/pyside6/PySide6/QtOpenGLFunctions/QtOpenGLFunctions_global.post.h.in
@@ -55,6 +55,7 @@
# include <QtOpenGL/qopenglfunctions_4_4_core.h>
# include <QtOpenGL/qopenglfunctions_4_5_compatibility.h>
# include <QtOpenGL/qopenglfunctions_4_5_core.h>
+# include <QtOpenGL/qopenglversionfunctionsfactory.h>
#endif
#if QT_CONFIG(opengles2)
# include <QtOpenGL/qopenglfunctions_es2.h>
diff --git a/sources/pyside6/PySide6/QtOpenGLFunctions/typesystem_openglfunctions.xml b/sources/pyside6/PySide6/QtOpenGLFunctions/typesystem_openglfunctions.xml
index 819adca6a..4f3c4487f 100644
--- a/sources/pyside6/PySide6/QtOpenGLFunctions/typesystem_openglfunctions.xml
+++ b/sources/pyside6/PySide6/QtOpenGLFunctions/typesystem_openglfunctions.xml
@@ -399,6 +399,14 @@
&openglfunctions_modifications1_0;
&openglfunctions_modifications1_1;
</object-type>
+
+ <object-type name="QOpenGLVersionFunctionsFactory">
+ <modify-function signature="get(const QOpenGLVersionProfile &amp;,QOpenGLContext *)">
+ <inject-code class="target" position="beginning" file="../glue/qtopenglfunctions.cpp"
+ snippet="qopenglversionfunctionsfactory-get"/>
+ </modify-function>
+ </object-type>
+
<suppress-warning text="^There's no user provided way.*QOpenGLFunctions_\d_\d.*::glIndex.*$"/>
</typesystem>
diff --git a/sources/pyside6/PySide6/glue/qtopenglfunctions.cpp b/sources/pyside6/PySide6/glue/qtopenglfunctions.cpp
new file mode 100644
index 000000000..ef64064b6
--- /dev/null
+++ b/sources/pyside6/PySide6/glue/qtopenglfunctions.cpp
@@ -0,0 +1,98 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt for Python.
+**
+** $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 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 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.
+**
+** 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$
+**
+****************************************************************************/
+
+/*********************************************************************
+ * INJECT CODE
+ ********************************************************************/
+
+// @snippet qopenglversionfunctionsfactory-get
+QAbstractOpenGLFunctions *af = %CPPSELF.%FUNCTION_NAME(%1, %2);
+if (auto *f = dynamic_cast<QOpenGLFunctions_4_5_Core *>(af)) {
+ %PYARG_0 = %CONVERTTOPYTHON[QOpenGLFunctions_4_5_Core *](f);
+} else if (auto *f = dynamic_cast<QOpenGLFunctions_4_5_Compatibility *>(af)) {
+ %PYARG_0 = %CONVERTTOPYTHON[QOpenGLFunctions_4_5_Compatibility *](f);
+} else if (auto *f = dynamic_cast<QOpenGLFunctions_4_4_Core *>(af)) {
+ %PYARG_0 = %CONVERTTOPYTHON[QOpenGLFunctions_4_4_Core *](f);
+} else if (auto *f = dynamic_cast<QOpenGLFunctions_4_4_Compatibility *>(af)) {
+ %PYARG_0 = %CONVERTTOPYTHON[QOpenGLFunctions_4_4_Compatibility *](f);
+} else if (auto *f = dynamic_cast<QOpenGLFunctions_4_3_Core *>(af)) {
+ %PYARG_0 = %CONVERTTOPYTHON[QOpenGLFunctions_4_3_Core *](f);
+} else if (auto *f = dynamic_cast<QOpenGLFunctions_4_2_Core *>(af)) {
+ %PYARG_0 = %CONVERTTOPYTHON[QOpenGLFunctions_4_2_Core *](f);
+} else if (auto *f = dynamic_cast<QOpenGLFunctions_4_1_Core *>(af)) {
+ %PYARG_0 = %CONVERTTOPYTHON[QOpenGLFunctions_4_1_Core *](f);
+} else if (auto *f = dynamic_cast<QOpenGLFunctions_4_0_Core *>(af)) {
+ %PYARG_0 = %CONVERTTOPYTHON[QOpenGLFunctions_4_0_Core *](f);
+} else if (auto *f = dynamic_cast<QOpenGLFunctions_4_0_Compatibility *>(af)) {
+ %PYARG_0 = %CONVERTTOPYTHON[QOpenGLFunctions_4_0_Compatibility *](f);
+} else if (auto *f = dynamic_cast<QOpenGLFunctions_3_3_Core *>(af)) {
+ %PYARG_0 = %CONVERTTOPYTHON[QOpenGLFunctions_3_3_Core *](f);
+} else if (auto *f = dynamic_cast<QOpenGLFunctions_3_3_Compatibility *>(af)) {
+ %PYARG_0 = %CONVERTTOPYTHON[QOpenGLFunctions_3_3_Compatibility *](f);
+} else if (auto *f = dynamic_cast<QOpenGLFunctions_3_2_Core *>(af)) {
+ %PYARG_0 = %CONVERTTOPYTHON[QOpenGLFunctions_3_2_Core *](f);
+} else if (auto *f = dynamic_cast<QOpenGLFunctions_3_2_Compatibility *>(af)) {
+ %PYARG_0 = %CONVERTTOPYTHON[QOpenGLFunctions_3_2_Compatibility *](f);
+} else if (auto *f = dynamic_cast<QOpenGLFunctions_3_1 *>(af)) {
+ %PYARG_0 = %CONVERTTOPYTHON[QOpenGLFunctions_3_1 *](f);
+} else if (auto *f = dynamic_cast<QOpenGLFunctions_3_0 *>(af)) {
+ %PYARG_0 = %CONVERTTOPYTHON[QOpenGLFunctions_3_0 *](f);
+} else if (auto *f = dynamic_cast<QOpenGLFunctions_2_1 *>(af)) {
+ %PYARG_0 = %CONVERTTOPYTHON[QOpenGLFunctions_2_1 *](f);
+} else if (auto *f = dynamic_cast<QOpenGLFunctions_2_0 *>(af)) {
+ %PYARG_0 = %CONVERTTOPYTHON[QOpenGLFunctions_2_0 *](f);
+} else if (auto *f = dynamic_cast<QOpenGLFunctions_1_5 *>(af)) {
+ %PYARG_0 = %CONVERTTOPYTHON[QOpenGLFunctions_1_5 *](f);
+} else if (auto *f = dynamic_cast<QOpenGLFunctions_1_4 *>(af)) {
+ %PYARG_0 = %CONVERTTOPYTHON[QOpenGLFunctions_1_4 *](f);
+} else if (auto *f = dynamic_cast<QOpenGLFunctions_1_3 *>(af)) {
+ %PYARG_0 = %CONVERTTOPYTHON[QOpenGLFunctions_1_3 *](f);
+} else if (auto *f = dynamic_cast<QOpenGLFunctions_1_2 *>(af)) {
+ %PYARG_0 = %CONVERTTOPYTHON[QOpenGLFunctions_1_2 *](f);
+} else if (auto *f = dynamic_cast<QOpenGLFunctions_1_1 *>(af)) {
+ %PYARG_0 = %CONVERTTOPYTHON[QOpenGLFunctions_1_1 *](f);
+} else if (auto *f = dynamic_cast<QOpenGLFunctions_1_0 *>(af)) {
+ %PYARG_0 = %CONVERTTOPYTHON[QOpenGLFunctions_1_0 *](f);
+} else {
+ QString message;
+ QDebug(&message) << "No OpenGL functions could be obtained for" << %1;
+ PyErr_SetString(PyExc_RuntimeError, message.toUtf8().constData());
+ %PYARG_0 = Py_None;
+}
+// @snippet qopenglversionfunctionsfactory-get