WebGL中的texImage2D需要多少数据?

时间:2015-06-11 21:31:01

标签: javascript three.js webgl

我在ThreeJS中创建了一个DataTexture,然后调用texImage2D。

var twidth = 50;
var theight = 50;
var tsize = twidth * theight;

var tileData = new Uint8Array( tsize * 3);

//fill it with some data

tileDataTexture = new THREE.DataTexture(this.tileData, twidth, theight, THREE.RGBFormat);

正如你所看到的,我使用了50x50 Texels和3个8Bit通道的大小(三个中的THREE.RGB)。当我使用尺寸为7500(50 * 50 * 3)的UInt8Array时,Firefox告诉我,它需要更多数据:

Error: WebGL: texImage2D: not enough data for operation (need 7598, have 7500)

我想知道:这98个字节来自哪里?我猜测对齐,但7598甚至不能被4整除,而7500则是。 (现在我想起来了,它不能被3,我的通道数量整除)

7600会有意义,因为这意味着每行填充2个字节,最后一行是不填充的?

(我觉得那个尺寸应该只使用四个倍数,我仍然想知道答案)

2 个答案:

答案 0 :(得分:2)

行长度与4的倍数对齐,最后一行除外。在您的情况下,这意味着每行需要2个字节的填充,每行总共152个字节(3 * 50 + 2)。

152 * (50 - 1) + 3 * 50 = 7598

供参考,请参阅source code of Gecko

答案 1 :(得分:1)

当user1421750指出行被填充

但是,您可以通过设置texture.unpackAlignment来设置每行填充多少。它默认为4,但您可以将其设置为8,4,2或1。

就我个人而言,我会默认为1,因为我认为你不会像你一样感到惊讶