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


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

2016年10月13日

[iOS][Metal]Execution of the command buffer was aborted due to an error during execution.Caused GPU Hang Error (IOAF code 3)

OpenGLES -> Metalの移植もいよいよ大詰め…となっていきなりこんなエラーに遭遇。
環境は iOS10.0.2 iPhone SE。

Execution of the command buffer was aborted due to an error during execution. Caused GPU Hang Error (IOAF code 3)

Execution of the command buffer was aborted due to an error during execution.

MTLCommandBufferがなんかしらの内部エラーを出してるらしいが、なにせ情報がほとんどない。
UIKitと衝突する?と出ることがあるとかいう感じの記述をみつけてそれらしいところを外してみるが効果なし。
不思議なのは描画関係何も変えてないはずなのにいきなり出るようになったこと。


----解決。

更新開発中のゲーム(ソナーエコー)で、ステージ制なのに新ステージのみで出て他のステージで出ないことから調べていったところ、テクスチャのロードをミスして出来てなかったこと(0となっていた)がわかった。
エンコーダのテクスチャの設定をsetFragmentTextureしないまま実行すると、パラメータがセットされないというエラーが出るのに0をセットするとこういうエラーとなるらしい。
不親切で気づかないと相当はまるので気をつけたい。
タグ:iOS metal
posted by みこあいさ at 12:31| iOS開発

2016年09月25日

[!] The dependency `Google-Mobile-Ads-SDK (~> 7.0)` is not used in any concrete target.

xcodeも8になったんで、ADMobも更新しろとかいってきてるしcocoaPodsも更新して...とやったらおおはまり。

[!] The dependency `Google-Mobile-Ads-SDK (~> 7.0)` is not used in any concrete target.

こんなのが出て進まない。PodFileがいかんようなんだけど。
ADMob SDKのページを見ても特に更新なし。単にリンク切れてる古いページが残ってるのがヒットしただけかもしれない。

で、いろいろやってみて、やっぱりPodFileを書き直さないと駄目だった。
cocoaPods 1.xになって書式が変更になったらしい。Google ADMob SDKのページが更新されてないのは

こちらのページが大変参考になった。
adMobがFirebaseとやらになっとる!

1つだけでよかったのでこんなかんじ。

source 'https://github.com/CocoaPods/Specs.git'

# Uncomment this line to define a global platform for your project
platform :ios, '8.0'
# Uncomment this line if you're using Swift
# use_frameworks!

target 'XXXXXXXX' do
pod 'Google/Analytics'
pod 'Firebase/Core'
pod 'Firebase/AdMob'

end


'XXXXXXXX'のとこを自分のプロジェクト名にする。してないとそうしろというエラーが出るので従うのみ。

これで pod install , pod update が通って無事更新できた。
タグ:iOS Xcode
posted by みこあいさ at 01:39| iOS開発

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開発