From 9df5283e034d24e2339de04b3d61e6b03ff52aca Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Thu, 11 Mar 2021 15:31:17 +0100 Subject: 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 (cherry picked from commit 091f488479227c58fd3944d68c48fc7efe223f9e) Reviewed-by: Qt Cherry-pick Bot --- .../PySide6/QtOpenGLFunctions/CMakeLists.txt | 3 +- .../QtOpenGLFunctions_global.post.h.in | 1 + .../typesystem_openglfunctions.xml | 8 ++ sources/pyside6/PySide6/glue/qtopenglfunctions.cpp | 98 ++++++++++++++++++++++ 4 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 sources/pyside6/PySide6/glue/qtopenglfunctions.cpp 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 # include # include +# include #endif #if QT_CONFIG(opengles2) # include 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; + + + + + + + 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(af)) { + %PYARG_0 = %CONVERTTOPYTHON[QOpenGLFunctions_4_5_Core *](f); +} else if (auto *f = dynamic_cast(af)) { + %PYARG_0 = %CONVERTTOPYTHON[QOpenGLFunctions_4_5_Compatibility *](f); +} else if (auto *f = dynamic_cast(af)) { + %PYARG_0 = %CONVERTTOPYTHON[QOpenGLFunctions_4_4_Core *](f); +} else if (auto *f = dynamic_cast(af)) { + %PYARG_0 = %CONVERTTOPYTHON[QOpenGLFunctions_4_4_Compatibility *](f); +} else if (auto *f = dynamic_cast(af)) { + %PYARG_0 = %CONVERTTOPYTHON[QOpenGLFunctions_4_3_Core *](f); +} else if (auto *f = dynamic_cast(af)) { + %PYARG_0 = %CONVERTTOPYTHON[QOpenGLFunctions_4_2_Core *](f); +} else if (auto *f = dynamic_cast(af)) { + %PYARG_0 = %CONVERTTOPYTHON[QOpenGLFunctions_4_1_Core *](f); +} else if (auto *f = dynamic_cast(af)) { + %PYARG_0 = %CONVERTTOPYTHON[QOpenGLFunctions_4_0_Core *](f); +} else if (auto *f = dynamic_cast(af)) { + %PYARG_0 = %CONVERTTOPYTHON[QOpenGLFunctions_4_0_Compatibility *](f); +} else if (auto *f = dynamic_cast(af)) { + %PYARG_0 = %CONVERTTOPYTHON[QOpenGLFunctions_3_3_Core *](f); +} else if (auto *f = dynamic_cast(af)) { + %PYARG_0 = %CONVERTTOPYTHON[QOpenGLFunctions_3_3_Compatibility *](f); +} else if (auto *f = dynamic_cast(af)) { + %PYARG_0 = %CONVERTTOPYTHON[QOpenGLFunctions_3_2_Core *](f); +} else if (auto *f = dynamic_cast(af)) { + %PYARG_0 = %CONVERTTOPYTHON[QOpenGLFunctions_3_2_Compatibility *](f); +} else if (auto *f = dynamic_cast(af)) { + %PYARG_0 = %CONVERTTOPYTHON[QOpenGLFunctions_3_1 *](f); +} else if (auto *f = dynamic_cast(af)) { + %PYARG_0 = %CONVERTTOPYTHON[QOpenGLFunctions_3_0 *](f); +} else if (auto *f = dynamic_cast(af)) { + %PYARG_0 = %CONVERTTOPYTHON[QOpenGLFunctions_2_1 *](f); +} else if (auto *f = dynamic_cast(af)) { + %PYARG_0 = %CONVERTTOPYTHON[QOpenGLFunctions_2_0 *](f); +} else if (auto *f = dynamic_cast(af)) { + %PYARG_0 = %CONVERTTOPYTHON[QOpenGLFunctions_1_5 *](f); +} else if (auto *f = dynamic_cast(af)) { + %PYARG_0 = %CONVERTTOPYTHON[QOpenGLFunctions_1_4 *](f); +} else if (auto *f = dynamic_cast(af)) { + %PYARG_0 = %CONVERTTOPYTHON[QOpenGLFunctions_1_3 *](f); +} else if (auto *f = dynamic_cast(af)) { + %PYARG_0 = %CONVERTTOPYTHON[QOpenGLFunctions_1_2 *](f); +} else if (auto *f = dynamic_cast(af)) { + %PYARG_0 = %CONVERTTOPYTHON[QOpenGLFunctions_1_1 *](f); +} else if (auto *f = dynamic_cast(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 -- cgit v1.2.3