IDirect3DQuery9::GetData 方法 (d3d9helper.h)

輪詢查詢的資源以取得查詢狀態或查詢結果。 如需查詢的詳細資訊,請參閱 Direct3D 9 () 查詢。

語法

HRESULT GetData(
  [in, out] void  *pData,
  [in]      DWORD dwSize,
  [in]      DWORD dwGetDataFlags
);

參數

[in, out] pData

類型: void*

包含查詢數據的緩衝區指標。 用戶負責配置此專案。 只有在 dwSize 為 0 時,pData 才可為 NULL

[in] dwSize

類型: DWORD

pData 中的數據位元組數目。 如果您將 dwSize 設定為零,您可以使用這個方法來輪詢資源以取得查詢狀態。 請參閱<備註>。

[in] dwGetDataFlags

類型: DWORD

指定查詢類型的數據旗標。 有效值為 0 或 D3DGETDATA_FLUSH。 使用 0 避免將批次查詢排清至驅動程式,並使用D3DGETDATA_FLUSH來排清它們。 對於撰寫自己的等候版本的應用程式,在驅動程式收到排清之前,不會實現查詢結果。

傳回值

類型: HRESULT

傳回類型會識別查詢狀態 (請參閱 Direct3D 9 (查詢 ) ) 。 如果查詢數據可用,則此方法會傳回S_OK,如果不是,則傳回S_FALSE。 這些會被視為成功的傳回值。 如果使用 D3DGETDATA_FLUSH 時方法失敗,則可以D3DERR_DEVICELOST傳回值。

備註

輪詢查詢狀態時,可能會遺失裝置。 指定 D3DGETDATA_FLUSH 時,此方法會傳回D3DERR_DEVICELOST以回應遺失的裝置。 這可讓應用程式防止線程因為無法回應) 查詢 (而無止盡地輪詢。

應用程式絕對不能撰寫只叫用 GetData ( ... 、0 ) 的程式代碼,預期 GetData 最終會在一段時間內傳回S_OK。 即使應用程式過去已搭配 GetData 使用 FLUSH 旗標,也是如此。 例如:

// Enables an infinite loop:
while( pQuery->GetData( ... , 0 ) == S_FALSE ) ;

// Still enables an infinite loop:
pQuery->GetData( ... , D3DGETDATA_FLUSH );
while( pQuery->GetData( ... , 0 ) == S_FALSE ) ;

// Does not enable an infinite loop because eventually the command
// buffer will fill up and that will cause a flush to occur.
while( pQuery->GetData( ..., 0 ) == S_FALSE ) {
	pDevice->SetTexture(...);
	pDevice->Draw(...);
}

規格需求

需求
目標平台 Windows
標頭 d3d9helper.h (包含 D3D9.h)
程式庫 D3D9.lib

另請參閱

IDirect3DQuery9