我一直在阅读openGL规范,试图找到这个问题的答案,但是没有运气。我试图弄清楚OpenGL是否保证诸如GLDrawElements或GLDrawArrays之类的绘制调用将按照它们在VBO中出现的顺序精确地绘制元素,或者是否可以自由地按任何顺序处理这些基元的片段。
例如,如果我有一个包含30个顶点的顶点缓冲区,这些顶点代表10个三角形,每个顶点具有相同的坐标。总是总是这样的情况:首先绘制与顶点0、1和2对应的三角形(因此在底部);并且对应于顶点28、29、30的三角形总是最后渲染(因此在顶部)?
最佳答案
规范非常仔细地定义了所有渲染的顺序。顶点数据的数组按顺序处理,这导致以特定顺序生成图元。据说每个图元都是按顺序栅格化的,以后的图元必须先完成栅格化才能栅格化。
当然,这就是OpenGL所说的所有行为。通过一次光栅化和处理多个图元,实现可以(并且确实)作弊。但是,他们仍将遵守“好像”规则。因此,它们在内部作弊,但仍将结果写入,就像一样,它们已按顺序执行。
是的,您可以依靠特定的命令。除非您使用的是perform incoherent memory accesses的着色器;否则然后将所有赌注都关闭以进行着色器写入。