반응형



Device 초기화  Direct 2D 

2012/05/08 05:40

복사http://blog.naver.com/dyunarion/80159553505

디바이스 초기화

 

장치의 정보를 가져오는데 성공했으면 이제 장치를 원하는 방향으로 세팅해야 합니다.

이 단계는 D3DPRESENT_PARAMETERS 구조체 인스턴스를 채우는 일로 이 구조체는 IDirect3DDevice9 객체의 성격을 결정하는데

이용 됩니다.

 

우선 세팅할 구조체를 선언하겠습니다.

D3DPRESENT_PARAMETERS d3dpp;   //이 구조체는 앞으로 그래픽 장치의 설정을 담을 용도입니다.

ZeroMemory(&d3dpp, sizeof(D3DPRESENT_PARAMETERS));  //값을 넣어주기 전에 우선 전부 0으로 만들겠습니다.

 

D3DPRESENT_PARAMETERS 구조체의 멤버는 개수가 좀 많습니다.

 

BackBufferWidth 와 BackBufferHeight는 후면 버퍼의 너비와 높이이며 UINT형 입니다.

백버퍼의 가로길이, 세로길이를 넣어주시면 됩니다.

d3dpp.BackBufferWidth = WINSIZEX;  //저는 미리 const 해둔 클라이언트 가로와 세로로 하겠습니다.

d3dpp.BackBufferHeight = WINSIZEY;

 

BackBufferFormat 은 백퍼버의 픽셀 포멧으로 저는 32비트로 하겠습니다.

d3dpp.BackBufferFormat = D3DFMT_A8R8G8B8;

 

BackBufferCount 는 사용할 백버퍼의 수를 의미하는데 보통 1을 지정해서 한개의 백버퍼를 사용합니다.

d3dpp.BackBufferCount = 1;

 

MultiSampleType과 MultiSampleQuality는 멀티샘플링의 사용여부와 그 수위로 이미지를 보다 더 부드럽게 표현이 가능한 옵션입니다.

d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;  //저는 사용하지 않겠습니다.

d3dpp.MultiSampleQuality = 0; //사용하지 않으므로 0으로 두겠습니다.

 

SwapEffect 는 플리핑 체인의 버퍼가 교환되는 방법입니다. D3DSWAPEFFECT_DISCARD가 가장 효과적입니다.

d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;

 

hDeviceWindow는 사용할 윈도우의 핸들로 드로인의 대상이 될 윈도우를 지정해 줍니다.

d3dpp.hDeviceWindow = g_hWnd;  //미리 잡아둔 hWnd를 사용하겠습니다.

 

Windowed는 윈도우 모드를 지정합니다. true로 할 경우 윈도우 화면을 false로 할 경우 전체 화면이 지정됩니다.

d3dpp.Windowed = true; //창 모드로 하겠습니다.

 

EnableAutoDepthStencil은 Direct가 자동으로 깊이/스텐실 버퍼를 만들고 관리하게 하려면 true로 지정합니다.

d3dpp.EnableAutoDepthStencil = true;

 

AutoDepthStencilFormat은 깊이, 스텐실 버퍼의 포맷입니다.

d3dpp.AutoDepthStencilFormat = D3DFMT_D24S8; //깊이에 24bit 스텐실에 8bit 사용

 

Flags는 몇 가지 부가적인 기능으로 0으로 하거나 D3DPRESENTFLAG 집합의 멤머중에 하나를 지정할 수 도 있습니다.

d3dpp.Flags = 0; //저는 사용하지 않겠습니다.

 

FullScreen_RefreshRateInHz은 재생율을 지정합니다.

d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT; //디폴트 재생율을 이용합니다. (모니터의 화면 주사율)

 

PresentationInterval은 시연 간격으로 일반적으로 IMMEDIATE(즉시시연)하거나 DEFAULT(재생율)로 합니다.

PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;

//DEFAULT로 할 경우 모니터의 주사율에 따라 알아서 정해집니다.

 

D3DPRESENT_PARAMETERS의 값을 채운 뒤에는 새로운 메서드를 이용해 IDirect3DDevice9 객체를 만들 수 있습니다.

m_p3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, g_hWnd, Vp, &d3dpp, &m_p3Device); 

//m_p3D 는 LPDIRECT3D9 (IDirect3D9 컴객체) 을 인스턴스한 것입니다. 

첫번째 원소는 Adapter로 디스플레이어 어댑터를 지정합니다. DEFAULT는 기본 장치

두번째 원소는 DeviceType으로 이용할 장치 타입을 지정합니다. REF도 있지만 여기서는 HAL을 지정하겠습니다.

세번째 원소는 hFocusWindow입니다. 장치가 드로잉할 윈도우의 핸들을 넘겨주면 됩니다.

네번째 원소는 BehaviorFlags로 버텍스 프로세싱 타입을 지정하시면 됩니다. 미리 만들어둔 Vp를 여기서 사용합니다.

다섯번째 원소는 pPresentationParameters 는 미리 초기화해둔 D3DPRESENT_PARAMETERS 인스턴스를 지정합니다.

마지막 원소로  ppReturnedDeviceInterface가 있습니다. 생성된 장치를 리턴함으로

미리 LPDIRECT3DDEVICE9을 인스턴스한 m_p3Devie를 지정합니다.

CreateDevice 는 HRESULT를 리턴함으로 FAILED 매크로를 이용하여 성공 실패를 알릴수도 있습니다.

 

if(FAILED(m_p3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, g_hWnd, Vp, &d3dpp, &m_p3Device)))

{

MessageBox(g_hWnd, L"디바이스 장치 생성 실패", L"SYSTEM ERROR", MB_OK);

}




[출처] Device 초기화 |작성자 서버

반응형

'그래픽스(Graphics) > DirectX9~12' 카테고리의 다른 글

글자 출력  (0) 2013.01.04
D3DLIGHT9 광원  (0) 2013.01.02
D3D 에서의 HRESULT 값의 의미  (0) 2012.12.30
FPS 와 프레임 즉시 렌더링  (0) 2012.12.27
renderState를 쉽게 조작하기 IDirect3DStateBlock9  (0) 2012.12.22

+ Recent posts