OpenGL 状态(VB、IB、纹理)的成本发生变化?

Cost of OpenGL state (VB, IB, Texture) changes?

我在哪里可以看到按执行成本排序的 glBindXXX 等 opengl 命令列表。

例如,该列表必须给出问题的答案: 哪个成本更高:更改纹理或着色器? 哪个成本更高:更改着色器或顶点缓冲区? 等等

Where can I see list of opengl commands like glBindXXX sorted by execution cost.

没有,因为这样的列表不存在。 OpenGL 只是一个规范,与每个其他实现相比,每个实现的行为可能完全不同。

而状态改变的成本完全取决于实际的实施。话虽这么说,但有一些经验法则:

冷却缓存的操作是最昂贵的操作。所以切换纹理(然后将其用于实际绘图)是非常昂贵的;只是绑定一个不同的纹理并绑定另一个纹理而不对纹理做任何事情但是可能很便宜也可能不便宜。

请注意,某些 OpenGL 实现(尤其是专有的 AMD 和 NVidia 实现)甚至收集调用它们的进程的统计信息和运行时配置文件,以应用启发式方法来优化运行时行为。

就像@datenwolf 所写的那样,它高度依赖于 implementation/hardware,但这里有一个 link 到 2014 年的演示文稿,其中 table 的相对成本按降序排列(第 48 页) ): http://www.slideshare.net/CassEveritt/beyond-porting

渲染目标 > 程序 > ROP > 纹理绑定 > 顶点格式 > UBO > 顶点绑定 > 统一​​更新