DirectX Graphics 프로그래밍 가이드 고도의 주제 비동기 통지   [목차열람] [주소복사] [슬롯비우기]
비동기 통지
 
Microsoft DirectX 9.0

비동기 통지


퍼포먼스에 영향을 주지 않으면 애플리케이션을 드라이버에 대해서 실시할 수 있는 흥미로운 문의가 다수 있다. Microsoft® DirectX® 7.0 및 DirectX 8. x 에는,GetInfo 라고 하는 동기적 문의 메카니즘이 있었다. 이 메카니즘은 통계 정보등의 문의에 유효했지만, 퍼포먼스에 큰 영향을 미치는 문의는 포함되지 않았다. 이것에 대해, 펜스 등은 본질적으로 비동기적이다. 이것은 단순한 애플리케이션 프로그래밍 인터페이스 (API)로, 동기와 비동기의 양쪽 모두의 문의를 실시할 수가 있다. DirectX 9.0 에서는 GetInfo 는 사용할 수 없다.

문의를 생성 하려면 ,IDirect3DDevice9::CreateQuery 를 사용한다. 이 메서드는, 실행하는 문의의 종류를 정의하는 D3DQUERYTYPE 를 받아,IDirect3DQuery9 개체의 포인터를 돌려준다. 문의의 타입이 지원되지 않은 경우, 호출은 에러 D3DERR_NOTAVAILABLE 를 돌려준다. 이 개체를 사용하면 애플리케이션은 IDirect3DQuery9::Issue 로 런타임에 대해서 문의를 실행할 수 있어IDirect3DQuery9::GetData 로 문의의 스테이터스를 폴링 할 수 있다. 문의의 결과가 이용 가능한 경우는 S_OK 가 반환된다. 그 이외의 경우는 S_FALSE 가 반환된다. 애플리케이션은, 문의의 결과에 적절한 사이즈의 버퍼를 건네줄 필요가 있다.

애플리케이션은, D3DGETDATA_FLUSH 를 IDirect3DQuery9::GetData 와 함께 사용해, 런타임으로부터 드라이버에 강제적으로 문의를 플래시 할 수 있다. 이것에 의해, 플래시가 실행되어 드라이버에 강제적으로 문의가 전해진다. 이 때, 장치가 없어졌을 경우는, D3DERR_DEVICELOST 가 반환된다.

장치가 없어지면 모든 문의가 없어져 애플리케이션으로 문의를 생성 다시 할 필요가 있다. 장치가 문의를 지원 하고 있지 않는 경우로, pQueryID 가 NULL 의 경우, 문의의 생성이 실패해 D3DERR_INVALIDCALL 가 반환된다.

다음의 표는, 각문제 있어 맞댐 타입에 관한 중요한 정보를 집계한 것이다.

QuertyType유효한 발행 플래그GetData 버퍼런타임비명시적인 문의의 시작
D3DQUERYTYPE_VCACHED3DISSUE_ENDD3DDEVINFO_VCACHE리테일/디버그CreateDevice
D3DQUERYTYPE_RESOURCEMANAGERD3DISSUE_ENDD3DDEVINFO_RESOURCEMANAGER디버그만Present
D3DQUERYTYPE_VERTEXSTATSD3DISSUE_ENDD3DDEVINFO_D3DVERTEXSTATS디버그만Present
D3DQUERYTYPE_EVENTD3DISSUE_ENDBOOL리테일/디버그CreateDevice
D3DQUERYTYPE_OCCLUSIOND3DISSUE_BEGIN, D3DISSUE_ENDDWORD리테일/디버그N/A

IDirect3DQuery9::Issue 의 플래그 필드

 
#define D3DISSUE_END (1 << 0) 
// Tells the runtime to issue the end of a query, changing its state to 
//   "non-signaled" 
 
#define D3DISSUE_BEGIN (1 << 1) // Tells the runtime to issue the 
// beginng of a query.  

IDirect3DQuery9::GetData 의 플래그 필드

 
#define D3DGETDATA_FLUSH (1 << 0) // Tells the runtime to flush 
// if the query is outstanding.


© 2002 Microsoft Corporation. All rights reserved.
↑TOP