Класс 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 через оператор OR.
Перечисление 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().
END_OF_DOCUMENT_MARKER
[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.0/qopenglbuffer.html