プログラマの憂鬱[第4回]

■ 番外編:PSEmu GPU プラグインの開発のツボ

なんだかんだ言いつつも作ってしまいましたよ、PSEmuのプラグイン。 その中でも、GPUプラグインは一番重要なものと言えるんじゃないで しょうか。なんせ、画面に何も出なければやる気もそがれるってもん ですから。とりあえず、数あるプラグインの中では高品質に仕上げた つもりです(結構手抜きがあるけど...)。その際に、現状のプラグイ ンの抱えている問題と解決策についてをいくつか紹介しませう。

1) 画面がよくちらつく
これは、ほかのプラグインでよくみられますが(FF7で多い)、これは 描画オフセットが正しくないからです。シーケンスの中の、描画オフ セットのx,y座標はそれぞれsignedなんです。最上位ビットを符号拡 張をすれば正しいオフセットが得られ、よって正しい描画結果が得ら れます。

2) 320x240モード時の上下余白
これは僕も詳しいことはわかりませんが、このモードでは224ピクセ ル分の高さしか画面に現れないようです。だから、これを考慮せずに 表示したとき、上下に黒い帯が出てしまうのです。真の表示開始位置 を決定しているのはステータスコマンド0x07であるだろうと絞り込む ことができたので、この値に応じて表示開始位置を決定できると思い ます。

3) 表示幅384の謎
表示幅384のときは、どうやら364ピクセル分しか表示されないようで す。とはいっても、使用例がいまのところFF7しか確認できてないの でこれが確実というわけではありません。

4) テクスチャウィンドウの謎
テクスチャウィンドウはテクスチャ座標の上位4bitを設定値で固定す るためのものだと認識しています。だから、通常のプリミティブのテ クスチャ座標は下位4bitだけが有効になり、結果としてテクスチャの 繰り返し表示ができるのです。

5) 画面表示のタイミング
どのプラグインも画面表示のタイミングが表示開始位置が変わったと きになっているみたいですが、これではFF7で戦闘中にカーソルが正 常に表示されません(表示中の画面に描画することが多く存在する)。 updateLaceあたりで表示を行なっていくのが最適です。

だいたい、他のプラグインで問題だと思えることを列挙してみました が、これらを解決できれば表示品質がかなり向上するでしょう。問題 の解決にはGPUのアクセスログをとったり、フレームバッファのスナ ップショットをとったりするのは重要です。テクスチャウィンドウの 解析なんかはこれなしには成し得ませんでした。

- 1999年8月13日 -

[戻る]