首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(iPhone,OpenGL)直接在文件中存储纹理数据

(iPhone,OpenGL)直接在文件中存储纹理数据
EN

Stack Overflow用户
提问于 2012-04-24 10:28:46
回答 3查看 569关注 0票数 1

此时,我使用这个场景从PNG加载OpenGL纹理:

  • 通过UIImage加载PNG
  • 通过位图上下文获取像素数据
  • 将像素重新打包为新格式(当前使用ARM霓虹灯指令,使用RGBA8 -> RGBA4,RGB8 -> RGB565 )
  • 用数据创建OpenGL纹理

( Cocos2d引擎中通常使用这种方法)

这需要大量的时间,似乎做额外的工作,可以完成一次每次构建。因此,我希望将重新打包的像素数据保存回文件中,并在第二次将其直接加载到OpenGL。

我知道实际的好处。有人试过吗?是否值得通过zip压缩数据(据我所知,当前iDevices在文件访问方面存在瓶颈)?非常感谢真正的经验分享。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-03 09:49:52

所以,我做了一些成功的实验:

我使用zlib (最大压缩比)压缩纹理数据,并将其保存到文件中(通过NSData方法)。在某些情况下,文件的大小比PNG小得多。

至于加载时间,我不能说确切的时间戳,因为在我的项目中有两个并行线程-一个是在背景上加载纹理,而另一个仍然在渲染场景。它大约快两倍- IMHO主要原因是我们直接将图像数据复制到OpengGL而不重新打包,并且输入的数据量更小)。

构建优化级别在加载时间中起着很高的作用:在调试配置中约为4秒,而在发布时为1秒。

票数 0
EN

Stack Overflow用户

发布于 2012-04-24 17:46:01

更好的是,如果这些是预先存在的图像,使用PowerVR纹理压缩(PVRTC)压缩它们.PVRTC纹理可以直接加载,并以压缩形式存储在GPU上,因此它们可以比各种原始像素格式小得多。

我提供了一个示例,说明如何在此示例代码中压缩和使用PVRTC纹理(纹理坐标有点混乱,因为我还没有纠正它们)。在这个例子中,我只是重用苹果的PVRTexture示例类来处理这类纹理。PVRTC纹理是通过一个脚本压缩的,该脚本是构建阶段的一部分,因此可以为您的各种源映像实现自动化。

票数 1
EN

Stack Overflow用户

发布于 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发送视频数据时,已经实现了这些优化。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10296149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档