WebGL的MAX_TEXTURE_SIZE是最大面积,直径还是字节?

时间:2016-01-22 12:16:48

标签: webgl

有趣的是,有多少文档可以避免消除WebGLRenderingContext#getParameter(WebGLRenderingContext.MAX_TEXTURE_SIZE)含义的歧义。 “尺寸”不是很具体。

纹理的最大存储大小是否以字节为单位,这意味着降低位深度或使用更少的颜色通道会增加最大尺寸?它是纹理的最大像素直径,这意味着如果你的纹理是高度矩形的话,你在可寻址区域方面会受到更多限制吗?是最大像素数

2 个答案:

答案 0 :(得分:3)

正如WebGL spec section 1.1

中所述
  

本文档的其余部分旨在结合OpenGL ES 2.0规范(撰写本文时的2.0.25,可从Khronos OpenGL ES API Registry获得)阅读。除非另有说明,否则每种方法的行为都由OpenGL ES 2.0规范定义

OpenGL ES 2.0.25 spec, section 3.7.1

  

对于0级到k级的图像数组,二维纹理图像的最大允许宽度和高度必须至少为2^(k−lod),其中k是MAX_TEXTURE_SIZE的对数基数2,lod是图像阵列的细节层次。

这是您可以为纹理指定的最大宽度和/或高度。请注意,这与内存无关,正如@Strilanc指出的那样。因此,虽然你可以创建一个1 x MAX_TEXTURE_SIZEMAX_TEXTURE_SIZE x 1纹理,但是你可能无法创建一个MAX_TEXTURE_SIZE x MAX_TEXTURE_SIZE纹理,因为你内存不足

答案 1 :(得分:1)

最大直径(以像素为单位)。如果M是最大纹理大小,则可以创建大小为M x MM/2 x M/4M x 1的纹理,等等;但是你不能制作大小为2M x 2M1 x 2M的纹理。

考虑this opengl capability report中报告的最大MAX_TEXTURE_SIZE为16384(2 ^ 15)。如果这是最大像素数(nevermind bytes ),而不是最大直径,则无法创建256x256纹理。哪个非常小

(注意除了MAX_TEXTURE_SIZE之外的限制适用。例如,我的机器返回的最大纹理大小为2 ^ 15.但是带有rgba浮点像素的2 ^ 15 x 2 ^ 15纹理将需要16个千兆字节的空间。它不会' t适合可用的内存。)