IDirect3DQuery9::GetData 메서드(d3d9helper.h)

쿼리된 리소스를 폴링하여 쿼리 상태 또는 쿼리 결과를 가져옵니다. 쿼리에 대한 자세한 내용은 쿼리(Direct3D 9)를 참조하세요.

구문

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

매개 변수

[in, out] pData

형식: void*

쿼리 데이터를 포함하는 버퍼에 대한 포인터입니다. 사용자는 이 할당을 담당합니다. pData 는 dwSize가 0인 경우에만 NULL 일 수 있습니다.

[in] dwSize

형식: DWORD

pData의 데이터 바이트 수입니다. dwSize를 0으로 설정하면 이 메서드를 사용하여 쿼리 상태 대한 리소스를 폴링할 수 있습니다. 설명을 참조하세요.

[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