WebGL Error : ArrayBuffer not big enough for request in case of gl.LUMINANCE

WebGL Error : ArrayBuffer not big enough for request in case of gl.LUMINANCE

我正在尝试使用 Uint8Array 渲染图像并获取 WebGL: INVALID_OPERATION: texImage2D: ArrayBufferView not big enough for request.

var gl = currentImage.gl;
gl.activeTexture(gl.TEXTURE0);
gl.bindTexture(gl.TEXTURE_2D, texture);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.LUMINANCE, columns, rows, 0, gl.LUMINANCE, gl.UNSIGNED_BYTE, Buffer);

在少数图像上,它工作正常,但它抛出的 ArrayBuffer 不够大,对于少数图像的请求错误。

但是如果我从列和行中减去 1,它工作正常但图像会倾斜。 但是,我可以维护一个 2d canvas 并将其推送到 GPU,但我不想维护它,因为它会降低一些性能,我需要不必要地处理 canvas。

这是从 1 中减去后的结果。

var gl = currentImage.gl;
gl.activeTexture(gl.TEXTURE0);
gl.bindTexture(gl.TEXTURE_2D, texture);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.LUMINANCE, columns-1, rows-1, 0, gl.LUMINANCE, gl.UNSIGNED_BYTE, Buffer);

我是不是做错了什么或遗漏了什么?

我怀疑问题纹理的宽度不能除以 4,而且您没有考虑 UNPACK_ALIGNMENT。

尝试

gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1);