我刚刚阅读了DirectX文档,并在IDirect3DDevice9::BeginScene页面中发现了一些有趣的内容:
为了实现CPU和图形加速器之间的最大并行性,尽可能在调用present之前调用IDirect3DDevice9::EndScene是有利的。
我习惯先处理输入等操作,然后再进行绘制。这样做是否有误?也许游戏循环应该更像这样:(半伪代码,显然)
根据文档中的这句话,该循环将“实现最大并行性”。
这是常见的做法吗?按照这种方式排序游戏循环是否有任何缺点?在第一次迭代之后,我并没有看到什么真正的问题...我知道了解像这样的实际速度增加的最好方法是对其进行基准测试,但是否已经有其他人尝试过这个,并且您可以证明任何实际的速度增加?
为了实现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);
}
根据文档中的这句话,该循环将“实现最大并行性”。
这是常见的做法吗?按照这种方式排序游戏循环是否有任何缺点?在第一次迭代之后,我并没有看到什么真正的问题...我知道了解像这样的实际速度增加的最好方法是对其进行基准测试,但是否已经有其他人尝试过这个,并且您可以证明任何实际的速度增加?