DirectXのドキュメントを読んでいて、IDirect3DDevice9 :: BeginSceneのページで何か面白いものに遭遇しました:
CPUとグラフィックアクセラレータ間の最大の並列処理を有効にするには、 presentを呼び出す前にIDirect3DDevice9::EndSceneを呼び出すことが有利です。
私は、入力などを処理してから描画するゲームループを作成することに慣れています。私はそれを逆に持っていますか?たぶん、ゲームループはもっと次のようになるはずです:(半擬似コード、明らかに)
while(running) {
d3ddev->Clear(...);
d3ddev->BeginScene();
// draw things
d3ddev->EndScene();
// handle input
// do any other processing
// play sounds, etc.
d3ddev->Present(NULL, NULL, NULL, NULL);
}
ドキュメントのその文によると、このループは「最大の並列処理を可能にする」でしょう。
これは一般的に行われますか?このようなゲームループを注文することの欠点はありますか?最初の反復の後、実際の問題は見られません...そして、このようなものの実際の速度の増加を知る最良の方法は、実際にベンチマークすることですが、他の誰かがすでにこれを試したことがあり、実際の速度を証明できますか?スピードアップ?