http://plusd.itmedia.co.jp/mobile/articles/0805/30/news017.html
この記事を読むと、OpenGLES1.1 準拠と書かれている。
なのに、なぜ、ドライバの表示も GLES1.0 なのだろうか。
アプリで GL11 を呼び出しても動かないのだろうか。
2008年12月30日火曜日
android dev phone1 で OpenGLES の Native アプリを動かす
疲れました。
昨日の夜から、睡眠時間をはさんで、ずっと android と格闘していました。まあ、コンパイルの待ち時間が多かったのですが、それでも疲れました。家で使っている椅子は首に悪い。何度も首が痛くなりました。
明日には帰省しないといけないこともあり、今年中に動いてよかったです。
さて、単純に Native アプリを動かすだけなら、結構いろんな人がまとめてくれています。
http://www.adamrocker.com/blog/191/c_native_executable_file_on_android.html
だいたいこの通りで実機上でも動きました。
dynamic_link の場合は少し面倒ですが、
> strace ./test_dynamic
のように、アプリを引数に実行させると、動的リンクのファイルがないとかメッセージをはいています。ちなみに、コンパイル時に指定する.soファイルは、実機から取得したものを使用したほうがいいです。
>adb pull ***.so
のように指定すれば取得できます。わざわざ、実機側のライブラリを変えたりする必要はありません。
これ以降、OpenGLES のハードウェアアクセラレーションに悩みました。というより、どこのサイトにも、アクセラレーション付きのライブラリが動いたと書かれていなくて、疑心暗鬼になっていました。
しかし、説明はほとんどないにもかかわらず、欲しかったサンプルアプリがおいてありました。
http://plausible.org/andy/Game1.tar.gz
Andy Ross さん、Thank you very much!
すばらしい。JNI を使って、OpenGLES のCコードを呼んでいます。Javaのインターフェースも付いているので、> adb install でインストールもできます。
ただ、色々と素人なので、これをコンパイルするまでに1晩費やしてしまいました、、、、
まず、公式サイトから android 用のtoolchainのソースコードをとってきて、コンパイルしました。何箇所かつまったりもしましたが、ちょっといじったりして、コンパイル通しました。Fedora10上です。
(toolchainはコンパイルしなくてもよいみたいです。ソースツリーのprebuild に入っているみたいでした、、、、)
次に、Game1 のMakefileなどでPath設定をいじってコンパイル完了です。
これで、なんとか動きました。そしてついに、QUALCOMM のドライバを確認しました。
I/Game1 ( 340): VENDOR: QUALCOMM, Inc.
I/Game1 ( 340): RENDERER: Q3Dimension MSM7500 01.02.08 0 4.0.0
I/Game1 ( 340): VERSION: OpenGL ES 1.0-CM
I/Game1 ( 340): EXTENSIONS: GL_ARB_texture_env_combine GL_ARB_texture_env_crossbar GL_ARB_texture_env_dot3 GL_ARB_texture_mirrored_repeat GL_ARB_vertex_buffer_object GL_ATI_extended_texture_coordinate_data_formats GL_ATI_imageon_misc GL_ATI_texture_compression_atitc GL_EXT_blend_equation_separate GL_EXT_blend_func_separate GL_EXT_blend_minmax GL_EXT_blend_subtract GL_EXT_stencil_wrap GL_OES_byte_coordinates GL_OES_compressed_paletted_texture GL_OES_draw_texture GL_OES_fixed_point GL_OES_matrix_palette GL_OES_point_size_array GL_OES_point_sprite GL_OES_read_format GL_OES_single_precision GL_OES_vertex_buffer_object GL_QUALCOMM_vertex_buffer_object GL_QUALCOMM_direct_texture
I/Game1 ( 340): RED_BITS: 5
I/Game1 ( 340): GREEN_BITS: 6
I/Game1 ( 340): BLUE_BITS: 5
I/Game1 ( 340): ALPHA_BITS: 0
I/Game1 ( 340): DEPTH_BITS: 16
I/Game1 ( 340): STENCIL_BITS: 0
ちなみに、起動時に表示されるログでは、こうなっています。
I/SurfaceFlinger( 56): OpenGL informations:
I/SurfaceFlinger( 56): vendor : Google Inc.
I/SurfaceFlinger( 56): renderer : Android PixelFlinger 1.0
libGLES_CM.so は Google製ソフトウェアラスタライザであって、libhgl.so がQUALCOMM製のドライバで、libGLES_CM.so から動的に読み込まれているみたいです。
まあ、ちっちゃい四角形が表示されてるだけですけど、それでも感動ものです。
続きは来年。
昨日の夜から、睡眠時間をはさんで、ずっと android と格闘していました。まあ、コンパイルの待ち時間が多かったのですが、それでも疲れました。家で使っている椅子は首に悪い。何度も首が痛くなりました。
明日には帰省しないといけないこともあり、今年中に動いてよかったです。
さて、単純に Native アプリを動かすだけなら、結構いろんな人がまとめてくれています。
http://www.adamrocker.com/blog/191/c_native_executable_file_on_android.html
だいたいこの通りで実機上でも動きました。
dynamic_link の場合は少し面倒ですが、
> strace ./test_dynamic
のように、アプリを引数に実行させると、動的リンクのファイルがないとかメッセージをはいています。ちなみに、コンパイル時に指定する.soファイルは、実機から取得したものを使用したほうがいいです。
>adb pull ***.so
のように指定すれば取得できます。わざわざ、実機側のライブラリを変えたりする必要はありません。
これ以降、OpenGLES のハードウェアアクセラレーションに悩みました。というより、どこのサイトにも、アクセラレーション付きのライブラリが動いたと書かれていなくて、疑心暗鬼になっていました。
しかし、説明はほとんどないにもかかわらず、欲しかったサンプルアプリがおいてありました。
http://plausible.org/andy/Game1.tar.gz
Andy Ross さん、Thank you very much!
すばらしい。JNI を使って、OpenGLES のCコードを呼んでいます。Javaのインターフェースも付いているので、> adb install でインストールもできます。
ただ、色々と素人なので、これをコンパイルするまでに1晩費やしてしまいました、、、、
まず、公式サイトから android 用のtoolchainのソースコードをとってきて、コンパイルしました。何箇所かつまったりもしましたが、ちょっといじったりして、コンパイル通しました。Fedora10上です。
(toolchainはコンパイルしなくてもよいみたいです。ソースツリーのprebuild に入っているみたいでした、、、、)
次に、Game1 のMakefileなどでPath設定をいじってコンパイル完了です。
これで、なんとか動きました。そしてついに、QUALCOMM のドライバを確認しました。
I/Game1 ( 340): VENDOR: QUALCOMM, Inc.
I/Game1 ( 340): RENDERER: Q3Dimension MSM7500 01.02.08 0 4.0.0
I/Game1 ( 340): VERSION: OpenGL ES 1.0-CM
I/Game1 ( 340): EXTENSIONS: GL_ARB_texture_env_combine GL_ARB_texture_env_crossbar GL_ARB_texture_env_dot3 GL_ARB_texture_mirrored_repeat GL_ARB_vertex_buffer_object GL_ATI_extended_texture_coordinate_data_formats GL_ATI_imageon_misc GL_ATI_texture_compression_atitc GL_EXT_blend_equation_separate GL_EXT_blend_func_separate GL_EXT_blend_minmax GL_EXT_blend_subtract GL_EXT_stencil_wrap GL_OES_byte_coordinates GL_OES_compressed_paletted_texture GL_OES_draw_texture GL_OES_fixed_point GL_OES_matrix_palette GL_OES_point_size_array GL_OES_point_sprite GL_OES_read_format GL_OES_single_precision GL_OES_vertex_buffer_object GL_QUALCOMM_vertex_buffer_object GL_QUALCOMM_direct_texture
I/Game1 ( 340): RED_BITS: 5
I/Game1 ( 340): GREEN_BITS: 6
I/Game1 ( 340): BLUE_BITS: 5
I/Game1 ( 340): ALPHA_BITS: 0
I/Game1 ( 340): DEPTH_BITS: 16
I/Game1 ( 340): STENCIL_BITS: 0
ちなみに、起動時に表示されるログでは、こうなっています。
I/SurfaceFlinger( 56): OpenGL informations:
I/SurfaceFlinger( 56): vendor : Google Inc.
I/SurfaceFlinger( 56): renderer : Android PixelFlinger 1.0
libGLES_CM.so は Google製ソフトウェアラスタライザであって、libhgl.so がQUALCOMM製のドライバで、libGLES_CM.so から動的に読み込まれているみたいです。
まあ、ちっちゃい四角形が表示されてるだけですけど、それでも感動ものです。
続きは来年。
2008年12月29日月曜日
android のソースをコンパイル
Fedora10 上でソースをコンパイルしてみました。
http://source.android.com/download
結構簡単、だけど、時間かかる。そりゃ、VirtualPC だからか。
phython と git はもともと入っていたので、JDK だけ追加して、コンパイルしたまま、眠ってしまいました。
朝起きると、gperf がない、というエラーが出ていたので、gperf をソフトウェアの追加で入れて、再度 make したら、とりあえず、エラーなくコンパイル完了。
さて、どうやったら、この生成したイメージが実機でうごくようになるのかな。
http://source.android.com/download
結構簡単、だけど、時間かかる。そりゃ、VirtualPC だからか。
phython と git はもともと入っていたので、JDK だけ追加して、コンパイルしたまま、眠ってしまいました。
朝起きると、gperf がない、というエラーが出ていたので、gperf をソフトウェアの追加で入れて、再度 make したら、とりあえず、エラーなくコンパイル完了。
さて、どうやったら、この生成したイメージが実機でうごくようになるのかな。
VirtualPC で Fedora10 をインストール
普段は、Vistaで開発しているけど、時々、Linux 使いたいときもあるので、VirtualPC に Fedora10 を入れてみた。今、Fedora10 で android のソースを取得中。
以下のサイトを参考にインストール。
VirtualPCでFedora10
あと、これだけでは任意の解像度の設定ができなかったので、xorg.conf をいじる。(この設定もどこかのサイトを参考にさせていただきましたが、どこが出典か忘れてしまいました、、、すみません。)
Section "Monitor"
Identifier "Monitor0"
ModelName "General Display"
HorizSync 30.0 - 96.0
VertRefresh 50.0 - 130.0
Option "dpms"
EndSection
Section "Device"
Identifier "Videocard0"
Driver "vesa"
EndSection
Section "Screen"
Identifier "Screen0"
Device "Videocard0"
Monitor "Monitor0"
DefaultDepth 16
SubSection "Display"
Viewport 0 0
Depth 16
EndSubSection
EndSection
たぶん、こんな感じで、1600x1200 の解像度でも動くようになります。
(私は、1920x1200 のディスプレイを使用し、1280x1024で動かしています。)
システム→管理→ディスプレイ
で設定できるようになりますが、これは、ソフトウェアの追加で system-config-display を追加すればよいかと。
あと、最低限必要なのは、samba の設定。
Fedora10の設定方法
必要なのはこのくらいかな。
言い忘れましたが、Fedora10 は 公式サイトから DVD イメージを取ってこれますので、それを使いました。
以下のサイトを参考にインストール。
VirtualPCでFedora10
あと、これだけでは任意の解像度の設定ができなかったので、xorg.conf をいじる。(この設定もどこかのサイトを参考にさせていただきましたが、どこが出典か忘れてしまいました、、、すみません。)
Section "Monitor"
Identifier "Monitor0"
ModelName "General Display"
HorizSync 30.0 - 96.0
VertRefresh 50.0 - 130.0
Option "dpms"
EndSection
Section "Device"
Identifier "Videocard0"
Driver "vesa"
EndSection
Section "Screen"
Identifier "Screen0"
Device "Videocard0"
Monitor "Monitor0"
DefaultDepth 16
SubSection "Display"
Viewport 0 0
Depth 16
EndSubSection
EndSection
たぶん、こんな感じで、1600x1200 の解像度でも動くようになります。
(私は、1920x1200 のディスプレイを使用し、1280x1024で動かしています。)
システム→管理→ディスプレイ
で設定できるようになりますが、これは、ソフトウェアの追加で system-config-display を追加すればよいかと。
あと、最低限必要なのは、samba の設定。
Fedora10の設定方法
必要なのはこのくらいかな。
言い忘れましたが、Fedora10 は 公式サイトから DVD イメージを取ってこれますので、それを使いました。
2008年12月28日日曜日
Android Dev Phone 1 が到着
本日、20時に Android Dev Phone 1 が届きました。
UPSの追跡状況によると、発送してからアメリカ国内を2,3日間行方不明になっていたみたいでしたが、なんとか1週間以内に到着です。
そして、1時間後には、SIMカードなし、無線LANでの登録、サンプルアプリ(OpenGLES)の動作が完了していました。すげー簡単に動いた。
参考にさせていただいたサイトの皆様に感謝です。
splhack ← SIM カードなしの登録
No 釘宮理恵, No Life ← アプリの起動
UPSの追跡状況によると、発送してからアメリカ国内を2,3日間行方不明になっていたみたいでしたが、なんとか1週間以内に到着です。
そして、1時間後には、SIMカードなし、無線LANでの登録、サンプルアプリ(OpenGLES)の動作が完了していました。すげー簡単に動いた。
参考にさせていただいたサイトの皆様に感謝です。
splhack ← SIM カードなしの登録
No 釘宮理恵, No Life ← アプリの起動
2008年12月23日火曜日
Android SDK & Code を読む
git://android.git.kernel.org/platform/frameworks/base.git/
この辺面白い。OpenGLES のコードもおいてあるじゃん、と思いつつ数時間コードを追ってしまいました。
でも、わかったことは、ここにおいてあるのはCPUレンダラーであって、実際にハードウェアをたたくライブラリはここにはないようでした。DLLとして置き換えられるようです。
もしかするとGL10を使えってのもこの辺りとの絡みだろうか。GL11も、CPUレンダラーには含まれているようだったけど、今後発売されているハードウェアも含めて、保障されたもんじゃないし。
でも、SwapBuffer とかからは ioctl をたたいて、ハードウェアにアクセスしていたので、注文中の実機はハードウェアをたたいているのかが気になってきた。
まさか、emone の二の舞はないよな。
この辺面白い。OpenGLES のコードもおいてあるじゃん、と思いつつ数時間コードを追ってしまいました。
でも、わかったことは、ここにおいてあるのはCPUレンダラーであって、実際にハードウェアをたたくライブラリはここにはないようでした。DLLとして置き換えられるようです。
もしかするとGL10を使えってのもこの辺りとの絡みだろうか。GL11も、CPUレンダラーには含まれているようだったけど、今後発売されているハードウェアも含めて、保障されたもんじゃないし。
でも、SwapBuffer とかからは ioctl をたたいて、ハードウェアにアクセスしていたので、注文中の実機はハードウェアをたたいているのかが気になってきた。
まさか、emone の二の舞はないよな。
2008年12月22日月曜日
登録:
投稿 (Atom)