2012-11-28 61 views
1

我使用GLKTextureLoader加载32位PNG(在GIMP中创建)。返回的GLKTextureInfo在模拟器和iPad上显示GLKTextureInfoAlphaStateNonPremultipliedalphaState。试用glBlendFunc和GLKTextureLoader我可以在iPad或模拟器上运行,但不能同时运行!PNG预乘Alpha,iOS模拟器与iPad

在没有选项GLKTextureLoader,并用下面的混合FUNC:

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 

我上的iOS模拟器(注意上的文字辉光亮)

enter image description here

而且在第4代iPad上(注意文字上的发光很暗)

enter image description here

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

回答

3

我在Apple Discussion找到答案。

我有完全相同的问题。 XCode会将PNG图像转换为标题块为CgBI(而不是IHDR),并且会混淆像libpng这样的第三方库,因为Apple标题中的字符表示数据是私有格式。该操作只发生在目标设备上 - 模拟器不受影响。有四种方法可以解决这个问题(从最简单到最困难)。

1)将图像重命名为其他内容(例如.ppng),并且XCode打包工具将忽略您的文件。

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

3)教你的PNG解码器处理苹果的CgBI格式。

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

编辑:在“生成设置”“包装”我发现了一个“压缩PNG文件”选项,默认为“是”。

+0

但是,我仍然不明白,为什么设备和模拟器之间的输出不同。不应该“压缩PNG文件”选项影响两种环境? – PrimaryFeather