http://msdn.microsoft.com/en-us/library/bb147224(VS.85).aspx
결론부터 말하자면, 윈도우 프로시저와 같은 스레드에서만 아래 4가지 D3D 함수가 호출되어야 한다는 것이다.
전체화면에서 창모드로 바뀔 때, 권한과 이것과 관련한 내부적인 critical section유지에 관련한 이유 때문이다.
결론을 뒷받침할 만한 내용은 다음과 같다...
D3D 몇가지 함수들은 window message들을 처리하는 스레드에서만 호출할 수 있도록 설계되어있다.
이 몇가지 함수들은 다음 4가지다.
- IDirect3DDevice9::Reset
- IDirect3D9::CreateDevice
- IDirect3DDevice9::TestCooperativeLevel
- the final Release of IDirect3DDevice9
왜 저렇게 설계되었냐면...
멀티스레드 어플리케이션은 window message 처리 스레드들을 D3D 스레드들에서 강력하게 분리하려한다.
이런 어플리케이션, 즉 display mode 변환이 발생하는 스레드와 D3D 호출 스레드가 분리된 어플리케이션은
deadlock의 위험이 있기 때문이다.