2013-09-29 (日)
*[Android] OpenGLまわりのデバッグ
今回,Adreno Profilerを使ってみたので感想です.
AndroidでOpenGLを使うコードをデバッグするとき,どのFBOのレンダリングに失敗しているのかとか,テクスチャちゃんと読み込めているのかとか知りたいですね.
Nexus7(2012)のGPUはTegra 3が載ってたのでNVIDIAのPerfHUD ESが使えたけど,新しいやつはQualcommなので,Adreno Profilerを使ってみました.
まずは,Adreno Profilerをインストール.ダウンロードのためにアカウント作る必要あります.Windowsマシンが必要です.Macしかない人は(お使いのMacを今すぐ窓から投げ捨て)ThinkPadを買いましょう.
Adreno Profilerを起動する前に,
adb.exe shell setprop debug.egl.profiler 1
これで,adb経由でGPUの情報が取得できるようになる.たぶんOSを再起動するとリセットされるので,デバッグ時に毎回やる必要があるっぽい.とりあえずrootとかも必要ない.
あとはadbがpathの通った場所にあればConnectボタンを押すだけで接続できる.adbの接続がない場合もネットワーク経由でデバッグもできる.被デバッグアプリにandroid.permission.INTERNETが必要.
(昨日から使ってるモデルはLat式ミクです)
テクスチャも含めて,あるフレームの描画に使った全データが見れるので何かあったときも安心です.PC上でOpenGL ESの命令をエミュレートしたりするので,最近のグラボを積んでないと色々警告が出たりしますが,だいたい動きます.
ただ,急いで操作するとよく落ちる.
昨日作ったやつをもう少し観察してみると,テクスチャの読み書きがボトルネックになってるっぽいので,どうにかしないとかなあ.2048x2048のFBOを2枚使ってたのを1600x1600に落としたらとりあえず30fpsは確保できた.NPOTなサイズのテクスチャになってしまうけど,とりあえず動くし良いか.あとシェーダのfloatの精度をmediumpからhighpに上げたら少し画質が改善した(気がする).Adrenoってmediumpとhighpは同じかと思ってたら違うのか.