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 |