【发布时间】:2015-03-26 08:55:26
【问题描述】:
我需要测量计算着色器的时间。但这当然不是微不足道的。 从OpenGL Wiki - Performance 我了解到,在着色器调用之前和之后使用 glFinish() 很有用。但他们也说使用它不是很好。是否有可能测量我的着色器的时间?是否有可能测量计算着色器的时间?
我的代码看起来像这样:
renderloop()
{
//(1)
//(2)
if(updateFunction) //this is done just one time at the beginning
{
//update Texture with a compute shader
//...
glDispatchCompute();
glMemoryBarrier(GL_ALL_BARRIER_BITS);
}
//(3)
//(1)
//use the texture to do some marching cubes rendering
}
我想我必须在(1) 的位置插入glFinish(),并在(2) 处启动计时器并在(3) 处停止它。但我不确定它是否真的有效并且会产生正确的计时结果,因为在参考文献中他们谈论的是渲染,而计算着色器不是渲染,不是吗?
OpenGL Timer_Query 也存在,但我不确定它是如何工作的,也不知道它是否对我有用。这些东西对我来说是新的,我不确定我现在是否完全理解它。
here 的回答说几乎不可能精确测量代码的一部分。最好的方法是测量帧渲染时间,但我只需要计算着色器部分的帧渲染时间就可以了。
您认为最好的选择是什么?只是测量整个帧渲染时间并使用它?或者您是否使用其他测量方法获得了更好的体验?
【问题讨论】:
标签: c++ performance opengl compute-shader