Класс QOpenGLTimeMonitor
Класс QOpenGLTimeMonitor оборачивает последовательность объектов запросов таймера OpenGL. Подробнее...
| Заголовок: | #include <QOpenGLTimeMonitor> |
| qmake: | QT += gui |
| С тех пор: | Qt 5.1 |
| Наследует: | QObject |
Открытые функции
| QOpenGLTimeMonitor(QObject *parent = Q_NULLPTR) | |
| ~QOpenGLTimeMonitor() | |
| bool | create() |
| void | destroy() |
| bool | isCreated() const |
| bool | isResultAvailable() const |
| QVector<GLuint> | objectIds() const |
| int | recordSample() |
| void | reset() |
| int | sampleCount() const |
| void | setSampleCount(int sampleCount) |
| QVector<GLuint64> | waitForIntervals() const |
| QVector<GLuint64> | waitForSamples() const |
- 32 открытые функции унаследованные от QObject
Дополнительные унаследованные члены
- 1 свойство унаследованное от QObject
- 1 открытый слот унаследованный от QObject
- 2 сигнала унаследованные от QObject
- 11 статических открытых членов унаследованные от QObject
- 9 защищенные функции унаследованные от QObject
Подробное описание
Класс QOpenGLTimeMonitor оборачивает последовательность объектов запросов таймера OpenGL.
Класс QOpenGLTimeMonitor — это удобная оболочка для набора объектов запросов таймера OpenGL, используемых для измерения интервалов времени на GPU с точностью, необходимой вашей прикладной программе визуализации.
Объекты запросов таймера OpenGL запрашиваются последовательно для записи временных меток GPU в нужных позициях вашего кода визуализации. После того, как результаты всех запросов таймера станут доступны, результаты можно извлечь, и QOpenGLTimerMonitor рассчитает для вас записанные интервалы времени.
Типичный случай использования этого класса — профилирование алгоритмов визуализации вашего приложения или их адаптация в реальном времени для динамического баланса производительности/качества.
Перед использованием QOpenGLTimeMonitor в вашей функции визуализации необходимо установить необходимое количество точек отсчёта, которые вы хотите записать, вызвав setSamples(). Обратите внимание, что измерение N точек отсчёта даст N-1 интервалов времени. После того, как вы установили количество точек отсчёта, вызовите функцию create() с действующим контекстом OpenGL, чтобы создать необходимые объекты запроса таймера. Эти шаги обычно выполняются один раз в функции инициализации.
Используйте функцию recordSample() для разграничения блоков кода, содержащих команды OpenGL, время выполнения которых вы хотите измерить. Вы можете проверить доступность полученных временных отсчётов и интервалов времени с помощью isResultAvailable(). Вычисленные интервалы времени и сырые отсчёты временных меток можно получить с помощью блокирующих функций waitForIntervals() и waitForSamples() соответственно.
После получения результатов и перед началом нового цикла сбора отсчётов (например, в следующем кадре) убедитесь, что вы вызвали функцию reset(), которая очистит кэшированные результаты и сбросит индекс таймера обратно к первому объекту таймера.
См. также QOpenGLTimerQuery.
Документация по функциям-членам
QOpenGLTimeMonitor::QOpenGLTimeMonitor(QObject *parent = Q_NULLPTR)
Создаёт экземпляр QOpenGLTimeMonitor с заданным parent. Вы должны вызвать create() с действующим контекстом OpenGL перед использованием.
См. также setSampleCount() и create().
QOpenGLTimeMonitor::~QOpenGLTimeMonitor()
Удаляет QOpenGLTimeMonitor и все основанные на OpenGL ресурсы.
bool QOpenGLTimeMonitor::create()
Инициализирует sampleCount() объектов запросов таймера OpenGL, которые будут использоваться для отслеживания времени, затрачиваемого на выполнение команд OpenGL между последовательными вызовами recordSample().
Возвращает true если объекты запросов таймера OpenGL были созданы.
См. также destroy(), setSampleCount(), и recordSample().
void QOpenGLTimeMonitor::destroy()
Удаляет все объекты запросов таймера OpenGL, используемые в этом экземпляре.
См. также create().
bool QOpenGLTimeMonitor::isCreated() const
Возвращает true если основанные на OpenGL объекты запросов были созданы. Если это возвращает true, а связанный контекст OpenGL — текущий, то вы можете записывать временные отсчёты с помощью этого объекта.
bool QOpenGLTimeMonitor::isResultAvailable() const
Возвращает true если результаты запросов таймера OpenGL доступны.
См. также waitForSamples() и waitForIntervals().
QVector<GLuint> QOpenGLTimeMonitor::objectIds() const
Возвращает QVector, содержащий идентификаторы объектов запросов таймера OpenGL.
int QOpenGLTimeMonitor::recordSample()
Выполняет запрос таймера OpenGL в этом месте в очереди команд OpenGL. Вызов этой функции последовательно в функции визуализации вашего приложения соберет детали времени, затрачиваемого GPU на выполнение команд OpenGL между последовательными вызовами этой функции.
См. также setSampleCount(), isResultAvailable(), waitForSamples(), и waitForIntervals().
void QOpenGLTimeMonitor::reset()
Сбрасывает монитор времени, чтобы подготовиться к использованию в другом кадре визуализации. Вызовите это, когда вы получили предыдущие результаты и перед вызовом recordSample() в первый раз в следующем кадре.
См. также recordSample().
int QOpenGLTimeMonitor::sampleCount() const
Возвращает количество точек отсчёта, запрошенных с помощью setSampleCount(). Если create был успешно вызван после setSampleCount(), возвращаемое значение будет фактическим количеством точек отсчёта, которые могут быть использованы.
Значение по умолчанию для количества отсчётов равно 2, что приводит к измерению одного интервала.
См. также setSampleCount().
void QOpenGLTimeMonitor::setSampleCount(int sampleCount)
Устанавливает количество точек отсчёта в sampleCount. После установки количества отсчётов с помощью этой функции, вы должны вызвать create() для инициализации базовых объектов запросов таймера OpenGL.
Новое значение sampleCount должно быть не менее 2.
См. также sampleCount(), create(), и recordSample().
END_OF_DOCUMENT_MARKERQVector<GLuint64> QOpenGLTimeMonitor::waitForIntervals() const
Возвращает QVector, содержащий интервалы времени, ограниченные вызовами recordSample(). Результирующий вектор будет содержать на один элемент меньше, так как он представляет интервалы между отсчетами, а не сами отсчеты времени.
Эта функция будет блокироваться до тех пор, пока OpenGL не укажет, что результаты доступны. Рекомендуется проверить доступность результата перед вызовом этой функции с помощью isResultAvailable().
См. также waitForSamples() и isResultAvailable().
QVector<GLuint64> QOpenGLTimeMonitor::waitForSamples() const
Возвращает QVector, содержащий отметки времени GPU, полученные с помощью recordSample().
Эта функция будет блокироваться до тех пор, пока OpenGL не укажет, что результаты доступны. Рекомендуется проверить доступность результата перед вызовом этой функции с помощью isResultAvailable().
Примечание: Эта функция работает только на системах с OpenGL >=3.3 или расширением ARB_timer_query. Для получения дополнительной информации см. QOpenGLTimerQuery.
См. также waitForIntervals() и isResultAvailable().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.9/qopengltimemonitor.html