QAbstractOpenGLFunctions Class
La clase QAbstractOpenGLFunctions es la clase base de una familia de clases que exponen todas las funciones para cada versión y perfil de OpenGL. Más...
| Cabecera: | #include <QAbstractOpenGLFunctions> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS OpenGL)target_link_libraries(mytarget PRIVATE Qt6::OpenGL) |
| qmake: | QT += opengl |
| Heredado por: | 27 tiposQOpenGLFunctions_1_0 QOpenGLFunctions_1_1, , , , , , , , , , , , , , , , , , , , , , , , , y QOpenGLFunctions_1_2 QOpenGLFunctions_1_3 QOpenGLFunctions_1_4 QOpenGLFunctions_1_5 QOpenGLFunctions_2_0 QOpenGLFunctions_2_1 QOpenGLFunctions_3_0 QOpenGLFunctions_3_1 QOpenGLFunctions_3_2_Compatibility QOpenGLFunctions_3_2_Core QOpenGLFunctions_3_3_Compatibility QOpenGLFunctions_3_3_Core QOpenGLFunctions_4_0_Compatibility QOpenGLFunctions_4_0_Core QOpenGLFunctions_4_1_Compatibility QOpenGLFunctions_4_1_Core QOpenGLFunctions_4_2_Compatibility QOpenGLFunctions_4_2_Core QOpenGLFunctions_4_3_Compatibility QOpenGLFunctions_4_3_Core QOpenGLFunctions_4_4_Compatibility QOpenGLFunctions_4_4_Core QOpenGLFunctions_4_5_Compatibility QOpenGLFunctions_4_5_Core QOpenGLFunctions_ES2 |
Funciones públicas
| virtual | ~QAbstractOpenGLFunctions() |
Funciones protegidas
Descripción detallada
Las implementaciones de OpenGL en diferentes plataformas pueden enlazarse a un número variable de funciones OpenGL dependiendo de la ABI de OpenGL en esa plataforma. Por ejemplo, en Microsoft Windows sólo se pueden enlazar funciones hasta las de OpenGL 1.1 en tiempo de compilación. Todas las demás funciones deben resolverse en tiempo de ejecución. La solución tradicional ha sido utilizar QOpenGLContext::getProcAddress() o QOpenGLFunctions. La primera es tediosa y propensa a errores y significa tratar directamente con punteros de función. La segunda sólo expone las funciones comunes a OpenGL ES 2 y OpenGL de escritorio. Sin embargo, hay mucha funcionalidad OpenGL nueva que es útil cuando se escriben aplicaciones OpenGL en el mundo real.
Qt proporciona ahora una familia de clases que heredan de QAbstractOpenGLFunctions y que exponen cada función OpenGL por medio de su correspondiente función miembro. Hay una clase para cada combinación válida de versión y perfil OpenGL. Cada clase sigue la convención de nomenclatura:
QOpenGLFunctions_<MAJOR VERSION>_<MINOR VERSION>[_PROFILE]
Para las versiones OpenGL 1.0 a 3.0 no hay perfiles, lo que da lugar a las clases
- QOpenGLFunctions_1_0
- QOpenGLFunctions_1_1
- QOpenGLFunctions_1_2
- QOpenGLFunctions_1_3
- QOpenGLFunctions_1_4
- QOpenGLFunctions_1_5
- QOpenGLFunctions_2_0
- QOpenGLFunctions_2_1
- QOpenGLFunctions_3_0
donde cada clase hereda de QAbstractOpenGLFunctions.
La versión 3.1 de OpenGL eliminó muchas funciones obsoletas, dando lugar a una API mucho más simple y genérica.
Con OpenGL 3.2 se introdujo el concepto de perfiles. Actualmente hay dos perfiles definidos para OpenGL: Core y Compatibility.
El perfil Core no incluye ninguna de las funciones que se eliminaron en OpenGL 3.1. El perfil Compatibilidad contiene todas las funciones del perfil Core de la misma versión más todas las funciones que se eliminaron en OpenGL 3.1. De este modo, las clases del perfil Compatibilidad permiten utilizar las nuevas funciones de OpenGL, pero también permiten seguir utilizando el código OpenGL heredado. Para código OpenGL nuevo, es preferible el perfil Core.
Tenga en cuenta que algunos proveedores, especialmente Apple, no implementan el perfil de compatibilidad. Por lo tanto, si deseas utilizar las nuevas características de OpenGL en macOS, debes asegurarte de solicitar un contexto de perfil Core a través de QSurfaceFormat::setProfile().
Qt proporciona clases para todas las versiones y combinaciones de perfiles Core y Compatibility. Las clases para OpenGL versiones 3.1 a 4.3 son:
- QOpenGLFunctions_3_1
- QOpenGLFunctions_3_2_Core
- QOpenGLFunctions_3_2_Compatibility
- QOpenGLFunctions_3_3_Core
- QOpenGLFunctions_3_3_Compatibility
- QOpenGLFunctions_4_0_Core
- QOpenGLFunctions_4_0_Compatibility
- QOpenGLFunctions_4_1_Core
- QOpenGLFunctions_4_1_Compatibility
- QOpenGLFunctions_4_2_Core
- QOpenGLFunctions_4_2_Compatibility
- QOpenGLFunctions_4_3_Core
- QOpenGLFunctions_4_3_Compatibility
donde cada clase hereda de QAbstractOpenGLFunctions.
Un puntero a un objeto de la clase correspondiente a la versión y perfil de OpenGL en uso puede obtenerse de QOpenGLVersionFunctionsFactory::get(). Si se obtiene de esta forma, hay que tener en cuenta que QOpenGLContext conserva la propiedad del objeto. Esto es para que la instancia pueda ser almacenada en caché y compartida.
Antes de llamar a cualquiera de las funciones OpenGL expuestas, debes asegurarte de que el objeto ha resuelto los punteros a las funciones OpenGL. Esto sólo necesita hacerse una vez por instancia con initializeOpenGLFunctions(). Una vez inicializado, el objeto puede utilizarse para llamar a cualquier función OpenGL de la versión y perfil correspondientes. Tenga en cuenta que initializeOpenGLFunctions() puede fallar en algunas circunstancias, así que compruebe el valor de retorno. Las situaciones en las que la inicialización puede fallar son si tiene un objeto de funciones para una versión o perfil que contiene funciones que no son parte del contexto que se está utilizando para resolver los punteros de función.
Si utiliza exclusivamente objetos de función, obtendrá errores en tiempo de compilación si intenta utilizar una función no incluida en esa versión y perfil. Obviamente, esto es mucho más fácil de depurar que un comportamiento indefinido en tiempo de ejecución.
Véase también QOpenGLVersionFunctionsFactory::get().
Documentación de funciones miembro
[protected] QAbstractOpenGLFunctions::QAbstractOpenGLFunctions()
Construye un objeto QAbstractOpenGLFunctions.
[virtual noexcept] QAbstractOpenGLFunctions::~QAbstractOpenGLFunctions()
Destruye un objeto QAbstractOpenGLFunctions.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.