En esta página

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

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

ConstanteValorDescripción
QOpenGLBuffer::ReadOnly0x88B8El búfer se asignará sólo para lectura.
QOpenGLBuffer::WriteOnly0x88B9El búfer se asignará sólo para escritura.
QOpenGLBuffer::ReadWrite0x88BAEl 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().

ConstanteValorDescripción
QOpenGLBuffer::RangeRead0x0001El buffer será mapeado para lectura.
QOpenGLBuffer::RangeWrite0x0002El buffer será mapeado para escritura.
QOpenGLBuffer::RangeInvalidate0x0004Descarta el contenido previo del rango especificado.
QOpenGLBuffer::RangeInvalidateBuffer0x0008Descarta el contenido anterior de todo el búfer.
QOpenGLBuffer::RangeFlushExplicit0x0010Indica que las modificaciones se deben vaciar explícitamente a través de glFlushMappedBufferRange.
QOpenGLBuffer::RangeUnsynchronized0x0020Indica 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.

ConstanteValorDescripción
QOpenGLBuffer::VertexBuffer0x8892Búfer de vértices para especificar matrices de vértices.
QOpenGLBuffer::IndexBuffer0x8893Objeto buffer de índice para usar con glDrawElements().
QOpenGLBuffer::PixelPackBuffer0x88EBObjeto 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::PixelUnpackBuffer0x88ECObjeto 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.

ConstanteValorDescripción
QOpenGLBuffer::StreamDraw0x88E0Los 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::StreamRead0x88E1Los 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::StreamCopy0x88E2Los 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::StaticDraw0x88E4Los datos se establecerán una vez y se utilizarán varias veces para operaciones de dibujo.
QOpenGLBuffer::StaticRead0x88E5Los datos se establecerán una vez y se utilizarán varias veces para leer datos del servidor OpenGL. No compatible con OpenGL/ES.
QOpenGLBuffer::StaticCopy0x88E6Los 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::DynamicDraw0x88E8Los datos se modificarán repetidamente y se utilizarán muchas veces para operaciones de dibujo.
QOpenGLBuffer::DynamicRead0x88E9Los 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::DynamicCopy0x88EALos 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.