Рендеринг WebGL2 в текстуру R32F - PullRequest
0 голосов
/ 26 апреля 2018

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

Но тогда говорится "эти функции доступны как дополнительные расширения ".

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

1 Ответ

0 голосов
/ 26 апреля 2018

Вы пытаетесь включить расширение 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();
...