Lib/DirectX
DirectX 기본 코드 구조.
by KingCat
2011. 11. 9.
// D3D 초기화를 위해 준비한 헤더를 포함
#include "d3dUtility.h"
// 장치를 위한 전역 변수를 인스턴스화
IDirect3DDevice9* Device = 0;
// 프레임웍 함수를 구현 (기본구조 : Setup, Cleanup, Display)
bool Setup()
{
return true;
}
void Cleanup()
{
}
bool Display(float timeDelta)
{
// 후면 버퍼를 소거하고 깊이/스텐실 버퍼를 각각 검은색과 1.0으로 초기화하는 Clear 메서드를 호출.
if( Device )
{
// 첫번째 인자 : pRects 배열 내의 사각형의 수
// 두번째 인자 : 소거하려는 화면 사각형의 배열, 표면의 특정 영역만을 소거할 수 있도록 해준다.
// 세번째 인자 : 어떤 표면을 소거할지를 지정.
// D3DCLEAR_TARGET - 렌더 대상 표면. 보통은 후면 버퍼.
// D3DCLEAR_ZBUFFER - 깊이 버퍼
// D3DCLEAR_STENCIL - 스텐실 버퍼
// 네번째 인자 : 렌더 대상을 소거할 색상
// 다섯번째 인자 : 깊이 버퍼(z-버퍼)에 지정하고자 하는 값
// 여섯번째 인자 : 스텐실 버퍼에 지정하고자 하는 값
Device->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0x00000000, 1.0f, 0);
// 소거 후 후면 버퍼 시연
Device->Present(0, 0, 0, 0);
}
return true;
}
//
// 윈도우 프로시저 메서드
//
LRESULT CALLBACK d3d::WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch( msg )
{
case WM_DESTROY:
::PostQuitMessage(0);
break;
case WM_KEYDOWN:
// ESC 키를 눌러 창을 종료할 수 있게 함.
if( wParam == VK_ESCAPE )
::DestroyWindow(hwnd);
break;
}
return ::DefWindowProc(hwnd, msg, wParam, lParam);
}
//
// WinMain
//
int WINAPI WinMain(HINSTANCE hinstance,
HINSTANCE prevInstance,
PSTR cmdLine,
int showCmd)
{
// 메인 디스플레이 윈도우와 Direct3D를 초기화한다.
if(!d3d::InitD3D(hinstance,
640, 480, true, D3DDEVTYPE_HAL, &Device))
{
::MessageBox(0, "InitD3D() - FAILED", 0, 0);
return 0;
}
// Setup 함수를 호출하여 애플리케이션 사전 준비를 수행.
if(!Setup())
{
::MessageBox(0, "Setup() - FAILED", 0, 0);
return 0;
}
// Display를 디스플레이 함수로 이용하여 메시지 루프에 진입.
d3d::EnterMsgLoop( Display );
// 애플리케이션을 정리하고 최종적으로 IDirect3DDevice9 객체를 해제.
Cleanup();
Device->Release();
return 0;
}