有趣的是,有多少文档可以避免消除WebGLRenderingContext#getParameter(WebGLRenderingContext.MAX_TEXTURE_SIZE)
含义的歧义。 “尺寸”不是很具体。
纹理的最大存储大小是否以字节为单位,这意味着降低位深度或使用更少的颜色通道会增加最大尺寸?它是纹理的最大像素直径,这意味着如果你的纹理是高度矩形的话,你在可寻址区域方面会受到更多限制吗?是最大像素数?
答案 0 :(得分:3)
本文档的其余部分旨在结合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_SIZE
或MAX_TEXTURE_SIZE x 1
纹理,但是你可能无法创建一个MAX_TEXTURE_SIZE x MAX_TEXTURE_SIZE
纹理,因为你内存不足
答案 1 :(得分:1)
最大直径(以像素为单位)。如果M
是最大纹理大小,则可以创建大小为M x M
,M/2 x M/4
,M x 1
的纹理,等等;但是你不能制作大小为2M x 2M
或1 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适合可用的内存。)