Tutorial1_Direct3D초기화- InitD3D()함수
- 프로그래밍/3D그래픽스 & 쉐이더
- 2011. 3. 23. 00:21
HRESULT InitD3D( HWND hWnd )
// 디바이스를 다음과 같은 설정으로 생성한다.
// 1. 디폴트 비디오카드를 사용한다(대부분은 비디오카드가 한 개다)
// 2. HAL 디바이스를 생성한다(HW 가속장치를 사용하겠다는 의미)
// 3. 정점 처리는 모든 카드에서 지원하는 SW 처리로 생성한다.(HW로 생성할 경우 더욱 높은
성능을 낸다)
설명:
Direct3DCreate9() 이 함수가 Direct3D 객체를 생성하여 그 객체의 인터페이스 IDirect3D9를 리턴해주는 함수다. 이렇게 얻어낸 IDirect3D9는 IDirect3DDevice9를 생성할 때까지만 유효하다.
D3DPRESENT_PARAMETERS 이 구조체는 디바이스를 생성하기 위한 구조체 이다. 정보를 채워넣기 전에 주의할 점은 구조체의 내부를 ZeroMemory() 함수를 이용하여 지워주어야 한다. 이 구조체에서 여러정보를 초기화 한 뒤 이 정보를 IDirect3D9->CreateDevice() 함수에 넘긴다.
* 디바이스를 생성하는 함수 설명
HRESULT CreateDevice(
UINT Adapter,
D3DDEVTYPE DeviceType,
HWND hFocusWindow,
DWORD BehaviorFlage,
D3DPRESENT_PARAMETERS* pPresentationPatamters,
IDirect3DDevice9** ppReturnedDeviceInterface
);
Adapter : 디바이스를 생성할 화면의 순서 번호. D3DADAPTER_DEFAULT는 기본을 나타낸
다. 이 파라메타는 모니터가 두 대 이상인 경우에만 해당된다.
DeviceType : 풀력 디바이스의 종류를 결정한다. D3DDEVTYPE_HAL, D3DDEVTYPE_SW,
D3DDEVTYPE_REF가 있다.
HAL은 HardWare Abstraction Layer의 약자이며 그래픽 칩의 하드웨어를 직접
호출하므로 고속처리가 가능하며,
REF는 REFerence device or REFerence Rasterlizer의 이니셜을 따온것으
로 가상 그래픽 칩을 CPU에 만들어서 CPU로 렌더링을 실시하므로 속도가 느리다.
hFocusWindow : 디바이스가 출력할 윈도우의 핸들이다. 전체 화면 모드일 경우 최상위 윈도우
(부모가 없는 윈도우를 말함)만이 가능하다.
BehaviorFlags : D3DCREATE_HARDWARE_VERTEXPORCESSING과
D3DCREATE_SOFTWARE_VERTEXPORCESSING이 가장 중요하다.
DirectX 9.x의 가장 강력한 기능인 정점 셰이더를 지원할 때 하드웨어 가속을
사용할 것인지, 소프트웨어적으로 지원할 것인지를 결정하는 것이다.
D3DCREATE_MIXED_VERTEXPORCESSING을 사용할 경우에는 하드웨
어 가속과 소프트웨어 가속을 프로그램 실행중에 전환할 수 있다.
pPresentationParameters : 앞서 선언한 구조체의 포인터.
ppReturnedDeviceInterface : 우리가 얻고자 했던 값이다. IDirect3DDevice9의 인터페이스
를 갖고 있는 포인터가 담겨서 돌아온다.
하드웨어 가속을 사용하는 옵션을 선택할 경우 자신의 그래픽카드가 3D가속을 지원하는지에 대한 여부를 미리 알고 있어야 한다.
[출처] Direct3D 초기화|작성자 누리블루
이 글을 공유하기