Android3.0メモ:レンダリングのハードウェアアクセラレーション [スマートフォン]
「Google I/O 2011: Accelerated Android Rendering 」より
自分メモ:Android 3.0から通常のViewでもレンダリングにハードウェアアクセラレーションが可能になります。
ハードウェアアクセラレーションを有効にするためにはAndroidManifest.xmlのapplicationでandroid:hardwareAcceleratedをtrueにすればよい。
この指定はactivityにもできるそうで、特定のActivityだけアクセラレーションをOnにするとか、逆に特定のActivityだけOffにするとかの設定も可能。あとはプログラミングレベルでViewでもOn/Offが制御可能なようです。
# このことを知っていたら借用したXOOMやOptimus Padでアプリの動作検証を行ったときに
# Onにしてやってみればよかった・・・。エミュレータではGPUでの処理まではエミュレート
# してくれないだろうし・・・(そもそもAndroid3.0のエミュレータの動作は・・・・かなり厳しい)
アクセラレーションの仕組みはViewをOpen GL ESを使って描画するかどうかの違いのようです。OpenGL ESはCPUではなくGPUで処理されるので高速化が期待できるというわけです。また、さらにアクセラレーションが有効に機能するようにinvalidate()の仕組みも若干いじった模様。
とはいえ、どんなものでも高速化できるということではない。もちろん適切な構成でアプリケーションを作っておくことが重要。
以下はそのポイント(ビデオの35分過ぎから解説されています)
3,4はOpenGL ESのプログラミングを理解していれば当然のものですね。(といって私も理解しているわけではない。ただいま勉強中)
1. Don't user too many views
Keyp your hierarchy flat
2.Be careful of setAlpha()
Without hardware layers, it costs 2x the fill-rate
3.Reuse rendering objects
Don't create new Paints, Bitmaps, etc in drar()
4.Don't modify Bitmaps often
Every change cause a texture upload
5.Don't mofify Paths often
Every changes causes a new rasterization
6.Avoid overdraw
GPUs are fill-rate limited
7.Profile
DDMS and traceview are your friends
タブレットなどの登場で画面は大きくなり、レンダリングも高速化が必須となってきている今だからこそOpenGLってどんなものかを理解しておくのは非常に有用ですね。Google I/O 2011のセッションを見ていてそう感じました。今から基礎をおさえておこうということで以下の書籍で勉強中です。
ちなみに・・・Android3.0 (Honyomb) の主要な特徴は以下のセッションでご覧になれます。
System BarとかAction Barとかは実際の実装でも使うようになるのかな。もちろんFragmentもね・・・。
そのほか実際、どんな動きをするのか非常に参考になりますね。そうそうAndroid3.1からのUSBサポートもちょっと解説されています。
(GPUも強化され、どんどんネットブックに近づいているように思うのは私だけ??)
自分メモ:Android 3.0から通常のViewでもレンダリングにハードウェアアクセラレーションが可能になります。
ハードウェアアクセラレーションを有効にするためにはAndroidManifest.xmlのapplicationでandroid:hardwareAcceleratedをtrueにすればよい。
この指定はactivityにもできるそうで、特定のActivityだけアクセラレーションをOnにするとか、逆に特定のActivityだけOffにするとかの設定も可能。あとはプログラミングレベルでViewでもOn/Offが制御可能なようです。
# このことを知っていたら借用したXOOMやOptimus Padでアプリの動作検証を行ったときに
# Onにしてやってみればよかった・・・。エミュレータではGPUでの処理まではエミュレート
# してくれないだろうし・・・(そもそもAndroid3.0のエミュレータの動作は・・・・かなり厳しい)
アクセラレーションの仕組みはViewをOpen GL ESを使って描画するかどうかの違いのようです。OpenGL ESはCPUではなくGPUで処理されるので高速化が期待できるというわけです。また、さらにアクセラレーションが有効に機能するようにinvalidate()の仕組みも若干いじった模様。
とはいえ、どんなものでも高速化できるということではない。もちろん適切な構成でアプリケーションを作っておくことが重要。
以下はそのポイント(ビデオの35分過ぎから解説されています)
3,4はOpenGL ESのプログラミングを理解していれば当然のものですね。(といって私も理解しているわけではない。ただいま勉強中)
1. Don't user too many views
Keyp your hierarchy flat
2.Be careful of setAlpha()
Without hardware layers, it costs 2x the fill-rate
3.Reuse rendering objects
Don't create new Paints, Bitmaps, etc in drar()
4.Don't modify Bitmaps often
Every change cause a texture upload
5.Don't mofify Paths often
Every changes causes a new rasterization
6.Avoid overdraw
GPUs are fill-rate limited
7.Profile
DDMS and traceview are your friends
タブレットなどの登場で画面は大きくなり、レンダリングも高速化が必須となってきている今だからこそOpenGLってどんなものかを理解しておくのは非常に有用ですね。Google I/O 2011のセッションを見ていてそう感じました。今から基礎をおさえておこうということで以下の書籍で勉強中です。
OpenGLで作る Android SDKゲームプログラミング
- 作者: 中島 安彦
- 出版社/メーカー: インプレスジャパン
- 発売日: 2011/04/07
- メディア: 単行本(ソフトカバー)
ちなみに・・・Android3.0 (Honyomb) の主要な特徴は以下のセッションでご覧になれます。
System BarとかAction Barとかは実際の実装でも使うようになるのかな。もちろんFragmentもね・・・。
そのほか実際、どんな動きをするのか非常に参考になりますね。そうそうAndroid3.1からのUSBサポートもちょっと解説されています。
(GPUも強化され、どんどんネットブックに近づいているように思うのは私だけ??)
コメント 0