QOpenGLBuffer Class
La clase QOpenGLBuffer proporciona funciones para crear y gestionar objetos buffer OpenGL. Más...
| Cabecera: | #include <QOpenGLBuffer> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS OpenGL)target_link_libraries(mytarget PRIVATE Qt6::OpenGL) |
| qmake: | QT += opengl |
- Lista de todos los miembros, incluyendo los heredados
- QOpenGLBuffer es parte de Renderizado en 3D.
Tipos Públicos
| enum | Access { ReadOnly, WriteOnly, ReadWrite } |
| enum | RangeAccessFlag { RangeRead, RangeWrite, RangeInvalidate, RangeInvalidateBuffer, RangeFlushExplicit, RangeUnsynchronized } |
| flags | RangeAccessFlags |
| enum | Type { VertexBuffer, IndexBuffer, PixelPackBuffer, PixelUnpackBuffer } |
| enum | UsagePattern { StreamDraw, StreamRead, StreamCopy, StaticDraw, StaticRead, …, DynamicCopy } |
Funciones Públicas
| QOpenGLBuffer() | |
| QOpenGLBuffer(QOpenGLBuffer::Type type) | |
| QOpenGLBuffer(const QOpenGLBuffer &other) | |
(since 6.5) | QOpenGLBuffer(QOpenGLBuffer &&other) |
| ~QOpenGLBuffer() | |
| void | allocate(const void *data, int count) |
| void | allocate(int count) |
| bool | bind() |
| GLuint | bufferId() const |
| bool | create() |
| void | destroy() |
| bool | isCreated() const |
| void * | map(QOpenGLBuffer::Access access) |
| void * | mapRange(int offset, int count, QOpenGLBuffer::RangeAccessFlags access) |
| bool | read(int offset, void *data, int count) |
| void | release() |
| void | setUsagePattern(QOpenGLBuffer::UsagePattern value) |
| int | size() const |
(since 6.5) void | swap(QOpenGLBuffer &other) |
| QOpenGLBuffer::Type | type() const |
| bool | unmap() |
| QOpenGLBuffer::UsagePattern | usagePattern() const |
| void | write(int offset, const void *data, int count) |
(since 6.5) QOpenGLBuffer & | operator=(QOpenGLBuffer &&other) |
| QOpenGLBuffer & | operator=(const QOpenGLBuffer &other) |
Miembros Públicos Estáticos
| void | release(QOpenGLBuffer::Type type) |
Descripción Detallada
Los objetos buffer son creados en el servidor OpenGL para que la aplicación cliente pueda evitar cargar vértices, índices, datos de imágenes de texturas, etc cada vez que los necesite.
Los objetos QOpenGLBuffer pueden ser copiados como una referencia al objeto buffer OpenGL subyacente:
QOpenGLBuffer buffer1(QOpenGLBuffer::IndexBuffer); buffer1.create(); QOpenGLBuffer buffer2 = buffer1;
QOpenGLBuffer realiza una copia superficial cuando los objetos se copian de esta manera, pero no implementa la semántica copy-on-write. El objeto original se verá afectado cada vez que se modifique la copia.
Documentación de tipos de miembros
enum QOpenGLBuffer::Access
Este enum define el modo de acceso para QOpenGLBuffer::map().
| Constante | Valor | Descripción |
|---|---|---|
QOpenGLBuffer::ReadOnly | 0x88B8 | El búfer se asignará sólo para lectura. |
QOpenGLBuffer::WriteOnly | 0x88B9 | El búfer se asignará sólo para escritura. |
QOpenGLBuffer::ReadWrite | 0x88BA | El buffer sera mapeado para lectura y escritura. |
enum QOpenGLBuffer::RangeAccessFlag
flags QOpenGLBuffer::RangeAccessFlags
Este enum define los bits de modo de acceso para QOpenGLBuffer::mapRange().
| Constante | Valor | Descripción |
|---|---|---|
QOpenGLBuffer::RangeRead | 0x0001 | El buffer será mapeado para lectura. |
QOpenGLBuffer::RangeWrite | 0x0002 | El buffer será mapeado para escritura. |
QOpenGLBuffer::RangeInvalidate | 0x0004 | Descarta el contenido previo del rango especificado. |
QOpenGLBuffer::RangeInvalidateBuffer | 0x0008 | Descarta el contenido anterior de todo el búfer. |
QOpenGLBuffer::RangeFlushExplicit | 0x0010 | Indica que las modificaciones se deben vaciar explícitamente a través de glFlushMappedBufferRange. |
QOpenGLBuffer::RangeUnsynchronized | 0x0020 | Indica que las operaciones pendientes no deben sincronizarse antes de volver de mapRange(). |
El tipo RangeAccessFlags es un typedef para QFlags<RangeAccessFlag>. Almacena una combinación OR de valores RangeAccessFlag.
enum QOpenGLBuffer::Type
Este enum define el tipo de objeto buffer OpenGL a crear con QOpenGLBuffer.
| Constante | Valor | Descripción |
|---|---|---|
QOpenGLBuffer::VertexBuffer | 0x8892 | Búfer de vértices para especificar matrices de vértices. |
QOpenGLBuffer::IndexBuffer | 0x8893 | Objeto buffer de índice para usar con glDrawElements(). |
QOpenGLBuffer::PixelPackBuffer | 0x88EB | Objeto búfer de paquete de píxeles para leer datos de píxeles del servidor OpenGL (por ejemplo, con glReadPixels()). No compatible con OpenGL/ES. |
QOpenGLBuffer::PixelUnpackBuffer | 0x88EC | Objeto búfer de desempaquetado de píxeles para escribir datos de píxeles en el servidor OpenGL (por ejemplo, con glTexImage2D()). No compatible con OpenGL/ES. |
enum QOpenGLBuffer::UsagePattern
Este enum define el patrón de uso de un objeto QOpenGLBuffer.
| Constante | Valor | Descripción |
|---|---|---|
QOpenGLBuffer::StreamDraw | 0x88E0 | Los datos se establecerán una vez y se utilizarán varias veces para operaciones de dibujo. Bajo OpenGL/ES 1.1 esto es idéntico a StaticDraw. |
QOpenGLBuffer::StreamRead | 0x88E1 | Los datos se establecerán una vez y se utilizarán varias veces para leer datos del servidor OpenGL. No es compatible con OpenGL/ES. |
QOpenGLBuffer::StreamCopy | 0x88E2 | Los datos se establecerán una vez y se utilizarán varias veces para leer datos del servidor OpenGL y utilizarlos en otras operaciones de dibujo. No compatible con OpenGL/ES. |
QOpenGLBuffer::StaticDraw | 0x88E4 | Los datos se establecerán una vez y se utilizarán varias veces para operaciones de dibujo. |
QOpenGLBuffer::StaticRead | 0x88E5 | Los datos se establecerán una vez y se utilizarán varias veces para leer datos del servidor OpenGL. No compatible con OpenGL/ES. |
QOpenGLBuffer::StaticCopy | 0x88E6 | Los datos se establecerán una vez y se utilizarán varias veces para leer datos del servidor OpenGL y utilizarlos en otras operaciones de dibujo. No compatible con OpenGL/ES. |
QOpenGLBuffer::DynamicDraw | 0x88E8 | Los datos se modificarán repetidamente y se utilizarán muchas veces para operaciones de dibujo. |
QOpenGLBuffer::DynamicRead | 0x88E9 | Los datos se modificarán repetidamente y se utilizarán muchas veces para volver a leer datos del servidor OpenGL. No compatible con OpenGL/ES. |
QOpenGLBuffer::DynamicCopy | 0x88EA | Los datos se modificarán repetidamente y se utilizarán muchas veces para volver a leer datos del servidor OpenGL y utilizarlos en otras operaciones de dibujo. No compatible con OpenGL/ES. |
Documentación de las funciones miembro
QOpenGLBuffer::QOpenGLBuffer()
Construye un nuevo objeto buffer de tipo QOpenGLBuffer::VertexBuffer.
Nota: este constructor solo crea la instancia QOpenGLBuffer. El objeto buffer real en el servidor OpenGL no es creado hasta que create() es llamado.
Ver también create().
[explicit] QOpenGLBuffer::QOpenGLBuffer(QOpenGLBuffer::Type type)
Construye un nuevo objeto buffer de type.
Nota: este constructor solo crea la instancia QOpenGLBuffer. El objeto buffer real en el servidor OpenGL no es creado hasta que create() es llamado.
Ver también create().
QOpenGLBuffer::QOpenGLBuffer(const QOpenGLBuffer &other)
Construye una copia superficial de other.
Nota: QOpenGLBuffer no implementa la semántica copy-on-write, por lo que other se verá afectado siempre que se modifique la copia.
[noexcept, since 6.5] QOpenGLBuffer::QOpenGLBuffer(QOpenGLBuffer &&other)
Move-construye un nuevo QOpenGLBuffer desde other.
Nota: El objeto movido-desde other se coloca en un estado parcialmente formado, en el que las únicas operaciones válidas son la destrucción y la asignación de un nuevo valor.
Esta función se introdujo en Qt 6.5.
[noexcept] QOpenGLBuffer::~QOpenGLBuffer()
Destruye este objeto buffer, incluyendo el almacenamiento que se está utilizando en el servidor OpenGL.
void QOpenGLBuffer::allocate(const void *data, int count)
Asigna count bytes de espacio al búfer, inicializado con el contenido de data. Cualquier contenido anterior será eliminado.
Se asume que create() ha sido llamado en este buffer y que ha sido ligado al contexto actual.
Véase también create(), read() y write().
void QOpenGLBuffer::allocate(int count)
Asigna count bytes de espacio al búfer. Se eliminará cualquier contenido anterior.
Se asume que create() ha sido llamado en este buffer y que ha sido ligado al contexto actual.
Se trata de una función sobrecargada.
Véase también create() y write().
bool QOpenGLBuffer::bind()
Vincula el búfer asociado con este objeto al contexto OpenGL actual. Devuelve false si la vinculación no fue posible, normalmente porque type() no está soportado en esta implementación de OpenGL.
El buffer debe estar ligado al mismo QOpenGLContext actual cuando se llamó a create(), o a otro QOpenGLContext que esté compartiendo con él. De lo contrario, esta función devolverá false.
Véase también release() y create().
GLuint QOpenGLBuffer::bufferId() const
Devuelve el identificador OpenGL asociado a este buffer; cero si el buffer no ha sido creado.
Véase también isCreated().
bool QOpenGLBuffer::create()
Crea el objeto buffer en el servidor OpenGL. Devuelve true si el objeto ha sido creado; false en caso contrario.
Esta función debe ser llamada con un contexto actual QOpenGLContext. El búfer se vinculará a ese contexto (o a cualquier otro contexto que se comparta con él) y sólo podrá utilizarse en él.
Esta función devolverá false si la implementación de OpenGL no soporta buffers, o si no hay un QOpenGLContext actual.
Véase también isCreated(), allocate(), write(), y destroy().
void QOpenGLBuffer::destroy()
Destruye este objeto buffer, incluyendo el almacenamiento que se está utilizando en el servidor OpenGL. Todas las referencias al búfer dejarán de ser válidas.
bool QOpenGLBuffer::isCreated() const
Devuelve true si este búfer ha sido creado; false en caso contrario.
Véase también create() y destroy().
void *QOpenGLBuffer::map(QOpenGLBuffer::Access access)
Asigna el contenido de este búfer al espacio de memoria de la aplicación y devuelve un puntero al mismo. Devuelve null si la asignación de memoria no es posible. El parámetro access indica el tipo de acceso a realizar.
Se asume que create() ha sido llamado en este buffer y que ha sido ligado al contexto actual.
Nota: Esta función sólo es compatible con OpenGL ES 2.0 o anterior si la extensión GL_OES_mapbuffer está presente.
Nota: En OpenGL ES 3.0 y posteriores, o, en caso de OpenGL de escritorio, si se admite GL_ARB_map_buffer_range, esta función utiliza glMapBufferRange en lugar de glMapBuffer.
Véase también unmap(), create(), bind(), y mapRange().
void *QOpenGLBuffer::mapRange(int offset, int count, QOpenGLBuffer::RangeAccessFlags access)
Asigna el rango especificado por offset y count del contenido de este búfer al espacio de memoria de la aplicación y devuelve un puntero al mismo. Devuelve null si la asignación de memoria no es posible. El parámetro access especifica una combinación de banderas de acceso.
Se asume que create() ha sido llamado en este buffer y que ha sido ligado al contexto actual.
Nota: Esta función no está disponible en OpenGL ES 2.0 y versiones anteriores.
Véase también unmap(), create(), y bind().
bool QOpenGLBuffer::read(int offset, void *data, int count)
Lee los count bytes de este búfer comenzando en offset en data. Devuelve true en caso de éxito; false si la lectura del buffer no es soportada. La lectura del buffer no está soportada bajo OpenGL/ES.
Se asume que este buffer ha sido vinculado al contexto actual.
Véase también write() y bind().
void QOpenGLBuffer::release()
Libera el buffer asociado a este objeto del contexto OpenGL actual.
Esta función debe ser llamada con la misma corriente QOpenGLContext que cuando se llamó a bind() en el buffer.
Véase también bind().
[static] void QOpenGLBuffer::release(QOpenGLBuffer::Type type)
Libera el búfer asociado a type en el actual QOpenGLContext.
Esta función es una llamada directa a glBindBuffer(type, 0) para su uso cuando la persona que llama no sabe qué QOpenGLBuffer ha sido vinculado al contexto, pero quiere asegurarse de que se libera.
QOpenGLBuffer::release(QOpenGLBuffer::VertexBuffer);
void QOpenGLBuffer::setUsagePattern(QOpenGLBuffer::UsagePattern value)
Establece el patrón de uso de este objeto buffer en value. Esta función debe llamarse antes de allocate() o write().
Véase también usagePattern(), allocate(), y write().
int QOpenGLBuffer::size() const
Devuelve el tamaño de los datos en este búfer, para operaciones de lectura. Devuelve -1 si no se puede obtener el tamaño del búfer, o si el búfer no ha sido creado.
Se asume que este búfer ha sido vinculado al contexto actual.
Véase también isCreated() y bind().
[noexcept, since 6.5] void QOpenGLBuffer::swap(QOpenGLBuffer &other)
Intercambia este búfer con other. Esta operación es muy rápida y nunca falla.
Esta función se introdujo en Qt 6.5.
QOpenGLBuffer::Type QOpenGLBuffer::type() const
Devuelve el tipo de buffer representado por este objeto.
bool QOpenGLBuffer::unmap()
Desmapeña el búfer después de haberlo mapeado en el espacio de memoria de la aplicación con una llamada previa a map(). Devuelve true si la operación se ha realizado correctamente; false en caso contrario.
Se asume que este buffer ha sido vinculado al contexto actual, y que fue mapeado previamente con map().
Nota: Esta función sólo es compatible con OpenGL ES 2.0 y versiones anteriores si la extensión GL_OES_mapbuffer está presente.
Véase también map().
QOpenGLBuffer::UsagePattern QOpenGLBuffer::usagePattern() const
Devuelve el patrón de uso de este objeto buffer. El valor por defecto es StaticDraw.
Véase también setUsagePattern().
void QOpenGLBuffer::write(int offset, const void *data, int count)
Reemplaza los count bytes de este buffer comenzando en offset con el contenido de data. Cualquier otro byte en el buffer se dejará sin modificar.
Se asume que create() ha sido invocado en este buffer y que ha sido vinculado al contexto actual.
Véase también create(), read() y allocate().
[noexcept, since 6.5] QOpenGLBuffer &QOpenGLBuffer::operator=(QOpenGLBuffer &&other)
Mover-asigna other a esta instancia QOpenGLBuffer.
Nota: El objeto movido-desde other se coloca en un estado parcialmente formado, en el que las únicas operaciones válidas son la destrucción y la asignación de un nuevo valor.
Esta función se introdujo en Qt 6.5.
QOpenGLBuffer &QOpenGLBuffer::operator=(const QOpenGLBuffer &other)
Asigna una copia superficial de other a este objeto.
Nota: QOpenGLBuffer no implementa la semántica de copia en escritura, por lo que other se verá afectado siempre que se modifique la copia.
© 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.