Spec-Zone.ru › Qt 5.12

Класс QOpenGLVertexArrayObject

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

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

Типы public

класс Binder

Функции public

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

Статические члены public

const QMetaObject staticMetaObject
  • 9 статических public членов, унаследованных от QObject

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

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

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

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

Объект массива вершин (VAO) — это объект-контейнер OpenGL, который encapsulates состояние, необходимое для указания данных атрибутов вершин в pipeline OpenGL. Другими словами, VAO запоминает состояние объектов буферов (см. QOpenGLBuffer) и их связанное состояние (например, делители атрибутов вершин). Это позволяет использовать очень простой и эффективный метод переключения между состояниями буферов OpenGL для рендеринга различных «объектов» в сцене. Класс QOpenGLVertexArrayObject — это тонкий wrapper вокруг 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 = nullptr)

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

[virtual] 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

Возвращает id базового объекта массива вершин 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.12/qopenglvertexarrayobject.html

Spec-Zone.ru

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