什么决定了纹理的最大尺寸?

4
我是一名从事移动游戏开发的Unity3D开发者。最近我们遇到了一个问题,所有的纹理都被渲染成黑色正方形。经过一些研究,我们发现这与设备支持的最大纹理尺寸有关。所涉及的设备(iPhone 4和旧版Android手机)仅支持最大2048 x 2048的纹理尺寸,而较新的设备则支持最大4096 x 4096的纹理尺寸。为了解决这个问题,我们将精灵地图拆分成几个更小的2048 x 2048的纹理地图。
两个问题:
1)是什么确定了特定设备支持的最大纹理尺寸?是显卡还是某种硬件限制?还是支持的OpenGL ES版本决定了这一点?
2)有没有一种简单的方法可以以编程方式找出设备的最大纹理尺寸?如果有,你会使用哪个API或SDK来查找信息?

这篇文章与你的问题相关:https://dev59.com/_XjZa4cB1Zd3GeqPdFsA#19572916。 - user3256930
1个回答

4

1) 这取决于设备硬件,具体由图形芯片 (GPU) 确定。

2) 是的。这是由图形卡报告的OpenGL属性的一部分。试试这段代码:

int size;
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &size);

只要考虑到iOS设备,就很容易:iPhone 4S及更高版本和iPad 2及更高版本支持4096x4096纹理。旧设备只支持2048x2048。
iPad 2是一个特殊情况,如果安装的iOS版本为5.0或更早版本,则只能使用2048x2048。

这并不总是可靠的(就像《Red Book》所解释的那样),因为它没有考虑内部格式。基本上,因为一些内部格式每个纹素需要更多的空间,所以这只是对于GL_LUMINANCE4等格式的最佳情况指示器。 - Isaac Woods

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接