Twitterでつぶやいても良かったのですが、どうせ誰も見ないでしょうからblogでかきます。blogで書いても誰も見ないような気もしますが。
とりあえず仕掛けを作ってみた
WindowsModePatchをOpenGLで描画しているものに対応させたバージョンのテストです。まあ、そもそもOpenGLベースで動いているゲームをほぼ持っていないのでサンプルコードをテスト題材代わりにしばらく実装をしてみました。仕事も一段落して暇になったので・・・。
しかし、Windows版のOpenGLというのも不思議な動きをするものですね。ちょっとおもしろいな、と思いました。チュートリアルなんかで解説されているような気がするので詳しくは書きませんが、つまるところ「デバイスコンテキストに対して特殊な描画処理を行うデバイス」という扱いだった、というところでしょうか。ただし、WinAPIレベルでそれ専用の関数群が用意されていて、使う前にいろいろと初期化処理が必要というのも難しいところですね。ChoosePixelFormatやらSetPixelFormatやら・・・。ちなみに初期化処理を正しくしないとかなりうまくいきません。OpenGLを勉強していてWindowsで「ウィンドウは作れたがOpenGLでオブジェクトが表示されない」という場合は特に初期化オプションミスです。PIXELFORMATDESCRIPTORのミスやら呼び出す関数の順序ミス(ChoosePixelFormat=>SetPixelFormat=>wglCreateContext=>wglMakeCurrent=>・・・=>SwapBuffers)に気をつけましょう。
あまりにも描画が遅すぎるぞ
拡大処理そのものはサンプルテストではうまくいっているのですが、あまりにもフレームレートが出ないので今のところ保留中です。なんていったって目視確認できる程度の速度(よくて5fps)しか出ていないですからね。おそらく中間処理が挟まりすぎなのでしょう。特に拡大処理はデバイスコンテキスト経由ということで通常のGDI処理と同じようにしているのですが、それがまずいようで。せめて30fps位は出てくれないとちょっと困りますね。
こうなるとどうせOpenGLを使っているなら拡大処理もOpenGLを使ってやろうか、と思いたくなるくらいです。ただし、こうすると補間処理がいまのところ線形補間のみになりそうです。一応OpenGLなのでシェーダーは使えるはずですが、バージョンの関係やらで制約が大きそうなのでしばらく保留と言うことにしたいと思います。
というわけで、もう少しかな
動くレベルまで行けばゴールが見えてくるのでまだましですね。来週くらいには何とかなったバージョンを公開できるかどうか、という感じで。