我最近开始在C++中学习DirectX编程,并且遇到了一个小问题。在DirectX中放置帧之间的延迟
问题是,我的练习要求我将DirectX应用程序中的颜色从一个更改为另一个。我有一个函数,这是否:
void render_frame(void)
{
// start the random generator
srand(time(NULL));
// clear the window to random color
d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(rand() % 255, rand() % 255, rand() % 255), 1.0f, 0);
// begin/end/display scene
d3ddev->BeginScene();
d3ddev->EndScene();
d3ddev->Present(NULL, NULL, NULL, NULL);
}
它的工作原理,但它是依赖于时间()延迟,我不知道是否有在Direct3D图书馆更好的对应。例如,如果我能在链与特定的颜色和延迟调用此函数为了这样的:
void render_frame_red(void);
delay(1000);
void render_frame_blue(void);
delay(1000);
我知道函数睡眠()存在于标准库,但它确实冻结我的应用程序窗口(我可以”在延迟期间与它进行交互)。也许我可以将时间设置为不同的tickrate,以便随时更新我想要的时间?
我知道这是一件小事,我可能会稍后在我的3D编程之旅中想出它,但如果我更了解DirectX中的工作方式,它不会受到伤害。
只能在程序中调用一次srand()。 –
是的,那是我的不好。我通常在我的main()函数(在这种情况下是WinMain())开始时调用它。 – RPAnimation
@NeilButterworth其实一次在线程中。甚至可以使用':: std :: random_device'。至于问题,DirectX根本不处理时间。现在,所有相关功能都存在于DXGI中(请参阅[IDXGISwapChain](https://msdn.microsoft.com/en-us/library/windows/desktop/bb174569(v = vs.85).aspx))和系统定时器。 – VTT