我正在尝试从ArrayBuffer
包含 1 个组件的图像创建 2D 纹理。而且我想这样做而不将其复制到 4 个组件图像中。我想知道两者是否可行webgl
(webgl2
对 webgl2 有更多希望)。
webgl 1
我试过这个
gl.texImage2D(gl.TEXTURE_2D, 0, gl.LUMINANCE, width, height, 0, gl.LUMINANCE, gl.UNSIGNED_BYTE, pixelData);
正如文档所说,我尝试了两个gl.LUMINANCE
ansgl.LUMINANCE_ALPHA
每个颜色分量都是...
与gl.ALPHA
例如它说的相反:
丢弃红色、绿色和蓝色分量并读取 alpha 分量
由此看来,很明显gl.ALPHA
会期望一个 4 个组件的图像,而gl.LUMINANCE
只会gl.LUMINANCE_ALPHA
期望 1 个组件。
但是当我执行以下操作时,我收到一个错误,告诉我缓冲区太小。如果我传入一个大小为 4 倍的缓冲区,则不会出现错误,因此它似乎也期待一个 4 分量图像。
我还尝试将宽度和高度除以 4,以为我可以在我的着色器上超越纹理坐标,但得出的结论是,这对于插值来说可能是个坏主意,或者我必须自己做。
webgl 2
所以我对 webgl 1 没有太多期望,但我很确定使用 webgl2 会很容易。但不幸的是,以下方法不起作用:
gl.texImage2D(gl.TEXTURE_2D, 0, gl.R8, this.image.width, this.image.height, 0, gl.RED, gl.UNSIGNED_BYTE, pixelData);
它正在做同样的抱怨缓冲区太小并且不会在缓冲区大 4 倍时抛出任何错误。
那么是否有可能使用任何(或两个)版本,或者我注定要创建一个包含 4 个组件的临时图像?