Win32 API 日本語リファレンス
ホームGraphics.Direct3D9 › IDirect3DVolume9

IDirect3DVolume9

COM
IID24f416e6-1f67-4aa7-b88e-d33f6f3128a1継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

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。

vtbl 3 HRESULT GetDevice(IDirect3DDevice9** ppDevice)

IDirect3DVolume9::GetDevice (d3d9.h) メソッドは、ボリュームに関連付けられているデバイスを取得します。

ppDeviceIDirect3DDevice9**outクエリが成功した場合にデバイスポインターが格納される、IDirect3DDevice9 インターフェイスへのポインターのアドレス。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。失敗した場合、戻り値は D3DERR_INVALIDCALL になることがあります。

解説(Remarks)

このメソッドを使用すると、所有元のデバイスオブジェクトへたどることができます。

このメソッドを呼び出すと、IDirect3DDevice9 インターフェイスの内部参照カウントが増加します。この IDirect3DDevice9 インターフェイスの使用を終えた際に IUnknown::Release を呼び出さないと、メモリリークが発生します。

vtbl 4 HRESULT SetPrivateData(GUID* refguid, void* pData, DWORD SizeOfData, DWORD Flags)

IDirect3DVolume9::SetPrivateData (d3d9.h) メソッドは、Direct3D ではなくアプリケーションが使用することを意図したデータをボリュームに関連付けます。

refguidGUID*in設定するプライベートデータを識別するグローバル一意識別子への参照。
pDatavoid*inボリュームに関連付けるデータを格納したバッファーへのポインター。
SizeOfDataDWORDinpData のバッファーのサイズ (バイト単位)。
FlagsDWORDin

渡されるデータの種類を示す値。または、リソースが変更されたときにデータを無効化すべきであることをアプリケーションに示す値。

項目 説明
(なし) フラグを指定しない場合、Direct3D はバッファー内のデータを保持するメモリを確保し、データを新しいバッファーへコピーします。Direct3D が確保したバッファーは、適切なタイミングで自動的に解放されます。
D3DSPD_IUNKNOWN pData のデータは IUnknown インターフェイスへのポインターです。SizeOfData には、IUnknown インターフェイスへのポインターのサイズ sizeof(IUnknown*) を設定する必要があります。プライベートデータが破棄されるとき、Direct3D は pData と IUnknown を通じて IUnknown を自動的に呼び出します。プライベートデータは、同じ GUID を指定した IDirect3DVolume9::SetPrivateData の後続の呼び出し、IDirect3DVolume9::FreePrivateData の後続の呼び出し、または IDirect3D9 オブジェクトが解放されるときに破棄されます。詳細については「解説」を参照してください。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。失敗した場合、戻り値は次のいずれかになることがあります: D3DERR_INVALIDCALL、E_OUTOFMEMORY

解説(Remarks)

Direct3D は pData のメモリを管理しません。このバッファーを動的に確保した場合は、呼び出し元アプリケーションがメモリを解放する責任を負います。

データは値渡しされ、1 つのボリュームに複数のデータセットを関連付けることができます。

vtbl 5 HRESULT GetPrivateData(GUID* refguid, void* pData, DWORD* pSizeOfData)

IDirect3DVolume9::GetPrivateData (d3d9.h) メソッドは、ボリュームに関連付けられているプライベートデータを、指定されたバッファーへコピーします。

refguidGUID*in取得するプライベートデータを識別するグローバル一意識別子への参照 (C++)、またはそのアドレス (C)。
pDatavoid*inout呼び出しが成功した場合に、要求したプライベートデータが格納される、あらかじめ確保済みのバッファーへのポインター。このバッファーの確保と解放は、このメソッドを呼び出すアプリケーションの責任です。このパラメーターが NULL の場合、このメソッドは pSizeOfData にバッファーサイズを返します。
pSizeOfDataDWORD*inoutpData のバッファーのサイズ (バイト単位) へのポインター。 この値が実際のプライベートデータのサイズより小さい場合 (0 など)、メソッドはこのパラメーターに必要なバッファーサイズを設定し、D3DERR_MOREDATA を返します。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。失敗した場合、戻り値は次のいずれかになることがあります: D3DERR_INVALIDCALL、D3DERR_MOREDATA、D3DERR_NOTFOUND。

解説(Remarks)

返されるデータが、D3DSPD_IUNKNOWN フラグ付きの SetPrivateData によって以前に設定された IUnknown またはその派生クラスへのポインターである場合、そのインターフェイスの参照カウントが増加された後にプライベートデータが返されます。

vtbl 6 HRESULT FreePrivateData(GUID* refguid)

IDirect3DVolume9::FreePrivateData (d3d9.h) メソッドは、このボリュームに関連付けられている指定のプライベートデータを解放します。

refguidGUID*in解放するプライベートデータを識別するグローバル一意識別子への参照。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。失敗した場合、戻り値は次のいずれかになることがあります: D3DERR_INVALIDCALL、D3DERR_NOTFOUND。

解説(Remarks)

ボリュームが解放されるとき、Direct3D はこのメソッドを自動的に呼び出します。

vtbl 7 HRESULT GetContainer(GUID* riid, void** ppContainer)

IDirect3DVolume9::GetContainer (d3d9.h) メソッドは、このサーフェスがボリュームテクスチャの子レベルである場合に、親のボリュームテクスチャオブジェクトへのアクセスを提供します。

riidGUID*in要求するボリュームの参照識別子。
ppContainervoid**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;
vtbl 8 HRESULT GetDesc(D3DVOLUME_DESC* pDesc)

IDirect3DVolume9::GetDesc (d3d9.h) メソッドは、ボリュームの記述を取得します。

pDescD3DVOLUME_DESC*inoutボリュームを記述する D3DVOLUME_DESC 構造体へのポインター。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。引数が無効な場合は D3DERR_INVALIDCALL が返されます。

vtbl 9 HRESULT LockBox(D3DLOCKED_BOX* pLockedVolume, D3DBOX* pBox, DWORD Flags)

IDirect3DVolume9::LockBox (d3d9.h) メソッドは、ボリュームリソース上のボックスをロックします。

pLockedVolumeD3DLOCKED_BOX*inoutロックされた領域を記述する D3DLOCKED_BOX 構造体へのポインター。
pBoxD3DBOX*inロックするボックスへのポインター。D3DBOX 構造体へのポインターで指定します。このパラメーターに NULL を指定すると、ボリューム全体がロックされます。
FlagsDWORDin

実行するロックの種類を表す、0 個以上のロックフラグの組み合わせ。このメソッドで有効なフラグは次のとおりです。

フラグの説明については、D3DLOCK を参照してください。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。失敗した場合、戻り値は D3DERR_INVALIDCALL になることがあります。

解説(Remarks)

パフォーマンス上の理由から、ダーティ領域はテクスチャのレベル 0 についてのみ記録されます。D3DLOCK_NO_DIRTY_UPDATE または D3DLOCK_READONLY を指定せずに IDirect3DVolume9::LockBox を呼び出すと、ダーティ領域が自動的に記録されます。詳細については IDirect3DDevice9::UpdateTexture を参照してください。

vtbl 10 HRESULT UnlockBox()

IDirect3DVolume9::UnlockBox (d3d9.h) メソッドは、ボリュームリソース上のボックスのロックを解除します。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。失敗した場合、戻り値は D3DERR_INVALIDCALL になることがあります。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
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 指定が可能。