altEngine
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
include.h
Go to the documentation of this file.
1 #ifndef INCLUDE_H
2 #define INCLUDE_H
3 
4 #define _HAS_EXCEPTIONS 0
5 #define D3D_DEBUG_INFO
6 
7 #define SHADOWVOL
8 
9 
10 #define LINE_SIZE 512
11 
12 #define TICK_MS 8 // 125hz
13 #define TICK_RATE 125
14 //#define TICK_MS 16 // 62.5hz
15 //#define TICK_RATE 60
16 // quite jerky movement, makes me sick
17 //#define TICK_MS 33
18 //#define TICK_RATE 30
19 
20 
21 
22 #define GRAVITY 9.8f
23 
24 #define GRAVITY_SCALE 1.4f
25 #define JUMPPAD_SCALE 0.015f
26 
27 #define RIGID_IMPACT 0.5f
28 #define IMPACT_VELOCITY 4.0f
29 #define FALL_DAMAGE_VELOCITY 7.0f
30 
31 #define MAX_TEXTURES 4 // multi texture limits (quake 3 shader stages)
32 #define MAX_RES 32
33 
34 
35 #define PARTICLES
36 // Could probably increase, but we are now at a point where
37 //particle count drops FPS linearly to near zero without hitting the cap
38 //#define MAX_PARTICLES 175000
39 
40 
41 #ifdef _WIN32
42  #define APP_NAME "altEngine.exe"
43  #define APP_HASH "fac891919c0d02efdcf76b8c300ec63f"
44 #else
45  #define APP_NAME "altEngine"
46  #define APP_HASH "fac891919c0d02efdcf76b8c300ec63f"
47 #endif
48 
49 
50 #ifdef _WIN32
51  #define _CRTDBG_MAP_ALLOC
52  #define _USE_MATH_DEFINES
53  #define WIN32_EXTRA_LEAN
54  #define _CRT_SECURE_NO_DEPRECATE
55  #define NOMINMAX
56  #define WIN32_LEAN_AND_MEAN
57  #define WIN32_EXTRA_LEAN
58  #define VC_EXTRALEAN
59  #include <windows.h>
60  #include <winsock.h>
61  #include <omp.h>
62  #include <mmsystem.h>
63 
64 
65  #pragma comment(lib, "wsock32.lib")
66 
67  typedef int socklen_t;
68  typedef unsigned char byte;
69 
70 
71 //#define SHADOWMAPS
72 
73 #ifdef DIRECTX
74 #ifdef D3D11
75  #include <d3d11.h>
76  #include <d3dx11.h>
77  #include <D3Dcompiler.h>
78 // #include <d3dx10.h>
79 #else
80  #include <d3d9.h>
81  #include <d3dx9.h>
82  #include <d3dx9math.h>
83 #endif
84 #endif
85 #ifdef OPENGL
86  //#define GLEW_STATIC
87  #include <GL/glew.h>
88  #include <GL/wglew.h>
89 #endif
90 
91 #ifdef VULKAN
92  #define VK_USE_PLATFORM_WIN32_KHR
93  #include <vulkan/vulkan.h>
94 #endif
95 
96 #endif
97 
98 #ifdef __OBJC__
99 
100 // #define glGenVertexArrays glGenVertexArraysAPPLE
101 // #define glBindVertexArray glBindVertexArrayAPPLE
102 // #define glDeleteVertexArrays glDeleteVertexArraysAPPLE
103  #define glFramebufferTexture glFramebufferTextureEXT
104  #define glFramebufferTexture glFramebufferTextureEXT
105 #endif
106 
107 #ifndef WIN32
108  #include <errno.h>
109  #ifdef __linux__
110  #include <GL/gl.h>
111  #include <GL/glx.h>
112  #else
113  #define GLX_GLXEXT_PROTOTYPES
114  #ifdef __OBJC__
115  #define __gl_h_
116  #include <OpenGL/gl3.h>
117  #include <OpenGL/glext.h>
118  //#include <OpenGL/gl.h>
119  //#include <OpenGL/glu.h>
120  #else
121  #include <GL/gl.h>
122  //#include <GL/glu.h>
123  #include <GL/glx.h>
124  #endif
125 #endif
126 
127 #ifndef __OBJC__
128  //mac has xquartz and can run xwindow apps
129  #include <X11/Xlib.h>
130  #include <X11/Xutil.h>
131  #include <X11/Xos.h>
132 
133  #include <X11/Xatom.h>
134  #include <X11/keysym.h>
135 #endif
136  #include <unistd.h>
137  #include <fcntl.h>
138  #include <sys/select.h>
139  #include <sys/types.h>
140  #include <sys/time.h>
141  #include <sys/socket.h>
142  #include <netinet/in.h>
143  #include <arpa/inet.h>
144  #define closesocket close
145 
146  typedef int SOCKET;
147  #define SOCKET_ERROR -1
148  #define INVALID_SOCKET -1
149 #endif
150 
151 
152 #define MAX(x,y) (x) > (y) ? (x) : (y)
153 #define MIN(x,y) (x) < (y) ? (x) : (y)
154 
155 #ifndef __OBJC__
156 //audio
157 #include <AL/al.h>
158 #include <AL/alc.h>
159 #include <AL/efx.h>
160 #else
161 #include <OpenAL/al.h>
162 #include <OpenAL/alc.h>
163 #endif
164 
165 #ifdef WIN32
166  #include <al.h>
167  #include <alc.h>
168  #include <efx.h>
169  #include <EFX-Util.h>
170  #include <efx-creative.h>
171 #endif
172 
173 //std
174 #include <cstdio>
175 #include <cstdlib>
176 #include <cstring>
177 #include <ctime>
178 #include <vector>
179 #include <functional>
180 #include <thread>
181 #include <float.h>
182 #ifdef WIN32
183  #include <crtdbg.h>
184 #endif
185 
186 #ifdef DIRECTX
187  #include <DxErr.h>
188 #endif
189 
190 #define G_QUAKE3
191 //#define OPENMP
192 
193 using namespace std;
194 
195 
196 #ifdef VULKAN
197 // Garbage for vulkan that I'll delete eventually
198 
199 struct MemoryTypeInfo
200 {
201  bool deviceLocal = false;
202  bool hostVisible = false;
203  bool hostCoherent = false;
204  bool hostCached = false;
205  bool lazilyAllocated = false;
206 
207  struct Heap
208  {
209  uint64_t size = 0;
210  bool deviceLocal = false;
211  };
212 
213  Heap heap;
214  int index;
215 };
216 
217 struct SwapchainFormatColorSpace
218 {
219  VkFormat format;
220  VkColorSpaceKHR colorSpace;
221 };
222 
223 
224 enum MemoryProperties
225 {
226  MT_DeviceLocal = 1,
227  MT_HostVisible = 2
228 };
229 
230 template <typename T>
231 T RoundToNextMultiple(const T a, const T multiple)
232 {
233  return ((a + multiple - 1) / multiple) * multiple;
234 }
235 
236 const unsigned char BasicFragmentShader[] = {
237  0x3 , 0x2 , 0x23, 0x7 , 0x0 , 0x0 , 0x1 , 0x0 , 0x1 , 0x0 , 0x8 , 0x0 , 0x13,
238  0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x11, 0x0 , 0x2 , 0x0 , 0x1 , 0x0 ,
239  0x0 , 0x0 , 0xb , 0x0 , 0x6 , 0x0 , 0x1 , 0x0 , 0x0 , 0x0 , 0x47, 0x4c, 0x53,
240  0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x0 , 0x0 , 0x0 , 0x0 ,
241  0xe , 0x0 , 0x3 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x1 , 0x0 , 0x0 , 0x0 , 0xf ,
242  0x0 , 0x7 , 0x0 , 0x4 , 0x0 , 0x0 , 0x0 , 0x4 , 0x0 , 0x0 , 0x0 , 0x6d, 0x61,
243  0x69, 0x6e, 0x0 , 0x0 , 0x0 , 0x0 , 0x9 , 0x0 , 0x0 , 0x0 , 0xc , 0x0 , 0x0 ,
244  0x0 , 0x10, 0x0 , 0x3 , 0x0 , 0x4 , 0x0 , 0x0 , 0x0 , 0x7 , 0x0 , 0x0 , 0x0 ,
245  0x3 , 0x0 , 0x3 , 0x0 , 0x2 , 0x0 , 0x0 , 0x0 , 0x90, 0x1 , 0x0 , 0x0 , 0x4 ,
246  0x0 , 0x9 , 0x0 , 0x47, 0x4c, 0x5f, 0x41, 0x52, 0x42, 0x5f, 0x73, 0x65, 0x70,
247  0x61, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x64, 0x65, 0x72, 0x5f,
248  0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x0 , 0x0 , 0x4 , 0x0 , 0x9 , 0x0 ,
249  0x47, 0x4c, 0x5f, 0x41, 0x52, 0x42, 0x5f, 0x73, 0x68, 0x61, 0x64, 0x69, 0x6e,
250  0x67, 0x5f, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x5f, 0x34, 0x32,
251  0x30, 0x70, 0x61, 0x63, 0x6b, 0x0 , 0x5 , 0x0 , 0x4 , 0x0 , 0x4 , 0x0 , 0x0 ,
252  0x0 , 0x6d, 0x61, 0x69, 0x6e, 0x0 , 0x0 , 0x0 , 0x0 , 0x5 , 0x0 , 0x5 , 0x0 ,
253  0x9 , 0x0 , 0x0 , 0x0 , 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x43, 0x6f, 0x6c,
254  0x6f, 0x72, 0x0 , 0x5 , 0x0 , 0x3 , 0x0 , 0xc , 0x0 , 0x0 , 0x0 , 0x75, 0x76,
255  0x0 , 0x0 , 0x47, 0x0 , 0x4 , 0x0 , 0x9 , 0x0 , 0x0 , 0x0 , 0x1e, 0x0 , 0x0 ,
256  0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x47, 0x0 , 0x4 , 0x0 , 0xc , 0x0 , 0x0 , 0x0 ,
257  0x1e, 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x13, 0x0 , 0x2 , 0x0 , 0x2 ,
258  0x0 , 0x0 , 0x0 , 0x21, 0x0 , 0x3 , 0x0 , 0x3 , 0x0 , 0x0 , 0x0 , 0x2 , 0x0 ,
259  0x0 , 0x0 , 0x16, 0x0 , 0x3 , 0x0 , 0x6 , 0x0 , 0x0 , 0x0 , 0x20, 0x0 , 0x0 ,
260  0x0 , 0x17, 0x0 , 0x4 , 0x0 , 0x7 , 0x0 , 0x0 , 0x0 , 0x6 , 0x0 , 0x0 , 0x0 ,
261  0x4 , 0x0 , 0x0 , 0x0 , 0x20, 0x0 , 0x4 , 0x0 , 0x8 , 0x0 , 0x0 , 0x0 , 0x3 ,
262  0x0 , 0x0 , 0x0 , 0x7 , 0x0 , 0x0 , 0x0 , 0x3b, 0x0 , 0x4 , 0x0 , 0x8 , 0x0 ,
263  0x0 , 0x0 , 0x9 , 0x0 , 0x0 , 0x0 , 0x3 , 0x0 , 0x0 , 0x0 , 0x17, 0x0 , 0x4 ,
264  0x0 , 0xa , 0x0 , 0x0 , 0x0 , 0x6 , 0x0 , 0x0 , 0x0 , 0x2 , 0x0 , 0x0 , 0x0 ,
265  0x20, 0x0 , 0x4 , 0x0 , 0xb , 0x0 , 0x0 , 0x0 , 0x1 , 0x0 , 0x0 , 0x0 , 0xa ,
266  0x0 , 0x0 , 0x0 , 0x3b, 0x0 , 0x4 , 0x0 , 0xb , 0x0 , 0x0 , 0x0 , 0xc , 0x0 ,
267  0x0 , 0x0 , 0x1 , 0x0 , 0x0 , 0x0 , 0x2b, 0x0 , 0x4 , 0x0 , 0x6 , 0x0 , 0x0 ,
268  0x0 , 0xe , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x2b, 0x0 , 0x4 , 0x0 ,
269  0x6 , 0x0 , 0x0 , 0x0 , 0xf , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x80, 0x3f, 0x36,
270  0x0 , 0x5 , 0x0 , 0x2 , 0x0 , 0x0 , 0x0 , 0x4 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 ,
271  0x0 , 0x0 , 0x3 , 0x0 , 0x0 , 0x0 , 0xf8, 0x0 , 0x2 , 0x0 , 0x5 , 0x0 , 0x0 ,
272  0x0 , 0x3d, 0x0 , 0x4 , 0x0 , 0xa , 0x0 , 0x0 , 0x0 , 0xd , 0x0 , 0x0 , 0x0 ,
273  0xc , 0x0 , 0x0 , 0x0 , 0x51, 0x0 , 0x5 , 0x0 , 0x6 , 0x0 , 0x0 , 0x0 , 0x10,
274  0x0 , 0x0 , 0x0 , 0xd , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x51, 0x0 ,
275  0x5 , 0x0 , 0x6 , 0x0 , 0x0 , 0x0 , 0x11, 0x0 , 0x0 , 0x0 , 0xd , 0x0 , 0x0 ,
276  0x0 , 0x1 , 0x0 , 0x0 , 0x0 , 0x50, 0x0 , 0x7 , 0x0 , 0x7 , 0x0 , 0x0 , 0x0 ,
277  0x12, 0x0 , 0x0 , 0x0 , 0x10, 0x0 , 0x0 , 0x0 , 0x11, 0x0 , 0x0 , 0x0 , 0xe ,
278  0x0 , 0x0 , 0x0 , 0xf , 0x0 , 0x0 , 0x0 , 0x3e, 0x0 , 0x3 , 0x0 , 0x9 , 0x0 ,
279  0x0 , 0x0 , 0x12, 0x0 , 0x0 , 0x0 , 0xfd, 0x0 , 0x1 , 0x0 , 0x38, 0x0 , 0x1 ,
280  0x0 ,
281 };
282 const unsigned char BasicVertexShader[] = {
283  0x3 , 0x2 , 0x23, 0x7 , 0x0 , 0x0 , 0x1 , 0x0 , 0x1 , 0x0 , 0x8 , 0x0 , 0x21,
284  0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x11, 0x0 , 0x2 , 0x0 , 0x1 , 0x0 ,
285  0x0 , 0x0 , 0x11, 0x0 , 0x2 , 0x0 , 0x20, 0x0 , 0x0 , 0x0 , 0xb , 0x0 , 0x6 ,
286  0x0 , 0x1 , 0x0 , 0x0 , 0x0 , 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64,
287  0x2e, 0x34, 0x35, 0x30, 0x0 , 0x0 , 0x0 , 0x0 , 0xe , 0x0 , 0x3 , 0x0 , 0x0 ,
288  0x0 , 0x0 , 0x0 , 0x1 , 0x0 , 0x0 , 0x0 , 0xf , 0x0 , 0x9 , 0x0 , 0x0 , 0x0 ,
289  0x0 , 0x0 , 0x4 , 0x0 , 0x0 , 0x0 , 0x6d, 0x61, 0x69, 0x6e, 0x0 , 0x0 , 0x0 ,
290  0x0 , 0xd , 0x0 , 0x0 , 0x0 , 0x12, 0x0 , 0x0 , 0x0 , 0x1d, 0x0 , 0x0 , 0x0 ,
291  0x1f, 0x0 , 0x0 , 0x0 , 0x3 , 0x0 , 0x3 , 0x0 , 0x2 , 0x0 , 0x0 , 0x0 , 0x90,
292  0x1 , 0x0 , 0x0 , 0x4 , 0x0 , 0x9 , 0x0 , 0x47, 0x4c, 0x5f, 0x41, 0x52, 0x42,
293  0x5f, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x68, 0x61,
294  0x64, 0x65, 0x72, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x0 , 0x0 ,
295  0x4 , 0x0 , 0x9 , 0x0 , 0x47, 0x4c, 0x5f, 0x41, 0x52, 0x42, 0x5f, 0x73, 0x68,
296  0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67,
297  0x65, 0x5f, 0x34, 0x32, 0x30, 0x70, 0x61, 0x63, 0x6b, 0x0 , 0x5 , 0x0 , 0x4 ,
298  0x0 , 0x4 , 0x0 , 0x0 , 0x0 , 0x6d, 0x61, 0x69, 0x6e, 0x0 , 0x0 , 0x0 , 0x0 ,
299  0x5 , 0x0 , 0x6 , 0x0 , 0xb , 0x0 , 0x0 , 0x0 , 0x67, 0x6c, 0x5f, 0x50, 0x65,
300  0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x0 , 0x0 , 0x0 , 0x0 , 0x6 , 0x0 ,
301  0x6 , 0x0 , 0xb , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x67, 0x6c, 0x5f,
302  0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x0 , 0x6 , 0x0 , 0x7 , 0x0 ,
303  0xb , 0x0 , 0x0 , 0x0 , 0x1 , 0x0 , 0x0 , 0x0 , 0x67, 0x6c, 0x5f, 0x50, 0x6f,
304  0x69, 0x6e, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x0 , 0x0 , 0x0 , 0x0 , 0x6 , 0x0 ,
305  0x7 , 0x0 , 0xb , 0x0 , 0x0 , 0x0 , 0x2 , 0x0 , 0x0 , 0x0 , 0x67, 0x6c, 0x5f,
306  0x43, 0x6c, 0x69, 0x70, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x0 ,
307  0x5 , 0x0 , 0x3 , 0x0 , 0xd , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x5 ,
308  0x0 , 0x3 , 0x0 , 0x12, 0x0 , 0x0 , 0x0 , 0x70, 0x6f, 0x73, 0x0 , 0x5 , 0x0 ,
309  0x4 , 0x0 , 0x1d, 0x0 , 0x0 , 0x0 , 0x6f, 0x75, 0x74, 0x55, 0x76, 0x0 , 0x0 ,
310  0x0 , 0x5 , 0x0 , 0x4 , 0x0 , 0x1f, 0x0 , 0x0 , 0x0 , 0x69, 0x6e, 0x55, 0x76,
311  0x0 , 0x0 , 0x0 , 0x0 , 0x48, 0x0 , 0x5 , 0x0 , 0xb , 0x0 , 0x0 , 0x0 , 0x0 ,
312  0x0 , 0x0 , 0x0 , 0xb , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x48, 0x0 ,
313  0x5 , 0x0 , 0xb , 0x0 , 0x0 , 0x0 , 0x1 , 0x0 , 0x0 , 0x0 , 0xb , 0x0 , 0x0 ,
314  0x0 , 0x1 , 0x0 , 0x0 , 0x0 , 0x48, 0x0 , 0x5 , 0x0 , 0xb , 0x0 , 0x0 , 0x0 ,
315  0x2 , 0x0 , 0x0 , 0x0 , 0xb , 0x0 , 0x0 , 0x0 , 0x3 , 0x0 , 0x0 , 0x0 , 0x47,
316  0x0 , 0x3 , 0x0 , 0xb , 0x0 , 0x0 , 0x0 , 0x2 , 0x0 , 0x0 , 0x0 , 0x47, 0x0 ,
317  0x4 , 0x0 , 0x12, 0x0 , 0x0 , 0x0 , 0x1e, 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 ,
318  0x0 , 0x47, 0x0 , 0x4 , 0x0 , 0x1d, 0x0 , 0x0 , 0x0 , 0x1e, 0x0 , 0x0 , 0x0 ,
319  0x0 , 0x0 , 0x0 , 0x0 , 0x47, 0x0 , 0x4 , 0x0 , 0x1f, 0x0 , 0x0 , 0x0 , 0x1e,
320  0x0 , 0x0 , 0x0 , 0x1 , 0x0 , 0x0 , 0x0 , 0x13, 0x0 , 0x2 , 0x0 , 0x2 , 0x0 ,
321  0x0 , 0x0 , 0x21, 0x0 , 0x3 , 0x0 , 0x3 , 0x0 , 0x0 , 0x0 , 0x2 , 0x0 , 0x0 ,
322  0x0 , 0x16, 0x0 , 0x3 , 0x0 , 0x6 , 0x0 , 0x0 , 0x0 , 0x20, 0x0 , 0x0 , 0x0 ,
323  0x17, 0x0 , 0x4 , 0x0 , 0x7 , 0x0 , 0x0 , 0x0 , 0x6 , 0x0 , 0x0 , 0x0 , 0x4 ,
324  0x0 , 0x0 , 0x0 , 0x15, 0x0 , 0x4 , 0x0 , 0x8 , 0x0 , 0x0 , 0x0 , 0x20, 0x0 ,
325  0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x2b, 0x0 , 0x4 , 0x0 , 0x8 , 0x0 , 0x0 ,
326  0x0 , 0x9 , 0x0 , 0x0 , 0x0 , 0x1 , 0x0 , 0x0 , 0x0 , 0x1c, 0x0 , 0x4 , 0x0 ,
327  0xa , 0x0 , 0x0 , 0x0 , 0x6 , 0x0 , 0x0 , 0x0 , 0x9 , 0x0 , 0x0 , 0x0 , 0x1e,
328  0x0 , 0x5 , 0x0 , 0xb , 0x0 , 0x0 , 0x0 , 0x7 , 0x0 , 0x0 , 0x0 , 0x6 , 0x0 ,
329  0x0 , 0x0 , 0xa , 0x0 , 0x0 , 0x0 , 0x20, 0x0 , 0x4 , 0x0 , 0xc , 0x0 , 0x0 ,
330  0x0 , 0x3 , 0x0 , 0x0 , 0x0 , 0xb , 0x0 , 0x0 , 0x0 , 0x3b, 0x0 , 0x4 , 0x0 ,
331  0xc , 0x0 , 0x0 , 0x0 , 0xd , 0x0 , 0x0 , 0x0 , 0x3 , 0x0 , 0x0 , 0x0 , 0x15,
332  0x0 , 0x4 , 0x0 , 0xe , 0x0 , 0x0 , 0x0 , 0x20, 0x0 , 0x0 , 0x0 , 0x1 , 0x0 ,
333  0x0 , 0x0 , 0x2b, 0x0 , 0x4 , 0x0 , 0xe , 0x0 , 0x0 , 0x0 , 0xf , 0x0 , 0x0 ,
334  0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x17, 0x0 , 0x4 , 0x0 , 0x10, 0x0 , 0x0 , 0x0 ,
335  0x6 , 0x0 , 0x0 , 0x0 , 0x3 , 0x0 , 0x0 , 0x0 , 0x20, 0x0 , 0x4 , 0x0 , 0x11,
336  0x0 , 0x0 , 0x0 , 0x1 , 0x0 , 0x0 , 0x0 , 0x10, 0x0 , 0x0 , 0x0 , 0x3b, 0x0 ,
337  0x4 , 0x0 , 0x11, 0x0 , 0x0 , 0x0 , 0x12, 0x0 , 0x0 , 0x0 , 0x1 , 0x0 , 0x0 ,
338  0x0 , 0x2b, 0x0 , 0x4 , 0x0 , 0x6 , 0x0 , 0x0 , 0x0 , 0x14, 0x0 , 0x0 , 0x0 ,
339  0x0 , 0x0 , 0x80, 0x3f, 0x20, 0x0 , 0x4 , 0x0 , 0x19, 0x0 , 0x0 , 0x0 , 0x3 ,
340  0x0 , 0x0 , 0x0 , 0x7 , 0x0 , 0x0 , 0x0 , 0x17, 0x0 , 0x4 , 0x0 , 0x1b, 0x0 ,
341  0x0 , 0x0 , 0x6 , 0x0 , 0x0 , 0x0 , 0x2 , 0x0 , 0x0 , 0x0 , 0x20, 0x0 , 0x4 ,
342  0x0 , 0x1c, 0x0 , 0x0 , 0x0 , 0x3 , 0x0 , 0x0 , 0x0 , 0x1b, 0x0 , 0x0 , 0x0 ,
343  0x3b, 0x0 , 0x4 , 0x0 , 0x1c, 0x0 , 0x0 , 0x0 , 0x1d, 0x0 , 0x0 , 0x0 , 0x3 ,
344  0x0 , 0x0 , 0x0 , 0x20, 0x0 , 0x4 , 0x0 , 0x1e, 0x0 , 0x0 , 0x0 , 0x1 , 0x0 ,
345  0x0 , 0x0 , 0x1b, 0x0 , 0x0 , 0x0 , 0x3b, 0x0 , 0x4 , 0x0 , 0x1e, 0x0 , 0x0 ,
346  0x0 , 0x1f, 0x0 , 0x0 , 0x0 , 0x1 , 0x0 , 0x0 , 0x0 , 0x36, 0x0 , 0x5 , 0x0 ,
347  0x2 , 0x0 , 0x0 , 0x0 , 0x4 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x3 ,
348  0x0 , 0x0 , 0x0 , 0xf8, 0x0 , 0x2 , 0x0 , 0x5 , 0x0 , 0x0 , 0x0 , 0x3d, 0x0 ,
349  0x4 , 0x0 , 0x10, 0x0 , 0x0 , 0x0 , 0x13, 0x0 , 0x0 , 0x0 , 0x12, 0x0 , 0x0 ,
350  0x0 , 0x51, 0x0 , 0x5 , 0x0 , 0x6 , 0x0 , 0x0 , 0x0 , 0x15, 0x0 , 0x0 , 0x0 ,
351  0x13, 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x51, 0x0 , 0x5 , 0x0 , 0x6 ,
352  0x0 , 0x0 , 0x0 , 0x16, 0x0 , 0x0 , 0x0 , 0x13, 0x0 , 0x0 , 0x0 , 0x1 , 0x0 ,
353  0x0 , 0x0 , 0x51, 0x0 , 0x5 , 0x0 , 0x6 , 0x0 , 0x0 , 0x0 , 0x17, 0x0 , 0x0 ,
354  0x0 , 0x13, 0x0 , 0x0 , 0x0 , 0x2 , 0x0 , 0x0 , 0x0 , 0x50, 0x0 , 0x7 , 0x0 ,
355  0x7 , 0x0 , 0x0 , 0x0 , 0x18, 0x0 , 0x0 , 0x0 , 0x15, 0x0 , 0x0 , 0x0 , 0x16,
356  0x0 , 0x0 , 0x0 , 0x17, 0x0 , 0x0 , 0x0 , 0x14, 0x0 , 0x0 , 0x0 , 0x41, 0x0 ,
357  0x5 , 0x0 , 0x19, 0x0 , 0x0 , 0x0 , 0x1a, 0x0 , 0x0 , 0x0 , 0xd , 0x0 , 0x0 ,
358  0x0 , 0xf , 0x0 , 0x0 , 0x0 , 0x3e, 0x0 , 0x3 , 0x0 , 0x1a, 0x0 , 0x0 , 0x0 ,
359  0x18, 0x0 , 0x0 , 0x0 , 0x3d, 0x0 , 0x4 , 0x0 , 0x1b, 0x0 , 0x0 , 0x0 , 0x20,
360  0x0 , 0x0 , 0x0 , 0x1f, 0x0 , 0x0 , 0x0 , 0x3e, 0x0 , 0x3 , 0x0 , 0x1d, 0x0 ,
361  0x0 , 0x0 , 0x20, 0x0 , 0x0 , 0x0 , 0xfd, 0x0 , 0x1 , 0x0 , 0x38, 0x0 , 0x1 ,
362  0x0 ,
363 };
364 const unsigned char TexturedFragmentShader[] = {
365  0x3 , 0x2 , 0x23, 0x7 , 0x0 , 0x0 , 0x1 , 0x0 , 0x1 , 0x0 , 0x8 , 0x0 , 0x19,
366  0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x11, 0x0 , 0x2 , 0x0 , 0x1 , 0x0 ,
367  0x0 , 0x0 , 0xb , 0x0 , 0x6 , 0x0 , 0x1 , 0x0 , 0x0 , 0x0 , 0x47, 0x4c, 0x53,
368  0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x0 , 0x0 , 0x0 , 0x0 ,
369  0xe , 0x0 , 0x3 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x1 , 0x0 , 0x0 , 0x0 , 0xf ,
370  0x0 , 0x7 , 0x0 , 0x4 , 0x0 , 0x0 , 0x0 , 0x4 , 0x0 , 0x0 , 0x0 , 0x6d, 0x61,
371  0x69, 0x6e, 0x0 , 0x0 , 0x0 , 0x0 , 0x9 , 0x0 , 0x0 , 0x0 , 0x16, 0x0 , 0x0 ,
372  0x0 , 0x10, 0x0 , 0x3 , 0x0 , 0x4 , 0x0 , 0x0 , 0x0 , 0x7 , 0x0 , 0x0 , 0x0 ,
373  0x3 , 0x0 , 0x3 , 0x0 , 0x2 , 0x0 , 0x0 , 0x0 , 0x90, 0x1 , 0x0 , 0x0 , 0x4 ,
374  0x0 , 0x9 , 0x0 , 0x47, 0x4c, 0x5f, 0x41, 0x52, 0x42, 0x5f, 0x73, 0x65, 0x70,
375  0x61, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x64, 0x65, 0x72, 0x5f,
376  0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x0 , 0x0 , 0x4 , 0x0 , 0x9 , 0x0 ,
377  0x47, 0x4c, 0x5f, 0x41, 0x52, 0x42, 0x5f, 0x73, 0x68, 0x61, 0x64, 0x69, 0x6e,
378  0x67, 0x5f, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x5f, 0x34, 0x32,
379  0x30, 0x70, 0x61, 0x63, 0x6b, 0x0 , 0x5 , 0x0 , 0x4 , 0x0 , 0x4 , 0x0 , 0x0 ,
380  0x0 , 0x6d, 0x61, 0x69, 0x6e, 0x0 , 0x0 , 0x0 , 0x0 , 0x5 , 0x0 , 0x5 , 0x0 ,
381  0x9 , 0x0 , 0x0 , 0x0 , 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x43, 0x6f, 0x6c,
382  0x6f, 0x72, 0x0 , 0x5 , 0x0 , 0x6 , 0x0 , 0xc , 0x0 , 0x0 , 0x0 , 0x63, 0x6f,
383  0x6c, 0x6f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x0 , 0x0 , 0x0 ,
384  0x0 , 0x5 , 0x0 , 0x6 , 0x0 , 0x10, 0x0 , 0x0 , 0x0 , 0x63, 0x6f, 0x6c, 0x6f,
385  0x72, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x0 , 0x0 , 0x0 , 0x0 , 0x5 ,
386  0x0 , 0x3 , 0x0 , 0x16, 0x0 , 0x0 , 0x0 , 0x75, 0x76, 0x0 , 0x0 , 0x47, 0x0 ,
387  0x4 , 0x0 , 0x9 , 0x0 , 0x0 , 0x0 , 0x1e, 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 ,
388  0x0 , 0x47, 0x0 , 0x4 , 0x0 , 0xc , 0x0 , 0x0 , 0x0 , 0x22, 0x0 , 0x0 , 0x0 ,
389  0x0 , 0x0 , 0x0 , 0x0 , 0x47, 0x0 , 0x4 , 0x0 , 0xc , 0x0 , 0x0 , 0x0 , 0x21,
390  0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x47, 0x0 , 0x4 , 0x0 , 0x10, 0x0 ,
391  0x0 , 0x0 , 0x22, 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x47, 0x0 , 0x4 ,
392  0x0 , 0x10, 0x0 , 0x0 , 0x0 , 0x21, 0x0 , 0x0 , 0x0 , 0x1 , 0x0 , 0x0 , 0x0 ,
393  0x47, 0x0 , 0x4 , 0x0 , 0x16, 0x0 , 0x0 , 0x0 , 0x1e, 0x0 , 0x0 , 0x0 , 0x0 ,
394  0x0 , 0x0 , 0x0 , 0x13, 0x0 , 0x2 , 0x0 , 0x2 , 0x0 , 0x0 , 0x0 , 0x21, 0x0 ,
395  0x3 , 0x0 , 0x3 , 0x0 , 0x0 , 0x0 , 0x2 , 0x0 , 0x0 , 0x0 , 0x16, 0x0 , 0x3 ,
396  0x0 , 0x6 , 0x0 , 0x0 , 0x0 , 0x20, 0x0 , 0x0 , 0x0 , 0x17, 0x0 , 0x4 , 0x0 ,
397  0x7 , 0x0 , 0x0 , 0x0 , 0x6 , 0x0 , 0x0 , 0x0 , 0x4 , 0x0 , 0x0 , 0x0 , 0x20,
398  0x0 , 0x4 , 0x0 , 0x8 , 0x0 , 0x0 , 0x0 , 0x3 , 0x0 , 0x0 , 0x0 , 0x7 , 0x0 ,
399  0x0 , 0x0 , 0x3b, 0x0 , 0x4 , 0x0 , 0x8 , 0x0 , 0x0 , 0x0 , 0x9 , 0x0 , 0x0 ,
400  0x0 , 0x3 , 0x0 , 0x0 , 0x0 , 0x19, 0x0 , 0x9 , 0x0 , 0xa , 0x0 , 0x0 , 0x0 ,
401  0x6 , 0x0 , 0x0 , 0x0 , 0x1 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 ,
402  0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x1 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 ,
403  0x0 , 0x0 , 0x20, 0x0 , 0x4 , 0x0 , 0xb , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 ,
404  0x0 , 0xa , 0x0 , 0x0 , 0x0 , 0x3b, 0x0 , 0x4 , 0x0 , 0xb , 0x0 , 0x0 , 0x0 ,
405  0xc , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x1a, 0x0 , 0x2 , 0x0 , 0xe ,
406  0x0 , 0x0 , 0x0 , 0x20, 0x0 , 0x4 , 0x0 , 0xf , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 ,
407  0x0 , 0x0 , 0xe , 0x0 , 0x0 , 0x0 , 0x3b, 0x0 , 0x4 , 0x0 , 0xf , 0x0 , 0x0 ,
408  0x0 , 0x10, 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x1b, 0x0 , 0x3 , 0x0 ,
409  0x12, 0x0 , 0x0 , 0x0 , 0xa , 0x0 , 0x0 , 0x0 , 0x17, 0x0 , 0x4 , 0x0 , 0x14,
410  0x0 , 0x0 , 0x0 , 0x6 , 0x0 , 0x0 , 0x0 , 0x2 , 0x0 , 0x0 , 0x0 , 0x20, 0x0 ,
411  0x4 , 0x0 , 0x15, 0x0 , 0x0 , 0x0 , 0x1 , 0x0 , 0x0 , 0x0 , 0x14, 0x0 , 0x0 ,
412  0x0 , 0x3b, 0x0 , 0x4 , 0x0 , 0x15, 0x0 , 0x0 , 0x0 , 0x16, 0x0 , 0x0 , 0x0 ,
413  0x1 , 0x0 , 0x0 , 0x0 , 0x36, 0x0 , 0x5 , 0x0 , 0x2 , 0x0 , 0x0 , 0x0 , 0x4 ,
414  0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x3 , 0x0 , 0x0 , 0x0 , 0xf8, 0x0 ,
415  0x2 , 0x0 , 0x5 , 0x0 , 0x0 , 0x0 , 0x3d, 0x0 , 0x4 , 0x0 , 0xa , 0x0 , 0x0 ,
416  0x0 , 0xd , 0x0 , 0x0 , 0x0 , 0xc , 0x0 , 0x0 , 0x0 , 0x3d, 0x0 , 0x4 , 0x0 ,
417  0xe , 0x0 , 0x0 , 0x0 , 0x11, 0x0 , 0x0 , 0x0 , 0x10, 0x0 , 0x0 , 0x0 , 0x56,
418  0x0 , 0x5 , 0x0 , 0x12, 0x0 , 0x0 , 0x0 , 0x13, 0x0 , 0x0 , 0x0 , 0xd , 0x0 ,
419  0x0 , 0x0 , 0x11, 0x0 , 0x0 , 0x0 , 0x3d, 0x0 , 0x4 , 0x0 , 0x14, 0x0 , 0x0 ,
420  0x0 , 0x17, 0x0 , 0x0 , 0x0 , 0x16, 0x0 , 0x0 , 0x0 , 0x57, 0x0 , 0x5 , 0x0 ,
421  0x7 , 0x0 , 0x0 , 0x0 , 0x18, 0x0 , 0x0 , 0x0 , 0x13, 0x0 , 0x0 , 0x0 , 0x17,
422  0x0 , 0x0 , 0x0 , 0x3e, 0x0 , 0x3 , 0x0 , 0x9 , 0x0 , 0x0 , 0x0 , 0x18, 0x0 ,
423  0x0 , 0x0 , 0xfd, 0x0 , 0x1 , 0x0 , 0x38, 0x0 , 0x1 , 0x0 ,
424 };
425 #endif
426 
427 #include "huffman.h"
428 #include "net.h"
429 #include "vector.h"
430 #include "matrix.h"
431 #include "quaternion.h"
432 #include "plane.h"
433 #include "types.h"
434 #include "md5_types.h"
435 #include "shadow_volume.h"
436 
437 
438 #include "hashtable.h"
439 #include "graph.h"
440 #include "md5.h"
441 #include "graphics.h"
442 #include "bspTypes.h"
443 #include "audio.h"
444 #include "frame.h"
445 
446 #include "edge.h"
447 #include "bsp.h"
448 #include "trigger.h"
449 #include "projectile.h"
450 #include "light.h"
451 #include "portal_camera.h"
452 #include "speaker.h"
453 #include "model.h"
454 #include "md5model.h"
455 #include "rigidbody.h"
456 #include "player.h"
457 
458 #include "sin_table.h"
459 #include "common.h"
460 #include "entity.h"
461 #include "shader.h"
462 #include "parse.h"
463 #include "menu.h"
464 #include "basegame.h"
465 #include "quake3.h"
466 #include "commando.h"
467 #include "terrain.h"
468 #include "isosphere.h"
469 #include "engine.h"
470 
471 
472 bool RayBoxSlab(vec3 &origin, vec3 &dir, vec3 &min, vec3 &max, float &distance);
473 int load_texture(Graphics &gfx, char *file_name, bool clamp, bool bgr, int anisotropic);
474 int load_texture_pk3(Graphics &gfx, char *file_name, char **pk3_list, int num_pk3, bool clamp, bool bgr, int anisotropic);
475 
476 #ifdef _WIN32
477 void GetScreenShot(HWND hwnd, unsigned int &luminance, bool luminance_only);
478 void get_resolution(int &width, int &height, int &bpp, int &refresh_rate);
479 void set_resolution(int width, int height, int bpp);
480 #endif
481 
482 #define DEBUG_NEW new (_NORMAL_BLOCK, __FILE__, __LINE__)
483 
484 
485 byte *tga_24to32(int width, int height, byte *pBits, bool bgr);
486 float abs32(float val);
487 int abs32(int val);
488 
489 
490 double fsin(double rad);
491 double fcos(double rad);
492 
493 int debugf(const char *format, ...);
494 
495 #define MY_PI 3.14159265359f
496 #define MY_HALF_PI 1.5707963268f
497 #define MAXLINE 4096
498 #define FBO_RESOLUTION 1024
499 #define SHADOWMAP_DEFAULT_RES FBO_RESOLUTION
500 
501 
502 //quake3 game units, 8 units = 1 foot, ~3.3ft per meter (each unit is 8 values large)
503 #define UNITS_TO_METERS (8.0f * 8.0f * 3.3f)
504 
505 
506 
507 #endif