製作25日目 なんかおかしいと思ったら60fps固定されてた


ついでにDirectX3Dのフォントの表示も。

前回FPSの表示がおかしかったのは、算出方法がおかしかったのが原因でした。

60フレーム経過ごとに60/経過時間で算出するように変更しました。


さて、ちゃんと計算できているか試すには、意図的に同期を取らなかったり、
30FPSで動作するよう設定すればいいですね。


あれ・・ なぜ60FPSなの?


ウインドウが隠れていると、それ以外のレートで動作しているのに、アクティブになりtopになるとレートが60になってしまいます。

60FPS(画面のリフレッシュレート)に固定される件

プライマリバッファへの転送処理、Presentがvsyncに同期しているためでした。
これは、D3DPRESENT_PARAMETERSのPresentationIntervalメンバをD3DPRESENT_INTERVAL_IMMEDIATEに設定すれば、vsyncに同期しなくなるので、自前のタイマーでのウェイトで同期をとれます。

mmsystem.hをインクルードするとコンパイルできない。

FPSを管理するのにtimeGetTime関数を使用しました。
mmsystem.hのインクルードが必要なので、書き加えコンパイル



1>c:\program files\microsoft sdks\windows\v6.0a\include\mmsystem.h(103) : error C2146: 構文エラー : ';' が、識別子 'MMVERSION' の前に必要です。

なんじゃこりゃー
そうです。mmsystem.hをインクルードする前に、windows.hがインクルードされていないとコンパイルが通らないらしいです。


#include
#include

UNICODE TCHAR関連の愚痴

FPS表示でsprintfのUNICODE版使おうと思ったので調べるとそれっぽいものが。
wsprintfを使えばいいのかと思ったが、どうやらそれよりもswprintf使ったほうがいいらしい。
UNICODE版といってもtcharで切り替えるので、swprintfの_tcs〜とかを探してみることに。


_stprintf


うん。


セキュリティー版?


_stprintf_s

ってか_tcsから始まらないのかよ!
ほんと関数名が煩雑でわけがわからなくなります。