繁体   English   中英

WebGL中的texImage2D需要多少数据?

[英]How much data does texImage2D in WebGL need?

我在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个字节的填充,是最后一行没有填充?

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

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

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

供参考,请参阅Gecko源代码

正如user1421750指出的那样,行被填充

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM