一些背景:
我对 OGL 很陌生。我的应用程序只关注 2D。所有对象都垂直于观察方向,我使用正交投影。我发现系统的性能受到 draw* 调用次数的限制,这表明我需要进行更多批处理。
我只需要绘制一个对象,但它由数千个可能重叠的三角形组成。我有能力在我的特定应用程序中预先计算几何形状,并将三角形从后到前排列,因为它们具有不同程度的透明度。顶点属性由(仅)包含片段程序中使用的 alpha 的颜色组成。
我做了什么:
所有的基元都是三角形,我为每个三角形的 3 个顶点分配相同的颜色,因为颜色在整个面上是恒定的。我将所有三角形的所有顶点及其颜色放入一个 VBO(16 位;没有那么多顶点)。索引缓冲区将三角形排序到前面,然后我发出一个绘图调用。我使用 alpha 混合(SRC_ALPHA,ONE_MINUS_SRC_ALPHA)。
结果:
我看到结果在我拥有和测试的唯一机器上正确混合和渲染。我没有在别人身上试过。我已经搜索了很长一段时间,但徒劳无功,寻找一些明确的答案。顺便说一句,唯一的参考是在 VBO 扩展规范中提到了“原语序列”,但它没有解决原语重叠时会发生什么。
问题:
这是保证的行为吗?那结果是否与在立即模式下在 glBegin(...) 和 glEnd(...) 中发出多个调用相同(由标准保证)?
注意:深度缓冲区和模板缓冲区已关闭。