PDD_WAITFORVERTICALBLANK回调函数 (ddrawint.h)

DdWaitForVerticalBlank 回调函数返回设备的垂直空白状态。

语法

PDD_WAITFORVERTICALBLANK PddWaitforverticalblank;

DWORD PddWaitforverticalblank(
  PDD_WAITFORVERTICALBLANKDATA unnamedParam1
)
{...}

参数

unnamedParam1

指向包含获取垂直空白状态所需的信息的 DD_WAITFORVERTICALBLANKDATA 结构。

返回值

DdWaitForVerticalBlank 返回以下回调代码之一:

注解

根据 lpWaitForVerticalBlank 处 DD_WAITFORVERTICALBLANKDATA 结构的 dwFlags 成员的值,驱动程序应执行以下操作:

  • 如果 dwFlags DDWAITVB_I_TESTVB,驱动程序应查询当前的垂直空白状态。 如果监视器当前位于垂直空白中,驱动程序应将 DD_WAITFORVERTICALBLANKDATA 的 bIsInVB 成员设置为 TRUE ;否则,驱动程序应将 bIsInVB 设置为 FALSE
  • 如果DDWAITVB_BLOCKBEGIN dwFlags ,驱动程序应阻止并等待垂直空白开始。 如果在驱动程序开始块时正在进行垂直空白,则驱动程序应等到下一个垂直空白开始后再返回。
  • 如果 dwFlags DDWAITVB_BLOCKEND,驱动程序应阻止并等待垂直空白结束。
当驱动程序成功处理 dwFlags 中指定的操作时,它应在 DD_WAITFORVERTICALBLANKDATA 的 ddRVal 成员中设置DD_OK并返回DDHAL_DRIVER_HANDLED。 驱动程序应返回它无法处理的标志DDHAL_DRIVER_NOTHANDLED。

DdWaitForVerticalBlank 允许应用程序将自身与垂直空白间隔同步 (VBI) 。

注意 如果监视器电源状态会导致驱动程序挂起,则 DdWaitForVerticalBlank 绝不应进入轮询循环。 例如,在监视器关闭电源期间,应用程序可能会调用 WaitForVerticalBlank。 DirectDraw 运行时调用显示驱动程序的 DdWaitForVerticalBlank 入口点,该入口点等待状态更改。 如果监视器关闭,则此值永远不会更改 -- 除非驱动程序编写器为此方案做好准备。 一种解决方案是在轮询循环中包含超时,同时等待垂直空白。 示例 Permedia2 驱动程序只是设置为在监视器关闭时根本不进行轮询。

(DCT) 的 WHQL 显示兼容性测试也存在问题。 其中一个用于电源管理的 DCT 关闭监视器,然后轮询垂直空白状态,等待其更改。 如果驱动程序在监视器关闭电源时始终报告相同的垂直空白状态,则测试应用程序将挂起,等待结果更改。 在 Permedia2 示例驱动程序中修复了此问题,方法是在监视器关闭电源时返回交替结果。 也就是说,当监视器关闭) 时,首次使用DDWAIT_I_TESTVB标志 (调用驱动程序的 DdWaitForVerticalBlank 入口点时,它将返回 FALSE、下次返回 TRUE、下一次返回 FALSE 等。

 

要求

要求
目标平台 桌面
标头 ddrawint.h (包括 Winddi.h)

另请参阅

DD_WAITFORVERTICALBLANKDATA