技術的なところの疑問は綺麗に解消しているのですが、「どの方式でいくか」で。
一般的に、画像処理性能が求められるAndroidプログラムの場合、OpenGLを用います。
しかし、OpenGLは3D専用だからやめました。
もちろん、巷ではOpenGLを使って2Dゲームを作っている方も多いと思います。
それらを否定するものではありません。
OpenGL非採用の原因は、ビデオメモリをロックしてメモリ内容を転送する手段が無いこと。
一応、テクスチャ画像をロックして、テクスチャ領域へメモリ内容を転送し、ポリゴン経由で出力する手段も無くは無いでしょうけど。
しかし、それを用いて画面全体分(240x320)の大き目の画像表示する性能が、果たして実用に耐え得るものなのか・・・が、疑問。ついでに、テクスチャのサイズが一片につき2のn乗でなければならない制約が引っ掛かりました。(つまり、私が目的とする使い方を想定した仕様ではない可能性が高い)
という訳で、SurfaceView+AndroidBitmap+Canvasを用いる方式で実現する方向性に切り替え。
(その決断をするための判断材料を得るのに難産しました)
とりあえず、グラフィック部分のみのJava側の実装はアッサリ完了。
折角なので、晒しておきます。
■アクティビティの実装
■サーフェースビューの実装
div class="separator" style="clear: both; text-align: center;"> |
コンストラクタで仮想VRAM情報のAndroidBitmapを作成し、メインループ(スレッド)関数で仮想VRAM情報を更新する関数を呼び出し、その結果をカンバスクラスのビットマップ書き込み関数で更新する感じです。
Javaは反吐が出るほど大キライなので、Java実装はこれにてほぼ完成です。
可能な限り、Javaでは書きたくありません。
あとは、不可避な事情が発生した場合に限り、必要に応じて最小限の実装を追加するだけ。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。