일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- Brute Force
- union find
- binary search
- Trie
- SQL
- String
- MYSQL
- 이진탐색
- two pointer
- Two Points
- DP
- Hash
- 다익스트라
- Stored Procedure
- 그래프
- Dijkstra
- 스토어드 프로시저
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