[포프의 쉐이더 입문강좌] 01. 쉐이더란 무엇이죠? Part 2
ZeroMemory와 memset() 함수 - 메모리 블록 채우기
// 메시지 루프
MSG msg;
ZeroMemory(&msg, sizeof(msg));
while(msg.message!=WM_QUIT)
{
if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
else // 메시지가 없으면 게임을 업데이트하고 장면을 그린다
{
PlayDemo();
}
}
//------------------------------------------------------------
// 초기화 코드
//------------------------------------------------------------
bool InitEverything(HWND hWnd)
{
// D3D를 초기화
if( !InitD3D(hWnd) )
{
return false;
}
// 모델, 쉐이더, 텍스처등을 로딩
if( !LoadAssets() )
{
return false;
}
// 폰트를 로딩
if(FAILED(D3DXCreateFont( gpD3DDevice, 20, 10, FW_BOLD, 1, FALSE, DEFAULT_CHARSET,
OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, (DEFAULT_PITCH | FF_DONTCARE),
"Arial", &gpFont )))
{
return false;
}
return true;
}


// D3D 객체 및 장치 초기화
bool InitD3D(HWND hWnd)
{
// D3D 객체
gpD3D = Direct3DCreate9( D3D_SDK_VERSION );
if ( !gpD3D )
{
return false;
}
// D3D장치를 생성하는데 필요한 구조체를 채워넣는다.
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.BackBufferWidth = WIN_WIDTH;
d3dpp.BackBufferHeight = WIN_HEIGHT;
d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8;
d3dpp.BackBufferCount = 1;
d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;
d3dpp.MultiSampleQuality = 0;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.hDeviceWindow = hWnd;
d3dpp.Windowed = TRUE;
d3dpp.EnableAutoDepthStencil = TRUE;
d3dpp.AutoDepthStencilFormat = D3DFMT_D24X8;
d3dpp.Flags = D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL;
d3dpp.FullScreen_RefreshRateInHz = 0;
d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_ONE;
// D3D장치를 생성한다.
if( FAILED( gpD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
D3DCREATE_HARDWARE_VERTEXPROCESSING,
&d3dpp, &gpD3DDevice ) ) )
{
return false;
}
return true;
}
