OpenGL是否保证GL_LINES或GL_LINE_STRIP的光栅化顺序



如果我使用GL_LINESGL_LINE_STRIP渲染多边形线,我可以假设具有低顶点索引的线段首先绘制到帧缓冲区吗?比如,当我使用顶点v0、v1、v2指定条形时,我可以假设先渲染段v0v1,然后渲染v1v2吗?

OpenGL标准是基于这样一种概念定义的,即一切都将"像"按照特定顺序执行。因此,它定义了几乎所有事物的严格顺序。

当涉及到渲染命令中的顶点和基本体时,是的,有一个顺序。具体来说,一切都是按照您提交数据的顺序进行的。每个顶点在glDrawArrays/Elements调用中从第一个到最后一个依次获取。当顶点被转换为基本体时,这个程序集会对生成的基本体进行排序。基本体是按照遇到其入射顶点的顺序生成的。

或者更确切地说,OpenGL的行为"就像"遵循了提交顺序。然而,事实是,您唯一可以判断这是否属实的地方是,它们的片段被放入帧缓冲区的顺序。因此,实现可以异步处理基元,但随后根据提交顺序混合来自这些基元的单个像素数据。

但这些都是实现细节。关键是,如果在同一个绘制调用中渲染两条线,并且它们重叠,并且启用了混合,OpenGL将保证渲染它们,就像完全渲染了由阵列中前两个顶点形成的线一样,然后渲染了由后一个顶点(ices(形成的线。因此,它们将按顺序混合。

OpenGL中唯一明确无序的渲染操作是非相干内存访问和镶嵌生成的基元的顺序。后者只允许它们在补丁中无序排列;一个镶嵌面片中的所有基本体都必须在后面的任何基本体之前渲染(好像(。

最新更新