기본 프레임워크 만들기, 외부 라이브러리 추가 방법( feat. DirectXTex)
기본 프레임워크 만들기
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에 추가해줘도 된다.