ID3D11DeviceChild
COM公式ドキュメント
デバイスが使用するデータにアクセスするデバイスチャイルドインターフェイスです。(ID3D11DeviceChild)
解説(Remarks)
デバイスチャイルドインターフェイスにはいくつかの種類があり、そのすべてがこのインターフェイスを継承します。シェーダー、ステートオブジェクト、入力レイアウトなどが含まれます。
Windows Phone 8: この API はサポートされています。
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
このインターフェイスを作成したデバイスへのポインターを取得します。(ID3D11DeviceChild.GetDevice)
| ppDevice | ID3D11Device** | out | デバイス (ID3D11Device を参照) へのポインターのアドレスです。 |
解説(Remarks)
返されたインターフェイスは参照カウントが 1 つ増加します。そのため、解放前に返されたポインターに対して ::release() を必ず呼び出してください。呼び出さないとメモリリークが発生します。
デバイスチャイルドからアプリケーション定義のデータを取得します。(ID3D11DeviceChild.GetPrivateData)
| guid | GUID* | in | データに関連付けられた GUID です。 |
| pDataSize | DWORD* | inout | 変数へのポインターです。入力時には pData が指すバッファーのサイズ (バイト単位) を格納し、出力時には GetPrivateData が取得したデータのサイズ (バイト単位) を格納します。 |
| pData | void* | outoptional | バッファーへのポインターです。pDataSize がデータを保持できる十分な大きさのバッファーサイズを示す値を指している場合、 GetPrivateData はこのバッファーにデバイスチャイルドのデータを格納します。 |
戻り値
型: HRESULT
このメソッドは Direct3D 11 の戻り値コードのいずれかを返します。
解説(Remarks)
デバイスチャイルドに格納されるデータは ID3D11DeviceChild::SetPrivateData を呼び出して設定します。
返されるデータが、以前に SetPrivateDataInterface で設定された IUnknown またはその派生クラスへのポインターである場合、プライベートデータが返される前にそのインターフェイスの参照カウントが増加します。
Windows Phone 8: この API はサポートされています。
アプリケーション定義のデータをデバイスチャイルドに設定し、そのデータをアプリケーション定義の GUID に関連付けます。(ID3D11DeviceChild.SetPrivateData)
| guid | GUID* | in | データに関連付ける GUID です。 |
| DataSize | DWORD | in | データのサイズです。 |
| pData | void* | 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 );
IUnknown 派生のインターフェイスをこのデバイスチャイルドに関連付け、さらにそのインターフェイスをアプリケーション定義の GUID に関連付けます。(ID3D11DeviceChild.SetPrivateDataInterface)
| guid | GUID* | in | インターフェイスに関連付ける GUID です。 |
| pData | IUnknown* | inoptional | デバイスチャイルドに関連付ける IUnknown 派生インターフェイスへのポインターです。設定時に参照カウントが増加し、ID3D11DeviceChild が破棄されたとき、または同じ GUID で SetPrivateData もしくは SetPrivateDataInterface を呼び出してデータが上書きされたときに減少します。 |
戻り値
型: HRESULT
このメソッドは次の Direct3D 11 の戻り値コードのいずれかを返します。
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 指定が可能。#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 sptr,sptr,sptr #comfunc global ID3D11DeviceChild_SetPrivateData 5 sptr,int,sptr #comfunc global ID3D11DeviceChild_SetPrivateDataInterface 6 sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。