Spec-Zone.ru › Qt 6.1

Класс QOpenGLVertexArrayObject

Класс QOpenGLVertexArrayObject оборачивает объект OpenGL Vertex Array Object. Подробнее...

Заголовок: #include <QOpenGLVertexArrayObject>
CMake: find_package(Qt6 COMPONENTS OpenGL REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::OpenGL)
qmake: QT += opengl
С тех пор: Qt 5.1
Наследует: QObject
  • Список всех членов, включая унаследованные

Типы публичного доступа

класс Binder

Функции публичного доступа

QOpenGLVertexArrayObject(QObject *parent = nullptr)
virtual ~QOpenGLVertexArrayObject()
void bind()
bool create()
void destroy()
bool isCreated() const
GLuint objectId() const
void release()

Подробное описание

Объект Vertex Array Object (VAO) — это контейнерный объект OpenGL, который оборачивает состояние, необходимое для указания данных атрибутов вершин в конвейер OpenGL. Другими словами, VAO запоминает состояние объектов буфера (см. QOpenGLBuffer) и связанного с ними состояния (например, делителей атрибутов вершин). Это позволяет очень просто и эффективно переключаться между состояниями буферов OpenGL для рендеринга различных «объектов» в сцене. Класс QOpenGLVertexArrayObject — это тонкая оболочка вокруг OpenGL VAO.

Для настольных систем VAO поддерживаются как основная функция в OpenGL 3.0 или более поздних версиях, а также расширением GL_ARB_vertex_array_object для более старых версий. В OpenGL ES 2 VAO предоставляются необязательным расширением GL_OES_vertex_array_object. Вы можете проверить версию OpenGL с помощью QOpenGLContext::surfaceFormat() и проверить наличие расширений с помощью QOpenGLContext::hasExtension().

Как и другие классы Qt OpenGL, QOpenGLVertexArrayObject имеет функцию create() для создания базового объекта OpenGL. Это позволяет разработчику гарантировать, что в момент использования существует действительный текущий контекст OpenGL.

После успешного создания VAO типичный шаблон использования:

  • В функции инициализации сцены для каждого визуального объекта:
    • Связать VAO
    • Установить состояние данных вершин для этого визуального объекта (вершины, нормали, текстурные координаты и т. д.)
    • Отвязать (release()) VAO
  • В функции рендеринга для каждого визуального объекта:
    • Связать VAO (и программу шейдера при необходимости)
    • Вызвать функцию glDraw*()
    • Отвязать (release()) VAO

Связывание VAO в функции рендеринга имеет эффект восстановления всех состояний данных вершин, заданных на этапе инициализации. Таким образом, мы можем установить множество состояний при настройке VAO и эффективно переключаться между наборами состояний объектов, подлежащих рендерингу. Использование VAO также позволяет драйверу OpenGL амортизировать проверочные действия по данным вершин.

Примечание: Объекты Vertex Array Object, как и все другие контейнерные объекты OpenGL, специфичны для контекста, для которого они были созданы, и не могут быть разделены между группой контекстов.

См. также QOpenGLVertexArrayObject::Binder и QOpenGLBuffer.

Документация по функциям-членам

QOpenGLVertexArrayObject::QOpenGLVertexArrayObject(QObject *parent = nullptr)

Создаёт QOpenGLVertexArrayObject с заданным parent. Вы должны вызвать create() с действительным контекстом OpenGL перед использованием.

[virtual] QOpenGLVertexArrayObject::~QOpenGLVertexArrayObject()

Удаляет QOpenGLVertexArrayObject и базовый ресурс OpenGL.

void QOpenGLVertexArrayObject::bind()

Привязывает этот объект массива вершин к точке привязки OpenGL. С этого момента и до тех пор, пока не будет вызвано release() или другой объект массива вершин не будет привязан, любые изменения, внесенные в состояние данных вершин, сохраняются внутри этого объекта массива вершин.

Если затем другой объект массива вершин привязан, вы можете позже восстановить набор состояний, связанных с этим объектом, вызвав bind() для этого объекта ещё раз. Это позволяет эффективно изменять состояния данных вершин в функциях рендеринга.

bool QOpenGLVertexArrayObject::create()

Создаёт базовый объект OpenGL vertex array object. Для успеха этой функции должен быть действительный контекст OpenGL, поддерживающий vertex array objects, текущий.

Возвращает true в случае успешного создания объекта OpenGL vertex array object.

Когда возвращаемое значение равно false, поддержка vertex array object недоступна. Это не ошибка: на системах с OpenGL 2.x или OpenGL ES 2.0 vertex array objects могут не поддерживаться. Приложение свободно продолжает выполнение в этом случае, но при этом должно быть готово работать и без VAO. Это означает, что вместо простого вызова bind(), необходимо проверять значение isCreated(), а массивы вершин должны инициализироваться традиционным способом, когда vertex array object отсутствует.

См. также isCreated().

void QOpenGLVertexArrayObject::destroy()

Удаляет базовый объект OpenGL vertex array object. Для успеха этой функции должен быть действительный контекст OpenGL, поддерживающий vertex array objects, текущий.

bool QOpenGLVertexArrayObject::isCreated() const

Возвращает true если базовый объект OpenGL vertex array object был создан. Если это возвращает true и связанный контекст OpenGL текущий, то вы можете bind() этот объект.

GLuint QOpenGLVertexArrayObject::objectId() const

Возвращает идентификатор базового объекта OpenGL vertex array object.

void QOpenGLVertexArrayObject::release()

Отвязывает этот объект массива вершин, привязывая default vertex array object (id = 0).

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.1/qopenglvertexarrayobject.html

Spec-Zone.ru

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