ミップマップの自動生成 (Direct3D 9)

ミップマップは、自動的に生成できるようになりました。ミップマップは一連のテクスチャーで、それぞれの要素が異なる解像度にフィルタリングされます。ミップマップは通常、レンダリング時に異なる詳細レベルを提供するために使用されます。ミップマップはビデオ メモリー内に格納されるので、テクスチャーの作成時におけるミップマップの自動生成にはハードウェア フィルタリングを利用します。

ミップマップを自動的に生成するには、新しい使用方法 D3DUSAGE_AUTOGENMIPMAP を設定してから、IDirect3DDevice9::CreateTexture を呼び出します。これ以降のサブレベルの生成は、アプリケーションに対して完全に透過的に実行されます。アプリケーションでアクセスできるのは最上位テクスチャー レベルのみです。テクスチャー サブレベルはドライバーが必要とする場合にのみ作成されるので、アクセスすることはできません。サブレベルの生成に時間がかかる場合は、IDirect3DBaseTexture9::GenerateMipSubLevels を使用して、アプリケーションに適切なタイミングでサブレベルを生成するようにドライバーに指定します。

ミップマップ フィルタリング

IDirect3DBaseTexture9::SetAutoGenFilterType は、自動生成時のフィルタリングの品質を制御します。フィルター タイプを変更すると、ミップマップ サブレベルがダーティーになり、再生成されます。現在のフィルター タイプを取得するには、IDirect3DBaseTexture9::GetAutoGenFilterType を使用します。既定のフィルター タイプは D3DTEXF_LINEAR です。ドライバーが線形フィルターをサポートしていない場合、フィルター タイプは D3DTEXF_POINT に設定されます。

D3DUSAGE_AUTOGENMIPMAP を使用してテクスチャーを作成しなかった場合、これらのメソッドは無効で、エラーも返されません。自動生成では、ドライバーが通常のテクスチャー フィルタリングでサポートされているすべてのフィルター タイプがサポートされます。ただし、D3DTEXF_NONE は除きます。各リソース タイプについて、ドライバーは、対応するテクスチャー、キューブ テクスチャー、およびボリューム テクスチャーのフィルター能力で報告されているすべてのフィルター タイプをサポートする必要があります。

サポートされるフィルター タイプを確認するには、D3DCAPS9 の TextureFilterCaps メンバーや CubeTextureFilterCaps メンバーでサポートされている能力を調べます。

ミップマップ サポート

D3DUSAGE_AUTOGENMIPMAP は単なるヒントであり、テクスチャーの作成時や IDirect3D9::CheckDeviceFormat の呼び出し時にこれを指定しても、デバイス ドライバー インターフェイス (DDI) タイプに関するエラーは発生しません。

元のテクスチャーが自動生成ミップマップで、対象となるテクスチャーがそうでない場合、IDirect3DDevice9::UpdateTexture の呼び出しは無効です。元のテクスチャーが自動生成ミップマップでなく、対象となるテクスチャーが自動生成ミップマップである場合もあります。この場合は、一致する最上位のレベルのみが更新されます。元のテクスチャーの他のサブレベルはすべて無視されます。同様に、元のテクスチャーと対象となるテクスチャーの両方が自動生成されたものである場合は、一致する最上位のレベルのみが更新されます。元のテクスチャーのサブレベルは無視され、対象となるテクスチャーのサブレベルは再生成されます。

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