| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 | 
| 12 | 13 | 14 | 15 | 16 | 17 | 18 | 
| 19 | 20 | 21 | 22 | 23 | 24 | 25 | 
| 26 | 27 | 28 | 29 | 30 | 31 | 
													Tags
													
											
												
												- Dijkstra
- Hash
- 이진탐색
- DP
- binary search
- String
- union find
- 다익스트라
- Trie
- Two Points
- Stored Procedure
- Brute Force
- 스토어드 프로시저
- 그래프
- SQL
- MYSQL
- two pointer
													Archives
													
											
												
												- Today
- Total
codingfarm
4. 예제 응용 프로그램 프레임워크 - 메서드 본문
이 책의 예제 프로그램들은 d3dUtil.h, d3dUtil.cpp, d3dApp.h, d3dApp.cpp 파일의 코드를 사용한다.
d3dUtil 파일 : 유용한 편의용 코드가 포함됨
d3dApp 파일 : direct3D 예제 응용 프로그램을 캡슐화 하는데 스이는 핵심 Direct3D 응용 프로그램 클래스 코드가 들어 있다.
Win32 프로그래밍 지식은 이미 있다고 가정한다.
이 프레임워크는 창 생성 코드와 Direct3D 초기화 코드를 숨기는것이 목적이다.
개요
본격적으로 분석하기에 앞서 프로젝트의 class diagram과 sequence diagram을 통해 클래스 관계와 실행 흐름에 대해 살펴보겠다.
1. Sequence Diagram

InitDirect3D와 D3DApp의 관계를 눈여겨 볼만하다.

| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | class D3DApp { protected :     D3DApp(HINSTANCE hInstance);     D3DApp(const D3DApp& rhs) = delete;     D3DApp& operator=(const D3DApp& rhs) = delete;     virtual ~D3DApp(); public:     static D3DApp* GetApp();     virtual bool Initialize(); protected:     virtual void OnResize();      virtual void Update(const GameTimer& gt)=0;     virtual void Draw(const GameTimer& gt)=0;     static D3DApp* mApp; }; D3DApp::D3DApp(HINSTANCE hInstance) :    mhAppInst(hInstance) {     // Only one D3DApp can be constructed.     assert(mApp == nullptr);     mApp = this; } D3DApp* D3DApp::GetApp() {     return mApp; } class InitDirect3DApp : public D3DApp { public:     public:     InitDirect3DApp(HINSTANCE hInstance);     ~InitDirect3DApp();     virtual bool Initialize()override; private:     virtual void OnResize()override;     virtual void Update(const GameTimer& gt)override;     virtual void Draw(const GameTimer& gt)override; }; InitDirect3DApp::InitDirect3DApp(HINSTANCE hInstance) : D3DApp(hInstance)  { } InitDirect3DApp::~InitDirect3DApp() { } bool InitDirect3DApp::Initialize() {     if(!D3DApp::Initialize())         return false;     return true; } void InitDirect3DApp::OnResize() {     D3DApp::OnResize(); } | cs | 
InitDirect3DApp 클래스가 D3DApp을 상속받는다.
만약 InitDirect3DApp의 인스턴스를 생성하게 되면 D3DApp의 생성자가 호출되며, 여기서 mApp 필드에 생성된 인스턴스가 저장된다.
mApp은 static type이며, 이 필드는 static 메서드인 GetApp을 통해 접근 가능하다.
즉, InitDirect3DApp이 어디서 생성되든, D3DApp의 GetApp메서드를 통해 프로그램 전역에서 접근 가능하다.
'computer graphics > DX12 book' 카테고리의 다른 글
| 6. Direct3D의 그리기 연산 - 정점과 입력 배치(vertex and input layout) (0) | 2021.06.01 | 
|---|---|
| Learning DirectX12 (0) | 2021.05.30 | 
| 4. 시간 측정과 애니메이션 (0) | 2021.02.07 | 
| 4. Direct3D의 초기화 (0) | 2021.01.25 | 
| 4. 명령 목록을 이용한 다중 스레드 활용 (0) | 2021.01.25 | 
			  Comments
			
		
	
               
           
					
					
					
					
					
					
				