我正在编写一些代码,将一些 3D 模型绘制到屏幕上,最终用于某种 3D 世界。每个模型中都可以包含使用不同着色器进行渲染的网格。在使事情高效运行方面,我知道您应该尽量减少 OpenGL 调用,即那些切换 VAO 和那些切换着色器的调用,因为它们应该有很多开销。
在我的实现中,每个模型都将其几何结构组织成一个 VAO。VAO 可以具有材质设置不同的网格,但不一定是着色器。
我的问题:最好是绑定一个 VAO 并一次性完全渲染它,如果需要的话切换着色器,或者绑定一个着色器并运行使用该问题的所有(子集)VAO。第一个是冗余绑定着色器,第二个是冗余绑定 VAO,那么最小化着色器绑定调用还是 VAO 绑定调用更好?
我意识到这是相当开放的,似乎它可能取决于应用程序,但是我也很想知道如何找出 gl 操作成本(开销?依赖项?),或者我如何弄清楚它们,因为这将提供必要的信息,以针对任何情况构建适当的响应。此外,如果有更好的方法来组织我的项目,我们将不胜感激。