我刚刚阅读了 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);
}
根据文档的那句话,这个循环将“启用最大并行性”。
这通常是这样做的吗?像这样订购游戏循环有什么缺点吗?在第一次迭代后,我认为它没有真正的问题......而且我知道了解此类事情的实际速度增加的最佳方法是对其进行实际基准测试,但有其他人已经尝试过这个并且你能证明任何实际的速度提升?