现在可以自动创建一个 mipmap,它是一系列纹理,每个纹理都筛选为不同的分辨率。 在呈现时,Mipmap 通常用于提供不同级别的详细信息。 在纹理创建时自动生成 mipmap 会利用硬件筛选,因为 mipmap 驻留在视频内存中。
若要自动生成 mipmap,请在调用 CreateTexture之前设置新的用法 D3DUSAGE_AUTOGENMIPMAP。 从这一点开始的子级生成对应用程序完全透明。 只有顶层纹理级别可供应用程序访问;纹理子级别不可访问,因为它们仅在驱动程序需要时才创建。 如果子级生成可能需要很多时间,请使用 GenerateMipSubLevels 提示驱动程序,提示它应该在适合应用程序的某个时间生成子级别。
Mipmap 筛选
SetAutoGenFilterType 控制自动生成期间的筛选质量。 更改筛选器类型会破坏 mipmap 子级别,并导致重新生成它们。 使用 GetAutoGenFilterType 获取当前筛选器类型。 默认筛选器类型为D3DTEXF_LINEAR。 如果驱动程序不支持线性筛选器,筛选器类型将设置为D3DTEXF_POINT。
如果未使用 D3DUSAGE_AUTOGENMIPMAP 创建纹理并且不返回失败,则这些方法不起作用。 驱动程序支持的所有常规纹理筛选支持的筛选器类型都支持自动生成,但D3DTEXF_NONE除外。 对于每个资源类型,驱动程序应支持在相应的纹理、CubeTexture 和 volumetexture 筛选器上限中报告的所有筛选器类型。
若要检查支持哪些筛选器类型,请检查 TextureFilterCaps 和/或 CubeTextureFilterCaps 成员 D3DCAPS9支持哪些上限。
Mipmap 支持
D3DUSAGE_AUTOGENMIPMAP 只是提示,在创建纹理期间或在调用 CheckDeviceFormat 时指定此设置不会在任何设备驱动程序接口 (DDI) 类型上引起错误。
当源是自动生成的 mipmap 时,调用 UpdateTexture 是非法的,但目标不是。 源可以是非自动生成的 mipmap,目标可以是自动生成的 mipmap。 在这种情况下,只会更新最顶层的匹配级别。 将忽略所有其他源子级别。 同样,当自动生成源和目标时,只会更新最顶层的匹配级别。 将忽略源中的子级别,并重新生成目标子级别。
若要检查是否支持自动生成 mipmap,请检查是否设置了 D3DCAPS2_CANAUTOGENMIPMAP。 如果是,请使用 D3DUSAGE_AUTOGENMIPMAP调用 checkDeviceFormat。 如果返回值D3D_OK,则保证自动生成 mipmap。 如果返回值D3DOK_NOAUTOGEN,则表示创建调用将成功,但不会生成任何 mipmap。
相关主题