Spec-Zone.ru › Qt 5.9

Класс QOpenGLVertexArrayObject

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

Заголовок: #include <QOpenGLVertexArrayObject>
qmake: QT += gui
С момента: Qt 5.1
Наследует: QObject
  • Список всех членов, включая наследуемые

Типы public

класс Binder

Функции public

QOpenGLVertexArrayObject(QObject *parent = Q_NULLPTR)
~QOpenGLVertexArrayObject()
void bind()
bool create()
void destroy()
bool isCreated() const
GLuint objectId() const
void release()
  • 32 функции public, унаследованные от QObject

Дополнительные унаследованные члены

  • 1 свойство, унаследованное от QObject
  • 1 public слот, унаследованный от QObject
  • 2 сигнала, унаследованные от QObject
  • 11 статических public членов, унаследованных от QObject
  • 9 защищенных функций, унаследованных от QObject

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

Класс QOpenGLVertexArrayObject оборачивает объект массива вершин OpenGL.

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

Привязка 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/qt-5.9/qopenglvertexarrayobject.html

Spec-Zone.ru

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