使用 GL_TIME_ELAPSED 和 GL_TIMESTAMP 查询 OpenGL 中经过的时间有什么区别

vik*_*eid 3 opengl glsl opengl-4

它们都可以用来获取以纳秒为单位的流逝时间。前者使用作用域 glBeginQuery/glEndQuery。这就是区别吗?

Nic*_*las 5

这就是区别吗?

你说得好像这只是一些细微的差别。

GL_TIME_ELAPSED提供处理查询范围内的命令所花费的 GPU 时间(即:glBegin/EndQuery)。GL_TIMESTAMP不是任何东西的计数。它只是获取 GPU 时间(以纳秒为单位),因为……好吧,有些东西。开始时间是实现定义的,但它总是在增加(除非溢出)。

换句话说,GL_TIME_ELAPSED就像秒表:开始和停止之间的时间。这是一个三角洲。GL_TIMESTAMP就像看时钟:它总是在增加。这是一个绝对时间,但它与依赖于实现的东西相关。