我需要测量计算着色器的时间。但这当然不是微不足道的。从OpenGL Wiki -我得到的性能,在着色器调用之前和之后使用 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
}
我想我必须glFinish()
在位置插入并在 处(1)
启动计时器(2)
并在 处停止它(3)
。但我不确定它是否真的有效并且会产生正确的计时结果,因为在参考中他们正在谈论渲染并且计算着色器不是渲染,不是吗?
OpenGL Timer_Query也存在,但我不确定它是如何工作的,也不知道它是否对我有用。这些东西对我来说是新的,我不确定我现在是否完全理解它。
这里的答案说,几乎不可能精确测量代码的一部分。最好的方法是测量帧渲染时间,但我只需要计算着色器部分的帧渲染时间就可以了。
你认为最好的选择是什么?只是测量整个帧渲染时间并使用它?或者您是否使用其他测量方法获得了更好的体验?