1
#include
<
d3dx9.h
>
2
#include
<
d3d9.h
>
3
4
5
6
#pragma comment(lib,
"
d3dx9.lib
"
)
7
#pragma comment(lib,
"
d3d9.lib
"
)
8
9
10
#define
MAX_LOADSTRING 100
11
12
13
HINSTANCE hInst;
14
TCHAR szTitle[MAX_LOADSTRING]
=
TEXT(
"
D3D
"
);
15
TCHAR szWindowClass[MAX_LOADSTRING]
=
TEXT(
"
HelloD3D
"
);
16
17
18
19
ATOM MyRegisterClass(HINSTANCE hInstance);
20
BOOL InitInstance(HINSTANCE,
int
);
21
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
22
23
24
25
HWND g_hWnd
=
NULL;
26
27
IDirect3D9
*
pD3D
=
NULL;
28
IDirect3DDevice9
*
pDevice
=
NULL;
29
30
31
bool
InitD3D();
32
void
Release();
33
void
Render();
34
35
36
37
int
APIENTRY WinMain(HINSTANCE hInstance,
38
HINSTANCE hPrevInstance,
39
LPSTR lpCmdLine,
40
int
nCmdShow)
41
{
42
MSG msg;
43
44
MyRegisterClass(hInstance);
45
46
if
(
!
InitInstance (hInstance, nCmdShow))
47
{
48
return
FALSE;
49
}
50
51
if
(
!
InitD3D())
52
{
53
return
-
1
;
54
}
55
56
ZeroMemory(
&
msg,
sizeof
(msg));
57
58
while
(msg.message
!=
WM_QUIT)
59
{
60
if
(PeekMessage(
&
msg,NULL,
0
,
0
,PM_REMOVE))
61
{
62
TranslateMessage(
&
msg);
63
DispatchMessage(
&
msg);
64
65
}
66
else
67
{
68
Render();
69
}
70
}
71
72
return
(
int
)msg.wParam;
73
}
74
75
76
ATOM MyRegisterClass(HINSTANCE hInstance)
77
{
78
WNDCLASSEX wcex;
79
80
wcex.cbSize
=
sizeof
(WNDCLASSEX);
81
82
wcex.style
=
CS_HREDRAW
|
CS_VREDRAW;
83
wcex.lpfnWndProc
=
(WNDPROC)WndProc;
84
wcex.cbClsExtra
=
0
;
85
wcex.cbWndExtra
=
0
;
86
wcex.hInstance
=
hInstance;
87
wcex.hIcon
=
NULL;
88
wcex.hCursor
=
LoadCursor(NULL, IDC_ARROW);
89
wcex.hbrBackground
=
(HBRUSH)(COLOR_WINDOW
+
1
);
90
wcex.lpszMenuName
=
NULL;
91
wcex.lpszClassName
=
szWindowClass;
92
wcex.hIconSm
=
NULL;
93
return
RegisterClassEx(
&
wcex);
94
}
95
96
97
BOOL InitInstance(HINSTANCE hInstance,
int
nCmdShow)
98
{
99
HWND hWnd;
100
101
hInst
=
hInstance;
102
103
hWnd
=
CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
104
CW_USEDEFAULT,
0
, CW_USEDEFAULT,
0
, NULL, NULL, hInstance, NULL);
105
106
if
(
!
hWnd)
107
{
108
return
FALSE;
109
}
110
111
g_hWnd
=
hWnd;
112
113
ShowWindow(hWnd, nCmdShow);
114
UpdateWindow(hWnd);
115
116
return
TRUE;
117
}
118
119
120
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
121
{
122
switch
(message)
123
{
124
case
WM_DESTROY:
125
Release();
126
PostQuitMessage(
0
);
127
break
;
128
default
:
129
return
DefWindowProc(hWnd, message, wParam, lParam);
130
}
131
return
0
;
132
}
133
134
135
void
Release()
136
{
137
if
(pDevice
!=
NULL)
138
pDevice
->
Release();
139
if
(pD3D
!=
NULL)
140
pD3D
->
Release();
141
}
142
143
144
bool
InitD3D()
145
{
146
pD3D
=
Direct3DCreate9(D3D_SDK_VERSION);
147
148
if
(pD3D
==
NULL)
149
{
150
MessageBox(NULL,TEXT(
"
pD3D init failed
"
),TEXT(
"
error
"
),MB_OK);
151
return
false
;
152
}
153
154
D3DPRESENT_PARAMETERS d3dpp;
155
156
ZeroMemory(
&
d3dpp,
sizeof
(d3dpp) );
157
d3dpp.Windowed
=
TRUE;
158
d3dpp.SwapEffect
=
D3DSWAPEFFECT_COPY;
159
160
161
162
HRESULT hr;
163
hr
=
pD3D
->
CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,
164
g_hWnd,
165
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
166
&
d3dpp,
167
&
pDevice);
168
169
if
(FAILED(hr))
170
{
171
MessageBox(NULL,TEXT(
"
create device failed
"
),TEXT(
"
error
"
),MB_OK);
172
return
false
;
173
}
174
175
return
true
;
176
}
177
178
179
180
void
Render()
181
{
182
if
(pDevice
==
NULL)
183
{
184
return
;
185
}
186
187
pDevice
->
Clear(
1
,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(
0
,
0
,
0
),
1.0f
,
0
);
188
189
pDevice
->
Present(NULL,NULL,NULL,NULL);
190
191
}
192
193

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

70

71

72

73

74

75

76

77



78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98



99

100

101

102

103

104

105

106

107



108

109

110

111

112

113

114

115

116

117

118

119

120

121



122

123



124

125

126

127

128

129

130

131

132

133

134

135

136



137

138

139

140

141

142

143

144

145



146

147

148

149



150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170



171

172

173

174

175

176

177

178

179

180

181



182

183



184

185

186

187

188

189

190

191

192

193
