webgl - WebGL Multi-Render Target:对于drawBuffers,gl.BACK有什么作用?
问题描述
我正在研究我的多重渲染目标管道,我在文档中遇到了我不完全理解的好奇心,并且谷歌搜索了一个小时并没有帮助我找到明确的答案。
您利用gl.drawBuffers([...])
将着色器中使用的位置链接到帧缓冲区中的实际颜色附件。因此,大多数预期参数是有意义的:
gl.NONE - 使该位置的着色器输出不输出到 FBO 中的任何颜色附件
gl.COLOR_ATTACHMENT[0 - 15] - 使着色器位置输出到指定的颜色附件。
但是我们有这个神秘的目标(来自文档):
gl.BACK: Fragment shader output is written into the back color buffer.
我不认为我了解背景颜色缓冲区是什么,尤其是相对于当前附加的 FBO。据我所知,您在制作 FBO 时没有指定“背景颜色缓冲区”……那这是什么意思?这个“背景颜色缓冲区”是什么?
解决方案
在 WebGL 中,后台缓冲区实际上是“画布”。之所以称为 ,是backbuffer
因为有时会有一个前端缓冲区。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
仅在写入画布时使用,换句话说,帧缓冲区设置null
为gl.bindFramebuffer(null);
gl.drawBuffers([
gl.BACK, // OR gl.NONE
]);
推荐阅读
- plot - 在一个图上放置和绘制图形
- python - 带有文件夹的 Python f 字符串
- mysql - 如何在不访问新的情况下正确恢复 mysqldump
- r - 如何防止 R 或 Excel 将冒号配对值转换为十进制?
- jquery - WordPress 中的 jQuery 问题 - 从数据库中使用预先填写的 HTML 数据检索表的问题
- javascript - Dynamic high chart not rendering in MVC C#
- python - Trying to run these commands to install soundfile and pyaudio and getting these errors how can I resolve them
- vb.net - Cannot Set Focus on ComboBox with DropDownStyle DropDown
- php - Installing php-decimal extension on laragon for php 7.2, The specified module could not be found. Extension decimal does not exist
- android - API 'BaseVariant.getApplicationIdTextResource' is obsolete