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

标签 ios opengl-es glkit pvrtc glktextureloader

背景

在我们的应用程序中,我们使用 PNG Sprite 表,其中每个 Sprite 仅用作 mask 。这些已使用 GLKTextureLoader 成功加载。当 iOS 7 到达第 5/6 个 beta 时,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)
  • 我在 textureWithContentsOfURL:options:error: 之前和之后放置了 glErrorChecks,但没有记录任何内容(大概是 GLKTextureLoader 正在消耗 GL 错误,或者错误是不相关的到 OpenGL)

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

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

最佳答案

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

关于ios - GLKTextureLoader 加载 PVR 失败(错误 12 - 预处理失败),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18931150/

相关文章:

ios - 如何在UINavigationBar中自定义导航栏标题字体和大小?

iPhone Opengl 游戏有广告== fps 问题?

android - 从分屏到全屏后出现幻影

ios - EZAudio iOS - 将波形保存到图像

ios - GLKView 显示方法导致 [GLKView _createFramebuffer] 崩溃

ios - 在 View Controller 和类之间进行委托(delegate)

ios - 如果我有不同的 UI 控件要顺序显示,我是否仍然应该使用 TableView Controller ?

ios - 如何获取 QuickLook 预览项目的缩略图?

c++ - iOS 上的跨平台渲染器 : control the main loop from C++ class

swift - GLKit 与 Metal 透视矩阵的区别