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

IDirect3DQuery9

COM
IIDd9771460-a695-4f26-bbd3-27b840b541cc継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

IDirect3DQuery9 (d3d9.h) インターフェイスです。アプリケーションは IDirect3DQuery9 インターフェイスのメソッドを使用して、ドライバーに対する非同期クエリを実行します。

解説(Remarks)

LPDIRECT3DQUERY9 型および PDIRECT3DQUERY9 型は、IDirect3DQuery9 インターフェイスへのポインターとして定義されています。

typedef struct IDirect3DQuery9 *LPDIRECT3DQUERY9, *PDIRECT3DQUERY9;

メソッド 5

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

vtbl 3 HRESULT GetDevice(IDirect3DDevice9** ppDevice)

IDirect3DQuery9::GetDevice (d3d9.h) メソッドは、クエリ対象のデバイスを取得します。

ppDeviceIDirect3DDevice9**outクエリ対象のデバイスへのポインターです。IDirect3DDevice9 を参照してください。

戻り値

型: HRESULT

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

vtbl 4 D3DQUERYTYPE GetType()

IDirect3DQuery9::GetType (d3d9.h) メソッドは、クエリの種類を取得します。

戻り値

型: D3DQUERYTYPE

クエリの種類を返します。D3DQUERYTYPE を参照してください。

vtbl 5 DWORD GetDataSize()

IDirect3DQuery9::GetDataSize (d3d9.h) メソッドは、クエリデータのバイト数を取得します。

戻り値

型: DWORD

クエリデータのバイト数を返します。

vtbl 6 HRESULT Issue(DWORD dwIssueFlags)

IDirect3DQuery9::Issue (d3d9.h) メソッドは、クエリを発行します。

dwIssueFlagsDWORDinクエリフラグは、クエリに対する状態変更の種類を指定します。D3DISSUE_BEGIN および D3DISSUE_END を参照してください。

戻り値

型: HRESULT

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

解説(Remarks)

クエリがシグナル状態になったということは、クエリが完了してデータが利用可能になり、IDirect3DQuery9::GetDataS_OK を返すことを意味します。

vtbl 7 HRESULT GetData(void* pData, DWORD dwSize, DWORD dwGetDataFlags)

IDirect3DQuery9::GetData メソッド (d3d9.h) は、クエリ対象のリソースをポーリングして、クエリの状態またはクエリ結果を取得します。

pDatavoid*inoutクエリデータを格納するバッファーへのポインターです。このバッファーの確保はユーザーの責任です。pDataNULL を指定できるのは、dwSize が 0 の場合のみです。
dwSizeDWORDinpData 内のデータのバイト数です。dwSize に 0 を設定すると、このメソッドを使用してリソースのクエリ状態をポーリングできます。「解説」を参照してください。
dwGetDataFlagsDWORDinクエリの種類を指定するデータフラグです。有効な値は 0 または D3DGETDATA_FLUSH です。バッチ処理されたクエリをドライバーへフラッシュしない場合は 0 を、フラッシュする場合は D3DGETDATA_FLUSH を使用します。独自の待機処理を実装するアプリケーションでは、ドライバーがフラッシュを受け取るまでクエリ結果は確定しません。

戻り値

型: HRESULT

戻り値の型はクエリの状態を示します (Queries (Direct3D 9) を参照)。クエリデータが利用可能な場合は S_OK を、利用できない場合は S_FALSE を返します。これらはいずれも成功を示す戻り値です。D3DGETDATA_FLUSH を使用してメソッドが失敗した場合、戻り値は D3DERR_DEVICELOST になることがあります。

解説(Remarks)

クエリ状態のポーリング中にデバイスが失われる可能性があります。D3DGETDATA_FLUSH を指定した場合、デバイスが失われるとこのメソッドは D3DERR_DEVICELOST を返します。これにより、失われたデバイス (クエリに応答できないデバイス) が原因でスレッドが延々とポーリングし続けることを、アプリケーションが防止できます。

アプリケーションは、GetData ( ... , 0 ) のみを呼び出し、時間が経てば GetData がひとりでに S_OK を返すと期待するようなコードを決して記述してはいけません。これは、過去に GetData で FLUSH フラグを使用していた場合でも同様です。例:

// 無限ループになり得る:
while( pQuery->GetData( ... , 0 ) == S_FALSE ) ;

// これでもまだ無限ループになり得る:
pQuery->GetData( ... , D3DGETDATA_FLUSH );
while( pQuery->GetData( ... , 0 ) == S_FALSE ) ;

// 無限ループにはならない。最終的にコマンドバッファーが
// いっぱいになり、それによってフラッシュが発生するため。
while( pQuery->GetData( ..., 0 ) == S_FALSE ) {
    pDevice->SetTexture(...);
    pDevice->Draw(...);
}
出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IDirect3DQuery9 "{D9771460-A695-4F26-BBD3-27B840B541CC}"
#usecom global IDirect3DQuery9 IID_IDirect3DQuery9 "{}"
#comfunc global IDirect3DQuery9_GetDevice    3 sptr
#comfunc global IDirect3DQuery9_GetType      4
#comfunc global IDirect3DQuery9_GetDataSize  5
#comfunc global IDirect3DQuery9_Issue        6 int
#comfunc global IDirect3DQuery9_GetData      7 sptr,int,int
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。