我在Apple文档(在标题"避免在属性数组中存储常量"下)中读到,如果一个模型的顶点都有相同的颜色,那么颜色不应该是顶点属性。他们所说的"OpenGL ES 2.0应用程序可以设置一个恒定的顶点属性…"是什么意思?
我的问题是,它是更好地使用一个统一的颜色值,并调用有一个统一的调用和绘制调用每个对象?或者有顶点属性,但要一次性画出所有东西。(或者,如果更好的话,一个恒定的顶点属性)。
基本上,一次绘制所有内容的优势仅仅是缺乏多个函数调用的开销吗?
为了更好地理解它,假设我每帧画1000个圆圈,每个圆圈有不同的颜色和40个顶点。在这种情况下,哪个更好?
答案取决于您在单个draw调用中绘制了多少内容。如果你有一个30,000个顶点的对象,所有顶点都有相同的颜色,那么你就浪费了大量的逐顶点读取(假设颜色数据使你的逐顶点数据更大)。可能不会)。然而,如果你谈论的是四边形渲染,其中每个四边形都有不同的颜色,那么统一的更新开销和多个绘制调用将会破坏你的性能。
注意,在OpenGL中有实例化的方法,它允许你拥有每个实例的数据以及每个顶点的数据。但是,在你拥有数千个实例和模型中超过100个顶点之前,这通常不会带来太多好处。
对于您的特定示例,没有办法知道哪个更快。你必须对它进行基准测试。