着色器程序应该在OpenGL中共享吗

着色器程序应该在OpenGL中共享吗,opengl,optimization,shader,Opengl,Optimization,Shader,场景:假设我有一个着色器程序,在OpenGL中实现基本照明和着色(phong+多重纹理贴图)。因为场景中的所有对象看起来都应该相同(除了纹理),所以我认为只需为每个对象绑定相同的着色器程序,然后只需更新制服(MVP矩阵、法线矩阵和大约20个特定于对象的属性) 我的问题:既然glUniform调用不是完全免费的,我是否应该克隆我的程序以大幅减少glUniform调用?共享它,我只需要更新MVP和法线矩阵。更改统一值比更改程序便宜得多。这本书清楚地表明,如果您关心大规模渲染操作的性能,那么更改程序应

场景:假设我有一个着色器程序,在OpenGL中实现基本照明和着色(phong+多重纹理贴图)。因为场景中的所有对象看起来都应该相同(除了纹理),所以我认为只需为每个对象绑定相同的着色器程序,然后只需更新制服(MVP矩阵、法线矩阵和大约20个特定于对象的属性)


我的问题:既然glUniform调用不是完全免费的,我是否应该克隆我的程序以大幅减少glUniform调用?共享它,我只需要更新MVP和法线矩阵。

更改统一值比更改程序便宜得多。这本书清楚地表明,如果您关心大规模渲染操作的性能,那么更改程序应该相对节省。

为了确保我的正确性:
glUseProgram
调用比
glUniform
调用更昂贵?顺便说一句,说得好,谢谢