iphone - OpenGL ES 中的 PVR 纹理与 PNG

标签 iphone opengl-es

我正在为 iPhone 开发一个 2D 应用程序,它可以渲染大量纹理。目前,它们中的大多数都是从具有 alpha 透明度的 PNG 文件加载的。作为一项测试,我也一直在尝试 PVR 测试,看看是否存在任何性能差异。

PNG 纹理加载了崩溃着陆示例中附带的 Texture2D 类。 PVR 测试使用 PVRTextureLoader 示例中的 PVRTexture 类加载。我使用 Apple 的纹理工具创建 PVR 纹理。

作为测试,我渲染了一个背景(512*512),并在 36 个 90*64 像素 Sprite (来自 512*512 纹理)之上具有透明度。 PVR 纹理的渲染速度约为 58 fps,PNG 的渲染速度为 47 fps。这是我所期望的还是差异应该更大?另外,texturetool生成的纹理看起来很糟糕,PVRTexTool更好吗?

最佳答案

PNG:

  • 高精度色彩表现,无损耗
  • 从磁盘读取/解压缩速度较慢。
  • 上传到图形硬件的速度缓慢,驱动程序执行内部像素重新排序(混合)。也可能存在 RGBA<->BGRA<->ARGB 之间的转换,尽管 Xcode 通常会将 PNG 转换为针对硬件更优化的颜色格式。
  • 由于内存带宽有限(GPU 从内存中读取更多字节),渲染速度较慢。实际的减速程度取决于使用场景。这个问题在低于 1 倍的放大率且没有 MIP 映射时最为明显。
  • 占用更多 RAM/VRAM 空间。
  • 可编辑,上传前可通过您的软件进行过滤/混合/调整大小/转换。
  • 驱动程序上传纹理期间可以自动生成 Mip 贴图
  • 磁盘空间使用情况因内容而异,对于简单图像来说非常小,对于照片级真实图像来说几乎未压缩。
  • 可以直接快速地从任何图像编辑软件导出。

PVR:

  • 低精度有损压缩。提供 2 种压缩级别,即每像素 2 位和每像素 4 位。 block 状,可能会损坏锋利的边缘和平滑的渐变。图像质量随内容而变化。 3 或 4 个颜色 channel ,因此您可以使用 Alpha channel ,但有损压缩可能会产生不良结果。
  • 从磁盘快速加载,无需软件解压。
  • 几乎即时纹理上传,因为它是一种内部硬件格式,将通过驱动程序不变。
  • 由于内存带宽使用量较小,渲染速度更快。使用 PVR 纹理时,像素渲染速度主要受到其他因素的限制。
  • 使用最少的 RAM 和 VRAM 空间。
  • Mip 贴图必须预先生成。
  • 据我所知,您无法在软件内生成或编辑 PVR。否则会很慢。
  • 磁盘空间使用量与源图像大小(固定压缩比)成正比。可以通过其他方法进一步(轻微)压缩。
  • 大小限制。 2 的幂,仅限平方。
  • 需要额外的转换工具,处理可以自动化,但会大大减慢构建时间。

关于iphone - OpenGL ES 中的 PVR 纹理与 PNG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/501956/

相关文章:

iphone - iOS OpenGL ES 2.0 四元数旋转休眠到 XYZ 位置

iphone - UILabels 未显示在 UIView 的子类中

ios - 使用 API 中的坐标绘制路线

c++ - OpenGL:动态改变纹理坐标

java - 如何将人脸存储在内存中

android - GLSurfaceView : Do I need to to call onPause/onResume?

ios - UITouch-是否可以禁用多次点击

iphone - 有没有像appstore这样的商店可以上传iphone应用程序?

iphone - 是否可以在没有可见 View 的情况下调用 URL?

java - 如何在 Android 中使用头文件 (.h)