Spec-Zone.ru › Qt 5.13

Класс 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.13/qopengltimerquery.html

Spec-Zone.ru

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