我想使用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