纹理格式列表

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

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

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

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

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

若要处理D3DGDI2_TYPE_GETFORMATCOUNT,驱动程序必须在驱动程序的 dwFormatCount 字段中存储它支持的 DirectX 8.0 DDI 样式图 面DD_GETFORMATCOUNTDATA

当运行时从驱动程序收到支持的格式数后,它会使用类型为 D3DGDI2_TYPE_GETFORMAT 的 GetDriverInfo2 查询来查询每个图面D3DGDI2_TYPE_GETFORMAT。 数据数据结构的 lpvData 字段DD_GETDRIVERINFODATA数据结构在这种情况下是DD_GETFORMATDATA。

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

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