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

Should shader programs be shared in OpenGL

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

我的问题:由于 glUniform 调用并非完全免费,我是否应该克隆我的程序以大幅减少 glUniform 调用?分享一下,我只需要更新MVP和法线矩阵。

更改统一值比更改 程序 便宜得多。 AZDO presentation 清楚地表明,如果您关心大规模渲染操作的性能,则应该相对谨慎地更改程序。