ブログランキング・にほんブログ村へ


iPhone/iPad用潜水艦ゲームアプリ ソナーエコー iTunesにて公開中

2016年08月28日

[iOS]kCGImageAlphaPremultipliedLast

MetalのテクスチャをPNGから読み込むところで、iPhone SEだけなぜかうまく動かない症状に遭遇。
はじめはシェーダプログラムのほうに問題があると思ったが、実はPNGを読み込んだCGImageの評価のほうに問題があった。
iOS9.3のせいかもしれないが、不思議なことにiPhone 6ではでていない模様。
具体的には
CGImageGetAlphaInfo(image);
が返す値がたいていの画像でkCGImageAlphaNoneSkipLastとなっているところが
kCGImageAlphaPremultipliedFirst
を返す画像があり、それがうまく評価できていなかった。
UIImage(CGImage)の画像に1ピクセルずつ効果を加えたい場合

CoreGraphicsでハマる
こちらが参考になる。

簡単にいうとRGBAの配置やARGBの配置、Alphaを評価するべきでない場合がありうるということらしい。

kCGImageAlphaPremultipliedFirst
という名前からみるとなんらかの値を掛ける必要があるんじゃないか?とは思ったがそれは必要なかった。
どういうことなんだろう。

kCGImageAlphaPremultipliedFirst
になる画像の特長は、画像全体が1つのAlpha値になっているということ。レイヤーで透明度を指定しそのまま保存した場合にそうなっていた。
ただし、Alpha=1.0のときはその限りにあらず。
よくわかんないけど。

posted by みこあいさ at 12:30| iOS開発

2016年08月18日

[iOS]xcode 7.3.1

iOS 10発表直前のタイミングで
・iOS9環境キープ
・Metalの動く4inchデバイス確保
・シムフリーデバイスで手元のモバイル環境を一本化→毎月の支払額削減
の目的でiPhone SEを購入した。
開発環境である2011 MBAは相当きびしい状態の昨今ではあるが、OSXの更新をするとさらに厳しくなるという記事も度々目にするため、OSXはYosemise止まりのままだったのだが、最新のiOS9に対応したXcode7.3.1を落とすためにはEl Captainが必須とわかり、やむなくOSXの更新をした。

いざ更新してみると、危惧されたような酷さはなさそうな感じ。
最近はDeveloperとしてお金を払わなくてもiOSデバイスにアプリを落としてxcodeから走らせられるとは聞いていたが、デバイスの登録が必要なくなったのは大変ありがたい。この辺りは繋げばすぐ使えるAndroidに近い感覚になった。

xcode更新によってプロジェクトで出たエラーは
・memcpyの宣言がない
・ARCを使っていない環境で_weakがエラー
の2つだけだった。
memcpyについては string.hのincludeで解決
_weakについては削除のみでOK

あとはiphone seで自前のmetalのコードを走らせてみた結果だが、速い速い。
元の開発環境がiPad mini2なので軽く5、6倍という感触。
ただ、なぜか1つだけテクスチャの評価がおかしくなっている部分があったので、それはこれから追求する。
不定値がどこかにあってGPUのパイプラインが違うことによって具現化したのではないかという予想。


タグ:iOS Xcode
posted by みこあいさ at 09:57| iOS開発