テレワークならECナビ Yahoo 楽天 LINEがデータ消費ゼロで月額500円〜!
無料ホームページ 無料のクレジットカード 海外格安航空券 海外旅行保険が無料! 海外ホテル


log

2009.04.15 C++:ゆっくりC++

更新あまりしてませんでしたが、色々とプログラムを追加してました。

多重起動できないようにしたり。
デバイスロストに対応したり。
マルチスレッドに対応させてみたり。
高速化するためにSetRenderStateがなるべく呼び出されないようにしたり。
ていってもまだXファイルを読み込む関数できてませんけどね。

今日はFPSを表示させてみたけど、なぜか40fpsくらいしかでません。。

変だ。

モデル表示すらしていないのに40fpsとな?うーん。。
試しにおちゃっこさんのWin32版E3Dサンプルをビルドして
やってみたけど普通に60fpsでてるし。

今のところ青画面だけなのでFPS表示の導入方法が悪かったのか、
他の部分が悪いのか分からないです。C++難しいな。

comment

たけなか 2009.04.15-05:03 Edit

さっそく問題点が分かった!

ウィンドウクラスのスタイルをCS_CLASSDCにしていたのを
とりあえずCS_BYTEALIGNCLIENT | CS_BYTEALIGNWINDOWに
すると60fpsでました。

たったそれだけ?って思いました。
参考書の多くはCS_CLASSDCになってるんだけどなぁ。
CS_CLASSDC自体が悪いわけじゃないんだろけど、
具体的な理由がまだ分からないです。

たけなか 2009.04.15-14:19 Edit

ウィンドウクラスのせいで無くてどうもタイマー精度の問題でした。
ウィンドウクラスと一緒にFPS定数もいじってたのを忘れて勘違いしてました。

安定タイマーにSetTimer()を使ってたんですが、どうも
55msまでしか精度が無いそうなので1ms単位に計測できる
timeGetTime()を使ってみるとうまくいきました。

SetTimer()でもFPS定数を120とかに上げればFPSが上がるんですが
意図したFPSってわけじゃないですしね。