Using DirectX with MFC
우선 “stdafx.h”에
// Direct3D includes
#include <d3d9.h>
#include <d3dx9.h>
#include <dxerr.h>
// DirectSound includes
#include <mmsystem.h>
#include <mmreg.h>
#include <dsound.h>
#pragma comment( lib, "dxerr.lib" )
#pragma comment( lib, "dxguid.lib" )
#if defined(DEBUG) || defined(_DEBUG)
#pragma comment( lib, "d3dx9d.lib" )
#else
#pragma comment( lib, "d3dx9.lib" )
#endif
#pragma comment( lib, "d3d9.lib" )
#pragma comment( lib, "winmm.lib" )
#pragma comment( lib, "comctl32.lib" )
를 추가한다. 그때 그때 필요한 헤더파일과 라이브러리를 포함해야 한다.
그리고 XXXView.h 파일을 열고 아래 내용들을 추가한다.
CRect m_rectClient; // Client window size
IDirect3D9* m_pD3D; // The IDirect3D9 interface
IDirect3DDevice9* m_pd3dDevice; // D3D Device
D3DPRESENT_PARAMETERS m_d3dpp; // The present parameters.
bool m_bReady; // Is DX9 ready to render?
void Render(); // Render
XXXView.cpp 파일을 열고 OnInitialUpdate() 함수를 override하고 아래 내용을 추가한다.
void XXXView::OnInitialUpdate()
{
CView::OnInitialUpdate();
// TODO: Add your specialized code here and/or call the base class
HWND hDevice, hFocus;
HRESULT hr;
hDevice = GetSafeHwnd();
hFocus = GetTopLevelParent() ->GetSafeHwnd();
GetClientRect(&m_rectClient);
// Create Direct3D object
m_pD3D = Direct3DCreate9(D3D_SDK_VERSION);
D3DDISPLAYMODE d3ddm;
m_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm);
// D3DPRESENT_PARAMETERS 구조체의설정
::ZeroMemory(&m_d3dpp, sizeof(m_d3dpp));
m_d3dpp.Windowed = TRUE;
m_d3dpp.BackBufferCount = 1;
m_d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
m_d3dpp.EnableAutoDepthStencil = TRUE;
m_d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
m_d3dpp.hDeviceWindow = hDevice;
m_d3dpp.BackBufferWidth = m_rectClient.Width();
m_d3dpp.BackBufferHeight = m_rectClient.Height();
m_d3dpp.BackBufferFormat = d3ddm.Format
m_d3dpp.Flags |= D3DPRESENTFLAG_LOCKABLE_BACKBUFFER;
// 디바이스작성
hr = m_pD3D->CreateDevice(D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
hFocus,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&m_d3dpp,
&m_pd3dDevice);
m_pd3dDevice->SetDialogBoxMode(TRUE);
m_pd3dDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
m_bReady = TRUE;
}
Render() 함수는 아래와 같다.
void CeConsoleView::Render()
{
m_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0);
if(SUCCEEDED(m_pd3dDevice->BeginScene()))
{
m_pd3dDevice->EndScene();
}
m_pd3dDevice->Present(NULL, NULL, NULL, NULL);
}
마지막으로 OnDraw() 함수에 아래 내용을 추가하면 준비는 완료
// TODO: add draw code for native data here
if( m_bReady )
Render();
댓글 없음:
댓글 쓰기