我正在使用WebGL进行某些图像处理,并且我希望片段着色器输出到1或2通道纹理。我可以将RGBA或RGB纹理附加到帧缓冲区并成功输出到那些帧缓冲区。但是,如果我将LUMINANCE或LUMINANCE_ALPHA纹理附加到帧缓冲区,则fb状态显示为不完整,并且不起作用。希望避免不必要的额外纹理通道,但不确定是否可行。感谢您的任何建议!
如果将格式更改为下面的gl.RGBA,那么它将起作用:
gl.getExtension("OES_texture_float")
var tex = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, tex);
var format = gl.LUMINANCE;
gl.texImage2D(gl.TEXTURE_2D, 0, format, 512, 512, 0, format, gl.FLOAT, null);
var fb = gl.createFramebuffer();
gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, tex, 0);
if (gl.checkFramebufferStatus(gl.FRAMEBUFFER) != gl.FRAMEBUFFER_COMPLETE) {
alert("framebuffer not complete");
}
答案 0 :(得分:0)
在WebGL1中,仅保证3种帧缓冲区附件组合有效
以下所有帧缓冲对象附件的组合,当所有附件都是完整的帧缓冲附件,非零且具有相同的宽度和高度时,必须导致帧缓冲完整:
COLOR_ATTACHMENT0
=RGBA
/UNSIGNED_BYTE
纹理COLOR_ATTACHMENT0
=RGBA
/UNSIGNED_BYTE
纹理+DEPTH_ATTACHMENT
=DEPTH_COMPONENT16
渲染缓冲区COLOR_ATTACHMENT0
=RGBA
/UNSIGNED_BYTE
纹理+DEPTH_STENCIL_ATTACHMENT
=DEPTH_STENCIL
渲染缓冲区
所有其他组合都取决于实现。
(注意:WebGL1所基于的OpenGL ES 2.0不保证任何有效期的组合
在WebGL2 a bunch of format/type combinations are guaranteed to work中,但LUMINANCE/FLOAT
不是其中之一。
答案 1 :(得分:0)
您可以查看https://geotiffjs.github.io/cog-explorer,以获取有关如何使用FLOAT和LUMINANCE数据的一些示例。加载示例“ Landsat 8示例1”或“ Landsat 8示例2”,并通过webglrenderer.js进行调试。