0

ChatGPT坚持认为,当使用帧缓冲区并附加多个绘制缓冲区时,0索引的缓冲区将是您在着色器中写入时将在画布上渲染的缓冲区。然而,我认为情况并非如此。

以下是我的设置方式:

//创建和绑定帧缓冲区multiFrameBuffer=gl.createFramebuffer();gl.bindFramebuffer(gl.FRAMEBUFFER,multiFrameBuffer);//为颜色附件创建纹理const textureRender=createTexture(gl);const textureSmoothed=创建纹理(gl);const textureWithChangeMarks=创建纹理(gl);//将纹理附加到帧缓冲区gl.帧缓冲Texture2D(gl.FRAMEBUFFER,gl.COLOR_ATTACHMENT0,gl.TEXTURE_2D,textureRender,0);gl.帧缓冲区纹理2D(gl.FRAMEBUFFER,gl.COLOR_ATTACHMENT1,gl.TEXTURE_2D,纹理平滑,0);gl.帧缓冲区纹理2D(gl.FRAMEBUFFER,gl.COLOR_ATTACHMENT2,gl.TEXTURE_2D,带更改标记的纹理,0);//指定绘图缓冲区gl.draw缓冲器([gl.COLOR_ATTACHMENT0,gl.颜色_附件1,gl.颜色_附件2]);

在片段着色器中,我定义:

布局(location=0)out vec4 fragColor;布局(location=1)out vec4 mergedColor;布局(location=2)out vec4 changedColor;

我将颜色写入所有向量,我希望写入fragColor(碎片颜色)将是与webgl上下文关联的画布上的渲染像素,但没有渲染。如果我读取像素从另外两个-我得到了预期的缓冲区。我还没试着从附件0-但我希望能够直接渲染到画布上。

1答案1

重置为默认值
2

只能渲染到帧缓冲区或渲染到画布(默认帧缓冲区)。调用默认帧缓冲区(调用时绑定gl.bindFramebuffer(gl.FRAMEBUFFER,空))不能在上下文创建期间给定的参数之外进行配置,这意味着它将始终具有且只有一个颜色附件。

如果你正在使用webgl2,你可以使用blitFrame缓冲区从您的读取FRAMEBUFFER到您的图纸_冲压件,使用颜色_缓冲_比特这将把第一个颜色附件的内容复制到画布上。在WebGL1中,您需要绘制一个屏幕空间矩形,并使用简单的片段着色器手动拼接纹理。

2
  • 尝试时blitFrame缓冲区方法,我得到:GL_INVALID_OPERATION:对多采样帧缓冲区的操作无效错误。ChatGPT建议创建一个“中间”帧缓冲区,绑定纹理并从中复制-但我在尝试时仍然会出错。 评论 2月28日16:42
  • 1

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.