IDirect3DVolume9
COM公式ドキュメント
IDirect3DVolume9 (d3d9.h) インターフェイスは、アプリケーションがボリュームリソースを操作するために使用します。
解説(Remarks)
IDirect3DVolume9 インターフェイスは、IDirect3DVolumeTexture9::GetVolumeLevel メソッドを呼び出すことで取得します。
このインターフェイスは、すべての COM インターフェイスと同様に IUnknown インターフェイスを継承します。
LPDIRECT3DVOLUME9 型および PDIRECT3DVOLUME9 型は、IDirect3DVolume9 インターフェイスへのポインターとして定義されています。
typedef struct IDirect3DVolume9 *LPDIRECT3DVOLUME9, *PDIRECT3DVOLUME9;
メソッド 8
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
IDirect3DVolume9::GetDevice (d3d9.h) メソッドは、ボリュームに関連付けられているデバイスを取得します。
| ppDevice | IDirect3DDevice9** | out | クエリが成功した場合にデバイスポインターが格納される、IDirect3DDevice9 インターフェイスへのポインターのアドレス。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。失敗した場合、戻り値は D3DERR_INVALIDCALL になることがあります。
解説(Remarks)
このメソッドを使用すると、所有元のデバイスオブジェクトへたどることができます。
このメソッドを呼び出すと、IDirect3DDevice9 インターフェイスの内部参照カウントが増加します。この IDirect3DDevice9 インターフェイスの使用を終えた際に IUnknown::Release を呼び出さないと、メモリリークが発生します。
IDirect3DVolume9::SetPrivateData (d3d9.h) メソッドは、Direct3D ではなくアプリケーションが使用することを意図したデータをボリュームに関連付けます。
| refguid | GUID* | in | 設定するプライベートデータを識別するグローバル一意識別子への参照。 | ||||||
| pData | void* | in | ボリュームに関連付けるデータを格納したバッファーへのポインター。 | ||||||
| SizeOfData | DWORD | in | pData のバッファーのサイズ (バイト単位)。 | ||||||
| Flags | DWORD | in | 渡されるデータの種類を示す値。または、リソースが変更されたときにデータを無効化すべきであることをアプリケーションに示す値。
|
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。失敗した場合、戻り値は次のいずれかになることがあります: D3DERR_INVALIDCALL、E_OUTOFMEMORY。
解説(Remarks)
Direct3D は pData のメモリを管理しません。このバッファーを動的に確保した場合は、呼び出し元アプリケーションがメモリを解放する責任を負います。
データは値渡しされ、1 つのボリュームに複数のデータセットを関連付けることができます。
IDirect3DVolume9::GetPrivateData (d3d9.h) メソッドは、ボリュームに関連付けられているプライベートデータを、指定されたバッファーへコピーします。
| refguid | GUID* | in | 取得するプライベートデータを識別するグローバル一意識別子への参照 (C++)、またはそのアドレス (C)。 |
| pData | void* | inout | 呼び出しが成功した場合に、要求したプライベートデータが格納される、あらかじめ確保済みのバッファーへのポインター。このバッファーの確保と解放は、このメソッドを呼び出すアプリケーションの責任です。このパラメーターが NULL の場合、このメソッドは pSizeOfData にバッファーサイズを返します。 |
| pSizeOfData | DWORD* | inout | pData のバッファーのサイズ (バイト単位) へのポインター。 この値が実際のプライベートデータのサイズより小さい場合 (0 など)、メソッドはこのパラメーターに必要なバッファーサイズを設定し、D3DERR_MOREDATA を返します。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。失敗した場合、戻り値は次のいずれかになることがあります: D3DERR_INVALIDCALL、D3DERR_MOREDATA、D3DERR_NOTFOUND。
解説(Remarks)
返されるデータが、D3DSPD_IUNKNOWN フラグ付きの SetPrivateData によって以前に設定された IUnknown またはその派生クラスへのポインターである場合、そのインターフェイスの参照カウントが増加された後にプライベートデータが返されます。
IDirect3DVolume9::FreePrivateData (d3d9.h) メソッドは、このボリュームに関連付けられている指定のプライベートデータを解放します。
| refguid | GUID* | in | 解放するプライベートデータを識別するグローバル一意識別子への参照。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。失敗した場合、戻り値は次のいずれかになることがあります: D3DERR_INVALIDCALL、D3DERR_NOTFOUND。
解説(Remarks)
ボリュームが解放されるとき、Direct3D はこのメソッドを自動的に呼び出します。
IDirect3DVolume9::GetContainer (d3d9.h) メソッドは、このサーフェスがボリュームテクスチャの子レベルである場合に、親のボリュームテクスチャオブジェクトへのアクセスを提供します。
| riid | GUID* | in | 要求するボリュームの参照識別子。 |
| ppContainer | void** | inout | クエリが成功した場合にコンテナーポインターが格納される、ポインターのアドレス。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。失敗した場合、戻り値は D3DERR_INVALIDCALL になることがあります。
解説(Remarks)
呼び出しが成功した場合、コンテナーの参照カウントが 1 増加します。
以下は、ボリュームテクスチャの親ボリュームテクスチャを取得する例です。
// Assumes pSurface is a valid IDirect3DVolume9 pointer
void *pContainer = NULL;
IDirect3DVolumeTexture9 *pVolumeTexture = NULL;
HRESULT hr = pVolume->GetContainer(IID_IDirect3DVolumeTexture9, &pContainer);
if (SUCCEEDED(hr) && pContainer)
{
pVolumeTexture = (IDirect3DVolumeTexture9 *)pContainer;
IDirect3DVolume9::GetDesc (d3d9.h) メソッドは、ボリュームの記述を取得します。
| pDesc | D3DVOLUME_DESC* | inout | ボリュームを記述する D3DVOLUME_DESC 構造体へのポインター。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。引数が無効な場合は D3DERR_INVALIDCALL が返されます。
IDirect3DVolume9::LockBox (d3d9.h) メソッドは、ボリュームリソース上のボックスをロックします。
| pLockedVolume | D3DLOCKED_BOX* | inout | ロックされた領域を記述する D3DLOCKED_BOX 構造体へのポインター。 |
| pBox | D3DBOX* | in | ロックするボックスへのポインター。D3DBOX 構造体へのポインターで指定します。このパラメーターに NULL を指定すると、ボリューム全体がロックされます。 |
| Flags | DWORD | in | 実行するロックの種類を表す、0 個以上のロックフラグの組み合わせ。このメソッドで有効なフラグは次のとおりです。 フラグの説明については、D3DLOCK を参照してください。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。失敗した場合、戻り値は D3DERR_INVALIDCALL になることがあります。
解説(Remarks)
パフォーマンス上の理由から、ダーティ領域はテクスチャのレベル 0 についてのみ記録されます。D3DLOCK_NO_DIRTY_UPDATE または D3DLOCK_READONLY を指定せずに IDirect3DVolume9::LockBox を呼び出すと、ダーティ領域が自動的に記録されます。詳細については IDirect3DDevice9::UpdateTexture を参照してください。
IDirect3DVolume9::UnlockBox (d3d9.h) メソッドは、ボリュームリソース上のボックスのロックを解除します。
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。失敗した場合、戻り値は D3DERR_INVALIDCALL になることがあります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IDirect3DVolume9 "{24F416E6-1F67-4AA7-B88E-D33F6F3128A1}" #usecom global IDirect3DVolume9 IID_IDirect3DVolume9 "{}" #comfunc global IDirect3DVolume9_GetDevice 3 sptr #comfunc global IDirect3DVolume9_SetPrivateData 4 var,sptr,int,int #comfunc global IDirect3DVolume9_GetPrivateData 5 var,sptr,var #comfunc global IDirect3DVolume9_FreePrivateData 6 var #comfunc global IDirect3DVolume9_GetContainer 7 var,sptr #comfunc global IDirect3DVolume9_GetDesc 8 var #comfunc global IDirect3DVolume9_LockBox 9 var,var,int #comfunc global IDirect3DVolume9_UnlockBox 10 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IDirect3DVolume9 "{24F416E6-1F67-4AA7-B88E-D33F6F3128A1}" #usecom global IDirect3DVolume9 IID_IDirect3DVolume9 "{}" #comfunc global IDirect3DVolume9_GetDevice 3 sptr #comfunc global IDirect3DVolume9_SetPrivateData 4 sptr,sptr,int,int #comfunc global IDirect3DVolume9_GetPrivateData 5 sptr,sptr,sptr #comfunc global IDirect3DVolume9_FreePrivateData 6 sptr #comfunc global IDirect3DVolume9_GetContainer 7 sptr,sptr #comfunc global IDirect3DVolume9_GetDesc 8 sptr #comfunc global IDirect3DVolume9_LockBox 9 sptr,sptr,int #comfunc global IDirect3DVolume9_UnlockBox 10 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。