什么决定了最大纹理尺寸?
Posted
技术标签:
【中文标题】什么决定了最大纹理尺寸?【英文标题】:What Determines Maximum Texture Size? 【发布时间】:2014-09-09 16:36:19 【问题描述】:我是一名从事手机游戏的 Unity3D 开发人员。最近我们遇到了一个问题,我们所有的纹理都被渲染为黑色方块。经过一些研究,我们发现它与设备支持最大纹理大小有关。有问题的设备(iPhone 4 和较旧的 android 手机)仅支持 2048 x 2048 的最大纹理大小,而较新的设备支持的最大纹理大小为 4096 x 4096。为了解决这个问题,我们将精灵图解压缩为几个较小的2048 x 2048 纹理贴图。
两个问题:
1) 什么决定了特定设备支持的最大纹理大小?是显卡,某种硬件限制吗?或者是 OpenGL ES 支持的版本决定了这一点?
2) 有没有一种简单的方法可以以编程方式找出设备的最大纹理尺寸?如果是这样,您将使用什么 API 或 SDK 来查找信息
【问题讨论】:
这篇文章与您的问题相关:***.com/a/19572916/3256930. 【参考方案1】:1) 由设备硬件决定,特别是图形芯片 (GPU)。
2) 是的。它是显卡报告的 OpenGL 属性的一部分。试试这个代码 sn-p:
int size;
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &size);
只要您只考虑 ios 设备,这很容易:iPhone 4S 及更新版本和 iPad 2 及更新版本支持 4096x4096 纹理。旧设备仅支持 2048x2048。
iPad 2 是个特例,如果安装的 iOS 版本为 5.0 或更低版本,则只能使用 2048x2048。
【讨论】:
这并不总是可靠的(正如红皮书所解释的),因为它没有考虑内部格式。基本上,由于某些内部格式为每个纹素占用更多空间,因此这只是 GL_LUMINANCE4 等格式的最佳情况指示符。以上是关于什么决定了最大纹理尺寸?的主要内容,如果未能解决你的问题,请参考以下文章
由于“最大纹理大小”,FabricJS 无法将过滤器应用于大图像
libGDX:FrameBuffer 大小限制 == 最大纹理大小?