Spec-Zone.ru › Qt 5.11

Класс QOpenGLVertexArrayObject

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

Заголовок: #include <QOpenGLVertexArrayObject>
qmake: QT += gui
С тех пор: 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()
  • 34 открытых функций, унаследованных от QObject

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

  • 1 свойство, унаследованное от QObject
  • 1 открытый слот, унаследованный от QObject
  • 2 сигнала, унаследованные от QObject
  • 1 открытая переменная, унаследованная от QObject
  • 10 статических открытых членов, унаследованных от QObject
  • 9 защищённых функций, унаследованных от QObject
  • 2 защищённых переменных, унаследованных от 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 = 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

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

Spec-Zone.ru

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