OpenGL是否检查我想要绑定的程序是否已绑定?或者我自己必须这样做? 我想根据对象是否有法线贴图来切换着色器。
答案 0 :(得分:2)
每次绘制对象时绑定不同的GLSL程序肯定是低效的。 FBO和GLSL程序具有所有对象类型的最高验证成本。任何智能实现都会知道何时绑定同一个程序并避免任何额外的工作,但状态缓存以避免冗余绑定仍然有用。
但是,如果您对所有绘图进行排序,以便将没有法线贴图的 opaque 对象全部绘制在一起,然后使用它们的 opaque 对象,则可以获得真正的性能提升。聚到一起。不透明几何体没有严格的顺序依赖性,因此您可以最大限度地减少着色器更改。这就是你应该瞄准的目标,而不是试图最大限度地减少冗余绑定(驱动程序可能已经做到了)。