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
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
|
//Framework.h
#ifndef FRAMEWORK_HPP
#define FRAMEWORK_HPP
#include "Singleton.hpp"
#include <d3d9.h>
#include <d3dx9.h>
#define g_pFramework CFramework::Get()
class CFramework : public TSingleton<CFramework>
{
public:
void initD3D(HWND hWnd,LPDIRECT3D9 d3d,LPDIRECT3DDEVICE9 d3ddev, LPDIRECT3DTEXTURE9 Point, LPD3DXSPRITE d3dspt);
void render_frame(LPDIRECT3DDEVICE9 d3ddev, LPDIRECT3DTEXTURE9 Point, LPD3DXSPRITE d3dspt);
void cleanD3D(LPDIRECT3D9 d3d,LPDIRECT3DDEVICE9 d3ddev, LPDIRECT3DTEXTURE9 Point);
private:
D3DPRESENT_PARAMETERS d3dpp;
};
#endif
//################################################
//Framework.cpp
#include "Framework.h"
void CFramework::initD3D(HWND hWnd,LPDIRECT3D9 d3d,LPDIRECT3DDEVICE9 d3ddev, LPDIRECT3DTEXTURE9 Point, LPD3DXSPRITE d3dspt)
{
d3d = Direct3DCreate9(D3D_SDK_VERSION);
//create a struct to hold various device informations
ZeroMemory(&d3dpp,sizeof(d3dpp)); //struct frei machen
d3dpp.Windowed = TRUE; //Windowed
d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD; //Discard old frame
d3dpp.hDeviceWindow = hWnd; //set the window to be used by Direct3D
//Create a device class using this informations an dinformation from the d3dpp stuct
d3d->CreateDevice(D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp,
&d3ddev);
D3DXCreateSprite(d3ddev,&d3dspt);
D3DXCreateTextureFromFile(d3ddev, L"image.png",&Point);
};
void CFramework::render_frame(LPDIRECT3DDEVICE9 d3ddev, LPDIRECT3DTEXTURE9 Point, LPD3DXSPRITE d3dspt)
{
d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,0),1.0f,0);
d3ddev->BeginScene();
d3dspt->Begin(NULL);
D3DXVECTOR3 center( 10.0f, 10.0f, 0.0f ); // Mitte Textur
D3DXVECTOR3 postition( 50.0f, 50.f, 0.0f ); // Z = 0 !!
d3dspt->Draw(Point,NULL,¢er,&postition,D3DCOLOR_XRGB(255,255,255));
//d3ddev->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0xFF308030, 1.0f, 0);
d3dspt->End();
d3ddev->EndScene(); //ends the 3D scene
d3ddev->Present(NULL,NULL,NULL,NULL); //Display all not only parts of it!
return;
};
void CFramework::cleanD3D(LPDIRECT3D9 d3d,LPDIRECT3DDEVICE9 d3ddev, LPDIRECT3DTEXTURE9 Point)
{
Point->Release();
d3ddev->Release();
d3d->Release();
};
//################################################
//main.cpp
#include <windows.h>
#include <windowsx.h>
#include "Framework.h"
LPDIRECT3D9 d3d; //the pointer to our Direct3D interface
LPDIRECT3DDEVICE9 d3ddev; //the pointer to the device class
LPDIRECT3DTEXTURE9 Point; //Pointer to Texture
LPD3DXSPRITE d3dspt; //pointer to Sprite
//function prototypen
//Set up window Callback funktion
LRESULT CALLBACK WindowProc(HWND hWnd,UINT message,WPARAM wparam,LPARAM lparam);
//MAIN
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
{
HWND hWnd;
WNDCLASSEX wc;
CFramework Framework;
ZeroMemory(&wc, sizeof(WNDCLASSEX));
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WindowProc;
wc.hInstance = hInstance;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
wc.lpszClassName = L"WindowClass";
RegisterClassEx(&wc);
hWnd = CreateWindowEx(NULL,
L"WindowClass",
L"Our First Direct3D Program",
WS_OVERLAPPEDWINDOW,
300, 300,
800, 600,
NULL,
NULL,
hInstance,
NULL);
ShowWindow(hWnd, nCmdShow);
// set up and initialize Direct3D
Framework.initD3D(hWnd, d3d, d3ddev, Point, d3dspt);
// enter the main loop:
MSG msg;
msg.message = WM_NULL;
while(msg.message != WM_QUIT)
{
if(PeekMessage( &msg, 0, 0, 0, PM_REMOVE ))
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
else
{
Framework.render_frame(d3ddev, Point, d3dspt);
}
}
// clean up DirectX and COM
Framework.cleanD3D( d3d,d3ddev, Point);
return msg.wParam;
}
LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_DESTROY:
{
PostQuitMessage(0);
return 0;
} break;
}
return DefWindowProc (hWnd, message, wParam, lParam);
}
|