Share via


ミップマップの自動生成

ミップマップの自動生成

ミップマップを自動生成すると、テクスチャの作成中にハードウェア フィルタリングを利用した完全な透明度などの機能を使うことが可能になる。特にミップマップ レンダリング ターゲットには自動生成は有効である。ミップマップ レンダリング ターゲットはビデオ メモリ内に存在するので、ソフトウェア フィルタリングでは効率的に適用できない。

ミップマップを自動的に生成するには、作成時に新しい使用方法 D3DUSAGE_AUTOGENMIPMAP を設定する。それ以降のサブレベルの生成は、アプリケーションにとって完全に透過的になる。ハードウェアによっては、サブレベルの生成に時間がかかる場合がある。 このため、IDirect3DBaseTexture9::GenerateMipSubLevels を使って、アプリケーションにとって適切な時期にサブレベルを生成するためのヒントをドライバに伝えることができる。

IDirect3DBaseTexture9::SetAutoGenFilterType は、自動生成時のフィルタリングの品質を制御する。フィルタ タイプを変更すると、ミップマップ サブレベルが "ダーティー" になって再生成される。

現在のフィルタ タイプを取得するには、IDirect3DBaseTexture9::GetAutoGenFilterType を使う。テクスチャの作成時に設定される (デフォルトの) フィルタ タイプは D3DTEXF_LINEAR である。ドライバが線形フィルタをサポートしていない場合、フィルタ タイプは D3DTEXF_POINT に設定される。

D3DUSAGE_AUTOGENMIPMAP を使わずに作成したテクスチャでは、これらのメソッドは無効であり、エラーも返されない。D3DTEXF_NONE を除く自動生成されたテクスチャに対しては、ドライバが通常のテクスチャ フィルタリングでサポートしているフィルタ タイプはすべてサポートしている。ドライバは、各リソース タイプに対応するテクスチャ、キューブテクスチャ、ボリュームテクスチャのフィルタ能力で報告されているフィルタ タイプをすべてサポートしなければならない。

転送元が自動生成されたミップマップであり、転送先がそうでない場合、IDirect3DDevice9::UpdateTexture は無効である。転送元が自動生成されたミップマップでなく、転送先が自動生成されたミップマップである場合は有効である。この場合、一致する最上位のレベルだけが更新される。転送元のその他のサブレベルはすべて無視される。同様に、転送元および転送先がともに自動生成されたものである場合も、最上位の一致するレベルだけが更新される。転送元のサブレベルは無視されて、転送先のサブレベルは再生成される。

自動生成ミップマップを作成する場合、Levels パラメータは 0 または 1 に設定しなければならない。

ミップマップの自動生成がサポートされているかどうかを調べるには、D3DCAPS2_CANAUTOGENMIPMAP が設定されているかどうかを確認する。設定されている場合は、D3DUSAGE_AUTOGENMIPMAP を指定して IDirect3D9::CheckDeviceFormat を呼び出す。戻り値が D3D_OK である場合、ミップマップの自動生成が保証されている。戻り値が D3DOK_NOAUTOGEN である場合は、作成の呼び出しは成功するが、ミップマップは生成されない。

サポートされるフィルタ タイプを確認するには、D3DCAPS9TextureFilterCaps または CubeTextureFilterCaps、あるいはその両方のメンバがサポートする能力を調べる。

最後に、D3DUSAGE_AUTOGENMIPMAP は単なるヒントであり、テクスチャの作成または IDirect3D9::CheckDeviceFormat でこれを指定してもデバイス ドライバ インターフェイス (DDI) タイプに関するエラーは発生しないので、注意すること。

関連項目