如何在WebGL中创建16位无符号整数/无符号短2D纹理

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

我尝试在 WebGL 中创建 16 位无符号整数/无符号短 2D 纹理,但参数虽然看起来合适,但只会导致错误 1282。 这是我尝试过的:

let 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_INT,
      null
);
console.log(gl.getError()); // this prints out an error

我在一个空的 p5.js 草图中尝试过这个(p5.js 只是用于设置 WebGL 及其其他功能,我很确定错误是与参数有关,而不是与任何以前的代码有关)。

我查看了官方文档,它表明除了

gl.RGBA_INTEGER
之外,所有这些在相应位置确实都是有效的枚举(我已经尝试过
gl.RGBA
,但这也只是给出了错误 1282)。

gl.RGBA_INTEGER
来自我和许多其他人发现普遍可靠的来源,即https://webgl2fundamentals.org/webgl/lessons/webgl-data-textures.htmlhttps://webgl2fundamentals。 org/webgl/lessons/webgl-readpixels.html。这些显示

RGBA16UI yes RGBA_INTEGER,UNSIGNED_INT RGBA_INTEGER,UNSIGNED_SHORT

是的,我已经尝试过

gl.UNSIGNED_INT
gl.UNSIGNED_SHORT
,每个都带有
gl.RGBA_INTEGER
gl.RGBA

我还在 Chrome 和 Firefox 的相当新的版本上尝试过此操作,并进行检查以确保它们不会被锁定在扩展等内容之后。这些只是常规的 ui16/ushort 纹理,而不是浮点纹理,并且似乎受到我的支持,但我没有发现任何需要对这些纹理进行某种扩展的信息。

基本上我必须进行哪些参数或更改才能修复错误 1282?

javascript webgl textures texture2d webgl2
1个回答
0
投票

根据 webgl 基础知识表的以下组合对我来说在 Linux 下的 Chrome 中运行良好。

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());
<canvas id="canvas"></canvas>

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