Класс 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 { StreamDraw, StreamRead, StreamCopy, StaticDraw, StaticRead, …, DynamicCopy } |
Публичные функции
| 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().
[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.2/qopenglbuffer.html