次の方法で共有


IDirect3DQuery9::GetData

クエリ対象のリソースをポーリングし、クエリの状態またはクエリの結果を取得します。クエリの詳細については、「クエリ (Direct3D 9)」を参照してください。

HRESULT 
GetData(
  void* pData,
  DWORD dwSize,
  DWORD dwGetDataFlags
);

パラメータ

  • pData
    クエリ データを含むバッファーへのポインターです。これは、ユーザーが割り当てる必要があります。pData を NULL にできるのは、dwSize が 0 の場合だけです。
  • dwSize
    pData 内のデータのバイト数。dwSize をゼロに設定すると、このメソッドを使用してリソースに対するポーリングを実行し、クエリの状態を取得できます。「解説」を参照してください。
  • dwGetDataFlags
    クエリの種類を指定するデータ フラグ。有効な値は、0 または D3DGETDATA_FLUSH です。ドライバーに対するバッチ クエリのフラッシュを防止するには 0 を指定し、それらをあえてフラッシュするには D3DGETDATA_FLUSH を指定します。独自の待機方法を使用するアプリケーションの場合、クエリの結果はドライバーがフラッシュを受け取るまで返されません。

戻り値

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

解説 

クエリの状態のポーリング時にデバイスが喪失する場合があります。D3DGETDATA_FLUSH を指定すると、このメソッドはデバイスの喪失に対応して D3DERR_DEVICELOST を返します。そのため、アプリケーションでは、デバイスの喪失が原因でスレッドがポーリングを無限に実行する (クエリに応答できない) のを防止できます。

GetData がいつかは S_OK を返すことを想定して単に GetData ( ... , 0 ) を呼び出すだけのコードを、アプリケーションでは記述しないでください。これは、過去にアプリケーションで FLUSH フラグを指定して GetData を実行した場合にも当てはまります。次に例を示します。

// 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(...); } 

要件

ヘッダー: D3D9.h 宣言

ライブラリ: D3D9.lib 内容