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

在OpenGL中使用GL_time_expressed和GL_TIMESTAMP查询经过的时间有什么区别,opengl,glsl,opengl-4,Opengl,Glsl,Opengl 4,它们都可以用来获取以纳秒为单位的时间。 前者使用范围为glBeginQuery/glEndQuery的查询。这就是区别吗?正如您所指出的,除了使用glBeginQuery()/glEndQuery()和glQueryCounter()之间的区别之外,它们在功能上是相同的 请参阅:本手册的示例部分 这就是区别吗 你这么说好像有点小差别似的 GL\u TIME\u exposed提供处理中的命令所需的GPU时间(即:glBegin/End)GL_时间戳不算什么。它只得到一个时间,以纳秒为单位,因为。

它们都可以用来获取以纳秒为单位的时间。
前者使用范围为glBeginQuery/glEndQuery的查询。这就是区别吗?

正如您所指出的,除了使用
glBeginQuery()
/
glEndQuery()
glQueryCounter()
之间的区别之外,它们在功能上是相同的

请参阅:本手册的示例部分

这就是区别吗

你这么说好像有点小差别似的

GL\u TIME\u exposed
提供处理中的命令所需的GPU时间(即:
glBegin/End
)<代码>GL_时间戳不算什么。它只得到一个时间,以纳秒为单位,因为。。。嗯,有些事。开始时间由实现定义,但它总是在增加(除非溢出)


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

好吧,这取决于您如何定义“功能相同”。使用glBeginQuery()/glEndQuery()的缺点是,不能嵌套相同类型的查询,而可以轻松地在任意点获取时间戳。在此上下文中值得一提的另一件事是您链接的扩展规范中的问题11:“GL实现是否可以使用不同的时钟来实现时间和时间戳查询?”简短的回答是:“是”。您能否详细说明您是如何得出此结论的?glBeginQuery/glEndQuery不计算上下文切换到另一个应用程序所花费的时间,因此有可能变得更智能一些,但我不知道驱动程序实际上是如何处理的。否则,我真的看不出glBeginQuery(GL_TIMESTAMP)的意义。