//-----------------------------------------------------------------------------
//
File: CreateDevice.cpp
//
// Desc: 이것은 Direct3D 사용 첫번째 튜토리얼이다. 이 튜토리얼은
Direct3D를 사용해
// 장치 생성과 윈도우 초기화를 사용한다.
//
// Copyright (c) Microsoft
Corporation. All rights
reserved.
//-----------------------------------------------------------------------------
#include
#pragma warning( disable : 4996 ) //
disable deprecated warning
#include
#pragma warning( default
: 4996 )
//-----------------------------------------------------------------------------
//
전역
변수
//-----------------------------------------------------------------------------
LPDIRECT3D9
g_pD3D = NULL; // D3DDevice를 생성하기 위해 사용하기위한 변수
LPDIRECT3DDEVICE9
g_pd3dDevice = NULL; // device에 그리기 위한 변수
//-----------------------------------------------------------------------------
//
Name: InitD3D()
// Desc: Direct3D
초기화
//-----------------------------------------------------------------------------
HRESULT
InitD3D( HWND hWnd )
{
// 디바이스 성성하기 위한 D3D객체 생성 및 버전 확인
if(
NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
return
E_FAIL;
D3DPRESENT_PARAMETERS d3dpp; // 디바이스 생성을 위한 구조체
ZeroMemory(
&d3dpp, sizeof( d3dpp ) ); // 구조체 초기화
d3dpp.Windowed = TRUE; //
창모드
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; // 스왑 효과
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN; // 후면 버퍼 생성
// Direct3D 장치 생성.
// 디폴트 비디오 카드를 사용한다.
// HAL 디바이스를
생성한다(HW 가속장치 사용)
// 정점 처리는 모든 카드에서 지원하는 SW 처리로 생성한다(HW로 생성할 경우 성능
향상
if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_pd3dDevice ) ) )
{
return E_FAIL;
}
// 디바이스 상태 정보를 처리할 경우 이곳에서 한다.
return S_OK;
}
//-----------------------------------------------------------------------------
//
Name: Cleanup()
// Desc: 초기화된 객체들을
소거한다
//-----------------------------------------------------------------------------
VOID
Cleanup()
{
// 생성의 역순서로 해제 해야한다.
if( g_pd3dDevice != NULL
)
g_pd3dDevice->Release();
if( g_pD3D != NULL )
g_pD3D->Release();
}
//-----------------------------------------------------------------------------
//
Name: Render()
// Desc: 화면을
그린다
//-----------------------------------------------------------------------------
VOID
Render()
{
if( NULL == g_pd3dDevice )
return;
// 백버퍼를 지정된색(RGB)으로 지운다.
g_pd3dDevice->Clear( 0, NULL,
D3DCLEAR_TARGET, D3DCOLOR_XRGB( 0, 175, 100 ), 1.0f, 0 );
// 렌더링 시작
if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
{
// 실제 렌더링 명령들이 나열되는 곳
// 렌더링 종료
g_pd3dDevice->EndScene();
}
// 후면 버퍼를 보이는 화면으로
g_pd3dDevice->Present( NULL, NULL, NULL,
NULL );
}
//-----------------------------------------------------------------------------
//
Name: MsgProc()
// Desc: 윈도우 메시지
처리
//-----------------------------------------------------------------------------
LRESULT
WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
switch( msg )
{
case WM_DESTROY: // 종료
Cleanup();
PostQuitMessage( 0 );
return 0;
case WM_KEYDOWN: // 키를 눌렀을때
if( wParam == VK_ESCAPE ) { // esc를
눌렀을때
::DestroyWindow(hWnd);
return 0;
}
case WM_PAINT: // 화면 출력
Render();
ValidateRect( hWnd, NULL );
return 0;
}
return DefWindowProc( hWnd, msg, wParam, lParam );
}
//-----------------------------------------------------------------------------
//
Name: wWinMain()
// Desc: 프로그램 시작
지점
//-----------------------------------------------------------------------------
INT
WINAPI wWinMain( HINSTANCE hInst, HINSTANCE, LPWSTR, INT )
{
// 윈도우
클래스 등록
WNDCLASSEX wc =
{
sizeof( WNDCLASSEX ),
CS_CLASSDC, MsgProc, 0L, 0L,
GetModuleHandle( NULL ), NULL, NULL,
NULL, NULL,
L"D3D Tutorial", NULL
};
RegisterClassEx(
&wc );
// 윈도우 창 생성
HWND hWnd = CreateWindow( L"D3D Tutorial", L"D3D
Tutorial 01: CreateDevice",
WS_OVERLAPPEDWINDOW, 100, 100, 500, 500,
NULL,
NULL, wc.hInstance, NULL );
// Direct3D 초기화
if( SUCCEEDED( InitD3D( hWnd ) ) )
{
// 윈도우 출력
ShowWindow( hWnd, SW_SHOWDEFAULT );
UpdateWindow( hWnd );
// 메시지 루프
MSG msg;
while( GetMessage( &msg,
NULL, 0, 0 ) )
{
TranslateMessage( &msg
);
DispatchMessage( &msg );
}
}
//
등록된 클래스 제거
UnregisterClass( L"D3D Tutorial", wc.hInstance );
return 0;
}
'DirectX > DirectX 9.0' 카테고리의 다른 글
[DirectX 9.0] Textures (0) | 2014.02.11 |
---|---|
[DirectX 9.0] Lights (0) | 2014.02.11 |
[DirectX 9.0] Matrices (0) | 2014.02.11 |
[DirectX 9.0] Vertices (0) | 2014.02.11 |
DirectX 설치 및 설정 방법 (0) | 2011.03.02 |