OpenGL 幂等状态变化的影响
Effect of OpenGL Idempotent state changes
正如标题所说,驱动程序是否以某种方式优化了 opengl 状态机上的幂等操作?
例如,如果我将同一个缓冲区重新绑定到同一个目标两次怎么办?
glBindBuffer(GL_ARRAY_BUFFER, buf_id)
...
...
//No previous binding operation on the target, this should be idempotent
//and ideally with no cost.
glBindBuffer(GL_ARRAY_BUFFER, buf_id)
顶点数组 Objects (glBindVertexArray)、着色器 (glUseProgram) 帧缓冲区等也有同样的问题。
他们可以,但规范不能保证。如果你想完成,你必须自己做。
分析您的应用。这始终是检验您的假设的最佳方式。使用 RenderDoc 或任何其他 GPU 分析工具。这些通常显示冗余 API 调用,这会影响性能。但拥有缓存状态的机制也是一种很好的做法。这是约翰·卡马克 (John Carmack) 在 Quake Arena.
中的表现
正如标题所说,驱动程序是否以某种方式优化了 opengl 状态机上的幂等操作?
例如,如果我将同一个缓冲区重新绑定到同一个目标两次怎么办?
glBindBuffer(GL_ARRAY_BUFFER, buf_id)
...
...
//No previous binding operation on the target, this should be idempotent
//and ideally with no cost.
glBindBuffer(GL_ARRAY_BUFFER, buf_id)
顶点数组 Objects (glBindVertexArray)、着色器 (glUseProgram) 帧缓冲区等也有同样的问题。
他们可以,但规范不能保证。如果你想完成,你必须自己做。
分析您的应用。这始终是检验您的假设的最佳方式。使用 RenderDoc 或任何其他 GPU 分析工具。这些通常显示冗余 API 调用,这会影响性能。但拥有缓存状态的机制也是一种很好的做法。这是约翰·卡马克 (John Carmack) 在 Quake Arena.
中的表现