アルファブレンド
私が作ったゲーム開発ライブラリには言わずと知れた問題がある。 それは「アルファブレンドが激重」という問題である。 そりゃそうだ、たいした最適化は行なっていない。 すべて“C”である。 いや、一度、アセンブラでの最適化を試みたのだが、コンパイラの最適化に完敗して以来、この手段は封印している。
それにしても重い。 というわけで、再度アセンブラによる最適化を試みる一大プロジェクトを立ち上げた。 リベンジである。 しかし、以前と同じ手段を使ったのでは、また砂を持ち帰る羽目になる。 そこで、今回はある作戦を打ち立てた。 キーワードは「MMX」である。 MMX命令を使えば倍単位での高速化が見込める。 その反面、恩恵を受けられるCPUは限定されてしまう。 まあ、テストということで、今回はMMX限定で行ないたいと思う。
ところで、問題がいくつかある。 その中でも最も厄介な問題がビデオチップの違いによるビットフォーマットの違いである。 これは16ビット表示を用いる際に発生する問題なのだが、ビデオチップによってRGBのビット数と並びが異なるのである。 並びはともかく、ビット数の違いはプログラムが複雑になる。 せっかくの最適化も無駄にしかねない。 この問題をどう工夫して乗り切るかが勝負の分かれ目といえよう。