(一)Direct3D 驱动初始化
DirectDraw运行时调用驱动的DrvGetDirectDrawInfo函数时,通过如下表明对Direct3D的支持。
(1)设置DD_HALINFO结构体中的ddCaps结构中的dwCaps成员的值为DDCAPS_3D,来表明硬件支持3D加速。(2)设置DD_HALINFO结构体中的ddCaps成员中的ddsCaps成员的值为DDSCAPS_XXX来表明创建的surface的不同用途。
(3)设置DD_HALINFO结构体中的GetDriverInfo成员指向DdGetDriverInfo回调。同时驱动必须将DD_HALINFO结构体中的dwFlags设置为DDHALINFO_GETDRIVERINFOSET.
(4)分配和初始化D3DHAL_CALLBACKS结构体中的成员并将这一结构通过DD_HALINFO的lpD3DHALCallbacks成员返回。
(5)分配和初始化D3DHAL_GLOBALDRIVERDATA结构体中的成员并将这一结构通过DDHALINFO结构的lpD3DGlobalDriverData成员返回。
在DrvGetDriverDrawInfo返回后,GDI针对不同的GUID多次调用驱动的DdGetDriverInfo来完成驱动的初始化。如果要支持Dirct3D,必须对
GUID_D3DCallbacks3, GUID_Miscellaneous2Callbacks, GUID_D3DExtendedCaps, GUID_ZPixelFormats, GUID_D3DParseUnknownCommandCallback做出相应的处理和实现。
注:由于笔者水平有限,难免有勘误之处, 有不足之处望多多包涵,多多指正。