Класс QOpenGLBuffer
Класс QOpenGLBuffer предоставляет функции для создания и управления объектами буферов OpenGL. Подробнее...
| Заголовок: | #include <QOpenGLBuffer> |
| CMake: | find_package(Qt6 COMPONENTS OpenGL REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::OpenGL) |
| qmake: | QT += opengl |
| С момента: | Qt 5.0 |
Типы публичного доступа
| перечисление | Access { ТолькоЧтение, ТолькоЗапись, ЧтениеЗапись } |
| перечисление | RangeAccessFlag { ДиапазонЧтение, ДиапазонЗапись, ДиапазонОчистка, ДиапазонОчисткаБуфера, ДиапазонЯвноеВыполнение, ДиапазонБезСинхронизации } |
| флаги | RangeAccessFlags |
| перечисление | Type { БуферВершин, БуферИндексов, БуферПакетныхПикселей, БуферРаспаковкиПикселей } |
| перечисление | UsagePattern { ПотоковыйВывод, ПотоковоеЧтение, ПотоковаяКопия, СтатическийВывод, СтатическоеЧтение, …, ДинамическаяКопия } |
Функции публичного доступа
| QOpenGLBuffer(const QOpenGLBuffer &other) | |
| QOpenGLBuffer(QOpenGLBuffer::Type type) | |
| QOpenGLBuffer() | |
| QOpenGLBuffer & | operator=(const 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 |
| QOpenGLBuffer::Type | type() const |
| bool | unmap() |
| QOpenGLBuffer::UsagePattern | usagePattern() const |
| void | write(int offset, const void *data, int count) |
Статические члены публичного доступа
| void | release(QOpenGLBuffer::Type type) |
Подробное описание
Объекты буферов создаются на сервере OpenGL, чтобы приложение-клиент могло избежать загрузки вершин, индексов, данных изображения текстуры и т. д. каждый раз, когда они нужны.
Объекты QOpenGLBuffer могут копироваться как ссылка на базовый объект буфера OpenGL:
QOpenGLBuffer buffer1(QOpenGLBuffer::IndexBuffer); buffer1.create(); QOpenGLBuffer buffer2 = buffer1;
Класс QOpenGLBuffer выполняет поверхностную копию при копировании объектов таким образом, но не реализует семантику копирования при изменении. Исходный объект будет затронут всякий раз, когда копия изменяется.
Документация по типам членов
перечисление QOpenGLBuffer::Access
Это перечисление определяет режим доступа для QOpenGLBuffer::map().
| Константа | Значение | Описание |
|---|---|---|
QOpenGLBuffer::ReadOnly |
0x88B8 |
Буфер будет отображаться только для чтения. |
QOpenGLBuffer::WriteOnly |
0x88B9 |
Буфер будет отображаться только для записи. |
QOpenGLBuffer::ReadWrite |
0x88BA |
Буфер будет отображаться для чтения и записи. |
перечисление QOpenGLBuffer::RangeAccessFlagфлаги QOpenGLBuffer::RangeAccessFlags
Это перечисление определяет биты режима доступа для QOpenGLBuffer::mapRange().
| Константа | Значение | Описание |
|---|---|---|
QOpenGLBuffer::RangeRead |
0x0001 |
Буфер будет отображаться для чтения. |
QOpenGLBuffer::RangeWrite |
0x0002 |
Буфер будет отображаться для записи. |
QOpenGLBuffer::RangeInvalidate |
0x0004 |
Отбросить предыдущее содержимое указанного диапазона. |
QOpenGLBuffer::RangeInvalidateBuffer |
0x0008 |
Отбросить предыдущее содержимое всего буфера. |
QOpenGLBuffer::RangeFlushExplicit |
0x0010 |
Указывает, что изменения должны быть явно выполнены с помощью glFlushMappedBufferRange. |
QOpenGLBuffer::RangeUnsynchronized |
0x0020 |
Указывает, что ожидаемые операции не должны быть синхронизированы перед возвратом из mapRange(). |
Тип RangeAccessFlags является типом-синонимом для QFlags<RangeAccessFlag>. Он хранит логическое ИЛИ комбинацию значений RangeAccessFlag.
перечисление QOpenGLBuffer::Type
Это перечисление определяет тип объекта буфера OpenGL для создания с помощью QOpenGLBuffer.
| Константа | Значение | Описание |
|---|---|---|
QOpenGLBuffer::VertexBuffer |
0x8892 |
Объект буфера вершин для использования при указании массивов вершин. |
QOpenGLBuffer::IndexBuffer |
0x8893 |
Объект буфера индексов для использования с glDrawElements(). |
QOpenGLBuffer::PixelPackBuffer |
0x88EB |
Объект буфера пакетных пикселей для чтения данных пикселей с сервера OpenGL (например, с glReadPixels()). Не поддерживается в OpenGL/ES. |
QOpenGLBuffer::PixelUnpackBuffer |
0x88EC |
Объект буфера распаковки пикселей для записи данных пикселей на сервер OpenGL (например, с glTexImage2D()). Не поддерживается в OpenGL/ES. |
перечисление QOpenGLBuffer::UsagePattern
Это перечисление определяет режим использования объекта QOpenGLBuffer.
| Константа | Значение | Описание |
|---|---|---|
QOpenGLBuffer::StreamDraw |
0x88E0 |
Данные будут установлены один раз и использованы несколько раз для операций отрисовки. В OpenGL/ES 1.1 это идентично StaticDraw. |
QOpenGLBuffer::StreamRead |
0x88E1 |
Данные будут установлены один раз и использованы несколько раз для чтения данных обратно с сервера OpenGL. Не поддерживается в OpenGL/ES. |
QOpenGLBuffer::StreamCopy |
0x88E2 |
Данные будут установлены один раз и использованы несколько раз для чтения данных обратно с сервера OpenGL для дальнейших операций отрисовки. Не поддерживается в OpenGL/ES. |
QOpenGLBuffer::StaticDraw |
0x88E4 |
Данные будут установлены один раз и использованы многократно для операций отрисовки. |
QOpenGLBuffer::StaticRead |
0x88E5 |
Данные будут установлены один раз и использованы многократно для чтения данных обратно с сервера OpenGL. Не поддерживается в OpenGL/ES. |
QOpenGLBuffer::StaticCopy |
0x88E6 |
Данные будут установлены один раз и использованы многократно для чтения данных обратно с сервера OpenGL для дальнейших операций отрисовки. Не поддерживается в OpenGL/ES. |
QOpenGLBuffer::DynamicDraw |
0x88E8 |
Данные будут многократно изменяться и использоваться многократно для операций отрисовки. |
QOpenGLBuffer::DynamicRead |
0x88E9 |
Данные будут многократно изменяться и использоваться многократно для чтения данных обратно с сервера OpenGL. Не поддерживается в OpenGL/ES. |
QOpenGLBuffer::DynamicCopy |
0x88EA |
Данные будут многократно изменяться и использоваться многократно для чтения данных обратно с сервера OpenGL для дальнейших операций отрисовки. Не поддерживается в OpenGL/ES. |
Документация по членам функций
QOpenGLBuffer::QOpenGLBuffer(const QOpenGLBuffer &other)
Создает неглубокую копию other.
Примечание: QOpenGLBuffer не реализует семантику копирования при записи, поэтому other будет затронута всякий раз, когда копия изменяется.
QOpenGLBuffer::QOpenGLBuffer(QOpenGLBuffer::Type type)
Создает новый объект буфера типа type.
Примечание: этот конструктор просто создает экземпляр QOpenGLBuffer. Фактический объект буфера на сервере OpenGL не создается до тех пор, пока не будет вызван create().
См. также create().
QOpenGLBuffer::QOpenGLBuffer()
Создает новый объект буфера типа QOpenGLBuffer::VertexBuffer.
Примечание: этот конструктор просто создает экземпляр QOpenGLBuffer. Фактический объект буфера на сервере OpenGL не создается до тех пор, пока не будет вызван create().
См. также create().
QOpenGLBuffer &QOpenGLBuffer::operator=(const QOpenGLBuffer &other)
Присваивает неглубокую копию other этому объекту.
Примечание: QOpenGLBuffer не реализует семантику копирования при записи, поэтому other будет затронута всякий раз, когда копия изменяется.
QOpenGLBuffer::~QOpenGLBuffer()
Уничтожает этот объект буфера, включая хранилище, используемое на сервере OpenGL.
void QOpenGLBuffer::allocate(const void *data, int count)
Выделяет count байт пространства для буфера, инициализированного содержимым data. Любое предыдущее содержимое будет удалено.
Предполагается, что create() был вызван для этого буфера и что он был привязан к текущему контексту.
См. также create(), read() и write().
void QOpenGLBuffer::allocate(int count)
Это перегруженная функция.
Выделяет count байт пространства для буфера. Любое предыдущее содержимое будет удалено.
Предполагается, что create() был вызван для этого буфера и что он был привязан к текущему контексту.
bool QOpenGLBuffer::bind()
Привязывает буфер, связанный с этим объектом, к текущему контексту OpenGL. Возвращает false если привязка невозможна, обычно потому, что type() не поддерживается этой реализацией OpenGL.
Буфер должен быть привязан к тому же QOpenGLContext, который был текущим при вызове create(), или к другому QOpenGLContext, который разделяет с ним ресурсы. В противном случае от этой функции будет возвращено false.
См. также release() и create().
GLuint QOpenGLBuffer::bufferId() const
Возвращает идентификатор OpenGL, связанный с этим буфером; ноль, если буфер не был создан.
См. также isCreated().
bool QOpenGLBuffer::create()
Создает объект буфера на сервере OpenGL. Возвращает true если объект был создан; в противном случае — false.
Эта функция должна вызываться с текущим QOpenGLContext. Буфер будет привязан к нему и может использоваться только в этом контексте (или в любом другом контексте, который разделяет с ним ресурсы).
Эта функция вернет false, если реализация OpenGL не поддерживает буферы или нет текущего QOpenGLContext.
См. также isCreated(), allocate(), write() и destroy().
void QOpenGLBuffer::destroy()
Уничтожает этот объект буфера, включая хранилище, используемое на сервере OpenGL. Все ссылки на буфер станут недействительными.
bool QOpenGLBuffer::isCreated() const
Возвращает true если этот буфер был создан; в противном случае — false.
См. также create() и destroy().
void *QOpenGLBuffer::map(QOpenGLBuffer::Access access)
Картирует содержимое этого буфера в адресное пространство приложения и возвращает указатель на него. Возвращает null, если отображение памяти невозможно. Параметр access указывает тип выполняемого доступа.
Предполагается, что create() был вызван для этого буфера и что он был привязан к текущему контексту.
Примечание: Эта функция поддерживается только в OpenGL ES 2.0 или ранее, если расширение GL_OES_mapbuffer присутствует.
Примечание: В OpenGL ES 3.0 и более поздних версиях или в настольном OpenGL, если поддерживается GL_ARB_map_buffer_range, эта функция использует glMapBufferRange вместо glMapBuffer.
См. также unmap(), create(), bind() и mapRange().
void *QOpenGLBuffer::mapRange(int offset, int count, QOpenGLBuffer::RangeAccessFlags access)
Картирует указанный диапазон содержимого этого буфера, заданный offset и count, в адресное пространство приложения и возвращает указатель на него. Возвращает null, если отображение памяти невозможно. Параметр access задает комбинацию флагов доступа.
Предполагается, что create() был вызван для этого буфера и что он был привязан к текущему контексту.
Примечание: Эта функция недоступна в OpenGL ES 2.0 и более ранних версиях.
См. также unmap(), create() и bind().
bool QOpenGLBuffer::read(int offset, void *data, int count)
Считывает count байт из этого буфера, начиная с offset, в data. Возвращает true при успехе; false, если чтение из буфера не поддерживается. Чтение из буфера не поддерживается в OpenGL/ES.
Предполагается, что этот буфер был привязан к текущему контексту.
void QOpenGLBuffer::release()
Освобождает буфер, связанный с этим объектом, из текущего контекста OpenGL.
Эта функция должна вызываться с тем же QOpenGLContext, который был текущим при вызове bind() для буфера.
См. также bind().
[static] void QOpenGLBuffer::release(QOpenGLBuffer::Type type)
Освобождает буфер, связанный с type, в текущем QOpenGLContext.
Эта функция является прямым вызовом glBindBuffer(type, 0) для использования в тех случаях, когда вызывающая сторона не знает, какой QOpenGLBuffer был привязан к контексту, но хочет убедиться, что он был освобождён.
QOpenGLBuffer::release(QOpenGLBuffer::VertexBuffer);
void QOpenGLBuffer::setUsagePattern(QOpenGLBuffer::UsagePattern value)
Устанавливает тип использования для этого буфера на value. Эта функция должна быть вызвана перед allocate() или write().
См. также usagePattern(), allocate() и write().
int QOpenGLBuffer::size() const
Возвращает размер данных в этом буфере для операций чтения. Возвращает -1, если получение размера буфера не поддерживается или буфер не был создан.
Предполагается, что этот буфер привязан к текущему контексту.
См. также isCreated() и bind().
QOpenGLBuffer::Type QOpenGLBuffer::type() const
Возвращает тип буфера, представленного этим объектом.
bool QOpenGLBuffer::unmap()
Отменяет привязку буфера после того, как он был привязан к памяти приложения с предыдущим вызовом map(). Возвращает true , если отмена привязки прошла успешно; в противном случае — false.
Предполагается, что этот буфер привязан к текущему контексту и что он был ранее привязан с помощью map().
Примечание: Эта функция поддерживается только в OpenGL ES 2.0 и более ранних версиях, если присутствует расширение GL_OES_mapbuffer.
См. также map().
QOpenGLBuffer::UsagePattern QOpenGLBuffer::usagePattern() const
Возвращает тип использования этого буфера. Значение по умолчанию — StaticDraw.
См. также setUsagePattern().
void QOpenGLBuffer::write(int offset, const void *data, int count)
Заменяет count байтов этого буфера, начиная с offset, содержимым data. Все остальные байты в буфере останутся неизменными.
Предполагается, что для этого буфера был вызван create(), и он был привязан к текущему контексту.
См. также create(), read() и allocate().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.1/qopenglbuffer.html