我正在将一个C++/OpenGL应用程序移植到WebGL中,并尝试创建和配置帧缓冲区。
帧缓冲区有三种类型的纹理可以写入:vec2、vec2和uint。(全球RG32F、全球RG32F、全球R32UI)
下面是如何初始化帧缓冲区:
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.tex参数(gl.TEXTURE_2D,gl.TESTURE_MIN_FILTER,gl.NEAREST);gl.tex参数(gl.TEXTURE_2D,gl.TESTURE_MAG_FILTER,gl.NEAREST);gl.帧缓冲区纹理2D(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.tex参数(gl.TEXTURE_2D,gl.TESTURE_MIN_FILTER,gl.NEAREST);gl.tex参数(gl.TEXTURE_2D,gl.TESTURE_MAG_FILTER,gl.NEAREST);gl.帧缓冲区纹理2D(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.tex参数(gl.TEXTURE_2D,gl.TESTURE_MIN_FILTER,gl.NEAREST);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.NEAREST);gl.帧缓冲区纹理2D(gl.FRAMEBUFFER,gl.COLOR_ATTACHMENT2,gl.TEXTURE_2D,n_TEXTURE,0);gl.drawBuffers([gl.COLOR_ATTACHMENT0,gl.COLROR_ATTACHMENT1,gl.CLOR_ATTAC HMENT2]);
帧缓冲区不完整:gl.检查帧缓冲状态(gl.FRAMEBUFFER)
收益gl.FRAMEBUFFER_INCOMPLETE_附件
并显示警告:帧缓冲区不完整。(状态:0x8cd6)COLOR_ATTACHMENT1:附件的有效格式为RG32F,无法渲染。
你知道我的代码有什么问题吗?