Spec-Zone.ru › Qt 5.12

Класс QOpenGLTimerQuery

Класс QOpenGLTimerQuery оборачивает объект запроса таймера OpenGL. Подробнее...

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

Публичные функции

QOpenGLTimerQuery(QObject *parent = nullptr)
virtual ~QOpenGLTimerQuery()
void begin()
bool create()
void destroy()
void end()
bool isCreated() const
bool isResultAvailable() const
GLuint objectId() const
void recordTimestamp()
GLuint64 waitForResult() const
GLuint64 waitForTimestamp() const
  • 31 публичная функция унаследована от QObject

Статические публичные члены

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

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

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

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

Класс QOpenGLTimerQuery оборачивает объект запроса таймера OpenGL.

Объекты запроса таймера OpenGL — это управляемые OpenGL ресурсы для измерения времени выполнения последовательностей команд OpenGL на графическом процессоре.

OpenGL предлагает различные уровни поддержки для запросов таймера, в зависимости от версии OpenGL и наличия расширений ARB_timer_query или EXT_timer_query. Поддержка может быть сведена к следующему:

  • OpenGL >=3.3 полностью поддерживает все функции запросов таймера.
  • OpenGL 3.2 с расширением ARB_timer_query полностью поддерживает все функции запросов таймера.
  • OpenGL <=3.2 с расширением EXT_timer_query ограниченно поддерживает функции, так как отметка времени графического процессора не может быть запрошена. Места, где это влияет на функции, предоставляемые классами Qt, будут выделены в документации функций.
  • OpenGL ES 2 (и OpenGL ES 3) не поддерживают запросы таймера OpenGL.

OpenGL представляет время с точностью до 1 наносекунды (1e-9 секунды). Вследствие этого 32-битные целые числа будут иметь лишь общее возможное время около 4 секунд, что несложно превзойти при низкой производительности или длительных операциях. Поэтому OpenGL использует 64-битные целые типы для представления времени. Переменная типа GLuint64 имеет достаточную ширину для хранения продолжительности сотен лет, что достаточно для потребностей рендеринга в реальном времени.

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

После создания запросы таймера могут быть выпущены несколькими способами. Самый простой метод — ограничить блок команд вызовами begin() и end(). Это указывает OpenGL измерить время, прошедшее с завершения всех команд, выпущенных до begin(), до завершения всех команд, выпущенных до end().

В конце кадра результаты можно получить, вызвав waitForResult(). Как предполагает название этой функции, она блокирует выполнение CPU до тех пор, пока OpenGL не уведомит о том, что результат запроса таймера доступен. Чтобы избежать блокировки, можно проверить, доступен ли результат запроса, вызвав isResultAvailable(). Обратите внимание, что современные графические процессоры имеют глубокую конвейерную обработку, и результаты запросов могут стать доступными в течение 1-5 кадров после их выдачи.

Обратите внимание, что OpenGL не допускает вложенных или перекрестных запросов таймера с использованием begin() и end(). Использование нескольких запросов таймера и recordTimestamp() позволяет избежать этого ограничения. При использовании recordTimestamp() результат может быть получен в какой-то момент позже с помощью isResultAvailable() и waitForResult(). Qt предоставляет удобный класс QOpenGLTimeMonitor, который помогает использовать несколько объектов запроса.

См. также QOpenGLTimeMonitor.

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

QOpenGLTimerQuery::QOpenGLTimerQuery(QObject *parent = nullptr)

Создаёт экземпляр QOpenGLTimerQuery с заданным parent. Перед использованием необходимо вызвать create() с действительным контекстом OpenGL.

[virtual] QOpenGLTimerQuery::~QOpenGLTimerQuery()

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

void QOpenGLTimerQuery::begin()

Устанавливает начальную точку в очереди команд OpenGL для последовательности команд, время выполнения которых будет измеряться этим объектом запроса.

Полезно для простых случаев использования. Обычно лучше использовать recordTimestamp().

См. также end(), isResultAvailable(), waitForResult() и recordTimestamp().

bool QOpenGLTimerQuery::create()

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

Возвращает true если объект запроса таймера OpenGL был успешно создан.

void QOpenGLTimerQuery::destroy()

Удаляет базовый объект запроса таймера OpenGL. Контекст, который был текущим при вызове create(), должен быть текущим при вызове этой функции.

void QOpenGLTimerQuery::end()

Устанавливает конечную точку в очереди команд OpenGL для последовательности команд, время выполнения которых будет измеряться этим объектом запроса.

Полезно для простых случаев использования. Обычно лучше использовать recordTimestamp().

См. также begin(), isResultAvailable(), waitForResult() и recordTimestamp().

bool QOpenGLTimerQuery::isCreated() const

Возвращает true если базовый объект запроса OpenGL был создан. Если это возвращает true и связанный контекст OpenGL является текущим, то можно выдать запросы с этим объектом.

bool QOpenGLTimerQuery::isResultAvailable() const

Возвращает true если результат запроса таймера OpenGL доступен.

Эта функция не блокирующая и, желательно, должна использоваться для проверки доступности результата запроса перед вызовом waitForResult().

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

GLuint QOpenGLTimerQuery::objectId() const

Возвращает идентификатор базового объекта запроса OpenGL.

void QOpenGLTimerQuery::recordTimestamp()

Помещает метку в очередь команд OpenGL для записи отметки времени графическим процессором, когда эта метка достигается графическим процессором. Эта функция не блокирующая, и результат станет доступен в какой-то момент позже.

Доступность результата можно проверить с помощью isResultAvailable(). Результат можно получить с помощью waitForResult(), который заблокирует выполнение, если результат ещё недоступен.

См. также waitForResult(), isResultAvailable(), begin() и end().

GLuint64 QOpenGLTimerQuery::waitForResult() const

Возвращает результат запроса таймера OpenGL.

Эта функция блокирует выполнение, пока результат не станет доступным в OpenGL. Рекомендуется вызывать isResultAvailable(), чтобы убедиться в доступности результата и избежать ненужной блокировки.

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

GLuint64 QOpenGLTimerQuery::waitForTimestamp() const

Возвращает текущую метку времени GPU, когда все ранее выпущенные команды OpenGL получены, но ещё не обязательно выполнены GPU.

Эта функция блокирует выполнение, пока результат не будет возвращён.

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

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

Spec-Zone.ru

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