Класс QOpenGLVertexArrayObject
Класс QOpenGLVertexArrayObject оборачивает объект массива вершин OpenGL. Подробнее...
| Заголовок: | #include <QOpenGLVertexArrayObject> |
| qmake: | QT += gui |
| С момента: | Qt 5.1 |
| Наследуется от: | QObject |
Открытые типы
| класс | Binder |
Открытые функции
| QOpenGLVertexArrayObject(QObject *parent = Q_NULLPTR) | |
| ~QOpenGLVertexArrayObject() | |
| void | bind() |
| bool | create() |
| void | destroy() |
| bool | isCreated() const |
| GLuint | objectId() const |
| void | release() |
- 31 открытая функция, унаследованная от QObject
Дополнительные унаследованные члены
- 1 свойство, унаследованное от QObject
- 1 открытый слот, унаследованный от QObject
- 2 сигнала, унаследованные от QObject
- 11 статические открытые члены, унаследованные от QObject
- 9 защищённых функций, унаследованных от QObject
Подробное описание
Класс QOpenGLVertexArrayObject оборачивает объект массива вершин OpenGL.
Объект массива вершин (VAO) — это контейнерный объект OpenGL, который инкапсулирует состояние, необходимое для указания данных атрибутов вершин по отдельности в конвейер OpenGL. Другими словами, VAO запоминает состояние объектов буфера (см. QOpenGLBuffer) и их связанного состояния (например, делителей атрибутов вершин). Это позволяет очень простым и эффективным способом переключаться между состояниями буферов OpenGL для отрисовки различных «объектов» в сцене. Класс QOpenGLVertexArrayObject — это тонкий обертка вокруг объекта VAO OpenGL.
Для настольных систем 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 амортизировать проверки валидности данных вершин.
Примечание: Объекты массивов вершин, как и все другие контейнерные объекты OpenGL, специфичны для контекста, для которого они были созданы, и не могут быть разделены между группой контекстов.
См. также QOpenGLVertexArrayObject::Binder и QOpenGLBuffer.
Документация по функциям членов
QOpenGLVertexArrayObject::QOpenGLVertexArrayObject(QObject *parent = Q_NULLPTR)
Создаёт QOpenGLVertexArrayObject с заданным parent. Вы должны вызвать create() с действительным контекстом OpenGL перед использованием.
QOpenGLVertexArrayObject::~QOpenGLVertexArrayObject()
Удаляет QOpenGLVertexArrayObject и базовый ресурс OpenGL.
void QOpenGLVertexArrayObject::bind()
Связывает этот объект массива вершин с точкой связывания OpenGL. С этого момента и до тех пор, пока не будет вызван release() или связан другой объект массива вершин, любые изменения, внесенные в состояние данных вершин, сохраняются внутри этого объекта массива вершин.
Если затем будет связан другой объект массива вершин, вы можете позже восстановить набор состояний, связанных с этим объектом, вызвав bind() для этого объекта ещё раз. Это позволяет эффективно изменять состояния данных вершин в функциях отрисовки.
bool QOpenGLVertexArrayObject::create()
Создаёт базовый объект массива вершин OpenGL. Для успешного выполнения этой функции должен быть действительный контекст OpenGL, поддерживающий объекты массивов вершин, активным.
Возвращает true если объект массива вершин OpenGL был успешно создан.
Когда возвращаемое значение является false, поддержка объектов массивов вершин недоступна. Это не ошибка: на системах с OpenGL 2.x или OpenGL ES 2.0 объекты массивов вершин могут не поддерживаться. Приложение может продолжить выполнение в этом случае, но оно должно быть готово работать и без VAO. Это означает, что вместо простого вызова bind() нужно проверять значение isCreated() и инициализировать массивы вершин традиционным способом, когда объект массива вершин отсутствует.
См. также isCreated().
void QOpenGLVertexArrayObject::destroy()
Удаляет базовый объект массива вершин OpenGL. Для успешного выполнения этой функции должен быть действительный контекст OpenGL, поддерживающий объекты массивов вершин, активным.
bool QOpenGLVertexArrayObject::isCreated() const
Возвращает true если базовый объект массива вершин OpenGL был создан. Если это возвращает true и связанный контекст OpenGL активен, то вы можете bind() этот объект.
GLuint QOpenGLVertexArrayObject::objectId() const
Возвращает идентификатор базового объекта массива вершин OpenGL.
void QOpenGLVertexArrayObject::release()
Отвязывает этот объект массива вершин, связав объект по умолчанию (id = 0).
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.6/qopenglvertexarrayobject.html