WebGL2 跨浏览器的 RGBA16UI 支持

问题描述 投票:0回答:1

我试图让 WebGL2 RGBA16UI 纹理工作,它们似乎工作如我上一个问题的答案所示:如何在 WebGL 中创建 16 位无符号整数/无符号短 2D 纹理

但是,尽管答案中的代码单独有效:

const gl = canvas.getContext('webgl2');
const tex = gl.createTexture();

gl.bindTexture(gl.TEXTURE_2D, tex);
gl.texImage2D(
      gl.TEXTURE_2D,
      0,
      gl.RGBA16UI,
      8,
      8,
      0,
      gl.RGBA_INTEGER,
      gl.UNSIGNED_SHORT,
      null
);
console.log(gl.getError());

当我尝试添加实际像素时它不起作用。

const gl = canvas.getContext('webgl2');
const tex = gl.createTexture();

gl.bindTexture(gl.TEXTURE_2D, tex);
let data = new Uint16Array(8 * 8 * 4);
gl.texImage2D(
      gl.TEXTURE_2D,
      0,
      gl.RGBA16UI,
      8,
      8,
      0,
      gl.RGBA_INTEGER,
      gl.UNSIGNED_SHORT,
      data
);
console.log(gl.getError());

即使过度分配,例如此 8x8 纹理的大小为 1000,此代码也不会工作。

我也尝试过使用不同类型的类型化数组,但由于这是使用

gl.UNSIGNED_SHORT
,它在控制台中明确要求我使用
Uint16Array

这段代码在 Safari 和 Chrome 上都不起作用,但在 Firefox 上运行良好,尽管它似乎是我正在使用的 WebGL2 中得到良好支持的部分。 https://webgl2fundamentals.org/webgl/lessons/webgl-readpixels.html

我认为这很可能只是这些浏览器上的 WebGL API 之间的差异,但是,我想知道为什么在没有数据的情况下创建纹理时这个问题不是问题,为什么错误消息如此模糊(这只是一个警告,仅在我添加数组数据时产生,并且仅表示格式和类型无效而不是不受支持),我应该使用(推荐)哪些扩展来解决此问题及其级别支持,以及如果我错了如何解决这个问题。

如果你们能够发送一些支持格式的好文档,因为我已经看过了:

似乎表明WebGL2支持这一点

javascript cross-browser webgl webgl2 webgl-extensions
1个回答
0
投票

刚刚做了检查,这是我在创建纹理之前使用的库中的一些初始化代码的问题。对于那个很抱歉。即使使用 WebGL2 加载数据,RGBA16UI 纹理现在看起来也能正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.