Spec-Zone.ru › Qt 5.6

Класс QOpenGLTimerQuery

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

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

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

QOpenGLTimerQuery(QObject *parent = Q_NULLPTR)
~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

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

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

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

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

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

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

  • OpenGL ≥ 3.3 обеспечивает полную поддержку всех функций запроса таймера.
  • OpenGL 3.2 с расширением ARB_timer_query обеспечивает полную поддержку всех функций запроса таймера.
  • OpenGL ≤ 3.2 с расширением EXT_timer_query обеспечивает ограниченную поддержку, так как отсчёт времени GPU нельзя запросить. Места, где это влияет на функции, предоставляемые классами 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(). Обратите внимание, что современные GPU глубоко конвейерны, и результаты запросов могут не стать доступными в течение 1–5 кадров после их выдачи.

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

См. также QOpenGLTimeMonitor.

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

QOpenGLTimerQuery::QOpenGLTimerQuery(QObject *parent = Q_NULLPTR)

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

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, чтобы GPU записал отметку времени, когда этот маркер достигается GPU. Эта функция неблокирующая, и результат станет доступным в какой-то момент позже.

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

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

END_OF_DOCUMENT_MARKER

GLuint64 QOpenGLTimerQuery::waitForResult() const

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

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

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

GLuint64 QOpenGLTimerQuery::waitForTimestamp() const

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

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

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

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

Spec-Zone.ru

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