Chiharu の日記

絵描き C/C++ プログラマーの日記です。

Parallel force - パラレル・フォース 〜スプライト管理、実装中

グラフィックス パッケージで矩形フィルとイメージの dot by dot 転送の実装を完了。描画先は RGBX-8bit 固定で、すべての描画ルーチンで下記の組み合わせが利用できるようになっています。

  • 合成モード (通常・加算・減算・乗算・スクリーン合成)
  • 入力カラー (RGBA-8bit, RGBX-8bit, RGB-8bit, Gray-8bit, GrayA-8bit)
  • 不透明度によるフェード指定 (0-255)

実装は、幾何計算と合成処理の直行性を利用したファンクタ ベースの描画ルーチンになっています。以前作った類似のエンジンよりも幾分すっきりした実装になりました。それなりに実装スキルは向上しているようです。上記の描画処理だけで、えーと…、Graphics/Drawer.cpp は 800 行程度ですね。短い…、かな。テンプレート万歳!
現在、描画命令をタスク化して、スレッドに食わす直前くらいのところで詰まってます。
ただ描画するサンプルコードを作るのであれば、そのまま実装を進めても良いのですが、一応ゲーム用のエンジンとして利便性を高めておきたいと思います。スプライト パッケージの実装が欠かせません。ということで、現在スプライト関連の実装中です。スクリーンとスプライト、複数のオフスクリーン バッファと描画ルーチンの関係を整理するのがなかなか大変です。いや、実装するだけならすぐなんですが、きれいにまとめようと思うと、それなりに時間がかかるものだな、と。シングルスレッドで描画するだけのエンジンなら、スプライトの管理クラスと描画ルーチンが渾然一体となっていても良いのですが、キャッシュ考慮の並列描画を前提とすると、ちょーっと一考しないとすっきりしません。並列化対象は決めてあるので、それに合致するよう描画管理はすでにスレッド分散用に分割してあるのですが、んー、それをスプライトと関連付けようとすると、んー。もう一ひねりかな。