本部分仅适用于 Windows 7 及更高版本以及 Windows Server 2008 R2 及更高版本的 Windows作系统。
覆盖 DDI 是 Direct3D 版本 9 DDI 的扩展,用于验证覆盖支持。 覆盖接口 DDI 包含以下入口点:
Direct3D 运行时使用D3DDDICAPS_TYPE枚举中的 D3DDDICAPS_CHECKOVERLAYSUPPORT 值来验证显示设备是否支持特定的覆盖。 运行时调用 GetCaps 时,将 D3DDDICAPS_CHECKOVERLAYSUPPORT 设置在 pData 参数所指向的驱动程序 GetCaps 函数之 D3DDDIARG_GETCAPS 结构的 Type 成员中。 运行时还将 D3DDDIARG_GETCAPS 的 pInfo 成员设置为一个指向 DDICHECKOVERLAYSUPPORTINPUT 结构的指针,该结构描述了覆盖。 如果驱动程序支持叠加,驱动程序将设置 D3DOVERLAYCAPS 结构的成员,并在 D3DDDIARG_GETCAPS 的 pData 成员中返回指向此结构的指针。 否则,如果驱动程序不支持覆盖,该驱动程序在调用其 GetCaps 函数时将失败,返回 D3DDDIERR_UNSUPPORTEDOVERLAYFORMAT 或 D3DDDIERR_UNSUPPORTEDOVERLAY 错误,具体取决于缺乏支持是否基于覆盖格式。 DirectX SDK 文档中介绍了D3DOVERLAYCAPS。
驱动程序设置 D3DOVERLAYCAPS 结构中的 MaxOverlayDisplayWidth 和 MaxOverlayDisplayHeight 成员,以指示驱动程序和硬件可能具有的任何限制,这涉及到拉伸后的覆盖数据的最终大小。
驱动程序设置 D3DOVERLAYCAPS Caps 成员中的D3DOVERLAYCAPS_STRETCHX(0x00000040)和D3DOVERLAYCAPS_STRETCHY(0x00000080)功能位,以指示覆盖硬件能够任意拉伸和收缩覆盖数据。 驱动程序不应尝试通过 GPU 模拟覆盖层的拉伸,只有在覆盖硬件支持拉伸时才设置这些限制。 应用程序在视频处理和合成阶段执行 GPU 拉伸通常需要更少的开销,而驱动程序在最后单独进行处理来模拟覆盖拉伸则需要更多开销。
驱动程序应处理 D3DDDI_OVERLAYINFOFLAGS 结构中的以下新位字段标志。 D3DDDI_OVERLAYINFOFLAGS结构标识要执行的覆盖作业的类型。 在调用驱动程序的 CreateOverlay 或 UpdateOverlay 函数时,在 D3DDDI_OVERLAYINFO 结构的 Flags 成员中指定了 D3DDDI_OVERLAYINFOFLAGS 结构。
LimitedRGB
叠加为有限范围 RGB,而不是全范围 RGB。 在有限范围 RGB 中,RGB 范围经过压缩,使 16:16:16 为黑色,235:235:235 为白色。YCbCrBT709
覆盖是 BT.709,表示高清电视(HDTV),而不是 BT.601。YCbCrxvYCC
覆盖是扩展的 YCbCr(xvYCC),而不是传统的 YCbCr。当显示格式为 64 位而不是 32 位时(例如,当桌面 Windows 管理器 (DWM) 将 D3DFMT_A16B16G16R16F 用于显示模式时),运行时会将覆盖颜色键的低 32 位放置在 D3DDDI_OVERLAYINFO 结构的 DstColorKeyLow 成员中,而将高 32 位放置在 D3DDDI_OVERLAYINFO 的 DstColorKeyHigh 成员中。