我想使用WebGL将某些矩阵计算卸载到片段着色器。

我正在尝试使用texImage2D将矩阵作为RGB 2D纹理发送,但是我不知道必须如何格式化数据。

我尝试了这个(对于2x2正方形矩阵):

var textureData = new Uint8Array([
  0, 0, 0,  1, 0, 0,
  2, 0, 0,  3, 0, 0
]);
//...
var texture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, texture);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGB, gl.RGB, gl.UNSIGNED_BYTE,
  textureData);


但是我收到以下错误:


  未捕获的TypeError:无法在上执行'texImage2D'
  'WebGLRenderingContext':未找到与
  提供签名。

最佳答案

我正在尝试将矩阵作为RGB 2D纹理发送


恐怕UNSIGNED_BYTE不能为此提供足够的精度,您可能想使用OES_texture_float扩展名,而是将您的纹理创建为浮点纹理。


  我不知道数据必须如何格式化


可以在spec中找到texImage2D的可用签名:

void texImage2D(
    GLenum target,
    GLint level,
    GLint internalformat,
    GLsizei width,
    GLsizei height,
    GLint border,
    GLenum format,
    GLenum type,
    ArrayBufferView? pixels
);

void texImage2D(
    GLenum target,
    GLint level,
    GLint internalformat,
    GLenum format,
    GLenum type,
    TexImageSource? source
);


其中TexImageSource是类型

ImageBitmap
ImageData
HTMLImageElement
HTMLCanvasElement
HTMLVideoElement

09-13 03:04