/
main.cpp
139 lines (113 loc) · 3.46 KB
/
main.cpp
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
#define _CRT_SECURE_NO_WARNINGS
#define _XM_NO_INTRINSICS_
#define XM_NO_ALIGNMENT
//////////////////////////////////////////////////////////////////////////////////////
// Headers
//////////////////////////////////////////////////////////////////////////////////////
#include <windows.h>
#include <windowsx.h>
#include <time.h>
#include <stdio.h>
#include <iostream>
#include <sstream>
#include <d3dx11.h>
#include <dxerr.h>
#include "input.h"
#include "game.h"
//////////////////////////////////////////////////////////////////////////////////////
// Global Variables
//////////////////////////////////////////////////////////////////////////////////////
LARGE_INTEGER StartingTime, EndingTime, DeltaTime, Frequency;
//////////////////////////////////////////////////////////////////////////////////////
// Forward declarations
//////////////////////////////////////////////////////////////////////////////////////
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
void ShutdownD3D();
void UpdateDeltaTime();
//////////////////////////////////////////////////////////////////////////////////////
// Entry point to the program. Initializes everything and goes into a message processing
// loop. Idle time is used to render the scene.
//////////////////////////////////////////////////////////////////////////////////////
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
Game* game = new Game(hInstance);
if (FAILED(game->InitialiseWindow(WndProc, nCmdShow)))
{
DXTRACE_MSG("Failed to create Window");
return 0;
}
if (FAILED(game->InitialiseD3D()))
{
DXTRACE_MSG("Failed to create Device");
return 0;
}
if (FAILED(game->InitialiseGraphics()))
{
DXTRACE_MSG("Failed to initialise graphics");
return 0;
}
Input* input = new Input(hInstance, game->getHWND());
game->setInput(input);
StartingTime.QuadPart = 0;
Frequency.QuadPart = 1;
srand(int(time(NULL)));
// Main message loop
MSG msg = { 0 };
//clock_t beginTime = 0;
while (msg.message != WM_QUIT)
{
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
// do something
input->ReadInputStates();
game->Update(DeltaTime.QuadPart/1000000.0f);
game->Render();
UpdateDeltaTime();
}
}
delete game;
delete input;
return (int)msg.wParam;
}
//////////////////////////////////////////////////////////////////////////////////////
// Called every time the application receives a message
//////////////////////////////////////////////////////////////////////////////////////
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
//int x, y;
switch (message)
{
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
void UpdateDeltaTime()
{
QueryPerformanceCounter(&EndingTime);
DeltaTime.QuadPart = EndingTime.QuadPart - StartingTime.QuadPart;
DeltaTime.QuadPart *= 1000000;
DeltaTime.QuadPart /= Frequency.QuadPart;
//Delta time is done :)
//char mybuff1[100];
//sprintf(mybuff1, "End: %I64u\nStart: %I64u\nDelta Time: %I64u\n\n", StartingTime.QuadPart, EndingTime.QuadPart, DeltaTime.QuadPart);
//OutputDebugString(mybuff1);
QueryPerformanceFrequency(&Frequency);
QueryPerformanceCounter(&StartingTime);
}