題名が思いつかないのでこのままにしてあります。0.59については公開はしていましたが途中のような感じになっているので紹介記事では飛ばします。一応整ったバージョン番号なのでそれなりに機能をそろえた段階での公開となっています。
掲示板にあった要望に応えてみた
0.58からの更新はこれになります。さすがに動かない、という動作報告は掲示板側に書き込まれにくいようなので適当なサイトを見に行ってみたりもしていますが、実行ファイルが特殊なものになってくると手の出しようがなくなってくるので機能追加の方に専念しました。
追加された項目は結局
- 表示にDirectX系を使用している場合のFPS表示機能
- d3d9.dllなど描画系DLLの読み込み順序の変更オプション
- ウィンドウ枠の強制削除処理
となります。難しかったのはやはりFPS表示ですね。特に今回は一部実装の問題からDirectX系限定となっています。まあ、GDI描画であっても補間処理が必要であり、それにDirectX系処理を使っているなら表示されるのでそこまで問題になるようなものでも無いと思います。
FPS計測にQueryPerformanceCounterを使ってみることに
私のblogではさんざん調べているとおり、QueryPerformanceCounterにはWinXP時代までちょっとした落とし穴があったため時間計測には使いづらいのでは?と書いていたのですが、WinVista以上であればほぼ問題はないと思われること、そしてWinXPはすでにサポートを外れていることもあってFPS計測処理にQueryPerformanceCounterを使うようにしてみました。しかもFPSの制限処理側もtimeGetTimeによる処理から変更しています。一応WinXPでも動かす可能性は考慮されていますのでWinXPではtimeGetTime経由になるようになっています。
変更そのものはまあ良かったのですが、どうもカウンタが安定していないように見えるのが気になるところです。FPS計測時にかなりぶれがあるようで、FPSの状態で小数第2桁までを表示するようにしてありますが、平均表示でも微妙な範囲を動いているので気になる人は気になるかもしれません。
FPS表示のフォント処理にも参った
単にアルファブレンド系の問題です。テキスト表示はアルファブレンド処理がないとジャギーが目立ってしまうのですが、これが通常のテキスト表示処理ではできないんですよね。表示対象がサーフェイス上に存在していないので・・・。表示させてみてあまりにもテキストがなめらかではなかったのでどうしようか、と悩んだ末にDirectX8以上の処理でアルファブレンドを有効にするようにして何とかしました。ちなみにこの処理ですが、私が持っているADVシステムのテキスト処理からの抜き出しになっています。簡易なので背景色とのレイヤーブレンドは無視しています。これで多少は見やすくなったので今のところはこのままにしてあります。なお、DirectDraw系の場合はテキスト出力を直接使っているのでジャギーが出ます。
一応どうでも良くなさそうなのでこちらに書いておきますが、今のところFPSの表示テキストおよびフォントは固定です。内部的には可変にできるようにも考えてはありますが、特にFPSが平均と瞬間の両方を表示するようになっていることでその指定をどうするかが難しい、ということからこのような処理になっています。項目そのものが今はないので設定ファイルに適当に書いても意味はありませんよ~と。