ios – iPad2需要0.5秒才能复制1K图像 – 这是我能做的最好的吗?

前端之家收集整理的这篇文章主要介绍了ios – iPad2需要0.5秒才能复制1K图像 – 这是我能做的最好的吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在开发一个显示光照贴图场景的iPad应用程序.加载所涉及的大约20个1Kx1K纹理需要一段时间,当我开始计时各种操作时,我发现每个纹理的时间略少于1/2秒.

事实证明,从文件系统加载纹理图像非常快,而且瓶颈在于将UIImage复制到CGContext以便将图像传递给glTexImage2D()

我尝试了两种不同的制作副本的方法

CGContextSetInterpolationQuality(textureCopyContext,kCGInterpolationNone);
    CGContextDrawImage( textureCopyContext,CGRectMake( 0,width,height ),image);

UIGraphicsPushContext(textureCopyContext) ;
    [uiImage drawInRect:CGRectMake(0,height)] ;
    UIGraphicsPopContext() ;

两者都需要大约0.45秒.即使是相对不足的设备,这也让我觉得过度.

我对iOS开发比较陌生,所以我只想问一下我看到的时间是否合理,或者是否可以改进.

更新:我知道PVRTC的替代品,但是现在我必须坚持使用PNG.然而,对于PVRTC在this answer中的优缺点有一个很好的总结.同样的答案也暗示了为什么PNG导致如此长的纹理设置时间 – “内部像素重新排序”.任何人都可以证实吗?

解决方法

切换纹理上下文传统上是昂贵的,可以追溯到桌面(它在现代GPU上更快).您可以尝试使用纹理图集,具体取决于纹理的大小,这是最有效的方法.纹理Atlas将纹理放在一起,我相信iPad能够加载2048个2048纹理,你可以将4个纹理压缩在一起.

另一种方法是,使用pvrtc纹理压缩,您可以根据质量将文件大小减少约25%. PowerVR芯片使用此压缩功能将其存储在设备上,因此可节省时间和带宽复制.使用较低的设置时,这有时会看起来有损,但对于3d纹理,它是最佳选择,而2d精灵更喜欢第一个选项.

如果您需要更多说明,请与我们联系.不要忘记png文件在从文件系统加载时被压缩并扩展到ALOT更大的全尺寸位缓冲区.

猜你在找的iOS相关文章