OpenGL是否保证顶点缓冲区中的基元将按顺序绘制?

Sir*_*bda 10 opengl

我一直在阅读openGL规范,试图找到这个问题的答案,没有运气.我试图弄清楚OpenGL是否保证绘制调用(如GLDrawElements或GLDrawArrays)将按照它们在VBO中出现的顺序绘制元素,或者是否可以按任意顺序自由处理这些基元的片段.

例如,如果我有一个顶点缓冲区,其中30个顶点代表10个三角形,每个顶点具有相同的坐标.是否总是会出现对应于顶点0,1和2的三角形将首先渲染(因此在底部); 并且对应于顶点28,29,30的三角形总是最后渲染(因此在顶部)?

Nic*_*las 13

规范非常谨慎,以定义渲染所有内容的顺序.按顺序处理顶点数据的数组,这导致以特定顺序生成基元.据说每个基元按顺序进行光栅化,后来的基元在完成之前不能进行光栅化.

当然,这就是OpenGL所说的应该表现的方式.实现可以(并且确实)通过一次栅格化和处理多个基元来作弊.但是,他们仍然会遵守"似乎"规则.因此他们在内部作弊,但仍然会将结果写成顺序执行.

所以,是的,您可以依赖特定的订单.除非您使用着色器执行非相干内存访问 ; 然后所有投注都关闭着色器写入.