DirectX Graphics 레퍼런스 Direct3D C/C++ 레퍼런스 인터페이스 IDirect3D9 CreateDevice [목차열람] [주소복사] [슬롯비우기] |
Microsoft DirectX 9.0 |
디스플레이 어댑터를 나타내기 위한 장치를 생성 한다.
구문
HRESULT CreateDevice(
UINT Adapter, D3DDEVTYPE DeviceType, HWND hFocusWindow, DWORD BehaviorFlags, D3DPRESENT_PARAMETERS *pPresentationParameters, IDirect3DDevice9** ppReturnedDeviceInterface );
파라미터
- Adapter
- [in] 디스플레이 어댑터를 나타내는 서수. D3DADAPTER_DEFAULT 는 항상 1차 디스플레이 어댑터이다.
- DeviceType
- [in] D3DDEVTYPE 열거형의 멤버. 목적의 장치 타입을 식별한다. 목적의 장치 타입을 이용할 수 없는 경우, 이 메서드는 실패한다.
- hFocusWindow
- [in] 이 Microsoft® Direct3D® 장치로 포커스를 설정하는 윈도우 핸들. 지정하는 윈도우는, 풀 스크린의 최상정도 윈도우가 아니면 안된다.
- BehaviorFlags
- [in] 장치 생성을 제어하는 1 개 또는 복수의 옵션의 편성. 더 자세한 정보는, 「D3DCREATE 」를 참조할것.
- pPresentationParameters
- [in, out] D3DPRESENT_PARAMETERS 구조체의 포인터. 생성 하는 장치의 프레젠테이션 파라미터가 기술되고 있다.
Microsoft Windows® 2000 및 Windows XP 의 경우, 풀 스크린 장치의 디스플레이 refresh rate는, 다음의 순서로 설정된다.
- 사용자 정의의 제로가 아닌 ForcedRefreshRate 레지스트리 키 (장치가 지원 하는 경우)
- 프레젠테이션 파라미터에 애플리케이션이 지정한 제로가 아닌 refresh rate값
- 최신의 데스크탑 모드의 refresh rate (장치가 지원 하는 경우)
- 75 Hz (장치가 지원 하는 경우)
- 60 Hz (장치가 지원 하는 경우)
- 장치의 디폴트.
지원되지 않은 refresh rate은, 그것보다 작은 지원 되고 있는 최대의 refresh rate로 옮겨진다. 예를 들어, 애플리케이션으로 63 Hz 를 지정했을 경우에는, 60 Hz 가 사용된다. 57 Hz 보다 작은 refresh rate는 지원 되지 않는다.
이 메서드를 호출하면,D3DPRESENT_PARAMETERS 의 복수의 멤버의 값이 바뀐다.
- 윈도우 모드 및 풀 스크린 모드에 대해,BackBufferCount,BackBufferWidth, 및 BackBufferHeight = 0.
- 윈도우 모드에만 붙어,BackBufferFormat = D3DFMT_UNKNOWN. 풀 스크린 모드의 경우는 포맷을 지정할 필요가 있다.
D3DCREATE_ADAPTERGROUP_DEVICE 를 설정했을 경우,pPresentationParameters 는 배열이다. 존재하는 헤드의 수에 관계없이, 1 개의 깊이/스텐실 표면만이 자동적으로 생성 된다.
- ppReturnedDeviceInterface
- [out, retval] 돌려받는 IDirect3DDevice9 인터페이스의 포인터 주소. 생성 된 장치를 나타낸다.
반환값
성공했을 경우는,D3D_OK 를 돌려준다.
실패했을 경우는, 다음의 몇개의 값을 돌려준다.
D3DERR_INVALIDCALL 메서드의 호출이 무효이다. 예를 들어, 메서드의 파라미터에 무효인 값이 설정되어 있는 경우 등이다. D3DERR_NOTAVAILABLE 이 장치는, 문의한 테크닉을 지원 하고 있지 않다. D3DERR_OUTOFVIDEOMEMORY Direct3D 가 처리를 실시하는데 충분한 디스플레이 메모리가 없다.
주의
이 메서드로부터는, 요구한 디스플레이 모드 (또는 윈도우)로 설정되어, 적절한 백 버퍼를 할당할 수 있던, 완전하게 동작하는 장치 인터페이스가 돌아간다. 애플리케이션은, 필요에 따라서 깊이 버퍼를 생성 해 설정하는 것만으로 좋다 (D3DPRESENT_PARAMETERS 의 EnableAutoDepthStencil 가 FALSE 이라고 상정한다).
이 메서드는, WM_CREATE 의 처리중에 실행해서는 안된다. 애플리케이션은, WM_CREATE 의 처리중에 Direct3D 에 윈도우 핸들을 건네주어서는 안 된다. 장치의 생성·릴리즈·리셋을 위한 호출은, 포커스 윈도우의 윈도우 프로시저와 같은 thread를 사용해 실행할 필요가 있다.
D3DCREATE_HARDWARE_VERTEXPROCESSING,D3DCREATE_MIXED_VERTEXPROCESSING,D3DCREATE_SOFTWARE_VERTEXPROCESSING 는 서로 배타적인 플래그이며, 이 메서드를 호출할 때는, 이러한 정점 처리 플래그의 적어도 1개를 반드시 지정해야 한다.
장치의 일부로서 생성 된 백 버퍼는, 프레젠테이션 파라미터로 D3DPRESENTFLAG_LOCKABLE_BACKBUFFER 가 지정되고 있는 경우에만 잠금 가능하다. 멀티 샘플 백 버퍼 및 깊이 표면은 잠글 수 없다.
IDirect3DDevice9::Reset ,IUnknown::Release ,IDirect3DDevice9::TestCooperativeLevel 메서드는, 이 메서드를 사용해 장치를 생성 한 thread와 같은 thread로부터 호출해야 한다.
윈도우 모드의 백 버퍼 포맷에 대해서는,IDirect3D9::CreateDevice,IDirect3DDevice9::Reset,IDirect3DDevice9::CreateAdditionalSwapChain 의 호출로 D3DFMT_UNKNOWN 를 지정할 수 있다. 즉, 애플리케이션에서는, 윈도우 모드에 대한 IDirect3D9::CreateDevice 를 호출하기 전에, 현재의 데스크탑 포맷을 문의할 필요는 없다. 풀 스크린 모드에 대해서는, 백 버퍼 포맷을 지정할 필요가 있다.
참조
Direct3DCreate9 ,D3DDEVICE_CREATION_PARAMETERS ,IDirect3DDevice9::Reset ,멀티 헤드