Nanashi-softプログラマ専用DirectX11開発


◇DirectX11プログラミング -FPS制御する-

今更気がついたこと
FPS制御をしていない(ぉ ←
メインループがフルパワーで回っていて,CPUパワーを使いきり,GPUパワーが発揮できない状態になっている事が発覚した
モデルデータ10万コ表示しても GPU遊んでいる状態に(*'-')

メインループで普通にウェイトを入れてみます
・main.cpp
	//メインループ
MSG hMsg;
long t1 = timeGetTime();
int fpsskipcnt = 0;
while(true){
〜省略〜
//背景クリア
float ClearColor[4];
if(fpsskipcnt){
ClearColor[0] = 1.0f;
ClearColor[1] = 0.4f;
ClearColor[2] = 0.6f;
ClearColor[3] = 1.0f;
}else{
ClearColor[0] = 0.0f;
ClearColor[1] = 0.4f;
ClearColor[2] = 0.6f;
ClearColor[3] = 1.0f;
}
hpDeviceContext->ClearRenderTargetView(hpRenderTargetView, ClearColor);
〜省略〜
if(timeGetTime() - t1 < 1000 / 60){
fpsskipcnt = 0;
}else{
fpsskipcnt = 1; //描画が間に合っていない
}

//時間待ちはここだよね?
while(timeGetTime() - t1 < 1000 / 60){
Sleep(1);
}
t1 = timeGetTime();

hpDXGISwpChain->Present(0, 0);
}
Presentが描画らしい(?)ので,その直前で待ってみました

文字を表示する方法がわからなかったので,処理が間に合っていなければ背景が赤くなるようにしてみました

実行すると,CPU使用率が大幅に下がりました
……が,背景が常に真っ赤ですorz


MSAAが必要以上にかかっているのを抑えると,かなり軽くなりました
	if(4 < MSAA.Count){
MSAA.Count = 4;
MSAA.Quality = MSAA.Quality / 2;
}
ちなみに,VAIO Z(VPCZ1)は,最大
MSAA.Count = 8;
MSAA.Quality = 16;
まで設定可能です


TOPプログラマ専用DirectX11開発