はじめに
そのうちQiitaにまとめたいけど、ちょっと纏めるまでの間にいろいろありそうなので、こちらにチェックポイントを書いていこうかな。
前提知識
- Cardboard
- Cardboardの本家。まずここを見る。
- Google Cardboard Tutorial の翻訳 | アンドロイドな日々
- 本家のチュートリアルの内容が翻訳されている。一読すること。
- Package Index — Google Developers
- APIリファレンス。Cardboard.jarはソース公開されてないっぽいのでAPIリファレンスを頼りに進む。
やりたいこと
Live Coding de Nightの出し物を制作する。 CardboardのAPIを使ってミクさんを視姦したい。
検証
ログを見る
Nexus5(Android 4.4.4)で検証。
MainActivity.java を作成し、Logcatを追跡してみた。CardboardView.StereoRenderer
でimplementした部分を中心に。
08-18 15:40:49.809 19749-19767/net.pside.android.sample.cardboard D/MainActivity﹕ onSurfaceCreated()
08-18 15:40:49.809 19749-19767/net.pside.android.sample.cardboard W/CardboardView﹕ Surface size 1794x1005 does not match the expected screen size 1920x1080. Rendering is disabled.
08-18 15:59:02.845 21494-21521/net.pside.android.sample.cardboard D/MainActivity﹕ onSurfaceChanged(897,1005)
08-18 15:59:02.915 21494-21521/net.pside.android.sample.cardboard D/MainActivity﹕ onSurfaceChanged(960,1080)
08-18 15:40:49.919 19749-19767/net.pside.android.sample.cardboard D/MainActivity﹕ onNewFrame()
08-18 15:40:49.919 19749-19767/net.pside.android.sample.cardboard D/MainActivity﹕ onDrawEye()
08-18 15:40:49.919 19749-19767/net.pside.android.sample.cardboard D/MainActivity﹕ onDrawEye()
08-18 15:40:49.919 19749-19767/net.pside.android.sample.cardboard D/MainActivity﹕ onFinishFrame()
// ...
08-18 15:40:49.919 19749-19767/net.pside.android.sample.cardboard D/MainActivity﹕ onNewFrame()
08-18 15:40:49.919 19749-19767/net.pside.android.sample.cardboard D/MainActivity﹕ onDrawEye()
08-18 15:40:49.919 19749-19767/net.pside.android.sample.cardboard D/MainActivity﹕ onDrawEye()
08-18 15:40:49.919 19749-19767/net.pside.android.sample.cardboard D/MainActivity﹕ onFinishFrame()
// ...
08-18 15:40:49.919 19749-19767/net.pside.android.sample.cardboard D/MainActivity﹕ onNewFrame()
08-18 15:40:49.919 19749-19767/net.pside.android.sample.cardboard D/MainActivity﹕ onDrawEye()
08-18 15:40:49.919 19749-19767/net.pside.android.sample.cardboard D/MainActivity﹕ onDrawEye()
08-18 15:40:49.919 19749-19767/net.pside.android.sample.cardboard D/MainActivity﹕ onFinishFrame()
08-18 15:41:06.229 19749-19749/net.pside.android.sample.cardboard W/IInputConnectionWrapper﹕ showStatusIcon on inactive InputConnection
08-18 15:41:06.299 19749-19767/net.pside.android.sample.cardboard D/MainActivity﹕ onRenderShutdown()
気付き
onSurfaceChanged(int, int)
は、Immersive Modeに移行した時に描画領域が大きくなるので呼ばれているみたい。onNewFrame()
->onDrawEye()
->onDrawEye()
->onFinishFrame()
の順にコールされる。onDrawEye()が2度呼ばれるのは、右目、左目、とレンダリングするため。どっちがどっちという情報はたぶん引数で渡されるオブジェクトにでも入ってるんだろう。- バックキーを押すと
onRenderShutdown()
がコールされた。別にバックキーに限定されず、RenderがShutdownされるときに呼ばれるんだろう(?)