GLKTextureLoader无法加载PVR(错误12 - 预处理失败)

时间:2013-09-21 09:41:42

标签: ios opengl-es glkit pvrtc glktextureloader

背景

在我们的应用程序中,我们使用PNG精灵表,其中每个精灵仅用作遮罩。使用GLKTextureLoader成功加载了这些内容。当iOS 7达到第5 /第6测试版时,GLKTextureLoader的工作方式似乎发生了变化,因为突然我们所有的PNG都开始渲染错误,好像alpha预复制有问题。

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


问题

尝试使用GLKTextureLoader

加载PVR纹理时
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无关)

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

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

1 个答案:

答案 0 :(得分:4)

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