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

ID3D11DeviceChild

COM
IID1841e5c8-16b0-489b-bcc8-44cfb0d5deae継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

デバイスが使用するデータにアクセスするデバイスチャイルドインターフェイスです。(ID3D11DeviceChild)

解説(Remarks)

デバイスチャイルドインターフェイスにはいくつかの種類があり、そのすべてがこのインターフェイスを継承します。シェーダー、ステートオブジェクト、入力レイアウトなどが含まれます。

Windows Phone 8: この API はサポートされています。

メソッド 4

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 void GetDevice(ID3D11Device** ppDevice)

このインターフェイスを作成したデバイスへのポインターを取得します。(ID3D11DeviceChild.GetDevice)

ppDeviceID3D11Device**outデバイス (ID3D11Device を参照) へのポインターのアドレスです。

解説(Remarks)

返されたインターフェイスは参照カウントが 1 つ増加します。そのため、解放前に返されたポインターに対して ::release() を必ず呼び出してください。呼び出さないとメモリリークが発生します。

vtbl 4 HRESULT GetPrivateData(GUID* guid, DWORD* pDataSize, void* pData)

デバイスチャイルドからアプリケーション定義のデータを取得します。(ID3D11DeviceChild.GetPrivateData)

guidGUID*inデータに関連付けられた GUID です。
pDataSizeDWORD*inout変数へのポインターです。入力時には pData が指すバッファーのサイズ (バイト単位) を格納し、出力時には GetPrivateData が取得したデータのサイズ (バイト単位) を格納します。
pDatavoid*outoptionalバッファーへのポインターです。pDataSize がデータを保持できる十分な大きさのバッファーサイズを示す値を指している場合、 GetPrivateData はこのバッファーにデバイスチャイルドのデータを格納します。

戻り値

型: HRESULT

このメソッドは Direct3D 11 の戻り値コードのいずれかを返します。

解説(Remarks)

デバイスチャイルドに格納されるデータは ID3D11DeviceChild::SetPrivateData を呼び出して設定します。

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

Windows Phone 8: この API はサポートされています。

vtbl 5 HRESULT SetPrivateData(GUID* guid, DWORD DataSize, void* pData)

アプリケーション定義のデータをデバイスチャイルドに設定し、そのデータをアプリケーション定義の GUID に関連付けます。(ID3D11DeviceChild.SetPrivateData)

guidGUID*inデータに関連付ける GUID です。
DataSizeDWORDinデータのサイズです。
pDatavoid*inoptionalこのデバイスチャイルドとともに格納するデータへのポインターです。pData が NULL の場合、DataSize も 0 でなければならず、指定した GUID に以前関連付けられていたデータはすべて破棄されます。

戻り値

型: HRESULT

このメソッドは次の Direct3D 11 の戻り値コードのいずれかを返します。

解説(Remarks)

このメソッドでデバイスチャイルドに格納したデータは、ID3D11DeviceChild::GetPrivateData で取得できます。

デバッグレイヤーは、オブジェクトインターフェイスポインターとそのフレンドリ名の一覧を出力することでメモリリークを報告します。既定のフレンドリ名は "<unnamed>" です。フレンドリ名を設定しておくと、どのオブジェクトインターフェイスポインターがリークの原因かを判別できます。フレンドリ名を設定するには、SetPrivateData メソッドと D3Dcommon.h にある WKPDID_D3DDebugObjectName GUID を使用します。たとえば、pContext に My name というフレンドリ名を付けるには、次のコードを使用します。


static const char c_szName[] = "My name";
hr = pContext->SetPrivateData( WKPDID_D3DDebugObjectName, sizeof( c_szName ) - 1, c_szName );
vtbl 6 HRESULT SetPrivateDataInterface(GUID* guid, IUnknown* pData)

IUnknown 派生のインターフェイスをこのデバイスチャイルドに関連付け、さらにそのインターフェイスをアプリケーション定義の GUID に関連付けます。(ID3D11DeviceChild.SetPrivateDataInterface)

guidGUID*inインターフェイスに関連付ける GUID です。
pDataIUnknown*inoptionalデバイスチャイルドに関連付ける IUnknown 派生インターフェイスへのポインターです。設定時に参照カウントが増加し、ID3D11DeviceChild が破棄されたとき、または同じ GUIDSetPrivateData もしくは SetPrivateDataInterface を呼び出してデータが上書きされたときに減少します。

戻り値

型: HRESULT

このメソッドは次の Direct3D 11 の戻り値コードのいずれかを返します。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_ID3D11DeviceChild "{1841E5C8-16B0-489B-BCC8-44CFB0D5DEAE}"
#usecom global ID3D11DeviceChild IID_ID3D11DeviceChild "{}"
#comfunc global ID3D11DeviceChild_GetDevice                3 sptr
#comfunc global ID3D11DeviceChild_GetPrivateData           4 var,var,sptr
#comfunc global ID3D11DeviceChild_SetPrivateData           5 var,int,sptr
#comfunc global ID3D11DeviceChild_SetPrivateDataInterface  6 var,sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。