Spec-Zone.ru › Qt 5.15

Класс QOpenGLTimerQuery

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

Заголовок: #include <QOpenGLTimerQuery>
qmake: QT += gui
С тех пор: Qt 5.1
Наследует: QObject

Этот класс был представлен в Qt 5.1.

  • Список всех членов, включая наследуемые

Открытые функции

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

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

Объекты запроса таймера 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(). Как следует из названия этой функции, она блокирует выполнение процессора, пока 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.15/qopengltimerquery.html

Spec-Zone.ru

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