自动生成 Mipmaps (Direct3D 9)

现在可以自动创建 mipmap,这是一系列纹理,每个纹理筛选为不同的分辨率。 Mipmap 通常用于在呈现时提供不同级别的详细信息。 由于 mipmap 驻留在视频存储器中,所以在纹理创建时自动生成 mipmap 利用了硬件筛选。

若要自动生成 mipmap,请在调用 CreateTexture 之前设置新的用法D3DUSAGE_AUTOGENMIPMAP。 此时的子级别生成对应用程序完全透明。 应用程序只能访问顶级纹理级别;纹理子级别不可访问,因为它们仅在驱动程序需要时才创建。 在子级别生成可能需要大量时间的情况下,请使用 GenerateMipSubLevels 向驱动程序提示它应在适合应用程序的某个时间生成子级别。

Mipmap 筛选

SetAutoGenFilterType 控制自动生成期间的筛选质量。 更改筛选器类型会弄脏 mipmap 子级别,并导致重新生成它们。 使用 GetAutoGenFilterType 获取当前筛选器类型。 默认筛选器类型为 D3DTEXF_LINEAR。 如果驱动程序不支持线性筛选器,则筛选器类型将设置为 D3DTEXF_POINT。

如果没有使用 D3DUSAGE_AUTOGENMIPMAP 创建纹理,则这些方法不起作用 并且不会返回任何失败。 除D3DTEXF_NONE外,自动生成的常规纹理筛选支持驱动程序支持的所有筛选器类型。 对于每种资源类型,驱动程序应支持在相应的纹理、CubeTexture 和 volumetexture 筛选器上限中报告的所有筛选器类型。

若要检查支持哪些筛选器类型,检查查看 D3DCAPS9 的 TextureFilterCaps 和/或 CubeTextureFilterCaps 成员支持哪些 cap。

Mipmap 支持

D3DUSAGE_AUTOGENMIPMAP 只是一个提示,在纹理创建期间或调用 CheckDeviceFormat 时指定此项不会在任何设备驱动程序接口上 (DDI) 类型上导致错误。

如果源是自动生成的 mipmap,但目标不是,则调用 UpdateTexture 是非法的。 源可以是非自动生成的 mipmap,目标可以是自动生成的 mipmap。 在这种情况下,仅更新最顶层的匹配级别。 将忽略所有其他源子级别。 同样,当同时自动生成源和目标时,只会更新最顶层的匹配级别。 将忽略源中的子级别,并重新生成目标子级别。

若要检查对自动生成 mipmap 的支持,检查查看是否已设置D3DCAPS2_CANAUTOGENMIPMAP。 如果是,请使用 D3DUSAGE_AUTOGENMIPMAP 调用 CheckDeviceFormat。 如果返回值为D3D_OK,则保证自动生成 mipmap。 如果返回值为D3DOK_NOAUTOGEN,则表示创建调用将成功,但不会生成任何 mipmap。

Direct3D 纹理