Spec-Zone.ru › Qt 6.0

Класс 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() был вызван для этого буфера и что он привязан к текущему контексту.

См. также create() и write().

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.

Предполагается, что этот буфер привязан к текущему контексту.

См. также write() и bind().

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API