というわけでセルフテスト・・・ではないですが、いくつかのゲームでテストしまして一定量問題点が解消できたということで公開しました。
前にも書きましたがDirectDraw関係のエミュレーションがよくなった場面も
DirectDrawの内部をDirect3D9を使ってエミュレーションしています。今回のバージョンではDirect3D7のエミュレーションコードも実装しているため、
ある程度であればDirect3D7を使ったゲームでもエミュレーションができる「はず」です。
まあ、DirectDrawを使っていたのが2006年位まででしょうから今時のゲームにはほとんど影響は及びません。
半分以上は自己満足でしかないことは承知しています。
一部Direct3D側も動作修正をしたりGDI描画(通常の描画)でも問題点を修正したりしています。
DirectDrawをDirect3D9を使ってエミュレーションするということは
つまるところ、本来グラフィックドライバやMicrosoftの中間コードが処理すべき部分を描画サイズの変更を行うためにユーザー側に実装した、ということでもあります。
この手のエミュレーションは早い話が力業ですね。フラグの互換性を保つために値の中間変換をやったりビデオメモリやシステムメモリのごまかしをやったりと。
ドライバの内部でやっていることがどのくらい大変かがよくわかる実装となってしまいました。
特にDirectDrawでWinVistaを使って拡大を行うべき部分の反応がよくなった
ということです。WinXPまでならドライバがそうしていたのだと思いますが、HALを使っていたときにBltによる拡大描画を行うと勝手に線形補間をかけていたのですが、それがない、と。
今回であればその部分をDirect3D9のStretchRectやPixelShaderを使った補間処理に変換しているのでかなり有利です。
もちろん、不利になった面もあり、エミュレーションのためにビデオメモリとシステムメモリの両方にサーフェイスを持つようにしたりと無駄が多いです。
Twitterでの報告の方が早くなった
ちょこちょこ使うようにしています。
つぶやく方がblogで書くより「短くても正確に伝わる場合」はいいですね。
このblogにもブログパーツでTwitterのタイムラインをつけようか考えているところです。
なお連続しないと意味を取り違える文面の場合はblogの方がよいと私は思っています。