WebGL Multi-Render Target:对于 drawBuffers,gl.BACK 有什么作用?
WebGL Multi-Render Target: For drawBuffers, what does gl.BACK do?
我正在研究我的多渲染目标管道,我在文档中遇到了一个我不完全理解的好奇心,谷歌搜索了一个小时也没有帮助我找到一个明确的答案。
您使用 gl.drawBuffers([...])
到 link 着色器中使用的位置到帧缓冲区中的实际颜色附件。因此,大多数预期参数都有意义:
gl.NONE - 使此位置的着色器输出不输出到 FBO 中的任何颜色附件
gl.COLOR_ATTACHMENT[0 - 15] - 使着色器位置输出到指定的颜色附件。
但是我们有这个神秘的目标(来自文档):
gl.BACK: Fragment shader output is written into the back color buffer.
我不认为我理解背景颜色缓冲区是什么,尤其是相对于当前附加的 FBO。据我所知,您在制作 FBO 时没有指定 'back color buffer'...那么这是什么意思?这是什么'back color buffer'?
在 WebGL 中,后台缓冲区实际上是“canvas”。它被称为 backbuffer
是因为有时会有一个前缓冲区。 Canvas 在 WebGL 中是双缓冲的。一个缓冲区是可见的,另一个是您当前正在绘制的缓冲区。
你不能使用[gl.BACK, gl_COLOR_ATTACHMENT0]
写入帧缓冲区时,每个条目只能是相同的附件或NONE
。例如,假设您有 4 个附件。那么你传给drawBuffers
的数组如下
gl.drawBuffers([
gl.COLOR_ATTACHMENT0, // OR gl.NONE,
gl.COLOR_ATTACHMENT1, // OR gl.NONE,
gl.COLOR_ATTACHMENT2, // OR gl.NONE,
gl.COLOR_ATTACHMENT3, // OR gl.NONE,
])
您不能交换附件。
gl.drawBuffers([
gl.NONE,
gl.COLOR_ATTACHMENT0, // !! ERROR! This has to be COLOR_ATTACHMENT1 or NONE
])
你不能使用 gl.BACK
gl.BACK
仅用于写入 canvas 时,换句话说,帧缓冲区设置为 null
,如gl.bindFramebuffer(null);
gl.drawBuffers([
gl.BACK, // OR gl.NONE
]);
我正在研究我的多渲染目标管道,我在文档中遇到了一个我不完全理解的好奇心,谷歌搜索了一个小时也没有帮助我找到一个明确的答案。
您使用 gl.drawBuffers([...])
到 link 着色器中使用的位置到帧缓冲区中的实际颜色附件。因此,大多数预期参数都有意义:
gl.NONE - 使此位置的着色器输出不输出到 FBO 中的任何颜色附件
gl.COLOR_ATTACHMENT[0 - 15] - 使着色器位置输出到指定的颜色附件。
但是我们有这个神秘的目标(来自文档):
gl.BACK: Fragment shader output is written into the back color buffer.
我不认为我理解背景颜色缓冲区是什么,尤其是相对于当前附加的 FBO。据我所知,您在制作 FBO 时没有指定 'back color buffer'...那么这是什么意思?这是什么'back color buffer'?
在 WebGL 中,后台缓冲区实际上是“canvas”。它被称为 backbuffer
是因为有时会有一个前缓冲区。 Canvas 在 WebGL 中是双缓冲的。一个缓冲区是可见的,另一个是您当前正在绘制的缓冲区。
你不能使用[gl.BACK, gl_COLOR_ATTACHMENT0]
写入帧缓冲区时,每个条目只能是相同的附件或NONE
。例如,假设您有 4 个附件。那么你传给drawBuffers
的数组如下
gl.drawBuffers([
gl.COLOR_ATTACHMENT0, // OR gl.NONE,
gl.COLOR_ATTACHMENT1, // OR gl.NONE,
gl.COLOR_ATTACHMENT2, // OR gl.NONE,
gl.COLOR_ATTACHMENT3, // OR gl.NONE,
])
您不能交换附件。
gl.drawBuffers([
gl.NONE,
gl.COLOR_ATTACHMENT0, // !! ERROR! This has to be COLOR_ATTACHMENT1 or NONE
])
你不能使用 gl.BACK
gl.BACK
仅用于写入 canvas 时,换句话说,帧缓冲区设置为 null
,如gl.bindFramebuffer(null);
gl.drawBuffers([
gl.BACK, // OR gl.NONE
]);