繁体   English   中英

PNG预乘Alpha,iOS模拟器与iPad

[英]PNG Premultiplied Alpha, iOS Simulator vs iPad

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

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

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

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

在此输入图像描述

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

在此输入图像描述

为什么不同? alphaState是相同的。 会是什么呢?

我在Apple讨论中找到了答案。

我有完全一样的问题。 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文件”选项,默认为“是”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM