PDEV 协商

任何图形驱动程序的主要职责之一是在驱动程序初始化期间启用 PDEV 。 PDEV 是物理设备的逻辑表示形式。 此表示形式由驱动程序定义,通常是专用数据结构。 有关启用 PDEV 的详细信息,请参阅 DrvEnablePDEV

通过 DrvEnablePDEV 函数,驱动程序必须向 GDI 提供描述所请求设备及其功能的信息。 驱动程序提供 GDI 的一条重要信息是,在 DEVINFO 结构的 flGraphicsCaps 和 flGraphicsCaps2 成员中) (GCAPS_Xxx和GCAPS2_Xxx标志的图形功能标志集。

功能标志允许 GDI 确定 PDEV 支持的操作。 例如,在 GDI 尝试调用 DrvStrokePath 函数以使用这些基元类型绘制路径之前,GDI 测试指示 PDEV 是否可以处理贝塞尔曲线和几何宽线的功能标志。 如果功能标志指示 PDEV 无法处理这些基元类型,GDI 将分解线条或曲线,以便它可以对驱动程序进行更简单的调用。

在驱动程序方面,每当驱动程序从 GDI 获取与路径相关的高级调用时,如果路径或剪裁过于复杂,设备无法处理,则它可以返回 FALSE

处理修饰线时,驱动程序无法从 DrvStrokePath 返回 FALSE,因为驱动程序必须处理修饰线的任何复杂剪裁或样式。 但是,如果路径具有贝塞尔曲线或几何线, DrvStrokePath 可以返回 FALSE 。 发生这种情况时,GDI 会将调用分解为更简单的调用,就像未设置功能位时一样。 例如,如果 DrvStrokePath 在发送几何线时返回 FALSE ,则 GDI 会简化该行并调用 DrvFillPath 函数。

如果 DrvStrokePath 要报告错误,则必须返回DDI_ERROR。

对于依赖于 PDEV 的函数,GDI 和驱动程序之间的这种协商允许 GDI 和驱动程序生成高质量的输出,而无需过多的通信。