DirectX:游戏循环顺序,首先绘制然后处理输入?

Ric*_*ket 5 directx game-loop

我刚刚阅读了DirectX文档,并在IDirect3DDevice9 :: BeginScene的页面中遇到了一些有趣的东西:

要在CPU和图形加速器之间实现最大并行性,最好尽可能远远地调用 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);
}
Run Code Online (Sandbox Code Playgroud)

根据文档的那句话,这个循环将"启用最大并行性".

这常见吗?订购这样的游戏循环有什么缺点吗?在第一次迭代之后我发现它没有真正的问题...我知道知道实际速度增加的最佳方法就是实际对它进行基准测试,但是还有其他人已经尝试过这个并且你可以证明任何实际的提速?

das*_*ang 2

由于我一直觉得在 sim 之前进行绘制是“尴尬的”,所以我倾向于将绘制推到更新之后,但也在“当前”调用之后。例如

while True:
   Simulate()
   FlipBuffers()
   Render()
Run Code Online (Sandbox Code Playgroud)

虽然在第一帧上你没有翻转任何东西(并且你需要设置一些东西,以便第一次翻转确实翻转到一个已知的状态),这总是让我觉得比把 Render() 首先更好一点,尽管开始后,操作顺序是相同的。