まずピクセル格納領域の容量を下げて高速化した。
これは、単純にメモリアクセスが重かったため、効果が十分にあった。
次に、描画スレッドとゲームスレッドを分割して同時並行で走らせることにした。
これで描画周りでゲームフローが阻害されることがなくなったし、描画用CPUコアのL1キャッシュに乗るのが画像データだけになったので動作が早くなった。
あとは、描画形式を定めた。今のところ32768色の割当をTrueColorに変換する形で対応してる。
256色というのが一番仮想スクリーンの容量が軽いんだけど、カラーテーブルを決めるのに時間がかかりそうなので、できるだけ今の画素を有効活用したいという考えでいる。
なので、32768色の情報を格納する変数を作って、それをTrueColorのデータに変換する関数を作成して、画素を読み込ませることにした。
最初どれが正解かわからなかったので、画素を格納する変数に直接値を代入して色を確認、そこから予定通リデータを変換できるかを確認しながら実装していった。
結局5bitで値を持って、最終的に32bitに変換する形で対応している。これならテーブル持たなくていい。
もはやハードウェアに近いところまで(グラフィック描画システムに近いところ)再実装してた感じになった。
グラフィック周りは線と円、矩形も描けるようになったので、最低限ベクタスキャンみたいなゲームなら作れそうな気がする。
ついでにXorな描画もできるようにしたので、マスク的な演出もできるし、真っ黒を透過色にしたので、透過色で塗ればそこの部分が描画されてない扱いとした。これでちょっとした工夫ができそう。