1

GLKTextureLoader用来加载 32 位 PNG(在 GIMP 中创建)。GLKTextureInfo返回的结果在模拟器和 iPad 上都GLKTextureInfoAlphaStateNonPremultiplied显示。alphaState试验glBlendFunc和 GLKTextureLoader 我可以让它在 iPad 或模拟器上工作,但不能同时在两者上工作!

没有 GLKTextureLoader 的选项,并且具有以下混合函数:

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

我上了 iOS 模拟器(注意文字上的光芒很亮)

在此处输入图像描述

在第 4 台 iPad 上(注意文本上的发光是暗的)

在此处输入图像描述

为什么有区别?alphaState是一样的。会是什么呢?

4

1 回答 1

3

我在Apple Discussion中找到了答案。

我有完全一样的问题。XCode 将转换 PNG 图像,以便标头块是 CgBI(而不是 IHDR),这会混淆像 libpng 这样的 3rd 方库,因为 Apple 标头中的字符表示数据是私有格式。此操作仅针对目标设备进行 - 模拟器不受影响。有 4 种方法可以解决这个问题(从最简单到最难)。

1) 将您的图像重命名为其他名称(例如 .pppng),XCode 打包工​​具将忽略您的文件。

2)根据以下链接(http://www.imgtec.com/powervr/insider/sdk/KhronosOpenGLES1xMBX.asp),您需要为每个目标添加以下构建设置定义。IPHONEOPTIMIZEOPTIONS=-skip-PNGs 我很尴尬地说我还没有弄清楚在 XCode 项目设置中的哪个位置添加它。

3) 教您的 PNG 解码器处理 Apple 的 CgBI 格式。

4) 使用 Cocoa UIImage 类或 Texture2D.m 类。

编辑:在“构建设置”的“打包”中,我找到了一个默认为“是”的“压缩 PNG 文件”选项。

于 2012-11-28T01:44:44.770 回答