我在this Apple文档中读到(在标题“避免在属性数组中存储常量”),它说如果模型的顶点都具有相同的颜色,那么颜色不应该是顶点属性。他们的意思是“OpenGL ES 2.0应用程序可以设置一个恒定的顶点属性......”?
我的问题是,使用统一的颜色值是否更好,并且调用具有统一的调用并为每个对象绘制调用?或者无论如何都要拥有顶点属性,但一举绘制所有内容。 (或者,如果更好的话,还有一个恒定的顶点属性)。
基本上,只是缺少多个函数调用的开销才能立即绘制所有内容的优势吗?
为了弄清楚它,我说每帧画出1000个圆圈,每个圆圈都有不同的颜色,有40个顶点。在这种情况下哪个更好?
答案 0 :(得分:3)
答案取决于您在一次平局调用中绘制的内容。如果你有一个30,000个顶点的对象,它们都具有相同的颜色,那么你就会浪费大量的每顶点读取(假设颜色数据会使你的每顶点数据更大。它可能不会)。但是,如果您正在谈论四重渲染,其中每个四边形具有不同的颜色,那么统一的更新开销和多个绘制调用将会破坏您的性能。
请注意,在OpenGL下有一些实例化方法,它允许您拥有每个实例数据以及每个顶点数据。但是,在模型中有多个实例和超过100个顶点之前,这通常不会占用太多。
对于您的具体示例,无法知道哪个会更快。你必须对它进行基准测试。