创建驱动程序端图面结构

DirectDraw 运行时在调用 DdCreateSurface 入口点并为图面分配内存后,调用驱动程序的 D3dCreateSurfaceEx 入口点。 运行时仅针对标记有DDSCAPS_TEXTURE、DDSCAPS_EXECUTEBUFFER、DDSCAPS_3DDEVICE或DDSCAPS_ZBUFFER标志的图面调用 D3dCreateSurfaceEx

在调用 D3dCreateSurfaceEx 之前,运行时会将整数值指定为图面的句柄。 此值存储在 DDRAWI_DDSURFACE_LCL 结构) 的 lpSurfMore 成员所指向的 DDRAWI_DDSURFACE_MORE 结构 (的 dwSurfaceHandle 成员中。 请参阅 DD_SURFACE_MOREDD_SURFACE_LOCAL,它们是DDRAWI_DDSURFACE_MORE和DDRAWI_DDSURFACE_LCL结构的别名。

这些整数值从 1 开始,并尽可能小。 (零是表面句柄的保证无效值。) 目的是驱动程序可以将指针数组保留到其自己的结构中。 在调用 D3dCreateSurfaceEx) 超出数组末尾时,只要它收到句柄 (,它就可以重新分配数组并继续。 Direct3D 运行时在通过 D3dCreateSurfaceEx 向驱动程序显示该句柄之前,不向驱动程序传递任何句柄值。 但是,驱动程序应足够可靠,可以处理范围外的值,或引用句柄表中已释放的槽位的值, (该句 柄是 DdDestroySurface 已被) 调用的句柄。 请注意,由于零是保证无效值,因此句柄表中的零项可以重复使用用于其他目的。 Perm3 示例驱动程序使用零条目来存储数组的当前长度。

注意 Microsoft Windows 驱动程序工具包 (WDK) 不包含 3Dlabs Permedia3 示例显示驱动程序 (Perm3.h) 。 可以从 Windows Server 2003 SP1 驱动程序开发工具包 (DDK) 获取此示例驱动程序,可以从 WDHC 网站的 DDK - Windows 驱动程序开发工具包页下载该驱动程序。