디바이스를 생성할때 InitD3D함수에서.
D3DPRESENT_PARAMETERS d3dpp; // 디바이스 생성을 위한 구조체
ZeroMemory( &d3dpp, sizeof( d3dpp ) ); // 반드시 ZeroMemory() 함수로 구조체를 지워야 함
d3dpp.Windowed = TRUE; // 창모드로 생성
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; // 가장 효율 적인 SWAP 효과
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN; // 현재 바탕화면 모드에 맞춰 후면 버퍼를 생성
다음과 같은 부분이 있었습니다.
전 그냥 Windowed 라는 부분을 FALSE로 해주면
전체화면이 되겠거니, 하였으나,
그렇지 않더군요.
단순히 전체화면을 하고 싶을 뿐인데, 생각보다 해야하는 작업이 많았습니다.
(그렇다고 어렵진 않았습니다.)
일단 Windowed 속성을 FALSE로 주어야 하는건 맞지만 저것만 가지고는 부족하다는 겁니다.
요점만 먼저 말하자면,
D3DPRESENT_PARAMETERS 구조체에 몇가지 정도를 더 지정해 주어야 하며,
WinMain 함수에서 CreateWindow 또한 약간 손보아야 합니다.
먼저 예제의 실행 화면입니다.

자 그럼 이제 이 화면을 전체화면으로 바꾸어 봅시다.
먼저 CreateWindow 함수를 다음처럼 변경합니다.
HWND hWnd = CreateWindow( TEXT("D3D Tutorial"), TEXT("D3D Tutotial 01 : CreateDevice"),
WS_EX_TOPMOST | WS_POPUP, 0, 0, 800, 600, GetDesktopWindow(), NULL,
wc.hInstance, NULL );
어느 부분이 바뀌었는지는 다들 감을 잡으셨을 겁니다. WS_EX_TOPMOST | WS_POPUP 이부분입니다.
당연히 시작 위치는 0, 0
사이즈는 800 x 600 으로 잡아 주었네요.
이렇게만 하고 실행을 해보면 실행에는 문제가 없습니다.

여전히 파란 화면 뿐이지만, 테두리같은것이 다 사라지고 단순히 퍼런 창만 보입니다.
하지만 아직 전체화면은 되지 않았습니다.
자 일단 윈도우에 테두리를 지우고 어느정도 사이즈를 잡아 주었으니,
다음으로 해야 할 일은, 현재 해상도를 저 크기에 맞게 조절해야 한다는 것인데.
InitD3D 함수로 이동해서
D3DPRESENT_PARAMETERS 구조체의 설정을 할 때 다음처럼 변경해 봅시다.
d3dpp.Windowed = FALSE; // 전체 화면 모드로 생성
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; // 가장 효율 적인 SWAP 효과
d3dpp.hDeviceWindow = hWnd;
d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8; // 현재 바탕화면 모드에 맞춰 후면 버퍼를 생성
d3dpp.BackBufferWidth = 800;
d3dpp.BackBufferHeight = 600;
간략하게 설명을 드리자면, 바뀐 부분은 Windowed 의 값이 TRUE에서 FALSE로 바뀌었습니다.(당연한 이치)
BackBufferFormat 에 값이 D3DFMT_X8R8G8B8로 변경되었습니다.
D3DFMT_UNKNOWN의 속성을 그대로 두면 되지 않는다고 합니다.
저 부분은 현재 윈도우에 대해서 32비트인지 16비트인지 하는 옵션을 조정하는 부분입니다만,
잘 모르시겠으면 그냥 저대로 하셔도 큰 문제는 없을 것 같네요. 그리고 SwapEffect는 변경되지 않았고,
hDeviceWindow, BackBufferWidth, BackBufferHeight에 대해서 추가되었습니다.
hDeviceWindow 에 대해서는 현재 윈도우 핸들을 넘겨주면 되고,
BackBufferWidth, BackBufferHeight는 딱 보면 아시겠지만 모니터의 해상도를 변경하는 부분으로 예상됩니다.
다음 처럼 코드를 변경하신 후 실행하면 해상도가 변경되는 느낌(?)이 들면서 전체화면으로 보여지는 파란 화면이 보이실 겁니다.
혹시 전체화면에 대해서 어떻게 하시는지 궁금해 하실 분이 있을 것 같아 미리 찾아보았습니다.
'프로그래밍 > DirectX' 카테고리의 다른 글
DirectX - 알파 블랜딩, 알파 테스팅, Z버퍼 (1) | 2010.06.29 |
---|---|
DirectX - 행렬(Matrices) (0) | 2010.06.14 |
DirectX-정점(vertex_삼각형 띄우기) (0) | 2010.05.19 |
DirectX-디바이스 생성 (0) | 2010.05.17 |