[DirectX] DirectX 기본 엔진 구성 코드


Engine의 코드 구성 정리

헤더파일 구성


pch.h


#ifndef PCH_H
#define PCH_H

// 여기에 미리 컴파일하려는 헤더 추가
#include "framework.h"

#include <stdlib.h>
#include <Windows.h>
#include <vector>
#include <string>

#include "global.h"

using namespace std::vector;
using namespace std::list;
using namespace std::map;
using namespace std::make_pair;
using nmmespace std::wstring;
using nmmespace std::string;


#endif //PCH_H


pch.cpp

#include "pch.h"

특별한 코드는 없다. 하지만 나머지 파일들에 대해서는 미리 컴파일된 헤더를 만들기 설정하고, pch.cpp에 대해서는 미리 컴파일된 헤더 사용 설정을 해놓아야 한다.

global.h

#pragma once

#include <wrl.h>
using namespace Microsoft::WRL;

#include <d3d11.h>					// DirectX11
#include <d3dcompiler.h>			// Shader 컴파일
#include <DirectXMath.h>			// DX Math
#include <DirectXPackedVector.h>	

using namespace DirectX;
using namespace DirectX::PackedVector;

#pragma comment(lib, "d3d11")
#pragma comment(lib, "d3dcompiler")

#include "SimpleMath.h"
using namespace DirectX::SimpleMath;

typedef Vector2 Vec2;
typedef Vector3 Vec3;
typedef Vector4 Vec4;


#include "struct.h"
#include "CSingleton.h"


struct.h


SimpleMath 헤더파일이 없을 경우 Vec2를 구현을 해놓는 코드이다.
현재는 SimpleMath 헤더를 사용하기 때문에 따로 필요없는 헤더이다.

#pragma once


struct Vec2
{
	float x;
	float y;

public:
	Vec2()
		: x(0.f)
		, y(0.f)
	{}

	Vec2(float _x, float _y)
		: x(_x)
		, y(_y)
	{

	}
};

Vec2 등 사용자 지정 자료형을 사용하기 위한 헤더파일이다.

Engine 클래스 구성


엔진 클래스를 구성하는 헤더파일과 cpp파일 기본 코드 정리

CEngine.h

#pragma once

class CEngine
	: public CSingleton<CEngine>
{
private:
	HWND	m_hWnd;

	// 윈도우 해상도
	Vec2	m_vResolution;
	

public:
	Vec2 GetWindowResolution() { return m_vResolution; }

public:
	int init(HWND _hWnd, UINT _iWidth, UINT _iHeight);
	void progress();

private:
	void tick();
	void render();


public:
	CEngine();
	~CEngine();
};


CEngine.cpp

#include "pch.h"
#include "CEngine.h"

#include "CDevice.h"
#include "CPathMgr.h"
#include "CKeyMgr.h"

CEngine::CEngine()
	: m_hWnd(nullptr)
{
}

CEngine::~CEngine()
{
}

int CEngine::init(HWND _hWnd, UINT _iWidth, UINT _iHeight)
{
	// 메인 윈도우 핸들
	m_hWnd = _hWnd;
	m_vResolution = Vec2((float)_iWidth, (float)_iHeight);

	// 해상도에 맞는 작업영역 크기 조정
	RECT rt = { 0, 0, (int)_iWidth, (int)_iHeight};
	AdjustWindowRect(&rt, WS_OVERLAPPEDWINDOW, false);
	SetWindowPos(m_hWnd, nullptr, 10, 10, rt.right - rt.left, rt.bottom - rt.top, 0);
	ShowWindow(m_hWnd, true);


	// Device 초기화
	if (FAILED(CDevice::GetInst()->init(m_hWnd, _iWidth, _iHeight)))
	{
		MessageBox(nullptr, L"Device 초기화 실패", L"에러", MB_OK);
		return E_FAIL;
	}

	// Manager 초기화
	CPathMgr::GetInst()->init();
	CKeyMgr::GetInst()->init();
	return S_OK;
}

void CEngine::progress()
{
	tick();

	render();
}

void CEngine::tick()
{
	CTimeMgr::GetInst()->tick();
	CKeyMgr::GetInst()->tick();

}

void CEngine::render()
{
    // 렌더 시작 및 코드

	// 렌더 종료
	CDevice::GetInst()->Present();
}

이 글을 작성한 11월 29일 기준 기본 구성은 이렇고, 앞으로 기능이 추가됨에 따라서 헤더파일이 추가되고 코드도 추가될 것이다.


© 2022.07. by Wookey_Kim

Powered by Hydejack v7.5.2