4 #define _HAS_EXCEPTIONS 0 
   12 #define TICK_MS     8       // 125hz 
   24 #define GRAVITY_SCALE 1.4f 
   25 #define JUMPPAD_SCALE 0.015f 
   27 #define RIGID_IMPACT 0.5f 
   28 #define IMPACT_VELOCITY 4.0f 
   29 #define FALL_DAMAGE_VELOCITY 7.0f 
   31 #define MAX_TEXTURES 4 // multi texture limits (quake 3 shader stages) 
   42     #define APP_NAME "altEngine.exe" 
   43     #define APP_HASH "fac891919c0d02efdcf76b8c300ec63f" 
   45     #define APP_NAME "altEngine" 
   46     #define APP_HASH "fac891919c0d02efdcf76b8c300ec63f" 
   51     #define _CRTDBG_MAP_ALLOC 
   52     #define _USE_MATH_DEFINES 
   53     #define WIN32_EXTRA_LEAN 
   54     #define _CRT_SECURE_NO_DEPRECATE 
   56     #define WIN32_LEAN_AND_MEAN 
   57     #define WIN32_EXTRA_LEAN 
   65     #pragma comment(lib, "wsock32.lib") 
   67     typedef int socklen_t;
 
   68     typedef unsigned char byte;
 
   77     #include <D3Dcompiler.h> 
   82     #include <d3dx9math.h> 
   92     #define VK_USE_PLATFORM_WIN32_KHR 
   93     #include <vulkan/vulkan.h> 
  103     #define glFramebufferTexture glFramebufferTextureEXT 
  104     #define glFramebufferTexture glFramebufferTextureEXT 
  113         #define GLX_GLXEXT_PROTOTYPES 
  116             #include <OpenGL/gl3.h> 
  117             #include <OpenGL/glext.h> 
  129     #include <X11/Xlib.h> 
  130     #include <X11/Xutil.h> 
  133     #include <X11/Xatom.h> 
  134     #include <X11/keysym.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 
  147     #define SOCKET_ERROR    -1 
  148     #define INVALID_SOCKET  -1 
  152 #define MAX(x,y) (x) > (y) ? (x) : (y) 
  153 #define MIN(x,y) (x) < (y) ? (x) : (y) 
  161 #include <OpenAL/al.h> 
  162 #include <OpenAL/alc.h> 
  169     #include <EFX-Util.h> 
  170     #include <efx-creative.h> 
  179 #include <functional> 
  199 struct MemoryTypeInfo
 
  201     bool deviceLocal = 
false;
 
  202     bool hostVisible = 
false;
 
  203     bool hostCoherent = 
false;
 
  204     bool hostCached = 
false;
 
  205     bool lazilyAllocated = 
false;
 
  210         bool deviceLocal = 
false;
 
  217 struct SwapchainFormatColorSpace
 
  220     VkColorSpaceKHR colorSpace;
 
  224 enum MemoryProperties
 
  230 template <
typename T>
 
  231 T RoundToNextMultiple(
const T a, 
const T multiple)
 
  233     return ((a + multiple - 1) / multiple) * multiple;
 
  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 ,
 
  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 ,
 
  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 ,
 
  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);
 
  482 #define DEBUG_NEW new (_NORMAL_BLOCK, __FILE__, __LINE__) 
  486 float abs32(
float val);
 
  490 double fsin(
double rad);
 
  491 double fcos(
double rad);
 
  493 int debugf(
const char *format, ...);
 
  495 #define MY_PI 3.14159265359f 
  496 #define MY_HALF_PI 1.5707963268f 
  498 #define FBO_RESOLUTION 1024 
  499 #define SHADOWMAP_DEFAULT_RES FBO_RESOLUTION 
  503 #define UNITS_TO_METERS (8.0f * 8.0f * 3.3f)