Использование расширения OES_texture_float

Как использовать расширение 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);

Что нужно написать вместо "???"

1 ответ

Решение

Если у вас включено расширение, его 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
}

чтобы проверить, можете ли вы визуализировать плавающие текстуры после того, как вы прикрепите текстуры к FBO.

Источник: потратил часы, чтобы выяснить, почему эта штука не работает в IE, даже если она поддерживает OES_texture_float расширение.

Также имейте в виду, что вы не можете использовать gl.LINEAR фильтрация с текстурами с плавающей точкой, если вы также не включите OES_texture_float_linear расширение, которое недоступно на большинстве мобильных устройств с августа 2015 года

Другие вопросы по тегам