IDirect3DBaseTexture9
COM公式ドキュメント
IDirect3DBaseTexture9 (d3d9.h) インターフェイス。アプリケーションは IDirect3DBaseTexture9 インターフェイスのメソッドを使用してテクスチャリソースを操作します。
解説(Remarks)
デバイスの特定のステージに割り当てられている IDirect3DBaseTexture9 インターフェイスは、GetTexture メソッドを呼び出すことで取得できます。
LPDIRECT3DBASETEXTURE9 型および PDIRECT3DBASETEXTURE9 型は、IDirect3DBaseTexture9 インターフェイスへのポインターとして定義されています。
typedef struct IDirect3DBaseTexture9 *LPDIRECT3DBASETEXTURE9, *PDIRECT3DBASETEXTURE9;
メソッド 6
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
IDirect3DBaseTexture9::SetLOD は、管理対象テクスチャに対して最も詳細な詳細度 (level-of-detail) を設定します。
| LODNew | DWORD | in | ミップマップチェーンに設定する、最も詳細な詳細度 (level-of-detail) の値。 |
戻り値
型: DWORD
最大の詳細度の値 (総レベル数から 1 を引いた値) にクランプされた DWORD 値。以降にこのメソッドを呼び出すと、以前に設定した詳細度の値ではなく、クランプ後の値が返されます。
解説(Remarks)
このメソッドは、IDirect3DBaseTexture9 を継承する次のインターフェイスに適用されます。
SetLOD は、管理対象テクスチャの詳細度を制御するために使用します。管理対象でないテクスチャに対しては 0 を返します。SetLOD は、ローカルビデオメモリにロードすべきチェーン内の最も詳細なミップマップを Direct3D テクスチャマネージャーに通知します。たとえば 5 レベルのミップマップチェーンで LODNew に 2 を設定すると、テクスチャマネージャーは常にミップマップレベル 2 から 4 のみをローカルビデオメモリにロードします。
より具体的には、テクスチャが 256x256 のサイズで作成されている場合、最も詳細なレベルを 0 に設定すると利用可能な最大のミップマップは 256 x 256 となり、1 に設定すると利用可能な最大のミップマップは 128 x 128 となります。以降も同様に、チェーンの最も詳細なミップレベル (最小のテクスチャサイズ) まで続きます。
IDirect3DBaseTexture9::GetLOD メソッド (d3d9helper.h) は、管理対象テクスチャに設定された最大の詳細度 (level-of-detail) にクランプされた値を返します。
戻り値
型: DWORD
最大の詳細度の値 (総レベル数から 1 を引いた値) にクランプされた DWORD 値。管理対象でないテクスチャに対する GetLOD の呼び出しはサポートされておらず、D3DERR エラーコードが返されます。
IDirect3DBaseTexture9::GetLevelCount メソッド (d3d9helper.h) は、マルチレベルテクスチャ内のテクスチャレベル数を返します。
戻り値
解説(Remarks)
IDirect3DBaseTexture9::SetAutoGenFilterType メソッド (d3d9helper.h) は、自動生成されるミップマップサブレベルに使用されるフィルタータイプを設定します。
| FilterType | D3DTEXTUREFILTERTYPE | in | フィルタータイプ。D3DTEXTUREFILTERTYPE を参照してください。フィルタータイプが無効であるか、サポートされていない場合、このメソッドは失敗します。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になることがあります。
解説(Remarks)
フィルタータイプを変更するとミップマップサブレベルが "dirty" 状態になり、再生成されます。
テクスチャ作成時に設定される (既定の) フィルタータイプは D3DTEXF_LINEAR です。ドライバーがリニアフィルターをサポートしていない場合、フィルタータイプは D3DTEXF_POINT に設定されます。通常のテクスチャフィルタリングでドライバーがサポートするすべてのフィルタータイプは、D3DTEXF_NONE を除いて自動生成でもサポートされます。ドライバーが適切な D3DPTFILTERCAPS_MINFxxx の caps を設定していない限り、SetAutoGenFilterType は失敗します。これらの値は D3DCAPS9 の TextureFilterCaps メンバーおよび CubeTextureFilterCaps メンバーで指定されます。
テクスチャフィルタータイプの詳細については、D3DTEXTUREFILTERTYPE を参照してください。
テクスチャが D3DUSAGE_AUTOGENMIPMAP を指定して作成されていない場合、このメソッドは何の効果もありません。この場合、失敗は返されません。使用法 (usage) 定数の詳細については、D3DUSAGE を参照してください。
IDirect3DBaseTexture9::GetAutoGenFilterType メソッド (d3d9helper.h) は、自動生成されるミップマップサブレベルに使用されるフィルタータイプを取得します。
戻り値
フィルタータイプ。D3DTEXTUREFILTERTYPE を参照してください。このメソッドを使用するには、テクスチャを D3DUSAGE_AUTOGENMIPMAP を指定して作成する必要があります。それ以外の使用法の値では、このメソッドは D3DTEXF_NONE を返します。
解説(Remarks)
フィルタータイプを変更するとミップマップサブレベルが "dirty" 状態になり、再生成されます。
テクスチャ作成時に設定される (既定の) フィルタータイプは D3DTEXF_LINEAR です。ドライバーがリニアフィルターをサポートしていない場合、フィルタータイプは D3DTEXF_POINT に設定されます。通常のテクスチャフィルタリングでドライバーがサポートするすべてのフィルタータイプは、D3DTEXF_NONE を除いて自動生成でもサポートされます。各リソースタイプについて、ドライバーは対応する texture、CubeTexture、volumetexture のフィルター caps で報告したすべてのフィルタータイプをサポートする必要があります。テクスチャタイプの詳細については、D3DTEXTUREFILTERTYPE を参照してください。
テクスチャが D3DUSAGE_AUTOGENMIPMAP を指定して作成されていない場合、このメソッドは何の効果もありません。
IDirect3DBaseTexture9::GenerateMipSubLevels メソッド (d3d9helper.h) は、ミップマップサブレベルを生成します。
解説(Remarks)
アプリケーションは GenerateMipSubLevels を呼び出すことで、任意のタイミングでミップマップサブレベルを生成できます。テクスチャ作成時にミップマップサブレベルを自動生成させるには (ミップマップの自動生成 (Direct3D 9) を参照)、CreateTexture、CreateCubeTexture、CreateVolumeTexture の呼び出し時に D3DUSAGE_AUTOGENMIPMAP を指定します。使用法 (usage) 定数の詳細については、D3DUSAGE を参照してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IDirect3DBaseTexture9 "{580CA87E-1D3C-4D54-991D-B7D3E3C298CE}"
#usecom global IDirect3DBaseTexture9 IID_IDirect3DBaseTexture9 "{}"
#comfunc global IDirect3DBaseTexture9_SetLOD 11 int
#comfunc global IDirect3DBaseTexture9_GetLOD 12
#comfunc global IDirect3DBaseTexture9_GetLevelCount 13
#comfunc global IDirect3DBaseTexture9_SetAutoGenFilterType 14 int
#comfunc global IDirect3DBaseTexture9_GetAutoGenFilterType 15
#comfunc global IDirect3DBaseTexture9_GenerateMipSubLevels 16
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。