PNG预乘Alpha,iOS模拟器与iPad

时间:2012-11-28 01:01:48

标签: ios cocoa-touch opengl-es glkit

我使用GLKTextureLoader加载32位PNG(在GIMP中创建)。返回的GLKTextureInfo在模拟器和iPad上显示GLKTextureInfoAlphaStateNonPremultiplied alphaState。尝试glBlendFunc和GLKTextureLoader我可以在iPad或模拟器上使用它,但不能同时使用它们!

GLKTextureLoader没有选项,并且使用以下混合功能:

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

我上了iOS模拟器(注意文本上的光晕很明亮)

enter image description here

在第4台iPad上(注意文字上的光线是黑暗的)

enter image description here

为何与众不同? alphaState是一样的。它可能是什么?

1 个答案:

答案 0 :(得分: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解码器来处理Apple的CgBI格式。

     

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

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