1
+ #include " dxManager.h"
2
+
3
+ /* ******************************************************************
4
+ * Constructor
5
+ *******************************************************************/
6
+ dxManager::dxManager () : pD3DDevice(NULL ),
7
+ pSwapChain(NULL ),
8
+ pRenderTargetView(NULL )
9
+ {
10
+
11
+ }
12
+ /* ******************************************************************
13
+ * Destructor
14
+ *******************************************************************/
15
+ dxManager::~dxManager ()
16
+ {
17
+ if ( pRenderTargetView ) pRenderTargetView->Release ();
18
+ if ( pSwapChain ) pSwapChain->Release ();
19
+ if ( pD3DDevice ) pD3DDevice->Release ();
20
+ }
21
+ /* ******************************************************************
22
+ * Initializes Direct3D Device
23
+ *******************************************************************/
24
+ bool dxManager::initialize ( HWND* hW )
25
+ {
26
+ // window handle
27
+ hWnd = hW;
28
+
29
+ // get window dimensions
30
+ RECT rc;
31
+ GetClientRect ( *hWnd, &rc );
32
+ UINT width = rc.right - rc.left ;
33
+ UINT height = rc.bottom - rc.top ;
34
+
35
+ // Set up DX swap chain
36
+ // --------------------------------------------------------------
37
+ DXGI_SWAP_CHAIN_DESC swapChainDesc;
38
+ ZeroMemory (&swapChainDesc, sizeof (swapChainDesc));
39
+
40
+ // set buffer dimensions and format
41
+ swapChainDesc.BufferCount = 2 ;
42
+ swapChainDesc.BufferDesc .Width = width;
43
+ swapChainDesc.BufferDesc .Height = height;
44
+ swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
45
+ swapChainDesc.BufferDesc .Format = DXGI_FORMAT_R8G8B8A8_UNORM;;
46
+
47
+ // set refresh rate
48
+ swapChainDesc.BufferDesc .RefreshRate .Numerator = 60 ;
49
+ swapChainDesc.BufferDesc .RefreshRate .Denominator = 1 ;
50
+
51
+ // sampling settings
52
+ swapChainDesc.SampleDesc .Quality = 0 ;
53
+ swapChainDesc.SampleDesc .Count = 1 ;
54
+
55
+ // output window handle
56
+ swapChainDesc.OutputWindow = *hWnd;
57
+ swapChainDesc.Windowed = true ;
58
+
59
+ // Create the D3D device
60
+ // --------------------------------------------------------------
61
+ if ( FAILED ( D3D10CreateDeviceAndSwapChain ( NULL ,
62
+ D3D10_DRIVER_TYPE_HARDWARE,
63
+ NULL ,
64
+ 0 ,
65
+ D3D10_SDK_VERSION,
66
+ &swapChainDesc,
67
+ &pSwapChain,
68
+ &pD3DDevice ) ) ) return fatalError (" D3D device creation failed" );
69
+
70
+ // Create render target view
71
+ // --------------------------------------------------------------
72
+
73
+ // try to get the back buffer
74
+ ID3D10Texture2D* pBackBuffer;
75
+ if ( FAILED ( pSwapChain->GetBuffer (0 , __uuidof (ID3D10Texture2D), (LPVOID*) &pBackBuffer) ) ) return fatalError (" Could not get back buffer" );
76
+
77
+ // try to create render target view
78
+ if ( FAILED ( pD3DDevice->CreateRenderTargetView (pBackBuffer, NULL , &pRenderTargetView) ) ) return fatalError (" Could not create render target view" );
79
+
80
+ // release the back buffer
81
+ pBackBuffer->Release ();
82
+
83
+ // set the render target
84
+ pD3DDevice->OMSetRenderTargets (1 , &pRenderTargetView, NULL );
85
+
86
+ // Create viewport
87
+ // --------------------------------------------------------------
88
+
89
+ // create viewport structure
90
+ viewPort.Width = width;
91
+ viewPort.Height = height;
92
+ viewPort.MinDepth = 0 .0f ;
93
+ viewPort.MaxDepth = 1 .0f ;
94
+ viewPort.TopLeftX = 0 ;
95
+ viewPort.TopLeftY = 0 ;
96
+
97
+ // set the viewport
98
+ pD3DDevice->RSSetViewports (1 , &viewPort);
99
+
100
+ // Set up the view matrix
101
+ // --------------------------------------------------------------
102
+ D3DXVECTOR3 camera[3 ] = { D3DXVECTOR3 (0 .0f , 0 .0f , -5 .0f ),
103
+ D3DXVECTOR3 (0 .0f , 0 .0f , 1 .0f ),
104
+ D3DXVECTOR3 (0 .0f , 1 .0f , 0 .0f ) };
105
+ D3DXMatrixLookAtLH (&viewMatrix, &camera[0 ], &camera[1 ], &camera[2 ]);
106
+
107
+ // Set up projection matrix
108
+ // --------------------------------------------------------------
109
+ D3DXMatrixPerspectiveFovLH (&projectionMatrix, (float )D3DX_PI * 0 .5f , (float )width/(float )height, 0 .1f , 100 .0f );
110
+
111
+ // everything completed successfully
112
+ return true ;
113
+ }
114
+
115
+ /* ******************************************************************
116
+ * Scene Renderer
117
+ *******************************************************************/
118
+ void dxManager::renderScene ()
119
+ {
120
+ // clear scene
121
+ pD3DDevice->ClearRenderTargetView ( pRenderTargetView, D3DXCOLOR (0 ,0 ,0 ,0 ) );
122
+
123
+ // SCENE RENDERING GOES HERE!!!
124
+
125
+ // flip buffers
126
+ pSwapChain->Present (0 ,0 );
127
+ }
128
+
129
+ /* ******************************************************************
130
+ * Fatal Error Handler
131
+ *******************************************************************/
132
+ bool dxManager::fatalError (LPCSTR msg)
133
+ {
134
+ MessageBox (*hWnd, msg, " Fatal Error!" , MB_ICONERROR);
135
+ return false ;
136
+ }
0 commit comments