【问题标题】:what is the difference between querying time elapsed in OpenGL with GL_TIME_ELAPSED and GL_TIMESTAMP使用 GL_TIME_ELAPSED 和 GL_TIMESTAMP 在 OpenGL 中查询经过的时间有什么区别
【发布时间】:2014-06-27 07:23:47
【问题描述】:

它们都可以用来计算经过的时间(以纳秒为单位)。 前者使用作用域 glBeginQuery/glEndQuery。有这个区别吗?

【问题讨论】:

    标签: opengl glsl opengl-4


    【解决方案1】:

    有区别吗?

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

    GL_TIME_ELAPSED 提供处理query's scope 中的命令所需的GPU 时间(即:glBegin/EndQuery)。 GL_TIMESTAMP 不是任何东西的计数。它只是获取 GPU 时间,以纳秒为单位,因为......嗯,一些东西。开始时间是实现定义的,但它总是在增加(除非它溢出)。

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

    【讨论】:

      【解决方案2】:

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

      请参阅:ARB_timer_query specification 的示例部分。

      【讨论】:

      • 嗯,这取决于您如何定义“功能相同”。使用 glBeginQuery()/glEndQuery() 的缺点是不能嵌套相同类型的查询,而可以轻松地在任意点获取时间戳。在此上下文中值得一提的另一件事是您链接的扩展规范中的第 11 期:“GL 实现可以使用不同的时钟来实现 TIME_ELAPSED 和 TIMESTAMP 查询吗?”简短的回答是:“是”。
      • 您能否详细说明您是如何得出这个结论的? glBeginQuery/glEndQuery 通过不计算上下文切换到另一个应用程序所花费的时间,可能变得更聪明,但我不知道驱动程序实际上是如何处理的。否则我真的不明白 glBeginQuery(GL_TIMESTAMP) 的意义。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-02
      • 2012-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多