纹理格式列表

Direct 8.0 引入了用于描述像素格式的新机制。 在以前版本的 DirectDraw 和 Direct3D 像素格式中,数据结构 (DDPIXELFORMAT) 进行了描述,该结构包含有关每个颜色通道的位数和每个颜色通道 (的位掩码的信息,以及标志和大小字段) 。 DirectX 8.0 中的像素格式是简单的 DWORD,用于标识特定像素格式并与 FOURC 兼容, (Direct3D 像素格式只是 FOURC,除最小有效字节外,所有有效字节均为零) 。

DDPIXELFORMAT 数据结构不再通过 API 级别接口公开。 但是,它仍在 DDI 级别使用。 驱动程序通过纹理格式数组报告其支持的纹理格式,该数组由表面说明及其嵌入的 DDPIXELFORMAT 数据结构组成。 但是,嵌入的像素格式结构现在可用于报告新样式的像素格式。 若要使用 DDPIXELFORMAT 数据结构指定新的样式像素格式,请将结构的 dwFlags 字段设置为值DDPF_D3DFORMAT并将新的像素格式标识符存储在 dwFourCC 字段中。

此外,某些其他新字段已添加到 DDPIXELFORMAT, (新字段已添加为与现有字段的联合的成员,因此数据结构的大小) 相同。 这些字段包括: dwOperationsdwPrivateFormatBitCountwFlipMSTypeswBltMSTypes

符合 DirectX 8.0 DDI 的驱动程序应继续通过标准机制报告 DX7 样式的图面格式,即全局驱动程序数据结构中报告的纹理格式列表 (D3DHAL_GLOBALDRIVERDATA) ,以及为响应 DdGetDriverInfo GUID_ZPixelFormats而报告的 Z/模具列表。 但是,驱动程序还应通过下面所述的新 DirectX 8.0 DDI 机制报告其支持的所有图面格式。

DirectX 8.0 DDI 样式图面格式是使用 GetDriverInfo2 报告的。 运行时使用两种 GetDriverInfo2 查询类型从驱动程序查询图面格式。 D3DGDI2_TYPE_GETFORMATCOUNT用于请求驱动程序支持的 DirectX 8.0 样式图面格式的数量。 D3DGDI2_TYPE_GETFORMAT用于从驱动程序查询特定图面格式。

若要处理D3DGDI2_TYPE_GETFORMATCOUNT,驱动程序必须将它支持的 DirectX 8.0 DDI 样式图面格式的数量存储在DD_GETFORMATCOUNTDATAdwFormatCount 字段中。

当运行时从驱动程序收到支持的格式数时,它会依次使用类型为 D3DGDI2_TYPE_GETFORMAT 的 GetDriverInfo2 查询查询每种图面格式。 在本例中,DD_GETDRIVERINFODATA数据结构的 lpvData 字段指向的数据结构DD_GETFORMATDATA

DirectX 8.0 运行时扫描驱动程序报告的纹理格式列表,检查每种像素格式的 dwFlags 字段。 如果任何纹理格式的 dwFlags 设置为 DDPF_D3DFORMAT,则运行时会将此纹理格式列表标识为 DX8 样式,并筛选其像素格式未标记为DDPF_D3DFORMAT的所有纹理格式。 此外,DX7 运行时会筛选设置了DDPF_D3DFORMAT的任何纹理格式。 因此,支持 DX8 DDI 的驱动程序可以返回纹理格式列表,其中包含每个受支持的格式的两个条目,一个在旧样式中指定,一个在新样式中指定。 DX8 运行时使用新样式中指定的格式,DX7 运行时使用旧样式中指定的格式。

应通过 GetDriverInfo2 机制报告所有支持的表面格式,例如纹理、深度或模具缓冲区或呈现目标。 运行时忽略通过旧机制 (D3DHAL_GLOBALDRIVERDATA和GUID_ZPixelFormats) 返回的纹理和 Z/模具格式。 未尝试将这些格式映射到 DirectX 8.0 驱动程序的 DX8 样式格式。 但是,旧格式将映射到 DirectX 7.0 或更早版本的驱动程序的新样式。 因此,驱动程序必须通过 DirectX 8.0 DDI 报告所有支持的表面格式。 此外,由于旧运行时不会将新样式图面格式映射到旧样式格式,因此驱动程序必须继续通过旧机制报告 DirectX 7.0 样式图面和 Z/模具格式。