2012-11-28 108 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