2013-08 << 2013-09 >> 2013-10

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が必要.

adrenoprof.jpg

(昨日から使ってるモデルはLat式ミクです)

テクスチャも含めて,あるフレームの描画に使った全データが見れるので何かあったときも安心です.PC上でOpenGL ESの命令をエミュレートしたりするので,最近のグラボを積んでないと色々警告が出たりしますが,だいたい動きます.

ただ,急いで操作するとよく落ちる.

昨日作ったやつをもう少し観察してみると,テクスチャの読み書きがボトルネックになってるっぽいので,どうにかしないとかなあ.2048x2048のFBOを2枚使ってたのを1600x1600に落としたらとりあえず30fpsは確保できた.NPOTなサイズのテクスチャになってしまうけど,とりあえず動くし良いか.あとシェーダのfloatの精度をmediumpからhighpに上げたら少し画質が改善した(気がする).Adrenoってmediumpとhighpは同じかと思ってたら違うのか.