WebGL2配置帧缓冲提示RG32F不可渲染的不完整错误如何修复
问题原因
- 错误核心是WebGL2默认不支持
RG32F格式纹理作为帧缓冲可渲染附件,你用到的gl.RG32F属于32位浮点纹理格式,WebGL2原生仅支持读取这类纹理,要写入到这类纹理(作为帧缓冲颜色附件)必须显式启用对应的扩展。 - 报错提示已经明确指向
RG32F格式不可渲染,和整数格式的附件无关。
修复方案
在初始化帧缓冲之前,先查询并启用EXT_color_buffer_float扩展,该扩展授权WebGL2可以将32位浮点纹理作为帧缓冲颜色附件写入。
修复后完整代码
// 第一步:启用浮点颜色缓冲扩展,必须在帧缓冲初始化前执行 const floatColorBufferExt = gl.getExtension('EXT_color_buffer_float'); if (!floatColorBufferExt) { throw new Error('当前设备不支持浮点颜色缓冲扩展,无法运行'); } 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.NEAREST,不需要额外启用其他扩展,如果后续需要对浮点纹理做线性采样,再额外启用OES_texture_float_linear扩展即可。 gl.R32UI整数纹理格式是WebGL2原生支持的可渲染格式,不需要额外扩展支持。
内容的提问来源于stack exchange,提问作者bamia
相关产品推荐
相关产品推荐

