3

背景

在我们的应用程序中,我们使用 PNG 精灵表,其中每个精灵仅用作蒙版。这些是使用成功加载的GLKTextureLoader。当 iOS 7 达到第 5/6 个 beta 时,GLKTextureLoader工作方式似乎发生了一些变化,因为突然我们所有的 PNG 都开始不正确地渲染,就好像 alpha 预乘有问题一样。

在提交错误报告后,没有收到 Apple 的回复(令人担忧的是,问题仍然存在于 iOS 7 的实时版本中),我们决定将我们的 PNG 转换为 PVR 格式。


问题

尝试使用以下方式加载 PVR 纹理时GLKTextureLoader

NSDictionary *options = @{ GLKTextureLoaderOriginBottomLeft : @YES, GLKTextureLoaderApplyPremultiplication : @NO };
GLKTextureInfo *textureInfo = [GLKTextureLoader textureWithContentsOfURL:url options:options error:&error];

它失败并出现错误 12 ( GLKTextureLoaderErrorDataPreprocessingFailure)。这个“预处理”步骤涉及什么,可能是什么问题?

以下是我检查过的一些事情:

  • 网址有效
  • 文件扩展名为.pvr
  • 图像具有方形 POT 尺寸 (512x512)
  • 我尝试了多种 PVR 格式,包括压缩和未压缩(PVRTC 4bpp、RGBA8888、L8、A8)
  • 我在 之前和之后放置了 glErrorChecks textureWithContentsOfURL:options:error:,但没有记录任何内容(可能GLKTextureLoader正在消耗 GL 错误,或者该错误与 OpenGL 无关)

此答案表明这可能是由文件损坏引起的。这让我想知道我是否以某种方式错误地生成了 PVR。我正在使用 Imagination 的 PVRTexToolGUI 来转换 PNG:

  1. 在 PVRtexToolGUI 中打开 PNG
  2. 预乘 alpha(尽管我也尝试过没有这一步)
  3. 将当前纹理编码为新格式(已尝试多种格式,如上所述)
  4. 将纹理另存为 .pvr 文件。
4

1 回答 1

4

PVR 文件有 2 个版本:新版本和旧版本。尝试以不同的文件格式保存您的 PVR 纹理(另存为旧版)。

于 2013-09-22T06:49:43.190 回答