首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WebGL2 :不完整的帧缓冲区

WebGL2 :不完整的帧缓冲区
EN

Stack Overflow用户
提问于 2021-09-01 15:47:21
回答 1查看 214关注 0票数 1

我正在将一个C++/OpenGL应用程序移植到WebGL中,并且正在尝试创建和配置一个帧缓冲区。

帧缓冲区有3种我们可以写入的纹理类型: vec2,vec2,uint。(gl.RG32F, gl.RG32F, gl.R32UI)

下面是我初始化帧缓冲区的方法:

代码语言:javascript
运行
复制
var gbuffer = gl.createFramebuffer();
gl.bindFramebuffer(gl.FRAMEBUFFER, gbuffer);

var z0_texture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, z0_texture);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RG32F, output_canvas.width, output_canvas.height, 0, gl.RG, gl.FLOAT, null);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, z0_texture, 0);

var zn_texture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, zn_texture);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RG32F, output_canvas.width, output_canvas.height, 0, gl.RG, gl.FLOAT, null);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT1, gl.TEXTURE_2D, zn_texture, 0);

var n_texture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, n_texture);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.R32UI, output_canvas.width, output_canvas.height, 0, gl.RED_INTEGER, gl.UNSIGNED_INT, null);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT2, gl.TEXTURE_2D, n_texture, 0);

gl.drawBuffers([gl.COLOR_ATTACHMENT0, gl.COLOR_ATTACHMENT1, gl.COLOR_ATTACHMENT2]);

帧缓冲区不完整:gl.checkFramebufferStatus(gl.FRAMEBUFFER)返回gl.FRAMEBUFFER_INCOMPLETE_ATTACHMENT并显示警告:Framebuffer not complete. (status: 0x8cd6) COLOR_ATTACHMENT1: Attachment has an effective format of RG32F, which is not renderable.

知道我的代码出了什么问题吗?

EN

Stack Overflow用户

发布于 2021-09-10 07:18:57

我不想渲染这些纹理。我正在后处理中使用它们。这就是我在C++中做的,但在WebGL中不能做同样的事情。

不是的。您不能在WebGL中执行相同的操作。

错误的意思是“附件有一个有效的RG32F格式,这是不可渲染的”-意味着gl.RG32F不是一个可渲染的格式。因此,不能将其用于帧缓冲区。必须使用颜色可渲染格式。请参阅OpenGL ES 3.0 Specification - Table 3.13 (WebGL 2.0与OpenGL ES 3.0紧密一致)。

你不能像在桌面OpenGL中那样在WebGL中做同样的事情。在桌面OpenGL中,RG32F是可渲染的颜色。但是,WebGL基于OpenGL ES。在OpenGL ES中,RG32不是一种颜色可渲染格式。“颜色可渲染”并不意味着你可以渲染这些纹理。这意味着您可以使用此格式渲染到纹理中。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69016956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档