iOS模拟器中的乱码图像

时间:2013-02-06 20:47:14

标签: ios objective-c xamarin.ios ios-simulator

我使用GLES 2.0 for iOS制作了iOS游戏。当我在实际设备上运行它时,它与我的高分辨率图像完美配合,但是当我在模拟器中运行它时,我会得到非常不连贯的图像:

choppy

我在开发过程中并没有真正关心,但现在我要提交到iTunes Store,我必须上传3.5英寸和4英寸iPhone的屏幕截图,我没有(我是一直在iPad上开发)。所以我决定使用模拟器,但老实说我不能使用这些截图。

没有购买3.5英寸和4英寸设备只是来截取屏幕截图,我该如何解决这个问题并获得高质量的截图?

注意:原始图像质量很高。即使在视网膜iPad上,它们看起来也不会显得不稳定。

2 个答案:

答案 0 :(得分:2)

这是预期/已知的行为。模拟器只是:模拟器而不是模拟器。模拟器中的OpenGL性能和图像质量通常与实际设备上的不同(通常更差)。确定OpenGL代码在设备上的外观和执行方式的唯一方法是在设备上进行测试,在您的情况下获得良好屏幕截图的唯一方法是搜索这样的设备并使用它来获取屏幕截图。否则,就模拟器而言,你所看到的就是你所得到的。没有任何神奇的开关可以说“#34;使它看起来就像在设备上一样。"

答案 1 :(得分:1)

事实证明模拟器一直都是正确的。

我在朋友的iPhone 5上尝试了最终版本,乍一看它看起来没问题,但仔细观察就像上面的截图一样。我可以通过让我的朋友截取屏幕截图来验证这一点,实际上看起来就像我在那里发布的屏幕截图一样。

它在iPad上看起来不错的原因是因为在iPad上,游戏实际上即使只是略微提升了纹理,并且升级算法产生的结果比降尺度更好。 (我发誓它在480x320 2.3机器人上看起来相当不错)

所以无论如何,我开始通过使用

在加载时创建mipmap来解决问题
GL.GenerateMipmap(TextureTarget.Texture2D);

然后设置缩减以使用这些mipmap与

GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)All.LinearMipmapLinear);

现在波涛汹涌的降尺度已经消失,但却被一个脏兮兮的缩小了。 ORZ

实际上这样做表明我错误地使用视网膜显示支持。该应用程序以iPhone 3GS的分辨率运行。

所以我只需要确保使用正确的大小创建帧缓冲区,问题就消失了。然而,随着视网膜显示,我再次升级我的纹理,所以我只在非视网膜设备上留下了mipmap创建(消耗更多VRAM并使游戏加载速度更慢)。