如何使用OES_texture_float扩展?我不明白有必要指定函数texImage2D的参数。
var fb=gl.createFramebuffer();
gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
var rb=gl.createRenderbuffer();
gl.bindRenderbuffer(gl.RENDERBUFFER, rb);
gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_COMPONENT16,size[0],size[1]);
gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT,gl.RENDERBUFFER, rb);
var texture=gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, texture);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, size[0], size[1],0, gl.RGBA, ???, ???);
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0,gl.TEXTURE_2D, texture, 0);
你需要写什么而不是“??”
发布于 2015-08-12 11:51:35
假设您启用了扩展,则它的gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, size[0], size[1],0, gl.RGBA, gl.FLOAT, null);
然而,有一个很大的警告。OES_texture_float
扩展不能保证您能够呈现为浮点纹理。它只是意味着你可以创建和读取浮点纹理。允许您呈现浮点的实际扩展是浮动。但是,如果浏览器支持这个扩展的话,就不会显示它了。所以你必须做
if (gl.checkFramebufferStatus(gl.FRAMEBUFFER) !== gl.FRAMEBUFFER_COMPLETE){
// cant render
}
要检查是否可以在将纹理附加到FBO之后实际呈现为浮动纹理。
来源:花了几个小时来找出为什么这件事在IE中不起作用,尽管它支持OES_texture_float
扩展。
还请注意,除非您还启用了OES_texture_float_linear
扩展,否则不能使用浮点纹理的OES_texture_float_linear
筛选,因为大多数移动设备到2015年8月都无法使用该扩展。
https://stackoverflow.com/questions/31973148
复制