반응형

 
Lost Device
① 원리
-> Full Screen Mode에서 ALT+TAB을 눌러 Task를 전환하면,
 윈도우는 자동적으로 응용 프로그램에 대한 전환 처리를 시행.
 이때 다시 ALT+TAB을 눌러 원래의 3D 어플리케이션 복구하려면 오류가 발생된다.
 이 원인은 3D 카드의 설정이 최초  ALT+TAB시 비 Direct3D 응용 프로그램을 위해 설정 변화가 일어났기 때문

② 대책
-> 어플리케이션에서 현재 그래픽 카드의 상태를 확인하고 있다가, 복구시점에서 Device를 Reset하면 된다

③ 복구검사

IDirect3DDevice::TestCooperativeLevel()을 호출하여, 디바이스를 복구 할 수 있는지 검사
-> 반환값(HRESULT)이 D3DERR_DEVICELOST인 경우 디바이스가 소실되었고 아직 복구할 수 없는 상태.
    복구할 수 있을 때 까지 대기한다. 
-> D3DERR_DEVICENOTRESET인 경우 디바이스가 소실되지만 지금 복구할 수 있는 상태이다. 디바이스를 복구한다.


④ 복구절차

-> D3DPOOL_DEFAULT로 잡은 리소스들을 전부 릴리즈한다.
    (안그러면 다음에 호출될 IDirect3DDevice::Reset()이 실패할것이다) 
-> IDirect3DDevice::Reset()을 호출한다.
    (Reset()을 그냥 IDirect3DDevice의 복구 명령어라 생각하면 이해가 편함) 
-> 디바이스를 다시 셋팅한다.
    (랜더스테이트, 뷰 행렬 등..)
-> D3DPOOL_DEFAULT로 잡은 리소스들을 다시 로드한다. 

반응형

'그래픽스(Graphics) > DirectX9~12' 카테고리의 다른 글

점그리기  (0) 2012.11.02
Directx D3DXCreateSphere 구현  (0) 2012.11.02
그래픽카드 디바이스. D3D_Device  (0) 2012.11.02
Directx3D 에서 2D 점 그리기  (0) 2012.11.02
SetScissorRect 영역 그리기  (0) 2012.11.02

+ Recent posts