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

IDXGIObject

COM
IIDaec22fb8-76f3-4639-9be0-28eb43a67a2e継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

IDXGIObject インターフェイスは、すべての DXGI オブジェクトの基底インターフェイスです。IDXGIObject は、呼び出し元が定義したデータ(プライベートデータ)をオブジェクトに関連付けることと、親オブジェクトへのインターフェイスの取得をサポートします。

解説(Remarks)

IDXGIObject は、次のインターフェイスに対して基底クラスの機能を実装します。

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

メソッド 4

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

vtbl 3 HRESULT SetPrivateData(GUID* Name, DWORD DataSize, void* pData)

アプリケーション定義のデータをオブジェクトに設定し、そのデータを GUID に関連付けます。

NameGUID*inデータを識別する GUID です。データを取得するには、この GUID を GetPrivateData の呼び出しで使用します。
DataSizeDWORDinオブジェクトのデータのサイズです。
pDatavoid*inオブジェクトのデータへのポインターです。

戻り値

Type: HRESULT

DXGI_ERROR 値のいずれかを返します。

解説(Remarks)

SetPrivateData は、指定されたデータのコピーを作成し、オブジェクトとともに格納します。

SetPrivateData がオブジェクトに格納するプライベートデータは、関連付けられた Direct3D オブジェクトが格納するプライベートデータ(たとえば、Microsoft Direct3D 11 デバイスが ID3D11Device::SetPrivateData を通じて格納するもの、または Direct3D 11 子デバイスが ID3D11DeviceChild::SetPrivateData を通じて格納するもの)と同じ記憶領域を占有します。

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


static const char c_szName[] = "My name";
hr = pContext->SetPrivateData( WKPDID_D3DDebugObjectName, sizeof( c_szName ) - 1, c_szName );

WKPDID_D3DDebugObjectName を使用すると、メモリリークを追跡し、アプリケーションのパフォーマンス特性を把握できます。この情報は、メモリリークに関連するデバッグレイヤーの出力(ID3D11Debug::ReportLiveDeviceObjects)や、Windows 8 で追加された Windows イベント用のイベントトレースに反映されます。

vtbl 4 HRESULT SetPrivateDataInterface(GUID* Name, IUnknown* pUnknown)

オブジェクトのプライベートデータにインターフェイスを設定します。

NameGUID*inインターフェイスを識別する GUID です。
pUnknownIUnknown*inoptionalデバイスオブジェクトに関連付ける IUnknown 派生インターフェイスへのポインターです。設定時にその参照カウントがインクリメントされ、IDXGIObject が破棄されるとき、または同じ GUID を指定して SetPrivateData もしくは SetPrivateDataInterface を呼び出してデータが上書きされるときにデクリメントされます。

戻り値

Type: HRESULT

次の DXGI_ERROR のいずれかを返します。

vtbl 5 HRESULT GetPrivateData(GUID* Name, DWORD* pDataSize, void* pData)

オブジェクトのデータへのポインターを取得します。

NameGUID*inデータを識別する GUID です。
pDataSizeDWORD*inoutデータのサイズです。
pDatavoid*outデータへのポインターです。

戻り値

Type: HRESULT

次の DXGI_ERROR のいずれかを返します。

解説(Remarks)

返されるデータが、以前に IDXGIObject::SetPrivateDataInterface によって設定された IUnknown またはその派生クラスへのポインターである場合は、参照カウントをデクリメントするために、ポインターが解放される前にそのポインターに対して ::Release() を呼び出す必要があります。

GetPrivateDataName パラメーターに GUID_DeviceType を渡すと、ディスプレイアダプターオブジェクト(IDXGIAdapterIDXGIAdapter1IDXGIAdapter2)からデバイスの種類を取得できます。

ディスプレイアダプターが作成されたデバイスの種類を取得するには

  1. ID3D11Device または ID3D10Device オブジェクトに対して IUnknown::QueryInterface を呼び出し、IDXGIDevice オブジェクトを取得します。
  2. IDXGIDevice オブジェクトに対して GetParent を呼び出し、IDXGIAdapter オブジェクトを取得します。
  3. IDXGIAdapter オブジェクトに対して GUID_DeviceType を指定して GetPrivateData を呼び出し、ディスプレイアダプターが作成されたデバイスの種類を取得します。pData は、ドライバーの種類を表す列挙型の値(たとえば D3D_DRIVER_TYPE の値)を指します。
Windows 7 以前では、この種類は、作成されたデバイスの種類に応じて D3D10_DRIVER_TYPE または D3D_DRIVER_TYPE のいずれかの値になります。Windows 8 では、この種類は常に D3D_DRIVER_TYPE の値になります。GUID_DeviceType を指定して IDXGIObject::SetPrivateData を使用しないでください。その場合の動作は未定義です。
vtbl 6 HRESULT GetParent(GUID* riid, void** ppParent)

オブジェクトの親を取得します。

riidGUID*in要求するインターフェイスの ID です。
ppParentvoid**out親オブジェクトへのポインターのアドレスです。

戻り値

Type: HRESULT

DXGI_ERROR 値のいずれかを返します。

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