Tutorial1_Direct3D초기화- InitD3D()함수



HRESULT InitD3D( HWND hWnd )
{
    //device 생성위한D3D 객체생성
    if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
        return E_FAIL;
 
    //디바이스생성용구조체
    D3DPRESENT_PARAMETERS d3dpp;
 
    //구조체를깨끗이
    ZeroMemory( &d3dpp, sizeof(d3dpp) );
 
    //창모드
    d3dpp.Windowed = TRUE;
 
    //D3DSWAPEFFECT 열거형
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
 
    //현재바탕화면모드에맞춰후면버퍼생성
    d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
 

 
    //D3DADAPTER_DEFAULT : 디바이스생성할화면순서
    //D3DDEVTYPE_HAL : HW가속장치사용
    //hWnd : 윈도우핸들
    // 정점처리는SW로생성( HW로생성할시더높은성능)
    // d3dpp : 구조체포인터
    // g_prd3Device : IDirect3DDevice 포인터

   // 디바이스를 다음과 같은 설정으로 생성한다.

    // 1. 디폴트 비디오카드를 사용한다(대부분은 비디오카드가 한 개다)
    // 2. HAL 디바이스를 생성한다(HW 가속장치를 사용하겠다는 의미)
    // 3. 정점 처리는 모든 카드에서 지원하는 SW 처리로 생성한다.(HW로 생성할 경우 더욱 높은

           성능을 낸다) 

 
    if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
                                      D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                      &d3dpp, &g_pd3dDevice ) ) )
    {
        return E_FAIL;
    }
 
    return S_OK;


 


설명:

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_HALD3DDEVTYPE_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 초기화|작성자 누리블루

 


 

이 글을 공유하기

댓글

Designed by JB FACTORY