此时,我使用这个场景从PNG加载OpenGL纹理:
( Cocos2d引擎中通常使用这种方法)
这需要大量的时间,似乎做额外的工作,可以完成一次每次构建。因此,我希望将重新打包的像素数据保存回文件中,并在第二次将其直接加载到OpenGL。
我知道实际的好处。有人试过吗?是否值得通过zip压缩数据(据我所知,当前iDevices在文件访问方面存在瓶颈)?非常感谢真正的经验分享。
发布于 2012-05-03 09:49:52
所以,我做了一些成功的实验:
我使用zlib (最大压缩比)压缩纹理数据,并将其保存到文件中(通过NSData方法)。在某些情况下,文件的大小比PNG小得多。
至于加载时间,我不能说确切的时间戳,因为在我的项目中有两个并行线程-一个是在背景上加载纹理,而另一个仍然在渲染场景。它大约快两倍- IMHO主要原因是我们直接将图像数据复制到OpengGL而不重新打包,并且输入的数据量更小)。
构建优化级别在加载时间中起着很高的作用:在调试配置中约为4秒,而在发布时为1秒。
发布于 2012-04-24 17:46:01
更好的是,如果这些是预先存在的图像,使用PowerVR纹理压缩(PVRTC)压缩它们.PVRTC纹理可以直接加载,并以压缩形式存储在GPU上,因此它们可以比各种原始像素格式小得多。
我提供了一个示例,说明如何在此示例代码中压缩和使用PVRTC纹理(纹理坐标有点混乱,因为我还没有纠正它们)。在这个例子中,我只是重用苹果的PVRTexture示例类来处理这类纹理。PVRTC纹理是通过一个脚本压缩的,该脚本是构建阶段的一部分,因此可以为您的各种源映像实现自动化。
发布于 2013-06-21 03:23:57
忽略任何关于PVRTC的建议,这些东西只对颜色使用有限的3D纹理有用。最好是使用24或32 BPP纹理从真实的图像。如果您希望看到您所描述的流程的实际工作示例,那么请看一看load-opengl-textures-with-alpha-channel-on-ios。该示例显示了当附加到应用程序资源时,如何使用7zip (比zip要好得多)压缩纹理数据,但是结果被解压缩并以最佳格式保存到磁盘中,这种格式可以直接发送到视频卡,而无需进一步的像素组件重新排列。此示例使用POT纹理,但适应非POT和使用Apple优化使纹理数据不需要显式复制到显卡中并不太困难。在向CoreGraphics发送视频数据时,已经实现了这些优化。
https://stackoverflow.com/questions/10296149
复制相似问题