En esta página

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...

Funciones públicas

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

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:

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.