寝ても覚めてもというほどでもないが、極力GPUを使って8色パレットカラーをエミュレートする方法を考えている。 ビット演算をJavaScriptにさせるアイデアはコストが高い感じがする。Chrome CanaryやFirefoxではオプション設定でWebGL 2.0を動かすことができるから、それで再チャレンジしようかなとも思った。それはそれで試してみたいのだが、2つ目のアイデアが浮かんだので、それを試してみようと思っている。
それは以下のようなものである。
- 320x240のフレームバッファを用意する。
- シェーダープログラムは2つ用意する。1つ目はフレームバッファにピクセルを描画するもの、もう1つは画面にフレームバッファの内容を描画するものである。
- 1つ目のプログラムでフレームバッファにGPUでピクセルを描画する。ピクセルの色情報はRのみに1-7の値をセットし、他は0をセットする。
- 2つ目のプログラムでフレームバッファをテクスチャにして、画面サイズと同じ四角形ポリゴンを1枚描く。フラグメントシェーダは、テクスチャの色情報をインデックスに、uniform変数で与えたパレット情報テーブルを使い色をルックアップするように作る。そうすることで、パレットをエミュレートする。
JavaScriptからは、シェーダーにXY座標とピクセルの色番号を指定するのみで、後はすべてGPUに処理させるのである。 このアイデアをもとに早速実装を始めることにする。