En esta página

QOpenGLVertexArrayObject Class

La clase QOpenGLVertexArrayObject envuelve un objeto OpenGL Vertex Array. Más...

Cabecera: #include <QOpenGLVertexArrayObject>
CMake: find_package(Qt6 REQUIRED COMPONENTS OpenGL)
target_link_libraries(mytarget PRIVATE Qt6::OpenGL)
qmake: QT += opengl
Hereda: QObject

Tipos Públicos

class Binder

Funciones Públicas

QOpenGLVertexArrayObject(QObject *parent = nullptr)
virtual ~QOpenGLVertexArrayObject()
void bind()
bool create()
void destroy()
bool isCreated() const
GLuint objectId() const
void release()

Descripción Detallada

Un Vertex Array Object (VAO) es un objeto contenedor OpenGL que encapsula el estado necesario para especificar datos de atributos por vértice al pipeline OpenGL. Dicho de otro modo, un VAO recuerda los estados de los objetos búfer (véase QOpenGLBuffer) y su estado asociado (por ejemplo, los divisores de atributos de vértices). Esto permite un método muy fácil y eficiente de cambiar entre estados de búfer OpenGL para renderizar diferentes "objetos" en una escena. La clase QOpenGLVertexArrayObject es una fina envoltura alrededor de un OpenGL VAO.

Para el escritorio, los VAOs son soportados como una característica central en OpenGL 3.0 o posterior y por el GL_ARB_vertex_array_object para versiones anteriores. En OpenGL ES 2, los VAO se proporcionan mediante la extensión opcional GL_OES_vertex_array_object. Puedes comprobar la versión de OpenGL con QOpenGLContext::surfaceFormat() y comprobar la presencia de extensiones con QOpenGLContext::hasExtension().

Como con las otras clases Qt OpenGL, QOpenGLVertexArrayObject tiene una función create() para crear el objeto OpenGL subyacente. Esto es para permitir al desarrollador asegurarse de que hay un contexto OpenGL actual válido en ese momento.

Una vez que se ha creado con éxito un VAO el patrón de uso típico es:

  • En la función de inicialización de la escena, para cada objeto visual:
    • Vincular el VAO
    • Establecer el estado de los datos de vértice para este objeto visual (vértices, normales, coordenadas de textura, etc.)
    • Desvincular (release()) el VAO
  • En la función de render, para cada objeto visual:
    • Unir el VAO (y el programa de sombreado si es necesario)
    • Llamar a una función glDraw*()
    • Desvincular (release()) el VAO

El hecho de enlazar el VAO en la función de renderizado tiene el efecto de restaurar todo el estado de los datos de vértices configurados en la fase de inicialización. De esta forma podemos establecer una gran cantidad de estados al configurar un VAO y cambiar eficientemente entre conjuntos de estados de objetos a renderizar. El uso de VAOs también permite al controlador OpenGL amortizar las comprobaciones de validación de los datos de vértices.

Nota: Los objetos de matriz de vértices, como todos los demás objetos contenedores de OpenGL, son específicos del contexto para el que se crearon y no pueden compartirse entre un grupo de contextos.

Véase también QOpenGLVertexArrayObject::Binder y QOpenGLBuffer.

Documentación de las funciones miembro

[explicit] QOpenGLVertexArrayObject::QOpenGLVertexArrayObject(QObject *parent = nullptr)

Crea un QOpenGLVertexArrayObject con la dirección parent. Debes llamar a create() con un contexto OpenGL válido antes de usarlo.

[virtual noexcept] QOpenGLVertexArrayObject::~QOpenGLVertexArrayObject()

Destruye la página QOpenGLVertexArrayObject y el recurso OpenGL subyacente.

void QOpenGLVertexArrayObject::bind()

Vincula este objeto matriz de vértices al punto de vinculación de OpenGL. A partir de este momento y hasta que se llame a release() o se vincule otro objeto de matriz de vértices, cualquier modificación realizada en el estado de los datos de vértices se almacenará dentro de este objeto de matriz de vértices.

Si se vincula otro objeto de matriz de vértices, puedes restaurar el estado asociado a este objeto llamando de nuevo a bind(). Esto permite cambios eficientes entre estados de datos de vértices en funciones de renderizado.

bool QOpenGLVertexArrayObject::create()

Crea el objeto matriz de vértices OpenGL subyacente. Debe haber un contexto OpenGL válido que soporte objetos de matriz de vértices para que esta función tenga éxito.

Devuelve true si el objeto matriz de vértices OpenGL se ha creado correctamente.

Si el valor devuelto es false, el soporte para objetos de matriz de vértices no está disponible. Esto no es un error: en sistemas con OpenGL 2.x u OpenGL ES 2.0 los objetos de matriz de vértices pueden no estar soportados. La aplicación es libre de continuar la ejecución en este caso, pero entonces tiene que estar preparada para operar también de una manera sin VAO. Esto significa que en lugar de simplemente llamar a bind(), el valor de isCreated() debe ser comprobado y las matrices de vértices tienen que ser inicializadas de la manera tradicional cuando no hay un objeto de matriz de vértices presente.

Véase también isCreated().

void QOpenGLVertexArrayObject::destroy()

Destruye el objeto matriz de vértices OpenGL subyacente. Debe haber un contexto OpenGL válido que admita objetos de matriz de vértices para que esta función tenga éxito.

bool QOpenGLVertexArrayObject::isCreated() const

Devuelve true si se ha creado el objeto matriz de vértices OpenGL subyacente. Si esto devuelve true y el contexto OpenGL asociado es actual, entonces usted es capaz de bind() este objeto.

GLuint QOpenGLVertexArrayObject::objectId() const

Devuelve el id del objeto matriz de vértices OpenGL subyacente.

void QOpenGLVertexArrayObject::release()

Desvincula este objeto matriz de vértices vinculando el objeto matriz de vértices por defecto (id = 0).

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