OES_texture_float 扩展使用

Ана*_*ров 0 textures opengl-es webgl opengl-es-2.0 webgl-extensions

如何使用 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);
Run Code Online (Sandbox Code Playgroud)

你需要写什么而不是“???”

Wac*_*per 5

假设您启用了扩展程序,它的gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, size[0], size[1],0, gl.RGBA, gl.FLOAT, null);

然而,有一个很大的警告。OES_texture_float扩展并不保证您能够渲染为浮点纹理。它只是意味着您可以创建和读取浮点纹理。允许您渲染为浮动的实际扩展是WEBGL_color_buffer_float。但如果浏览器支持这个扩展,它们就不会费心去显示它。所以你必须做

if (gl.checkFramebufferStatus(gl.FRAMEBUFFER) !== gl.FRAMEBUFFER_COMPLETE){
    // cant render
}
Run Code Online (Sandbox Code Playgroud)

检查将纹理附加到 FBO 后是否可以实际渲染为浮动纹理。

来源:花了几个小时才弄清楚为什么这个东西在 IE 中不起作用,尽管它支持OES_texture_float扩展。

另请注意,除非您还启用了截至 2015 年 8 月在大多数移动设备上不可用的扩展,gl.LINEAR否则您不能使用浮点纹理过滤OES_texture_float_linear