什么是绘图缓冲区?
What are drawBuffers?
关于clearBuffer[fiuv]
的opengl docs as well as OpenGL ES docs状态:
If buffer is GL_COLOR, a particular draw buffer GL_DRAW_BUFFERi is specified by passing i as drawbuffer
确实,WebGL spec 定义了 DRAW_BUFFER0
的值 .. DRAW_BUFFER15
但是这些东西是什么?我听说过帧缓冲区和渲染缓冲区……但什么是绘制缓冲区?我该如何创建一个?与帧缓冲区有什么关系?如果我有一些使用多个帧缓冲区的延迟渲染管道,我怎么知道我应该清除哪一个?
注意:这可能看起来像 Regarding drawBuffer in glClearBufferiv 的重复,但这个问题是旧问题,在 OpenGL 下标记,并且没有完全回答相同的问题
帧缓冲区有附件。当帧缓冲区是当前绑定的 DRAW_FRAMEBUFFER
时,这些附件也称为“绘制缓冲区”,因为它们是将被绘制到的缓冲区。
有一个功能gl.drawBuffers
可以让您选择实际写入哪些附件
gl.drawBuffers([
gl.COLOR_ATTACHMENT0, // draw to the first attachment
gl.NONE, // don't draw to the 2nd attachment,
gl.COLOR_ATTACHMENT2, // draw to the 3rd attachment
]);
请注意,这些设置是当前绑定的帧缓冲区状态的一部分。它们不是全局设置。 (当您在没有帧缓冲区绑定的情况下调用上面的函数时,canvas 本身有一组这种状态)
同样,您可以调用gl.clearBufferXXX
来清除当前绑定的帧缓冲区的特定附件。例如清除第 3 个附件,如
const drawbuffer = 2
gl.clearBufferfv(gl.COLOR, drawBuffer, [1, 0, 0, 1]);
然后清除当前绑定的DRAW_FRAMEBUFFER
上的第3个颜色附件。 (0为第一个,1为第二个,2为第三个附件)
常量DRAW_BUFFER0
... DRAW_BUFFER15
的唯一用途是查询gl.drawBuffers
设置的值。例如。 gl.getParameter(gl.DRAW_BUFFER2)
获取当前绑定的帧缓冲区的绘制缓冲区设置。
关于clearBuffer[fiuv]
的opengl docs as well as OpenGL ES docs状态:
If buffer is GL_COLOR, a particular draw buffer GL_DRAW_BUFFERi is specified by passing i as drawbuffer
确实,WebGL spec 定义了 DRAW_BUFFER0
的值 .. DRAW_BUFFER15
但是这些东西是什么?我听说过帧缓冲区和渲染缓冲区……但什么是绘制缓冲区?我该如何创建一个?与帧缓冲区有什么关系?如果我有一些使用多个帧缓冲区的延迟渲染管道,我怎么知道我应该清除哪一个?
注意:这可能看起来像 Regarding drawBuffer in glClearBufferiv 的重复,但这个问题是旧问题,在 OpenGL 下标记,并且没有完全回答相同的问题
帧缓冲区有附件。当帧缓冲区是当前绑定的 DRAW_FRAMEBUFFER
时,这些附件也称为“绘制缓冲区”,因为它们是将被绘制到的缓冲区。
有一个功能gl.drawBuffers
可以让您选择实际写入哪些附件
gl.drawBuffers([
gl.COLOR_ATTACHMENT0, // draw to the first attachment
gl.NONE, // don't draw to the 2nd attachment,
gl.COLOR_ATTACHMENT2, // draw to the 3rd attachment
]);
请注意,这些设置是当前绑定的帧缓冲区状态的一部分。它们不是全局设置。 (当您在没有帧缓冲区绑定的情况下调用上面的函数时,canvas 本身有一组这种状态)
同样,您可以调用gl.clearBufferXXX
来清除当前绑定的帧缓冲区的特定附件。例如清除第 3 个附件,如
const drawbuffer = 2
gl.clearBufferfv(gl.COLOR, drawBuffer, [1, 0, 0, 1]);
然后清除当前绑定的DRAW_FRAMEBUFFER
上的第3个颜色附件。 (0为第一个,1为第二个,2为第三个附件)
常量DRAW_BUFFER0
... DRAW_BUFFER15
的唯一用途是查询gl.drawBuffers
设置的值。例如。 gl.getParameter(gl.DRAW_BUFFER2)
获取当前绑定的帧缓冲区的绘制缓冲区设置。