PPUの最適化

前に書いた、キャラクタパタンを携帯JavaAPIで描画し易いフォーマットに、静的にあらかじめ変換しておくという方法は、問題があって難しいことがわかりました。
パレットを頻繁に変更するようなゲームに対応できなくなるのです。

静的に変換するのではなく、実行時に描画したイメージをキャッシュしていけば、多分いける気がします。

キャッシュは2段階にします。パソコンのCPUでいうところの、1次キャッシュと2次キャッシュみたいな感じです。

1次キャッシュには、単純にスクリーンへ転送するだけで描画可能なRGBフォーマットのイメージを入れておきます。

2次キャッシュには、カラールックアップテーブルを参照することでRGB値へ変換できる、インデックスカラーのキャッシュです。アトリビュートテーブルか、パレットテーブルに書き込みがあり、1次キャッシュの内容がDirtyになった場合は、こっちのイメージを使って描画します。

これによって、パレットを頻繁に変更する場合でも、比較的高速に描画できるようになります。

こんな感じでとりあえず実装して、効果のほどを見てみます。
APUのエミュレーションですが、携帯Javaで組まれたそのものズバリなコードを置いてあるサイトを発見してしまい、これだったらかなり簡単に組み込めそうな感じです。
とりあえず音を出してみたいので、これを使ってみようかと思います。
後でリコンパイラの特性を考慮したものを書いて置き換えます。
ソース読んでみるとかなり勉強になる感じです。作って公開してくださった作者の方にマジ感謝です。