假设我们在 OpenGL 中绘制了一堆矩形。也就是说,我们正在填充一个顶点缓冲区,然后在一次调用中通过调用将它们全部绘制出来drawArrays,如下所示:
let count = 3;
gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);
gl.bufferData(gl.ARRAY_BUFFER, points, gl.STATIC_DRAW);
gl.vertexAttribPointer(positionAttributeLocation, 2, gl.FLOAT, false, 0, 0);
gl.drawArrays(gl.TRIANGLES, 0, 6 * count);
我的问题是:是否保证以后的矩形将绘制在先前的矩形之上?我没有使用深度测试,一切都是 2D 并且在同一个 z 轴上。
在我的测试中似乎总是如此,但我假设它可能并不总是如此的原因是 GPU 是并行的。也就是说,假设我们要绘制 100,000 个矩形。显然 GPU 不是按顺序渲染它们的,因为 GPU 是一个并行设备,并且渲染在几毫秒内完成。
如果确实如此,那么缓冲区中较早的矩形是否可以绘制在缓冲区中较晚的矩形之上?因为它们都是同时绘制的?如果是这样,有什么办法可以防止这种情况发生吗?对于我的应用程序,我想肯定的是,顶点缓冲区中稍后的四边形总是绘制在先前的四边形之上。