※ 본 게시물은 DirectX11을 기준으로 작성한다. 

   또한 순수하게 학습용이므로 절대적으로는 믿지 말 것.




// "DXApp.h"

#pragma once

#include <Windows.h>

#include <d3d11.h>

#include <d3dx11.h>


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

#pragma commnet(lib, "d3dx11.lib")


class DXApp

{

public:

DXApp(HINSTANCE hinstance);

virtual ~DXApp();


int Run();


virtual bool Init();


virtual void Update() = 0;

virtual void Render() = 0;

virtual LRESULT MSGProc(HWND, UINT, WPARAM, LPARAM);

protected:


// win32 설정변수들.

HWND hwnd;

HINSTANCE hinstance;

UINT clientWidth;

UINT clientHeight;

LPCWSTR applicationName;

DWORD wndStyle;


// DirectX 변수.

ID3D11Device*pDevice;

ID3D11DeviceContext*pDeviceContext;

IDXGISwapChain*pSwapChain;

ID3D11RenderTargetView* pRenderTargetView;


protected:


bool InitWindow();

bool InitDirect3D();

};


1. 다이렉트X11 3D를 설정하기위한 약간의 설정을 프로젝트 속성에서 해준다. 


2. Main.cpp와 DXApp클래스, Engine클래스를 만든다.


3. DXApp.h를 파헤쳐 보자


최상위 클래스의 느낌으로 Engine클래스에서 이 클래스를 재정의해서 쓸것이기에 완전가상함수형태의 느낌으로 구현한 것도 있다.


<Win32 설정변수들의 설명.>


HWND hwnd와 HINSTANCE hinstance를 이해하기위해서는 윈도우핸들의 개념을 알아야한다. 핸들이란 어떠한 대상에 붙여진 이름표와 같은 것으로 대상을 식별하는데 주로 사용한다. 핸들을 이용해 특정대상을 관리하며,내가 조작할 타겟을 나타내는 것이다. 이것은 윈도우자체를 가리킬수도있고, 컨트롤이 될수도있다.

핸들은 운영체제가 발급해주고, 사용자는 주어진 핸들을 쓰기만 할 수 있다.(마음대로 바꾸진못해) 우리는 핸들을 단순히 구분하기위해서(식별용) 쓴다고 알면 되기에, 정확한 값을 알 필요는 없다.


조금더 자세히 살펴보기위해 HWND와 HINSTANCE의 차이에대해 생각해보자. HINSTANCE는 프로그램이 수행되기위해 프로그램 코드들이 메모리의 특정영역으로 올라가 알맞은 작업을 수행할때 그 메모리에 올려진 특정 프로그램코드들의 모듈을 나타내기위한 식별자이다. 다시말해, 하나의 프로그램에는 여러개의 HINSTANCE가 존재 할 수 있는 것이다. HWND프로그램의 윈도우 식별자를 의미한다. 하나의 프로그램을 실행하면서 여러개의 윈도우들을 가지게되는데, 이러한 것들을 구분하기위한 것이 HWND라고 보면 되는 것이다. 여기서 윈도우창만을 얘기한다기보다는 수많은 컨트롤도 포함하여 윈도우로 생성시에 각자의 핸들값을 가지고 있는데, 이를 구분하기 위해 쓰는것이다. 윈도우 OS에서 화면출력을 위해 리소들의 식별자를 알아야 하는데이것이 바로 HWND라고 보면 된다.


<DirectX 11 기본 변수들>



ID3D11Device* 는 생성한 D3D 11 장치의 객체를 저장하는 인터페이스라 보면된다. 

ID3D11DeviceContext* 는 생성한 장치를 이용하여 게임에서 필요한 리소스들(texture, mesh ...)을 결합하기 위한 목적으로 사용되는 인터페이스이다. 

--> 예전 DX에서는 디바이스와 디바이스 컨텍스트가 합쳐져있었지만 지금은 기능이 많아져 따로변수를 선언해서 쓰게 되었다.

IDXGISwapChain* 는 화면출력버퍼와 백버퍼를 관리해주기위한 인터페이스이다.

ID3D11RenderTargetView* 실제 우리가 그려주고 보여줄 백버퍼를 나타내기위한 인터페이스다. (이걸가져와서 화면에그려주는것)





추가참고사항 http://ya2c.co.kr/bbs/board.php?bo_table=B67&wr_id=19

http://vsts2010.tistory.com/458?category=128642 .

(DirectX11의 총체적인 내용 설명 , 

지금 하는 게시글의 목적과 제일 맞게 부합되는 글이다. 

지금 무엇을하려는 것인지 감조차 안온다고하면 이 글을 반드시 읽고 오길 추천드린다!!)

+ Recent posts