2008年12月30日火曜日

疑問

http://plusd.itmedia.co.jp/mobile/articles/0805/30/news017.html

この記事を読むと、OpenGLES1.1 準拠と書かれている。

なのに、なぜ、ドライバの表示も GLES1.0 なのだろうか。

アプリで GL11 を呼び出しても動かないのだろうか。

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 から動的に読み込まれているみたいです。

まあ、ちっちゃい四角形が表示されてるだけですけど、それでも感動ものです。



続きは来年。

2008年12月29日月曜日

android のソースをコンパイル

Fedora10 上でソースをコンパイルしてみました。

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 イメージを取ってこれますので、それを使いました。

2008年12月28日日曜日

送料値下げ?

そういえば、他の人のブログに書いてあった値段より、送料が少し安かった気がする。

Subtotal: $399.00
Tax: $35.16
shipping and handling* $42.06
Total: $476.22

Android Market への登録費用 $25 とあわせて、$500ですね。

ちょうど円高だし、結構お買い得な値段だったのか。

Android Dev Phone 1 が到着

本日、20時に Android Dev Phone 1 が届きました。

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 の二の舞はないよな。

2008年12月22日月曜日

Android Dev Phone 1

注文してしまいました、、、、トータル500$です。

いつ届くのだろう、、、、年末は実家に帰るというのに。

これからSDKをダウンロードしてみます。