优化OpenGL:VAOs与着色器组织

优化OpenGL:VAOs与着色器组织,opengl,optimization,3d,glsl,shader,Opengl,Optimization,3d,Glsl,Shader,我正在写一些代码,将绘制一些3D模型到屏幕上,最终形成一种3D世界。每个模型中都可以有使用不同着色器进行渲染的网格。在使事情高效运行方面,我知道您应该尽量减少OpenGL调用,即那些切换VAO和那些切换着色器的调用,因为它们应该有很多开销 在我的实现中,每个模型都将其几何体组织到VAO中。VAO可以具有材质设置不同但不一定是着色器的网格 我的问题是:绑定一个VAO并一次性渲染它,在需要时切换着色器,还是绑定一个着色器并遍历使用该问题的所有(VAO子集)更好。第一种是冗余绑定着色器,第二种是冗余绑

我正在写一些代码,将绘制一些3D模型到屏幕上,最终形成一种3D世界。每个模型中都可以有使用不同着色器进行渲染的网格。在使事情高效运行方面,我知道您应该尽量减少OpenGL调用,即那些切换VAO和那些切换着色器的调用,因为它们应该有很多开销

在我的实现中,每个模型都将其几何体组织到VAO中。VAO可以具有材质设置不同但不一定是着色器的网格

我的问题是:绑定一个VAO并一次性渲染它,在需要时切换着色器,还是绑定一个着色器并遍历使用该问题的所有(VAO子集)更好。第一种是冗余绑定着色器,第二种是冗余绑定VAO,所以最小化着色器绑定调用或VAO绑定调用是否更好


我意识到这是一个相当开放的过程,似乎取决于应用程序,但我也想知道如何找出总账操作的成本(管理费用?依赖性?),或者如何找出它们,因为这将提供必要的信息,以便为任何场景构建适当的响应。此外,如果有更好的方法来组织我的项目,我将非常感谢您的洞察力。

唯一的方法是对其进行分析。我也很有兴趣了解它对FPS的影响。您可能可以调整代码以分别绑定每个三角形或在每个三角形之间切换着色器。