[DirectX11]

기본 프레임워크 만들기, 외부 라이브러리 추가 방법( feat. DirectXTex)

럭키🍀 2023. 11. 5. 20:54

기본 프레임워크 만들기

DirectX11을 사용하기 위한 프레임워크를 만들기 위해 몇가지 세팅을 해주었다.

데스크톱 마법사로 프로젝트를 생성하고 미리선언된헤더에 pch.h파일을 만들었다.

 

Types.h에 사용하기 쉽도록 재정의한 자료형들을 넣어두고 - 예)DirectX에서 자주 사용하는 자료형인 배열들XMFLOAT2, XMFLOAT3을 Vec2, Vec3등으로 

Struct.h에 따로 만들어 사용할 구조체들을,

Values.h에 상수들을 관리할 용도로 세 헤더 파일들을 추가하였다.

 

또 pch.h에 자주 사용할 라이브러리들을 추가했다. 

*(Windows10 이후 부터 Windows Development Kit 안에 DirectX라이브러리가 있어 따로 이전처럼 추가하지 않아도 된다. 밑에는 텍스쳐를 보여주기 위해 여러가지 방법중에 DirectXTex라이브러리만 추가하였다.)

#pragma once

#include "Types.h"
#include "Values.h"
#include "Struct.h"

// STL
#include <vector>
#include <list>
#include <map>
#include <unordered_map>
using namespace std;

// WIN
#include <windows.h>
#include <assert.h>

// DX
#include <d3d11.h>
#include <d3dcompiler.h>
#include <wrl.h>
#include <DirectXMath.h>
// 밑에 라이브러리 추가로 추가되는 내용
#include <DirectXTex/DirectXTex.h>
#include <DirectXTex/DirectXTex.inl>
using namespace DirectX;
using namespace Microsoft::WRL;

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

#ifdef _DEBUG
#pragma comment(lib, "DirectXTex\\DirectXTex_debug.lib")
#else
#pragma comment(lib, "DirectXTex\\DirectXTex.lib")
#endif

#define CHECK(p)	assert(SUCCEEDED(p))

 

만든 프로젝트 이름과 같은 파일에선 윈도우를 생성하고 초기화 하고 입력이 들어올 경우 처리하는 부분, 기본메시지 루프를 만들고 정리하였다.  

또 Game 클래스를 만들어 아래와 같이 틀을 짠 다음에 프로젝트 이름과 같은 시작부분에서 Game 객체를 만들고 Init을 호출해주었다.

#pragma once


class Game
{
public:
	Game();
	~Game();

public:
	void Init(HWND hwnd);
	void Update();
	void Render();

private:
	void RenderBegin();
	void RenderEnd();

private:
	HWND _hwnd;
	uint32 _width = 0;
	uint32 _height = 0;
};


이밖에도 출력 디렉토리를$(SolutionDir)Binaries라고 해주었고 미리 Binaries디렉토리를 솔루션있는 경로에 생성해 두었다.

 

외부 라이브러리 추가하기

우선 라이브러리가 어떻게 제공되는지에 따라 다르지만 파일 형태에 따라서 이렇게 넣어둔다.

 

* 라이브러리 헤더파일을 모아둔 include 파일 > 포함디렉토리에 설정해 못찾겟음 여기에서 찾아봐라 알려주라는 의미로 

C/C++>일반> 추가포함 디렉토리
* 라이브러리 파일 자체가 들어있는 lib파일 > 라이브러리파일은 라이브러리 디렉토리에 모드별로(debug,release) 넣어준다. 그리고 경로를 링커>일반> 추가 라이브러리에 알려준다.


프로젝트 속성>C/C++>일반>추가포함디렉토리에 $(SolutionDir)Libraries\Include라고 만들고 실제로 만든다.
링커>일반>추가라이브러리에도 $(SolutionDir)Libraries\Lib 라고 하고 만들었다.

라이브러리를 가지고오는 방법으로는 라이브러리를 어떻게 배포하는지에 따라 다른데
MS에서는 DirectX를 사용해 텍스쳐를 읽을수 있도록 하는 DirectXTex라이브러리를 GitHub에서 제공하여 다운받은 소스를 빌드해서 넣어서 쓰면 된다. 

혹 헤더나 라이브러리만 제공하는 곳도 있다.
빌드해서 얻은 DirectXTex.h, DirectXTex.ini는 Include/DirectXTex에 넣고 (헤더파일과 인라인 파일)
DirectXTex.lib, DirectXTex_debug.lib는 Lib/DirectXTex에 넣었다. (각각 Release모드, Debug모드로 빌드가 된 것이다.)

이러면 pch.h에 #include<DirectXTex/DirectXTex.h> #include<DirectXTex/DirectXTex.ini> 를 추가할 수 있다.
그리고 이 라이브러릴 사용하겠다고 표시를 해야하는데
암시적으로 링커>입력>추가종속성 d3d11,lib; d3d11compiler.lib; DirectXTex.lib에서 해도 되고(구성에 따라 DirectXTex_debug.lib)
명시적으로 
#pragma comment(lib, "d3d11.lib")
#pragma comment(lib, "d3dcompiler.lib")
#ifdef _DEBUG
#pragma comment(lib, "DirectXTex\\DirectXTex_debug.lib")
#else
#pragma comment(lib, "DirectXTex\\DirectXTex.lib")
#endif
이렇게 pch.h에 추가해줘도 된다.