处理繁忙呈现队列

如果运行时在 DD_FLIPDATA 结构的 dwFlags 成员中传递了 DDFLIP_DONOTWAIT 标志,并且驱动程序无法计划演示,例如,如果当前队列已满,或者驱动程序正在等待 vsync 间隔,则 DirectX 9.0 版本驱动程序必须从对其 DdFlip 函数的调用中返回DDERR_WASSTILLDRAWING值。 如果应用程序调用 IDirect3DSwapChain9::P resent 方法并设置了D3DPRESENT_DONOTWAIT标志,则运行时会使用DDFLIP_DONOTWAIT设置调用驱动程序的 DdFlip 函数。 如果驱动程序无法计划演示,则其 DdFlip 函数在 DD_FLIPDATA 的 ddRVal 成员中返回DDERR_WASSTILLDRAWING。 应用程序的 Present 方法反过来返回DDERR_WASSTILLDRAWING,这允许应用程序执行其他处理。

D3DPRESENT_DONOTWAIT 标志是 DirectX 9.0 的新增标志。 DDFLIP_DONOTWAIT 标志自 DirectX 7.0 起一直可用。 如果 DirectX 7.0 应用程序在调用 IDirectDrawSurface7::Flip 方法时设置DDFLIP_DONOTWAIT,则 DirectX 7.0 或更高版本驱动程序的 DdFlip 函数将收到DDFLIP_DONOTWAIT标志。

如果未设置 D3DPRESENT_DONOTWAIT, 则 Present 的行为与 DirectX 8.1 及更早版本中的行为相同。 也就是说, Present 旋转直到硬件可用,而不会返回错误。

有关 IDirect3DSwapChainXxx::P resent 的详细信息,请参阅最新的 DirectX SDK 文档。