[DX9] 1.디바이스의 작성 2 – Direct3D 의 초기화

CreateDevice 샘플 프로젝트는 윈도우 작성후에, WinMain 로부터 호출된  InitD3D 애플리케이션 정의함수 중에서 Direct3D 초기화를 실행합니다. 애플리케이션 윈도우의 적성후에는 언제라도, 신을 렌더링하기 위해 사용하는 Direct3D 오브젝트를 초기화 할 수 있습니다. 이 프로세스는 오브젝트를 작성하고 프레젠테이션 파라메터를 설정하고 마지막으로 Direct3D 디바이스를 작성합니다.

Direct3D 오브젝트의 작성 후 IDirect3D9::CreateDevice 메소드를 사용해 디바이스를 작성하고 디바이스, 타입, 모드 등의 열거 할 수 있습니다.

if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
	return E_FAIL;

Direct3DCreate9 에 넘겨지는 파라메터는 언제나 D3D_SDK_VERSION 뿐입니다. 이것은 바른 헤더 파일이 사용되고 있다는 것을 Direct3D에 통지합니다. 이 값은 헤더 또는 그 외의 변경에 의한 애플리케이션을 다시 빌드할 필요가 생길때마다 인클리멘트됩니다. 버전이 일치하지 않는 경우 Direct3DCreate9은 실패합니다.

D3DPRESENT_PARAMETERS 의 필드를 채워서 3D 애플리케이션의 동작방법을 지정할 수 있습니다. CreateDevice 샘플 프로젝트에서는 Windowed 가 TRUE, SwapEffect가 D3DSWAPEFFECT_DISCARD, BackBufferFormat가 D3DFMT_UNKONWN에 설정됩니다.

D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;

마지막 순서로 다음 코드의 예에 나타낸 것처럼 IDirect3D9::CreateDevice 메소드를 사용해 Direct3D 디바이스를 작성합니다.

if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
                                  D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                  &d3dpp, &g_pd3dDevice ) ) )

상기 샘플코드는 D3DADAPTER_DEFAULT 플래그를 사용해서 디폴트 어댑터를 가진 디바이스를 작성합니다. 통상, 시스템은 복수의 그래픽 하드웨어 카드가 인스톨 되어있지 않은 한, 단일 어댑터만을 가집니다. DeviceType 파라메터에 D3DDEVTYPE_HAL을 지정하면, 소프트웨어 디바이스에 의한 하드웨어 디바이스 쪽이 우선됩니다. 이 샘플코드에서는 D3DCREATE_SOFTWARE_VERTEXPROCESSING 를 사용해서, 시스템에 소프트웨어 정점처리를 사용하도록 지시하고 있습니다. D3DCREATE_HARDWARE_VERTEXPROCESSING 를 지정해, 시스템의 하드웨어 정점처리를 사용하도록 하는 경우에는 하드웨어 정점처리 퍼포먼스가 대폭 향상하는 점에 주의해 주십시오.

이것으로 Direct3D 오브젝터는 초기화 되었습니다. 다음에는 「3 – 시스템 메시지의 처리」에서 설명하고 있는 것처럼, 시스템 메시지를 처리하는 메카니즘의 확보를 수행합니다.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.