IDirect3DQuery9::GetData 方法 (d3d9.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。 即使应用程序过去曾将 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(...);
}

要求

要求
目标平台 Windows
标头 d3d9.h (包括 D3D9.h)
Library D3D9.lib

另请参阅

IDirect3DQuery9