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

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

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

ミップマップのフィルター処理

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

これらのメソッドは、 テクスチャが D3DUSAGE_AUTOGENMIPMAP で作成されず、エラーが返されない場合は効果がありません。 通常のテクスチャ フィルター処理用にドライバーでサポートされているすべてのフィルターの種類は、D3DTEXF_NONEを除き自動生成でサポートされます。 各リソースの種類について、ドライバーは、対応するテクスチャ、CubeTexture、および volumetexture フィルター キャップで報告されるすべてのフィルターの種類をサポートする必要があります。

サポートされているフィルターの種類を確認するには、 D3DCAPS9 の TextureFilterCaps メンバーまたは CubeTextureFilterCaps メンバーでサポートされているキャップを確認します。

Mipmap のサポート

D3DUSAGE_AUTOGENMIPMAP はヒントに過ぎません。テクスチャの作成時や CheckDeviceFormat を呼び出すときにこれを指定しても、どの種類のデバイス ドライバー インターフェイス (DDI) でもエラーは発生しません。

ソースが自動的に生成されたミップマップであるが、変換先ではない場合、 UpdateTexture の呼び出しは無効です。 ソースは自動的に生成されていないミップマップにすることができ、宛先は自動的に生成されたミップマップにすることができます。 この場合、最上位の一致レベルのみが更新されます。 他のすべてのソース サブレベルは無視されます。 同様に、ソースとコピー先の両方が自動的に生成されると、最上位の一致レベルのみが更新されます。 ソースからのサブレベルは無視され、変換先のサブレベルが再生成されます。

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

Direct3D テクスチャ