一些背景信息:
我对OGL非常陌生。我的应用程序只涉及2D。所有对象都是垂直于视线方向的,并且我使用正交投影。我发现系统的性能受到绘制*调用数量的限制,这表明我需要进行更多批处理。
我只需要绘制一个对象,但它由成千上万个可能重叠的三角形组成。在我的特定应用程序中,我有预先计算几何图形并按后面的顺序排列三角形的能力,因为它们具有不同程度的透明度。顶点属性包括颜色(仅)和alpha,用于片段程序。
我所做的事情:
所有基元都是三角形,我为每个三角形的3个顶点分配相同的颜色,因为颜色在面上是恒定的。我将所有三角形的所有顶点和它们的颜色放入单个VBO(16位;没有那么多顶点)。索引缓冲区按后面的顺序排列三角形,我发出单个绘制调用。我使用alpha混合(SRC_ALPHA,ONE_MINUS_SRC_ALPHA)。
结果:
我看到结果在我拥有和测试的唯一机器上被正确地混合和渲染。我还没有在其他机器上尝试过。我已经搜索了相当长的时间,但徒劳无功,找不到明确的答案。顺便说一下,唯一的参考是VBO扩展规范中提到的“基元序列”,但它没有解决重叠基元时会发生什么。
问题:
这是保证的行为吗?也就是说,结果是否与立即模式下(由标准保证)发出多个调用的结果相同?
注意:深度缓冲区和模板缓冲区已关闭。
glDrawArrays
和类似调用的行为,就像单个glBegin/glEnd
块一样,因此可以推断出相同的限制适用。但是有趣的是,您从哪里得到的信息,即单个glBegin/glEnd
块中的基元按顺序呈现(或实际上按顺序到达帧缓冲区)? - Christian Rau