WebGL2 рендеринг в текстуру R32F

Я не могу привязать R32F текстуру к framebuffer, потому что такие текстуры не «по умолчанию отображаются в цвете» согласно этот источник.

Но затем говорится, что «эти функции доступны как дополнительные расширения».

Как использовать эти расширения? Как мне заставить его работать?


person George Cherevichenko    schedule 25.04.2018    source источник


Ответы (1)


Вы пытаетесь включить расширение EXT_color_buffer_float

function main() {
  const gl = document.createElement("canvas").getContext("webgl2");
  const ext = gl.getExtension("EXT_color_buffer_float");
  if (!ext) {
    console.log("sorry, can't render to floating point textures");
    return;
  }

  const tex = gl.createTexture();
  gl.bindTexture(gl.TEXTURE_2D, tex);
  const level = 0;
  const internalFormat = gl.R32F;
  const width = 1;
  const height = 1;
  const border = 0;
  const format = gl.RED;
  const type = gl.FLOAT;
  gl.texImage2D(
    gl.TEXTURE_2D, level, internalFormat,
    width, height, border, format, type, null);

  const fb = gl.createFramebuffer();
  gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
  gl.framebufferTexture2D(
    gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0,
    gl.TEXTURE_2D, tex, level);

  const status = gl.checkFramebufferStatus(gl.FRAMEBUFFER);
  console.log(`can ${status === gl.FRAMEBUFFER_COMPLETE ? "" : "NOT "}render to R32`);
}
main();

person gman    schedule 26.04.2018