Detailed Description
QOpenGLTimeMonitor类是一个便利的包装器,用于收集OpenGL计时查询对象,以测量您的渲染应用程序所需的粒度水平的GPU时间间隔。OpenGL计时查询对象按顺序查询,以记录您的渲染代码中感兴趣的位置的GPU时间戳。一旦所有发出的计时查询的结果变为可用,结果就可以被获取,并且QOpenGLTimerMonitor将为您计算记录的时间间隔。
这个类的典型用法是对应用程序的渲染算法进行分析或在实时动态性能/质量平衡中调整这些算法。在渲染函数中使用QOpenGLTimeMonitor之前,您应该通过调用setSamples()设置要记录的样本点数。请注意,测量N个样本点将产生N-1个时间间隔。设置完样本点数后,使用有效的当前OpenGL上下文调用create()函数来创建所需的查询计时器对象。通常,在初始化函数中执行这些步骤一次即可。
使用recordSample()函数来划分包含您希望计时的OpenGL命令的代码块。您可以使用isResultAvailable()检查生成的时间样本和时间间隔的可用性。可以使用阻塞的waitForIntervals()和waitForSamples()函数分别检索计算的时间间隔和原始时间戳样本。
在检索结果之后并在开始下一轮取样之前(例如,在下一帧中)请务必调用reset()函数,该函数将清除缓存的结果并将计时器索引重置回第一个计时器对象。
另请参见QOpenGLTimerQuery。
Member Function Documentation
QOpenGLTimeMonitor::QOpenGLTimeMonitor(QObject *parent = nullptr)
创建一个具有给定父对parent象的QOpenGLTimeMonitor实例。在使用之前,必须使用一个有效的OpenGL上下文调用create()函数。
另请参阅setSampleCount()和create()。
[virtual] QOpenGLTimeMonitor :: ~ QOpenGLTimeMonitor()
销毁QOpenGLTimeMonitor及其底层的OpenGL资源。
bool QOpenGLTimeMonitor :: create()
实例化sampleCount()个OpenGL计时器查询对象,用于跟踪在调用recordSample()之间执行OpenGL命令所花费的时间。
如果可以创建OpenGL计时器查询对象,则返回true。
另请参阅destroy(),setSampleCount()和recordSample()。
void QOpenGLTimeMonitor :: destroy()
销毁此实例中使用的任何OpenGL计时器查询对象。
另请参阅create()。
bool QOpenGLTimeMonitor::isCreated() const
如果已创建底层的OpenGL查询对象,则返回true。如果返回true并且相关的OpenGL上下文是当前的,则可以使用该对象记录时间样本。
bool QOpenGLTimeMonitor :: isResultAvailable() const
如果OpenGL计时器查询结果可用,则返回true。
另请参阅waitForSamples()和waitForIntervals()。
QVector <GLuint> QOpenGLTimeMonitor :: objectIds() const
返回包含OpenGL计时器查询对象的对象ID的QVector。
int QOpenGLTimeMonitor :: recordSample()
在OpenGL命令队列中的此点处发出OpenGL计时器查询。在应用程序的渲染函数中连续调用此函数将建立执行在此函数之间的OpenGL命令所花费的GPU时间的详细信息。
另请参阅setSampleCount(),isResultAvailable(),waitForSamples()和waitForIntervals()。
void QOpenGLTimeMonitor :: reset()
重置时间监视器,准备在另一个渲染帧中使用。在获取以前的结果并在下一帧的第一次调用recordSample()之前调用此函数一次。
另请参阅recordSample()。
int QOpenGLTimeMonitor :: sampleCount() const
返回使用setSampleCount()请求的样本点的数量。如果成功调用了setSampleCount()并在之后调用了create(),则返回的值将是可以使用的实际样本点数。
样本计数的默认值为2,导致测量单个间隔。
另请参阅setSampleCount()。
void QOpenGLTimeMonitor :: setSampleCount(int sampleCount)
将样本点数设置为sampleCount。使用此函数设置样本后,必须调用create()来实例化底层的OpenGL计时器查询对象。
新的sampleCount必须至少为2。
另请参阅sampleCount(),create()和recordSample()。
QVector<GLuint64> QOpenGLTimeMonitor::waitForIntervals() const
返回一个 QVector,其中包含由 recordSample() 调用之间的时间间隔所限定的时间间隔。返回的向量将包含一个少于样本数的元素,因为这代表了中间间隔而不是实际的时间戳样本。
此函数将阻塞,直到OpenGL指示结果可用。建议在调用此函数之前使用 isResultAvailable() 检查结果的可用性。
另请参见 waitForSamples() 和 isResultAvailable()。
QVector<GLuint64> QOpenGLTimeMonitor::waitForSamples() const
返回一个 QVector,其中包含使用 recordSample() 获取的 GPU 时间戳。
此函数将阻塞,直到OpenGL指示结果可用。建议在调用此函数之前使用 isResultAvailable() 检查结果的可用性。
注意:此函数仅适用于具有 OpenGL >= 3.3 或 ARB_timer_query 扩展的系统。有关更多详细信息,请参见 QOpenGLTimerQuery。
另请参见 waitForIntervals() 和 isResultAvailable()。
本文来自博客园,原创作者:Clemens,转载请注明原文链接:https://www.cnblogs.com/errorman/p/17221348.html