我正在开发一个显示光照贴图场景的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导致如此长的纹理设置时间 – “内部像素重新排序”.任何人都可以证实吗?