diff --git a/asset/AssetManagementSystem.h b/asset/AssetManagementSystem.h index 46982aa..e5bb784 100644 --- a/asset/AssetManagementSystem.h +++ b/asset/AssetManagementSystem.h @@ -22,6 +22,7 @@ // @bug This means players might not be able to transition from one area to another?! struct AssetManagementSystem { + // @question is this even necessary or could we integrate this directly into the system here? HashMap hash_map; // The indices of asset_memory and asset_data_memory are always linked @@ -161,7 +162,10 @@ Asset* ams_reserve_asset(AssetManagementSystem* ams, const char* name, uint64 el // @performance Do we really want a double linked list. Are we really using this feature or is the free_index enough? if (free_asset > 0 && free_asset < ams->asset_memory.count - 1) { Asset* next = ams->first; - while (next->next->internal_id < asset->internal_id && next->internal_id < ams->asset_memory.count) { + while (next->next != NULL + && next->next->internal_id < asset->internal_id + && next->internal_id < ams->asset_memory.count + ) { next = next->next; } diff --git a/gpuapi/opengl/Opengl.h b/gpuapi/opengl/Opengl.h index 7b1df41..2691ff4 100644 --- a/gpuapi/opengl/Opengl.h +++ b/gpuapi/opengl/Opengl.h @@ -9,8 +9,6 @@ #ifndef TOS_GPUAPI_OPENGL_H #define TOS_GPUAPI_OPENGL_H -#include - // @todo remove some of the unused consts below // diff --git a/gpuapi/opengl/OpenglUtils.h b/gpuapi/opengl/OpenglUtils.h index 45dda7b..00ec9fd 100644 --- a/gpuapi/opengl/OpenglUtils.h +++ b/gpuapi/opengl/OpenglUtils.h @@ -161,8 +161,6 @@ GLuint shader_make(OpenGL* gl, GLenum type, const char *source, RingMemory* ring gl->glGetShaderiv(shader, GL_COMPILE_STATUS, &status); if (status == GL_FALSE) { - ASSERT_SIMPLE(false); - GLint length; gl->glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &length); @@ -170,13 +168,15 @@ GLuint shader_make(OpenGL* gl, GLenum type, const char *source, RingMemory* ring gl->glGetShaderInfoLog(shader, length, NULL, info); + ASSERT_SIMPLE(false); + // @todo log } return shader; } -GLuint shader_load(OpenGL* gl, GLenum type, const char *path, RingMemory* ring) { +GLuint shader_load(OpenGL* gl, GLenum type, const char* path, RingMemory* ring) { uint64 temp = ring->pos; FileBody file; @@ -191,11 +191,21 @@ GLuint shader_load(OpenGL* gl, GLenum type, const char *path, RingMemory* ring) return result; } -GLuint program_make(OpenGL* gl, GLuint shader1, GLuint shader2, RingMemory* ring) { +GLuint program_make( + OpenGL* gl, + GLuint vertex_shader, + GLuint fragment_shader, + GLint geometry_shader, + RingMemory* ring +) { GLuint program = gl->glCreateProgram(); - gl->glAttachShader(program, shader1); - gl->glAttachShader(program, shader2); + if (geometry_shader > -1) { + gl->glAttachShader(program, geometry_shader); + } + + gl->glAttachShader(program, vertex_shader); + gl->glAttachShader(program, fragment_shader); gl->glLinkProgram(program); GLint status; @@ -216,20 +226,40 @@ GLuint program_make(OpenGL* gl, GLuint shader1, GLuint shader2, RingMemory* ring } // @question really? - gl->glDetachShader(program, shader1); - gl->glDetachShader(program, shader2); + if (geometry_shader > -1) { + gl->glDetachShader(program, geometry_shader); + } + + gl->glDetachShader(program, vertex_shader); + gl->glDetachShader(program, fragment_shader); // @question really? - gl->glDeleteShader(shader1); - gl->glDeleteShader(shader2); + if (geometry_shader > -1) { + gl->glDeleteShader(geometry_shader); + } + + gl->glDeleteShader(vertex_shader); + gl->glDeleteShader(fragment_shader); return program; } -GLuint program_load(OpenGL* gl, const char *path1, const char *path2, RingMemory* ring) { - GLuint shader1 = shader_load(gl, GL_VERTEX_SHADER, path1, ring); - GLuint shader2 = shader_load(gl, GL_FRAGMENT_SHADER, path2, ring); - GLuint program = program_make(gl, shader1, shader2, ring); +GLuint program_load( + OpenGL* gl, + const char* path1, + const char* path2, + const char* path3, + RingMemory* ring +) { + GLuint vertex_shader = shader_load(gl, GL_VERTEX_SHADER, path1, ring); + GLuint fragment_shader = shader_load(gl, GL_FRAGMENT_SHADER, path2, ring); + + GLint geometry_shader = -1; + if (path3) { + geometry_shader = shader_load(gl, GL_GEOMETRY_SHADER, path3, ring); + } + + GLuint program = program_make(gl, vertex_shader, fragment_shader, geometry_shader, ring); return program; } @@ -446,6 +476,30 @@ uint32 gpuapi_buffer_generate(OpenGL* gl, int size, void* data) return vbo; } +inline +uint32 gpuapi_shaderbuffer_generate(OpenGL* gl, int size, void* data) +{ + uint32 sbo; + + gl->glGenBuffers(1, &sbo); + gl->glBindBuffer(GL_SHADER_STORAGE_BUFFER, sbo); + gl->glBufferData(GL_SHADER_STORAGE_BUFFER, size, data, GL_DYNAMIC_DRAW); + + return sbo; +} + +inline +uint32 gpuapi_uniformbuffer_generate(OpenGL* gl, int size, void* data) +{ + uint32 ubo; + + gl->glGenBuffers(1, &ubo); + gl->glBindBuffer(GL_UNIFORM_BUFFER, ubo); + gl->glBufferData(GL_UNIFORM_BUFFER, size, data, GL_STATIC_DRAW); + + return ubo; +} + inline uint32 gpuapi_buffer_element_generate(OpenGL* gl, int size, uint32 *data) { diff --git a/gpuapi/opengl/OpenglWin32.h b/gpuapi/opengl/OpenglWin32.h index 3a659fa..edb2883 100644 --- a/gpuapi/opengl/OpenglWin32.h +++ b/gpuapi/opengl/OpenglWin32.h @@ -13,6 +13,1033 @@ #include "../../platform/win32/Window.h" #include "../../stdlib/Types.h" +typedef unsigned int GLenum; +typedef unsigned char GLboolean; +typedef unsigned int GLbitfield; +typedef signed char GLbyte; +typedef short GLshort; +typedef int GLint; +typedef int GLsizei; +typedef unsigned char GLubyte; +typedef unsigned short GLushort; +typedef unsigned int GLuint; +typedef float GLfloat; +typedef float GLclampf; +typedef double GLdouble; +typedef double GLclampd; +typedef void GLvoid; + +#define GL_ACCUM 0x0100 +#define GL_LOAD 0x0101 +#define GL_RETURN 0x0102 +#define GL_MULT 0x0103 +#define GL_ADD 0x0104 + +#define GL_NEVER 0x0200 +#define GL_LESS 0x0201 +#define GL_EQUAL 0x0202 +#define GL_LEQUAL 0x0203 +#define GL_GREATER 0x0204 +#define GL_NOTEQUAL 0x0205 +#define GL_GEQUAL 0x0206 +#define GL_ALWAYS 0x0207 + +#define GL_CURRENT_BIT 0x00000001 +#define GL_POINT_BIT 0x00000002 +#define GL_LINE_BIT 0x00000004 +#define GL_POLYGON_BIT 0x00000008 +#define GL_POLYGON_STIPPLE_BIT 0x00000010 +#define GL_PIXEL_MODE_BIT 0x00000020 +#define GL_LIGHTING_BIT 0x00000040 +#define GL_FOG_BIT 0x00000080 +#define GL_DEPTH_BUFFER_BIT 0x00000100 +#define GL_ACCUM_BUFFER_BIT 0x00000200 +#define GL_STENCIL_BUFFER_BIT 0x00000400 +#define GL_VIEWPORT_BIT 0x00000800 +#define GL_TRANSFORM_BIT 0x00001000 +#define GL_ENABLE_BIT 0x00002000 +#define GL_COLOR_BUFFER_BIT 0x00004000 +#define GL_HINT_BIT 0x00008000 +#define GL_EVAL_BIT 0x00010000 +#define GL_LIST_BIT 0x00020000 +#define GL_TEXTURE_BIT 0x00040000 +#define GL_SCISSOR_BIT 0x00080000 +#define GL_ALL_ATTRIB_BITS 0x000fffff + +#define GL_POINTS 0x0000 +#define GL_LINES 0x0001 +#define GL_LINE_LOOP 0x0002 +#define GL_LINE_STRIP 0x0003 +#define GL_TRIANGLES 0x0004 +#define GL_TRIANGLE_STRIP 0x0005 +#define GL_TRIANGLE_FAN 0x0006 +#define GL_QUADS 0x0007 +#define GL_QUAD_STRIP 0x0008 +#define GL_POLYGON 0x0009 + +#define GL_ZERO 0 +#define GL_ONE 1 +#define GL_SRC_COLOR 0x0300 +#define GL_ONE_MINUS_SRC_COLOR 0x0301 +#define GL_SRC_ALPHA 0x0302 +#define GL_ONE_MINUS_SRC_ALPHA 0x0303 +#define GL_DST_ALPHA 0x0304 +#define GL_ONE_MINUS_DST_ALPHA 0x0305 + +#define GL_DST_COLOR 0x0306 +#define GL_ONE_MINUS_DST_COLOR 0x0307 +#define GL_SRC_ALPHA_SATURATE 0x0308 + +#define GL_TRUE 1 +#define GL_FALSE 0 + +#define GL_CLIP_PLANE0 0x3000 +#define GL_CLIP_PLANE1 0x3001 +#define GL_CLIP_PLANE2 0x3002 +#define GL_CLIP_PLANE3 0x3003 +#define GL_CLIP_PLANE4 0x3004 +#define GL_CLIP_PLANE5 0x3005 + +#define GL_BYTE 0x1400 +#define GL_UNSIGNED_BYTE 0x1401 +#define GL_SHORT 0x1402 +#define GL_UNSIGNED_SHORT 0x1403 +#define GL_INT 0x1404 +#define GL_UNSIGNED_INT 0x1405 +#define GL_FLOAT 0x1406 +#define GL_2_BYTES 0x1407 +#define GL_3_BYTES 0x1408 +#define GL_4_BYTES 0x1409 +#define GL_DOUBLE 0x140A + +#define GL_NONE 0 +#define GL_FRONT_LEFT 0x0400 +#define GL_FRONT_RIGHT 0x0401 +#define GL_BACK_LEFT 0x0402 +#define GL_BACK_RIGHT 0x0403 +#define GL_FRONT 0x0404 +#define GL_BACK 0x0405 +#define GL_LEFT 0x0406 +#define GL_RIGHT 0x0407 +#define GL_FRONT_AND_BACK 0x0408 +#define GL_AUX0 0x0409 +#define GL_AUX1 0x040A +#define GL_AUX2 0x040B +#define GL_AUX3 0x040C + +#define GL_NO_ERROR 0 +#define GL_INVALID_ENUM 0x0500 +#define GL_INVALID_VALUE 0x0501 +#define GL_INVALID_OPERATION 0x0502 +#define GL_STACK_OVERFLOW 0x0503 +#define GL_STACK_UNDERFLOW 0x0504 +#define GL_OUT_OF_MEMORY 0x0505 + +#define GL_2D 0x0600 +#define GL_3D 0x0601 +#define GL_3D_COLOR 0x0602 +#define GL_3D_COLOR_TEXTURE 0x0603 +#define GL_4D_COLOR_TEXTURE 0x0604 + +#define GL_PASS_THROUGH_TOKEN 0x0700 +#define GL_POINT_TOKEN 0x0701 +#define GL_LINE_TOKEN 0x0702 +#define GL_POLYGON_TOKEN 0x0703 +#define GL_BITMAP_TOKEN 0x0704 +#define GL_DRAW_PIXEL_TOKEN 0x0705 +#define GL_COPY_PIXEL_TOKEN 0x0706 +#define GL_LINE_RESET_TOKEN 0x0707 + +#define GL_EXP 0x0800 +#define GL_EXP2 0x0801 + +#define GL_CW 0x0900 +#define GL_CCW 0x0901 + +#define GL_COEFF 0x0A00 +#define GL_ORDER 0x0A01 +#define GL_DOMAIN 0x0A02 + +#define GL_CURRENT_COLOR 0x0B00 +#define GL_CURRENT_INDEX 0x0B01 +#define GL_CURRENT_NORMAL 0x0B02 +#define GL_CURRENT_TEXTURE_COORDS 0x0B03 +#define GL_CURRENT_RASTER_COLOR 0x0B04 +#define GL_CURRENT_RASTER_INDEX 0x0B05 +#define GL_CURRENT_RASTER_TEXTURE_COORDS 0x0B06 +#define GL_CURRENT_RASTER_POSITION 0x0B07 +#define GL_CURRENT_RASTER_POSITION_VALID 0x0B08 +#define GL_CURRENT_RASTER_DISTANCE 0x0B09 +#define GL_POINT_SMOOTH 0x0B10 +#define GL_POINT_SIZE 0x0B11 +#define GL_POINT_SIZE_RANGE 0x0B12 +#define GL_POINT_SIZE_GRANULARITY 0x0B13 +#define GL_LINE_SMOOTH 0x0B20 +#define GL_LINE_WIDTH 0x0B21 +#define GL_LINE_WIDTH_RANGE 0x0B22 +#define GL_LINE_WIDTH_GRANULARITY 0x0B23 +#define GL_LINE_STIPPLE 0x0B24 +#define GL_LINE_STIPPLE_PATTERN 0x0B25 +#define GL_LINE_STIPPLE_REPEAT 0x0B26 +#define GL_LIST_MODE 0x0B30 +#define GL_MAX_LIST_NESTING 0x0B31 +#define GL_LIST_BASE 0x0B32 +#define GL_LIST_INDEX 0x0B33 +#define GL_POLYGON_MODE 0x0B40 +#define GL_POLYGON_SMOOTH 0x0B41 +#define GL_POLYGON_STIPPLE 0x0B42 +#define GL_EDGE_FLAG 0x0B43 +#define GL_CULL_FACE 0x0B44 +#define GL_CULL_FACE_MODE 0x0B45 +#define GL_FRONT_FACE 0x0B46 +#define GL_LIGHTING 0x0B50 +#define GL_LIGHT_MODEL_LOCAL_VIEWER 0x0B51 +#define GL_LIGHT_MODEL_TWO_SIDE 0x0B52 +#define GL_LIGHT_MODEL_AMBIENT 0x0B53 +#define GL_SHADE_MODEL 0x0B54 +#define GL_COLOR_MATERIAL_FACE 0x0B55 +#define GL_COLOR_MATERIAL_PARAMETER 0x0B56 +#define GL_COLOR_MATERIAL 0x0B57 +#define GL_FOG 0x0B60 +#define GL_FOG_INDEX 0x0B61 +#define GL_FOG_DENSITY 0x0B62 +#define GL_FOG_START 0x0B63 +#define GL_FOG_END 0x0B64 +#define GL_FOG_MODE 0x0B65 +#define GL_FOG_COLOR 0x0B66 +#define GL_DEPTH_RANGE 0x0B70 +#define GL_DEPTH_TEST 0x0B71 +#define GL_DEPTH_WRITEMASK 0x0B72 +#define GL_DEPTH_CLEAR_VALUE 0x0B73 +#define GL_DEPTH_FUNC 0x0B74 +#define GL_ACCUM_CLEAR_VALUE 0x0B80 +#define GL_STENCIL_TEST 0x0B90 +#define GL_STENCIL_CLEAR_VALUE 0x0B91 +#define GL_STENCIL_FUNC 0x0B92 +#define GL_STENCIL_VALUE_MASK 0x0B93 +#define GL_STENCIL_FAIL 0x0B94 +#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 +#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 +#define GL_STENCIL_REF 0x0B97 +#define GL_STENCIL_WRITEMASK 0x0B98 +#define GL_MATRIX_MODE 0x0BA0 +#define GL_NORMALIZE 0x0BA1 +#define GL_VIEWPORT 0x0BA2 +#define GL_MODELVIEW_STACK_DEPTH 0x0BA3 +#define GL_PROJECTION_STACK_DEPTH 0x0BA4 +#define GL_TEXTURE_STACK_DEPTH 0x0BA5 +#define GL_MODELVIEW_MATRIX 0x0BA6 +#define GL_PROJECTION_MATRIX 0x0BA7 +#define GL_TEXTURE_MATRIX 0x0BA8 +#define GL_ATTRIB_STACK_DEPTH 0x0BB0 +#define GL_CLIENT_ATTRIB_STACK_DEPTH 0x0BB1 +#define GL_ALPHA_TEST 0x0BC0 +#define GL_ALPHA_TEST_FUNC 0x0BC1 +#define GL_ALPHA_TEST_REF 0x0BC2 +#define GL_DITHER 0x0BD0 +#define GL_BLEND_DST 0x0BE0 +#define GL_BLEND_SRC 0x0BE1 +#define GL_BLEND 0x0BE2 +#define GL_LOGIC_OP_MODE 0x0BF0 +#define GL_INDEX_LOGIC_OP 0x0BF1 +#define GL_COLOR_LOGIC_OP 0x0BF2 +#define GL_AUX_BUFFERS 0x0C00 +#define GL_DRAW_BUFFER 0x0C01 +#define GL_READ_BUFFER 0x0C02 +#define GL_SCISSOR_BOX 0x0C10 +#define GL_SCISSOR_TEST 0x0C11 +#define GL_INDEX_CLEAR_VALUE 0x0C20 +#define GL_INDEX_WRITEMASK 0x0C21 +#define GL_COLOR_CLEAR_VALUE 0x0C22 +#define GL_COLOR_WRITEMASK 0x0C23 +#define GL_INDEX_MODE 0x0C30 +#define GL_RGBA_MODE 0x0C31 +#define GL_DOUBLEBUFFER 0x0C32 +#define GL_STEREO 0x0C33 +#define GL_RENDER_MODE 0x0C40 +#define GL_PERSPECTIVE_CORRECTION_HINT 0x0C50 +#define GL_POINT_SMOOTH_HINT 0x0C51 +#define GL_LINE_SMOOTH_HINT 0x0C52 +#define GL_POLYGON_SMOOTH_HINT 0x0C53 +#define GL_FOG_HINT 0x0C54 +#define GL_TEXTURE_GEN_S 0x0C60 +#define GL_TEXTURE_GEN_T 0x0C61 +#define GL_TEXTURE_GEN_R 0x0C62 +#define GL_TEXTURE_GEN_Q 0x0C63 +#define GL_PIXEL_MAP_I_TO_I 0x0C70 +#define GL_PIXEL_MAP_S_TO_S 0x0C71 +#define GL_PIXEL_MAP_I_TO_R 0x0C72 +#define GL_PIXEL_MAP_I_TO_G 0x0C73 +#define GL_PIXEL_MAP_I_TO_B 0x0C74 +#define GL_PIXEL_MAP_I_TO_A 0x0C75 +#define GL_PIXEL_MAP_R_TO_R 0x0C76 +#define GL_PIXEL_MAP_G_TO_G 0x0C77 +#define GL_PIXEL_MAP_B_TO_B 0x0C78 +#define GL_PIXEL_MAP_A_TO_A 0x0C79 +#define GL_PIXEL_MAP_I_TO_I_SIZE 0x0CB0 +#define GL_PIXEL_MAP_S_TO_S_SIZE 0x0CB1 +#define GL_PIXEL_MAP_I_TO_R_SIZE 0x0CB2 +#define GL_PIXEL_MAP_I_TO_G_SIZE 0x0CB3 +#define GL_PIXEL_MAP_I_TO_B_SIZE 0x0CB4 +#define GL_PIXEL_MAP_I_TO_A_SIZE 0x0CB5 +#define GL_PIXEL_MAP_R_TO_R_SIZE 0x0CB6 +#define GL_PIXEL_MAP_G_TO_G_SIZE 0x0CB7 +#define GL_PIXEL_MAP_B_TO_B_SIZE 0x0CB8 +#define GL_PIXEL_MAP_A_TO_A_SIZE 0x0CB9 +#define GL_UNPACK_SWAP_BYTES 0x0CF0 +#define GL_UNPACK_LSB_FIRST 0x0CF1 +#define GL_UNPACK_ROW_LENGTH 0x0CF2 +#define GL_UNPACK_SKIP_ROWS 0x0CF3 +#define GL_UNPACK_SKIP_PIXELS 0x0CF4 +#define GL_UNPACK_ALIGNMENT 0x0CF5 +#define GL_PACK_SWAP_BYTES 0x0D00 +#define GL_PACK_LSB_FIRST 0x0D01 +#define GL_PACK_ROW_LENGTH 0x0D02 +#define GL_PACK_SKIP_ROWS 0x0D03 +#define GL_PACK_SKIP_PIXELS 0x0D04 +#define GL_PACK_ALIGNMENT 0x0D05 +#define GL_MAP_COLOR 0x0D10 +#define GL_MAP_STENCIL 0x0D11 +#define GL_INDEX_SHIFT 0x0D12 +#define GL_INDEX_OFFSET 0x0D13 +#define GL_RED_SCALE 0x0D14 +#define GL_RED_BIAS 0x0D15 +#define GL_ZOOM_X 0x0D16 +#define GL_ZOOM_Y 0x0D17 +#define GL_GREEN_SCALE 0x0D18 +#define GL_GREEN_BIAS 0x0D19 +#define GL_BLUE_SCALE 0x0D1A +#define GL_BLUE_BIAS 0x0D1B +#define GL_ALPHA_SCALE 0x0D1C +#define GL_ALPHA_BIAS 0x0D1D +#define GL_DEPTH_SCALE 0x0D1E +#define GL_DEPTH_BIAS 0x0D1F +#define GL_MAX_EVAL_ORDER 0x0D30 +#define GL_MAX_LIGHTS 0x0D31 +#define GL_MAX_CLIP_PLANES 0x0D32 +#define GL_MAX_TEXTURE_SIZE 0x0D33 +#define GL_MAX_PIXEL_MAP_TABLE 0x0D34 +#define GL_MAX_ATTRIB_STACK_DEPTH 0x0D35 +#define GL_MAX_MODELVIEW_STACK_DEPTH 0x0D36 +#define GL_MAX_NAME_STACK_DEPTH 0x0D37 +#define GL_MAX_PROJECTION_STACK_DEPTH 0x0D38 +#define GL_MAX_TEXTURE_STACK_DEPTH 0x0D39 +#define GL_MAX_VIEWPORT_DIMS 0x0D3A +#define GL_MAX_CLIENT_ATTRIB_STACK_DEPTH 0x0D3B +#define GL_SUBPIXEL_BITS 0x0D50 +#define GL_INDEX_BITS 0x0D51 +#define GL_RED_BITS 0x0D52 +#define GL_GREEN_BITS 0x0D53 +#define GL_BLUE_BITS 0x0D54 +#define GL_ALPHA_BITS 0x0D55 +#define GL_DEPTH_BITS 0x0D56 +#define GL_STENCIL_BITS 0x0D57 +#define GL_ACCUM_RED_BITS 0x0D58 +#define GL_ACCUM_GREEN_BITS 0x0D59 +#define GL_ACCUM_BLUE_BITS 0x0D5A +#define GL_ACCUM_ALPHA_BITS 0x0D5B +#define GL_NAME_STACK_DEPTH 0x0D70 +#define GL_AUTO_NORMAL 0x0D80 +#define GL_MAP1_COLOR_4 0x0D90 +#define GL_MAP1_INDEX 0x0D91 +#define GL_MAP1_NORMAL 0x0D92 +#define GL_MAP1_TEXTURE_COORD_1 0x0D93 +#define GL_MAP1_TEXTURE_COORD_2 0x0D94 +#define GL_MAP1_TEXTURE_COORD_3 0x0D95 +#define GL_MAP1_TEXTURE_COORD_4 0x0D96 +#define GL_MAP1_VERTEX_3 0x0D97 +#define GL_MAP1_VERTEX_4 0x0D98 +#define GL_MAP2_COLOR_4 0x0DB0 +#define GL_MAP2_INDEX 0x0DB1 +#define GL_MAP2_NORMAL 0x0DB2 +#define GL_MAP2_TEXTURE_COORD_1 0x0DB3 +#define GL_MAP2_TEXTURE_COORD_2 0x0DB4 +#define GL_MAP2_TEXTURE_COORD_3 0x0DB5 +#define GL_MAP2_TEXTURE_COORD_4 0x0DB6 +#define GL_MAP2_VERTEX_3 0x0DB7 +#define GL_MAP2_VERTEX_4 0x0DB8 +#define GL_MAP1_GRID_DOMAIN 0x0DD0 +#define GL_MAP1_GRID_SEGMENTS 0x0DD1 +#define GL_MAP2_GRID_DOMAIN 0x0DD2 +#define GL_MAP2_GRID_SEGMENTS 0x0DD3 +#define GL_TEXTURE_1D 0x0DE0 +#define GL_TEXTURE_2D 0x0DE1 +#define GL_FEEDBACK_BUFFER_POINTER 0x0DF0 +#define GL_FEEDBACK_BUFFER_SIZE 0x0DF1 +#define GL_FEEDBACK_BUFFER_TYPE 0x0DF2 +#define GL_SELECTION_BUFFER_POINTER 0x0DF3 +#define GL_SELECTION_BUFFER_SIZE 0x0DF4 + +#define GL_TEXTURE_WIDTH 0x1000 +#define GL_TEXTURE_HEIGHT 0x1001 +#define GL_TEXTURE_INTERNAL_FORMAT 0x1003 +#define GL_TEXTURE_BORDER_COLOR 0x1004 +#define GL_TEXTURE_BORDER 0x1005 + +#define GL_DONT_CARE 0x1100 +#define GL_FASTEST 0x1101 +#define GL_NICEST 0x1102 + +#define GL_LIGHT0 0x4000 +#define GL_LIGHT1 0x4001 +#define GL_LIGHT2 0x4002 +#define GL_LIGHT3 0x4003 +#define GL_LIGHT4 0x4004 +#define GL_LIGHT5 0x4005 +#define GL_LIGHT6 0x4006 +#define GL_LIGHT7 0x4007 + +#define GL_AMBIENT 0x1200 +#define GL_DIFFUSE 0x1201 +#define GL_SPECULAR 0x1202 +#define GL_POSITION 0x1203 +#define GL_SPOT_DIRECTION 0x1204 +#define GL_SPOT_EXPONENT 0x1205 +#define GL_SPOT_CUTOFF 0x1206 +#define GL_CONSTANT_ATTENUATION 0x1207 +#define GL_LINEAR_ATTENUATION 0x1208 +#define GL_QUADRATIC_ATTENUATION 0x1209 + +#define GL_COMPILE 0x1300 +#define GL_COMPILE_AND_EXECUTE 0x1301 + +#define GL_CLEAR 0x1500 +#define GL_AND 0x1501 +#define GL_AND_REVERSE 0x1502 +#define GL_COPY 0x1503 +#define GL_AND_INVERTED 0x1504 +#define GL_NOOP 0x1505 +#define GL_XOR 0x1506 +#define GL_OR 0x1507 +#define GL_NOR 0x1508 +#define GL_EQUIV 0x1509 +#define GL_INVERT 0x150A +#define GL_OR_REVERSE 0x150B +#define GL_COPY_INVERTED 0x150C +#define GL_OR_INVERTED 0x150D +#define GL_NAND 0x150E +#define GL_SET 0x150F + +#define GL_EMISSION 0x1600 +#define GL_SHININESS 0x1601 +#define GL_AMBIENT_AND_DIFFUSE 0x1602 +#define GL_COLOR_INDEXES 0x1603 + +#define GL_MODELVIEW 0x1700 +#define GL_PROJECTION 0x1701 +#define GL_TEXTURE 0x1702 + +#define GL_COLOR 0x1800 +#define GL_DEPTH 0x1801 +#define GL_STENCIL 0x1802 + +#define GL_COLOR_INDEX 0x1900 +#define GL_STENCIL_INDEX 0x1901 +#define GL_DEPTH_COMPONENT 0x1902 +#define GL_RED 0x1903 +#define GL_GREEN 0x1904 +#define GL_BLUE 0x1905 +#define GL_ALPHA 0x1906 +#define GL_RGB 0x1907 +#define GL_RGBA 0x1908 +#define GL_LUMINANCE 0x1909 +#define GL_LUMINANCE_ALPHA 0x190A + +#define GL_BITMAP 0x1A00 + +#define GL_POINT 0x1B00 +#define GL_LINE 0x1B01 +#define GL_FILL 0x1B02 + +#define GL_RENDER 0x1C00 +#define GL_FEEDBACK 0x1C01 +#define GL_SELECT 0x1C02 + +#define GL_FLAT 0x1D00 +#define GL_SMOOTH 0x1D01 + +#define GL_KEEP 0x1E00 +#define GL_REPLACE 0x1E01 +#define GL_INCR 0x1E02 +#define GL_DECR 0x1E03 + +#define GL_VENDOR 0x1F00 +#define GL_RENDERER 0x1F01 +#define GL_VERSION 0x1F02 +#define GL_EXTENSIONS 0x1F03 + +#define GL_S 0x2000 +#define GL_T 0x2001 +#define GL_R 0x2002 +#define GL_Q 0x2003 + +#define GL_MODULATE 0x2100 +#define GL_DECAL 0x2101 + +#define GL_TEXTURE_ENV_MODE 0x2200 +#define GL_TEXTURE_ENV_COLOR 0x2201 + +#define GL_TEXTURE_ENV 0x2300 + +#define GL_EYE_LINEAR 0x2400 +#define GL_OBJECT_LINEAR 0x2401 +#define GL_SPHERE_MAP 0x2402 + +#define GL_TEXTURE_GEN_MODE 0x2500 +#define GL_OBJECT_PLANE 0x2501 +#define GL_EYE_PLANE 0x2502 + +#define GL_NEAREST 0x2600 +#define GL_LINEAR 0x2601 + +#define GL_NEAREST_MIPMAP_NEAREST 0x2700 +#define GL_LINEAR_MIPMAP_NEAREST 0x2701 +#define GL_NEAREST_MIPMAP_LINEAR 0x2702 +#define GL_LINEAR_MIPMAP_LINEAR 0x2703 + +#define GL_TEXTURE_MAG_FILTER 0x2800 +#define GL_TEXTURE_MIN_FILTER 0x2801 +#define GL_TEXTURE_WRAP_S 0x2802 +#define GL_TEXTURE_WRAP_T 0x2803 + +#define GL_CLAMP 0x2900 +#define GL_REPEAT 0x2901 + +#define GL_CLIENT_PIXEL_STORE_BIT 0x00000001 +#define GL_CLIENT_VERTEX_ARRAY_BIT 0x00000002 +#define GL_CLIENT_ALL_ATTRIB_BITS 0xffffffff + +#define GL_POLYGON_OFFSET_FACTOR 0x8038 +#define GL_POLYGON_OFFSET_UNITS 0x2A00 +#define GL_POLYGON_OFFSET_POINT 0x2A01 +#define GL_POLYGON_OFFSET_LINE 0x2A02 +#define GL_POLYGON_OFFSET_FILL 0x8037 + +#define GL_ALPHA4 0x803B +#define GL_ALPHA8 0x803C +#define GL_ALPHA12 0x803D +#define GL_ALPHA16 0x803E +#define GL_LUMINANCE4 0x803F +#define GL_LUMINANCE8 0x8040 +#define GL_LUMINANCE12 0x8041 +#define GL_LUMINANCE16 0x8042 +#define GL_LUMINANCE4_ALPHA4 0x8043 +#define GL_LUMINANCE6_ALPHA2 0x8044 +#define GL_LUMINANCE8_ALPHA8 0x8045 +#define GL_LUMINANCE12_ALPHA4 0x8046 +#define GL_LUMINANCE12_ALPHA12 0x8047 +#define GL_LUMINANCE16_ALPHA16 0x8048 +#define GL_INTENSITY 0x8049 +#define GL_INTENSITY4 0x804A +#define GL_INTENSITY8 0x804B +#define GL_INTENSITY12 0x804C +#define GL_INTENSITY16 0x804D +#define GL_R3_G3_B2 0x2A10 +#define GL_RGB4 0x804F +#define GL_RGB5 0x8050 +#define GL_RGB8 0x8051 +#define GL_RGB10 0x8052 +#define GL_RGB12 0x8053 +#define GL_RGB16 0x8054 +#define GL_RGBA2 0x8055 +#define GL_RGBA4 0x8056 +#define GL_RGB5_A1 0x8057 +#define GL_RGBA8 0x8058 +#define GL_RGB10_A2 0x8059 +#define GL_RGBA12 0x805A +#define GL_RGBA16 0x805B +#define GL_TEXTURE_RED_SIZE 0x805C +#define GL_TEXTURE_GREEN_SIZE 0x805D +#define GL_TEXTURE_BLUE_SIZE 0x805E +#define GL_TEXTURE_ALPHA_SIZE 0x805F +#define GL_TEXTURE_LUMINANCE_SIZE 0x8060 +#define GL_TEXTURE_INTENSITY_SIZE 0x8061 +#define GL_PROXY_TEXTURE_1D 0x8063 +#define GL_PROXY_TEXTURE_2D 0x8064 + +#define GL_TEXTURE_PRIORITY 0x8066 +#define GL_TEXTURE_RESIDENT 0x8067 +#define GL_TEXTURE_BINDING_1D 0x8068 +#define GL_TEXTURE_BINDING_2D 0x8069 + +#define GL_VERTEX_ARRAY 0x8074 +#define GL_NORMAL_ARRAY 0x8075 +#define GL_COLOR_ARRAY 0x8076 +#define GL_INDEX_ARRAY 0x8077 +#define GL_TEXTURE_COORD_ARRAY 0x8078 +#define GL_EDGE_FLAG_ARRAY 0x8079 +#define GL_VERTEX_ARRAY_SIZE 0x807A +#define GL_VERTEX_ARRAY_TYPE 0x807B +#define GL_VERTEX_ARRAY_STRIDE 0x807C +#define GL_NORMAL_ARRAY_TYPE 0x807E +#define GL_NORMAL_ARRAY_STRIDE 0x807F +#define GL_COLOR_ARRAY_SIZE 0x8081 +#define GL_COLOR_ARRAY_TYPE 0x8082 +#define GL_COLOR_ARRAY_STRIDE 0x8083 +#define GL_INDEX_ARRAY_TYPE 0x8085 +#define GL_INDEX_ARRAY_STRIDE 0x8086 +#define GL_TEXTURE_COORD_ARRAY_SIZE 0x8088 +#define GL_TEXTURE_COORD_ARRAY_TYPE 0x8089 +#define GL_TEXTURE_COORD_ARRAY_STRIDE 0x808A +#define GL_EDGE_FLAG_ARRAY_STRIDE 0x808C +#define GL_VERTEX_ARRAY_POINTER 0x808E +#define GL_NORMAL_ARRAY_POINTER 0x808F +#define GL_COLOR_ARRAY_POINTER 0x8090 +#define GL_INDEX_ARRAY_POINTER 0x8091 +#define GL_TEXTURE_COORD_ARRAY_POINTER 0x8092 +#define GL_EDGE_FLAG_ARRAY_POINTER 0x8093 +#define GL_V2F 0x2A20 +#define GL_V3F 0x2A21 +#define GL_C4UB_V2F 0x2A22 +#define GL_C4UB_V3F 0x2A23 +#define GL_C3F_V3F 0x2A24 +#define GL_N3F_V3F 0x2A25 +#define GL_C4F_N3F_V3F 0x2A26 +#define GL_T2F_V3F 0x2A27 +#define GL_T4F_V4F 0x2A28 +#define GL_T2F_C4UB_V3F 0x2A29 +#define GL_T2F_C3F_V3F 0x2A2A +#define GL_T2F_N3F_V3F 0x2A2B +#define GL_T2F_C4F_N3F_V3F 0x2A2C +#define GL_T4F_C4F_N3F_V4F 0x2A2D + +#define GL_EXT_vertex_array 1 +#define GL_EXT_bgra 1 +#define GL_EXT_paletted_texture 1 +#define GL_WIN_swap_hint 1 +#define GL_WIN_draw_range_elements 1 + +#define GL_VERTEX_ARRAY_EXT 0x8074 +#define GL_NORMAL_ARRAY_EXT 0x8075 +#define GL_COLOR_ARRAY_EXT 0x8076 +#define GL_INDEX_ARRAY_EXT 0x8077 +#define GL_TEXTURE_COORD_ARRAY_EXT 0x8078 +#define GL_EDGE_FLAG_ARRAY_EXT 0x8079 +#define GL_VERTEX_ARRAY_SIZE_EXT 0x807A +#define GL_VERTEX_ARRAY_TYPE_EXT 0x807B +#define GL_VERTEX_ARRAY_STRIDE_EXT 0x807C +#define GL_VERTEX_ARRAY_COUNT_EXT 0x807D +#define GL_NORMAL_ARRAY_TYPE_EXT 0x807E +#define GL_NORMAL_ARRAY_STRIDE_EXT 0x807F +#define GL_NORMAL_ARRAY_COUNT_EXT 0x8080 +#define GL_COLOR_ARRAY_SIZE_EXT 0x8081 +#define GL_COLOR_ARRAY_TYPE_EXT 0x8082 +#define GL_COLOR_ARRAY_STRIDE_EXT 0x8083 +#define GL_COLOR_ARRAY_COUNT_EXT 0x8084 +#define GL_INDEX_ARRAY_TYPE_EXT 0x8085 +#define GL_INDEX_ARRAY_STRIDE_EXT 0x8086 +#define GL_INDEX_ARRAY_COUNT_EXT 0x8087 +#define GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088 +#define GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089 +#define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A +#define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B +#define GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C +#define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D +#define GL_VERTEX_ARRAY_POINTER_EXT 0x808E +#define GL_NORMAL_ARRAY_POINTER_EXT 0x808F +#define GL_COLOR_ARRAY_POINTER_EXT 0x8090 +#define GL_INDEX_ARRAY_POINTER_EXT 0x8091 +#define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092 +#define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093 +#define GL_DOUBLE_EXT GL_DOUBLE + +#define GL_BGR_EXT 0x80E0 +#define GL_BGRA_EXT 0x80E1 + +#define GL_COLOR_TABLE_FORMAT_EXT 0x80D8 +#define GL_COLOR_TABLE_WIDTH_EXT 0x80D9 +#define GL_COLOR_TABLE_RED_SIZE_EXT 0x80DA +#define GL_COLOR_TABLE_GREEN_SIZE_EXT 0x80DB +#define GL_COLOR_TABLE_BLUE_SIZE_EXT 0x80DC +#define GL_COLOR_TABLE_ALPHA_SIZE_EXT 0x80DD +#define GL_COLOR_TABLE_LUMINANCE_SIZE_EXT 0x80DE +#define GL_COLOR_TABLE_INTENSITY_SIZE_EXT 0x80DF + +#define GL_COLOR_INDEX1_EXT 0x80E2 +#define GL_COLOR_INDEX2_EXT 0x80E3 +#define GL_COLOR_INDEX4_EXT 0x80E4 +#define GL_COLOR_INDEX8_EXT 0x80E5 +#define GL_COLOR_INDEX12_EXT 0x80E6 +#define GL_COLOR_INDEX16_EXT 0x80E7 + +#define GL_MAX_ELEMENTS_VERTICES_WIN 0x80E8 +#define GL_MAX_ELEMENTS_INDICES_WIN 0x80E9 + +#define GL_PHONG_WIN 0x80EA +#define GL_PHONG_HINT_WIN 0x80EB + +#define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC + +#define GL_LOGIC_OP GL_INDEX_LOGIC_OP +#define GL_TEXTURE_COMPONENTS GL_TEXTURE_INTERNAL_FORMAT + +extern "C" { + WINGDIAPI void APIENTRY glAccum (GLenum op, GLfloat value); + WINGDIAPI void APIENTRY glAlphaFunc (GLenum func, GLclampf ref); + WINGDIAPI GLboolean APIENTRY glAreTexturesResident (GLsizei n, const GLuint *textures, GLboolean *residences); + WINGDIAPI void APIENTRY glArrayElement (GLint i); + WINGDIAPI void APIENTRY glBegin (GLenum mode); + WINGDIAPI void APIENTRY glBindTexture (GLenum target, GLuint texture); + WINGDIAPI void APIENTRY glBitmap (GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap); + WINGDIAPI void APIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor); + WINGDIAPI void APIENTRY glCallList (GLuint list); + WINGDIAPI void APIENTRY glCallLists (GLsizei n, GLenum type, const GLvoid *lists); + WINGDIAPI void APIENTRY glClear (GLbitfield mask); + WINGDIAPI void APIENTRY glClearAccum (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); + WINGDIAPI void APIENTRY glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); + WINGDIAPI void APIENTRY glClearDepth (GLclampd depth); + WINGDIAPI void APIENTRY glClearIndex (GLfloat c); + WINGDIAPI void APIENTRY glClearStencil (GLint s); + WINGDIAPI void APIENTRY glClipPlane (GLenum plane, const GLdouble *equation); + WINGDIAPI void APIENTRY glColor3b (GLbyte red, GLbyte green, GLbyte blue); + WINGDIAPI void APIENTRY glColor3bv (const GLbyte *v); + WINGDIAPI void APIENTRY glColor3d (GLdouble red, GLdouble green, GLdouble blue); + WINGDIAPI void APIENTRY glColor3dv (const GLdouble *v); + WINGDIAPI void APIENTRY glColor3f (GLfloat red, GLfloat green, GLfloat blue); + WINGDIAPI void APIENTRY glColor3fv (const GLfloat *v); + WINGDIAPI void APIENTRY glColor3i (GLint red, GLint green, GLint blue); + WINGDIAPI void APIENTRY glColor3iv (const GLint *v); + WINGDIAPI void APIENTRY glColor3s (GLshort red, GLshort green, GLshort blue); + WINGDIAPI void APIENTRY glColor3sv (const GLshort *v); + WINGDIAPI void APIENTRY glColor3ub (GLubyte red, GLubyte green, GLubyte blue); + WINGDIAPI void APIENTRY glColor3ubv (const GLubyte *v); + WINGDIAPI void APIENTRY glColor3ui (GLuint red, GLuint green, GLuint blue); + WINGDIAPI void APIENTRY glColor3uiv (const GLuint *v); + WINGDIAPI void APIENTRY glColor3us (GLushort red, GLushort green, GLushort blue); + WINGDIAPI void APIENTRY glColor3usv (const GLushort *v); + WINGDIAPI void APIENTRY glColor4b (GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha); + WINGDIAPI void APIENTRY glColor4bv (const GLbyte *v); + WINGDIAPI void APIENTRY glColor4d (GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha); + WINGDIAPI void APIENTRY glColor4dv (const GLdouble *v); + WINGDIAPI void APIENTRY glColor4f (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); + WINGDIAPI void APIENTRY glColor4fv (const GLfloat *v); + WINGDIAPI void APIENTRY glColor4i (GLint red, GLint green, GLint blue, GLint alpha); + WINGDIAPI void APIENTRY glColor4iv (const GLint *v); + WINGDIAPI void APIENTRY glColor4s (GLshort red, GLshort green, GLshort blue, GLshort alpha); + WINGDIAPI void APIENTRY glColor4sv (const GLshort *v); + WINGDIAPI void APIENTRY glColor4ub (GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha); + WINGDIAPI void APIENTRY glColor4ubv (const GLubyte *v); + WINGDIAPI void APIENTRY glColor4ui (GLuint red, GLuint green, GLuint blue, GLuint alpha); + WINGDIAPI void APIENTRY glColor4uiv (const GLuint *v); + WINGDIAPI void APIENTRY glColor4us (GLushort red, GLushort green, GLushort blue, GLushort alpha); + WINGDIAPI void APIENTRY glColor4usv (const GLushort *v); + WINGDIAPI void APIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); + WINGDIAPI void APIENTRY glColorMaterial (GLenum face, GLenum mode); + WINGDIAPI void APIENTRY glColorPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); + WINGDIAPI void APIENTRY glCopyPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum type); + WINGDIAPI void APIENTRY glCopyTexImage1D (GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border); + WINGDIAPI void APIENTRY glCopyTexImage2D (GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); + WINGDIAPI void APIENTRY glCopyTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); + WINGDIAPI void APIENTRY glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); + WINGDIAPI void APIENTRY glCullFace (GLenum mode); + WINGDIAPI void APIENTRY glDeleteLists (GLuint list, GLsizei range); + WINGDIAPI void APIENTRY glDeleteTextures (GLsizei n, const GLuint *textures); + WINGDIAPI void APIENTRY glDepthFunc (GLenum func); + WINGDIAPI void APIENTRY glDepthMask (GLboolean flag); + WINGDIAPI void APIENTRY glDepthRange (GLclampd zNear, GLclampd zFar); + WINGDIAPI void APIENTRY glDisable (GLenum cap); + WINGDIAPI void APIENTRY glDisableClientState (GLenum array); + WINGDIAPI void APIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count); + WINGDIAPI void APIENTRY glDrawBuffer (GLenum mode); + WINGDIAPI void APIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices); + WINGDIAPI void APIENTRY glDrawPixels (GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); + WINGDIAPI void APIENTRY glEdgeFlag (GLboolean flag); + WINGDIAPI void APIENTRY glEdgeFlagPointer (GLsizei stride, const GLvoid *pointer); + WINGDIAPI void APIENTRY glEdgeFlagv (const GLboolean *flag); + WINGDIAPI void APIENTRY glEnable (GLenum cap); + WINGDIAPI void APIENTRY glEnableClientState (GLenum array); + WINGDIAPI void APIENTRY glEnd (void); + WINGDIAPI void APIENTRY glEndList (void); + WINGDIAPI void APIENTRY glEvalCoord1d (GLdouble u); + WINGDIAPI void APIENTRY glEvalCoord1dv (const GLdouble *u); + WINGDIAPI void APIENTRY glEvalCoord1f (GLfloat u); + WINGDIAPI void APIENTRY glEvalCoord1fv (const GLfloat *u); + WINGDIAPI void APIENTRY glEvalCoord2d (GLdouble u, GLdouble v); + WINGDIAPI void APIENTRY glEvalCoord2dv (const GLdouble *u); + WINGDIAPI void APIENTRY glEvalCoord2f (GLfloat u, GLfloat v); + WINGDIAPI void APIENTRY glEvalCoord2fv (const GLfloat *u); + WINGDIAPI void APIENTRY glEvalMesh1 (GLenum mode, GLint i1, GLint i2); + WINGDIAPI void APIENTRY glEvalMesh2 (GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2); + WINGDIAPI void APIENTRY glEvalPoint1 (GLint i); + WINGDIAPI void APIENTRY glEvalPoint2 (GLint i, GLint j); + WINGDIAPI void APIENTRY glFeedbackBuffer (GLsizei size, GLenum type, GLfloat *buffer); + WINGDIAPI void APIENTRY glFinish (void); + WINGDIAPI void APIENTRY glFlush (void); + WINGDIAPI void APIENTRY glFogf (GLenum pname, GLfloat param); + WINGDIAPI void APIENTRY glFogfv (GLenum pname, const GLfloat *params); + WINGDIAPI void APIENTRY glFogi (GLenum pname, GLint param); + WINGDIAPI void APIENTRY glFogiv (GLenum pname, const GLint *params); + WINGDIAPI void APIENTRY glFrontFace (GLenum mode); + WINGDIAPI void APIENTRY glFrustum (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); + WINGDIAPI GLuint APIENTRY glGenLists (GLsizei range); + WINGDIAPI void APIENTRY glGenTextures (GLsizei n, GLuint *textures); + WINGDIAPI void APIENTRY glGetBooleanv (GLenum pname, GLboolean *params); + WINGDIAPI void APIENTRY glGetClipPlane (GLenum plane, GLdouble *equation); + WINGDIAPI void APIENTRY glGetDoublev (GLenum pname, GLdouble *params); + WINGDIAPI GLenum APIENTRY glGetError (void); + WINGDIAPI void APIENTRY glGetFloatv (GLenum pname, GLfloat *params); + WINGDIAPI void APIENTRY glGetIntegerv (GLenum pname, GLint *params); + WINGDIAPI void APIENTRY glGetLightfv (GLenum light, GLenum pname, GLfloat *params); + WINGDIAPI void APIENTRY glGetLightiv (GLenum light, GLenum pname, GLint *params); + WINGDIAPI void APIENTRY glGetMapdv (GLenum target, GLenum query, GLdouble *v); + WINGDIAPI void APIENTRY glGetMapfv (GLenum target, GLenum query, GLfloat *v); + WINGDIAPI void APIENTRY glGetMapiv (GLenum target, GLenum query, GLint *v); + WINGDIAPI void APIENTRY glGetMaterialfv (GLenum face, GLenum pname, GLfloat *params); + WINGDIAPI void APIENTRY glGetMaterialiv (GLenum face, GLenum pname, GLint *params); + WINGDIAPI void APIENTRY glGetPixelMapfv (GLenum map, GLfloat* values); + WINGDIAPI void APIENTRY glGetPixelMapuiv (GLenum map, GLuint *values); + WINGDIAPI void APIENTRY glGetPixelMapusv (GLenum map, GLushort *values); + WINGDIAPI void APIENTRY glGetPointerv (GLenum pname, GLvoid* *params); + WINGDIAPI void APIENTRY glGetPolygonStipple (GLubyte *mask); + WINGDIAPI const GLubyte * APIENTRY glGetString (GLenum name); + WINGDIAPI void APIENTRY glGetTexEnvfv (GLenum target, GLenum pname, GLfloat *params); + WINGDIAPI void APIENTRY glGetTexEnviv (GLenum target, GLenum pname, GLint *params); + WINGDIAPI void APIENTRY glGetTexGendv (GLenum coord, GLenum pname, GLdouble *params); + WINGDIAPI void APIENTRY glGetTexGenfv (GLenum coord, GLenum pname, GLfloat *params); + WINGDIAPI void APIENTRY glGetTexGeniv (GLenum coord, GLenum pname, GLint *params); + WINGDIAPI void APIENTRY glGetTexImage (GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels); + WINGDIAPI void APIENTRY glGetTexLevelParameterfv (GLenum target, GLint level, GLenum pname, GLfloat *params); + WINGDIAPI void APIENTRY glGetTexLevelParameteriv (GLenum target, GLint level, GLenum pname, GLint *params); + WINGDIAPI void APIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat *params); + WINGDIAPI void APIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint *params); + WINGDIAPI void APIENTRY glHint (GLenum target, GLenum mode); + WINGDIAPI void APIENTRY glIndexMask (GLuint mask); + WINGDIAPI void APIENTRY glIndexPointer (GLenum type, GLsizei stride, const GLvoid *pointer); + WINGDIAPI void APIENTRY glIndexd (GLdouble c); + WINGDIAPI void APIENTRY glIndexdv (const GLdouble *c); + WINGDIAPI void APIENTRY glIndexf (GLfloat c); + WINGDIAPI void APIENTRY glIndexfv (const GLfloat *c); + WINGDIAPI void APIENTRY glIndexi (GLint c); + WINGDIAPI void APIENTRY glIndexiv (const GLint *c); + WINGDIAPI void APIENTRY glIndexs (GLshort c); + WINGDIAPI void APIENTRY glIndexsv (const GLshort *c); + WINGDIAPI void APIENTRY glIndexub (GLubyte c); + WINGDIAPI void APIENTRY glIndexubv (const GLubyte *c); + WINGDIAPI void APIENTRY glInitNames (void); + WINGDIAPI void APIENTRY glInterleavedArrays (GLenum format, GLsizei stride, const GLvoid *pointer); + WINGDIAPI GLboolean APIENTRY glIsEnabled (GLenum cap); + WINGDIAPI GLboolean APIENTRY glIsList (GLuint list); + WINGDIAPI GLboolean APIENTRY glIsTexture (GLuint texture); + WINGDIAPI void APIENTRY glLightModelf (GLenum pname, GLfloat param); + WINGDIAPI void APIENTRY glLightModelfv (GLenum pname, const GLfloat *params); + WINGDIAPI void APIENTRY glLightModeli (GLenum pname, GLint param); + WINGDIAPI void APIENTRY glLightModeliv (GLenum pname, const GLint *params); + WINGDIAPI void APIENTRY glLightf (GLenum light, GLenum pname, GLfloat param); + WINGDIAPI void APIENTRY glLightfv (GLenum light, GLenum pname, const GLfloat *params); + WINGDIAPI void APIENTRY glLighti (GLenum light, GLenum pname, GLint param); + WINGDIAPI void APIENTRY glLightiv (GLenum light, GLenum pname, const GLint *params); + WINGDIAPI void APIENTRY glLineStipple (GLint factor, GLushort pattern); + WINGDIAPI void APIENTRY glLineWidth (GLfloat width); + WINGDIAPI void APIENTRY glListBase (GLuint base); + WINGDIAPI void APIENTRY glLoadIdentity (void); + WINGDIAPI void APIENTRY glLoadMatrixd (const GLdouble *m); + WINGDIAPI void APIENTRY glLoadMatrixf (const GLfloat *m); + WINGDIAPI void APIENTRY glLoadName (GLuint name); + WINGDIAPI void APIENTRY glLogicOp (GLenum opcode); + WINGDIAPI void APIENTRY glMap1d (GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); + WINGDIAPI void APIENTRY glMap1f (GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); + WINGDIAPI void APIENTRY glMap2d (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); + WINGDIAPI void APIENTRY glMap2f (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); + WINGDIAPI void APIENTRY glMapGrid1d (GLint un, GLdouble u1, GLdouble u2); + WINGDIAPI void APIENTRY glMapGrid1f (GLint un, GLfloat u1, GLfloat u2); + WINGDIAPI void APIENTRY glMapGrid2d (GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2); + WINGDIAPI void APIENTRY glMapGrid2f (GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2); + WINGDIAPI void APIENTRY glMaterialf (GLenum face, GLenum pname, GLfloat param); + WINGDIAPI void APIENTRY glMaterialfv (GLenum face, GLenum pname, const GLfloat *params); + WINGDIAPI void APIENTRY glMateriali (GLenum face, GLenum pname, GLint param); + WINGDIAPI void APIENTRY glMaterialiv (GLenum face, GLenum pname, const GLint *params); + WINGDIAPI void APIENTRY glMatrixMode (GLenum mode); + WINGDIAPI void APIENTRY glMultMatrixd (const GLdouble *m); + WINGDIAPI void APIENTRY glMultMatrixf (const GLfloat *m); + WINGDIAPI void APIENTRY glNewList (GLuint list, GLenum mode); + WINGDIAPI void APIENTRY glNormal3b (GLbyte nx, GLbyte ny, GLbyte nz); + WINGDIAPI void APIENTRY glNormal3bv (const GLbyte *v); + WINGDIAPI void APIENTRY glNormal3d (GLdouble nx, GLdouble ny, GLdouble nz); + WINGDIAPI void APIENTRY glNormal3dv (const GLdouble *v); + WINGDIAPI void APIENTRY glNormal3f (GLfloat nx, GLfloat ny, GLfloat nz); + WINGDIAPI void APIENTRY glNormal3fv (const GLfloat *v); + WINGDIAPI void APIENTRY glNormal3i (GLint nx, GLint ny, GLint nz); + WINGDIAPI void APIENTRY glNormal3iv (const GLint *v); + WINGDIAPI void APIENTRY glNormal3s (GLshort nx, GLshort ny, GLshort nz); + WINGDIAPI void APIENTRY glNormal3sv (const GLshort *v); + WINGDIAPI void APIENTRY glNormalPointer (GLenum type, GLsizei stride, const GLvoid *pointer); + WINGDIAPI void APIENTRY glOrtho (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); + WINGDIAPI void APIENTRY glPassThrough (GLfloat token); + WINGDIAPI void APIENTRY glPixelMapfv (GLenum map, GLsizei mapsize, const GLfloat* values); + WINGDIAPI void APIENTRY glPixelMapuiv (GLenum map, GLsizei mapsize, const GLuint *values); + WINGDIAPI void APIENTRY glPixelMapusv (GLenum map, GLsizei mapsize, const GLushort *values); + WINGDIAPI void APIENTRY glPixelStoref (GLenum pname, GLfloat param); + WINGDIAPI void APIENTRY glPixelStorei (GLenum pname, GLint param); + WINGDIAPI void APIENTRY glPixelTransferf (GLenum pname, GLfloat param); + WINGDIAPI void APIENTRY glPixelTransferi (GLenum pname, GLint param); + WINGDIAPI void APIENTRY glPixelZoom (GLfloat xfactor, GLfloat yfactor); + WINGDIAPI void APIENTRY glPointSize (GLfloat size); + WINGDIAPI void APIENTRY glPolygonMode (GLenum face, GLenum mode); + WINGDIAPI void APIENTRY glPolygonOffset (GLfloat factor, GLfloat units); + WINGDIAPI void APIENTRY glPolygonStipple (const GLubyte *mask); + WINGDIAPI void APIENTRY glPopAttrib (void); + WINGDIAPI void APIENTRY glPopClientAttrib (void); + WINGDIAPI void APIENTRY glPopMatrix (void); + WINGDIAPI void APIENTRY glPopName (void); + WINGDIAPI void APIENTRY glPrioritizeTextures (GLsizei n, const GLuint *textures, const GLclampf *priorities); + WINGDIAPI void APIENTRY glPushAttrib (GLbitfield mask); + WINGDIAPI void APIENTRY glPushClientAttrib (GLbitfield mask); + WINGDIAPI void APIENTRY glPushMatrix (void); + WINGDIAPI void APIENTRY glPushName (GLuint name); + WINGDIAPI void APIENTRY glRasterPos2d (GLdouble x, GLdouble y); + WINGDIAPI void APIENTRY glRasterPos2dv (const GLdouble *v); + WINGDIAPI void APIENTRY glRasterPos2f (GLfloat x, GLfloat y); + WINGDIAPI void APIENTRY glRasterPos2fv (const GLfloat *v); + WINGDIAPI void APIENTRY glRasterPos2i (GLint x, GLint y); + WINGDIAPI void APIENTRY glRasterPos2iv (const GLint *v); + WINGDIAPI void APIENTRY glRasterPos2s (GLshort x, GLshort y); + WINGDIAPI void APIENTRY glRasterPos2sv (const GLshort *v); + WINGDIAPI void APIENTRY glRasterPos3d (GLdouble x, GLdouble y, GLdouble z); + WINGDIAPI void APIENTRY glRasterPos3dv (const GLdouble *v); + WINGDIAPI void APIENTRY glRasterPos3f (GLfloat x, GLfloat y, GLfloat z); + WINGDIAPI void APIENTRY glRasterPos3fv (const GLfloat *v); + WINGDIAPI void APIENTRY glRasterPos3i (GLint x, GLint y, GLint z); + WINGDIAPI void APIENTRY glRasterPos3iv (const GLint *v); + WINGDIAPI void APIENTRY glRasterPos3s (GLshort x, GLshort y, GLshort z); + WINGDIAPI void APIENTRY glRasterPos3sv (const GLshort *v); + WINGDIAPI void APIENTRY glRasterPos4d (GLdouble x, GLdouble y, GLdouble z, GLdouble w); + WINGDIAPI void APIENTRY glRasterPos4dv (const GLdouble *v); + WINGDIAPI void APIENTRY glRasterPos4f (GLfloat x, GLfloat y, GLfloat z, GLfloat w); + WINGDIAPI void APIENTRY glRasterPos4fv (const GLfloat *v); + WINGDIAPI void APIENTRY glRasterPos4i (GLint x, GLint y, GLint z, GLint w); + WINGDIAPI void APIENTRY glRasterPos4iv (const GLint *v); + WINGDIAPI void APIENTRY glRasterPos4s (GLshort x, GLshort y, GLshort z, GLshort w); + WINGDIAPI void APIENTRY glRasterPos4sv (const GLshort *v); + WINGDIAPI void APIENTRY glReadBuffer (GLenum mode); + WINGDIAPI void APIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels); + WINGDIAPI void APIENTRY glRectd (GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2); + WINGDIAPI void APIENTRY glRectdv (const GLdouble *v1, const GLdouble *v2); + WINGDIAPI void APIENTRY glRectf (GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2); + WINGDIAPI void APIENTRY glRectfv (const GLfloat *v1, const GLfloat *v2); + WINGDIAPI void APIENTRY glRecti (GLint x1, GLint y1, GLint x2, GLint y2); + WINGDIAPI void APIENTRY glRectiv (const GLint *v1, const GLint *v2); + WINGDIAPI void APIENTRY glRects (GLshort x1, GLshort y1, GLshort x2, GLshort y2); + WINGDIAPI void APIENTRY glRectsv (const GLshort *v1, const GLshort *v2); + WINGDIAPI GLint APIENTRY glRenderMode (GLenum mode); + WINGDIAPI void APIENTRY glRotated (GLdouble angle, GLdouble x, GLdouble y, GLdouble z); + WINGDIAPI void APIENTRY glRotatef (GLfloat angle, GLfloat x, GLfloat y, GLfloat z); + WINGDIAPI void APIENTRY glScaled (GLdouble x, GLdouble y, GLdouble z); + WINGDIAPI void APIENTRY glScalef (GLfloat x, GLfloat y, GLfloat z); + WINGDIAPI void APIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height); + WINGDIAPI void APIENTRY glSelectBuffer (GLsizei size, GLuint *buffer); + WINGDIAPI void APIENTRY glShadeModel (GLenum mode); + WINGDIAPI void APIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask); + WINGDIAPI void APIENTRY glStencilMask (GLuint mask); + WINGDIAPI void APIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass); + WINGDIAPI void APIENTRY glTexCoord1d (GLdouble s); + WINGDIAPI void APIENTRY glTexCoord1dv (const GLdouble *v); + WINGDIAPI void APIENTRY glTexCoord1f (GLfloat s); + WINGDIAPI void APIENTRY glTexCoord1fv (const GLfloat *v); + WINGDIAPI void APIENTRY glTexCoord1i (GLint s); + WINGDIAPI void APIENTRY glTexCoord1iv (const GLint *v); + WINGDIAPI void APIENTRY glTexCoord1s (GLshort s); + WINGDIAPI void APIENTRY glTexCoord1sv (const GLshort *v); + WINGDIAPI void APIENTRY glTexCoord2d (GLdouble s, GLdouble t); + WINGDIAPI void APIENTRY glTexCoord2dv (const GLdouble *v); + WINGDIAPI void APIENTRY glTexCoord2f (GLfloat s, GLfloat t); + WINGDIAPI void APIENTRY glTexCoord2fv (const GLfloat *v); + WINGDIAPI void APIENTRY glTexCoord2i (GLint s, GLint t); + WINGDIAPI void APIENTRY glTexCoord2iv (const GLint *v); + WINGDIAPI void APIENTRY glTexCoord2s (GLshort s, GLshort t); + WINGDIAPI void APIENTRY glTexCoord2sv (const GLshort *v); + WINGDIAPI void APIENTRY glTexCoord3d (GLdouble s, GLdouble t, GLdouble r); + WINGDIAPI void APIENTRY glTexCoord3dv (const GLdouble *v); + WINGDIAPI void APIENTRY glTexCoord3f (GLfloat s, GLfloat t, GLfloat r); + WINGDIAPI void APIENTRY glTexCoord3fv (const GLfloat *v); + WINGDIAPI void APIENTRY glTexCoord3i (GLint s, GLint t, GLint r); + WINGDIAPI void APIENTRY glTexCoord3iv (const GLint *v); + WINGDIAPI void APIENTRY glTexCoord3s (GLshort s, GLshort t, GLshort r); + WINGDIAPI void APIENTRY glTexCoord3sv (const GLshort *v); + WINGDIAPI void APIENTRY glTexCoord4d (GLdouble s, GLdouble t, GLdouble r, GLdouble q); + WINGDIAPI void APIENTRY glTexCoord4dv (const GLdouble *v); + WINGDIAPI void APIENTRY glTexCoord4f (GLfloat s, GLfloat t, GLfloat r, GLfloat q); + WINGDIAPI void APIENTRY glTexCoord4fv (const GLfloat *v); + WINGDIAPI void APIENTRY glTexCoord4i (GLint s, GLint t, GLint r, GLint q); + WINGDIAPI void APIENTRY glTexCoord4iv (const GLint *v); + WINGDIAPI void APIENTRY glTexCoord4s (GLshort s, GLshort t, GLshort r, GLshort q); + WINGDIAPI void APIENTRY glTexCoord4sv (const GLshort *v); + WINGDIAPI void APIENTRY glTexCoordPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); + WINGDIAPI void APIENTRY glTexEnvf (GLenum target, GLenum pname, GLfloat param); + WINGDIAPI void APIENTRY glTexEnvfv (GLenum target, GLenum pname, const GLfloat *params); + WINGDIAPI void APIENTRY glTexEnvi (GLenum target, GLenum pname, GLint param); + WINGDIAPI void APIENTRY glTexEnviv (GLenum target, GLenum pname, const GLint *params); + WINGDIAPI void APIENTRY glTexGend (GLenum coord, GLenum pname, GLdouble param); + WINGDIAPI void APIENTRY glTexGendv (GLenum coord, GLenum pname, const GLdouble *params); + WINGDIAPI void APIENTRY glTexGenf (GLenum coord, GLenum pname, GLfloat param); + WINGDIAPI void APIENTRY glTexGenfv (GLenum coord, GLenum pname, const GLfloat *params); + WINGDIAPI void APIENTRY glTexGeni (GLenum coord, GLenum pname, GLint param); + WINGDIAPI void APIENTRY glTexGeniv (GLenum coord, GLenum pname, const GLint *params); + WINGDIAPI void APIENTRY glTexImage1D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels); + WINGDIAPI void APIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); + WINGDIAPI void APIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param); + WINGDIAPI void APIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat *params); + WINGDIAPI void APIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param); + WINGDIAPI void APIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint *params); + WINGDIAPI void APIENTRY glTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); + WINGDIAPI void APIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); + WINGDIAPI void APIENTRY glTranslated (GLdouble x, GLdouble y, GLdouble z); + WINGDIAPI void APIENTRY glTranslatef (GLfloat x, GLfloat y, GLfloat z); + WINGDIAPI void APIENTRY glVertex2d (GLdouble x, GLdouble y); + WINGDIAPI void APIENTRY glVertex2dv (const GLdouble *v); + WINGDIAPI void APIENTRY glVertex2f (GLfloat x, GLfloat y); + WINGDIAPI void APIENTRY glVertex2fv (const GLfloat *v); + WINGDIAPI void APIENTRY glVertex2i (GLint x, GLint y); + WINGDIAPI void APIENTRY glVertex2iv (const GLint *v); + WINGDIAPI void APIENTRY glVertex2s (GLshort x, GLshort y); + WINGDIAPI void APIENTRY glVertex2sv (const GLshort *v); + WINGDIAPI void APIENTRY glVertex3d (GLdouble x, GLdouble y, GLdouble z); + WINGDIAPI void APIENTRY glVertex3dv (const GLdouble *v); + WINGDIAPI void APIENTRY glVertex3f (GLfloat x, GLfloat y, GLfloat z); + WINGDIAPI void APIENTRY glVertex3fv (const GLfloat *v); + WINGDIAPI void APIENTRY glVertex3i (GLint x, GLint y, GLint z); + WINGDIAPI void APIENTRY glVertex3iv (const GLint *v); + WINGDIAPI void APIENTRY glVertex3s (GLshort x, GLshort y, GLshort z); + WINGDIAPI void APIENTRY glVertex3sv (const GLshort *v); + WINGDIAPI void APIENTRY glVertex4d (GLdouble x, GLdouble y, GLdouble z, GLdouble w); + WINGDIAPI void APIENTRY glVertex4dv (const GLdouble *v); + WINGDIAPI void APIENTRY glVertex4f (GLfloat x, GLfloat y, GLfloat z, GLfloat w); + WINGDIAPI void APIENTRY glVertex4fv (const GLfloat *v); + WINGDIAPI void APIENTRY glVertex4i (GLint x, GLint y, GLint z, GLint w); + WINGDIAPI void APIENTRY glVertex4iv (const GLint *v); + WINGDIAPI void APIENTRY glVertex4s (GLshort x, GLshort y, GLshort z, GLshort w); + WINGDIAPI void APIENTRY glVertex4sv (const GLshort *v); + WINGDIAPI void APIENTRY glVertexPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); + WINGDIAPI void APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height); + + typedef void (APIENTRY * PFNGLARRAYELEMENTEXTPROC) (GLint i); + typedef void (APIENTRY * PFNGLDRAWARRAYSEXTPROC) (GLenum mode, GLint first, GLsizei count); + typedef void (APIENTRY * PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); + typedef void (APIENTRY * PFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); + typedef void (APIENTRY * PFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); + typedef void (APIENTRY * PFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); + typedef void (APIENTRY * PFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); + typedef void (APIENTRY * PFNGLEDGEFLAGPOINTEREXTPROC) (GLsizei stride, GLsizei count, const GLboolean *pointer); + typedef void (APIENTRY * PFNGLGETPOINTERVEXTPROC) (GLenum pname, GLvoid* *params); + typedef void (APIENTRY * PFNGLARRAYELEMENTARRAYEXTPROC)(GLenum mode, GLsizei count, const GLvoid* pi); + + typedef void (APIENTRY * PFNGLDRAWRANGEELEMENTSWINPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); + + typedef void (APIENTRY * PFNGLADDSWAPHINTRECTWINPROC) (GLint x, GLint y, GLsizei width, GLsizei height); + + typedef void (APIENTRY * PFNGLCOLORTABLEEXTPROC) + (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, + GLenum type, const GLvoid *data); + typedef void (APIENTRY * PFNGLCOLORSUBTABLEEXTPROC) + (GLenum target, GLsizei start, GLsizei count, GLenum format, + GLenum type, const GLvoid *data); + typedef void (APIENTRY * PFNGLGETCOLORTABLEEXTPROC) + (GLenum target, GLenum format, GLenum type, GLvoid *data); + typedef void (APIENTRY * PFNGLGETCOLORTABLEPARAMETERIVEXTPROC) + (GLenum target, GLenum pname, GLint *params); + typedef void (APIENTRY * PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) + (GLenum target, GLenum pname, GLfloat *params); +} + typedef void WINAPI type_glTexImage2DMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); typedef void WINAPI type_glBindFramebuffer(GLenum target, GLuint framebuffer); typedef void WINAPI type_glGenFramebuffers(GLsizei n, GLuint *framebuffers); @@ -31,11 +1058,18 @@ typedef void WINAPI type_glGetShaderInfoLog(GLuint shader, GLsizei bufSize, GLsi typedef void WINAPI type_glValidateProgram(GLuint program); typedef void WINAPI type_glGetProgramiv(GLuint program, GLenum pname, GLint *params); typedef GLint WINAPI type_glGetUniformLocation(GLuint program, const GLchar *name); -typedef void WINAPI type_glUniform4fv(GLint location, GLsizei count, const GLfloat *value); +typedef void WINAPI type_glUniform4fv(GLint location, GLsizei count, const GLfloat* value); +typedef void WINAPI type_glUniform4i(GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void WINAPI type_glUniform4ui(GLint location, GLint v0, GLint v1, GLint v2, GLint v3); typedef void WINAPI type_glUniform1i(GLint location, GLint v0); +typedef void WINAPI type_glUniform1iv(GLint location, GLsizei count, const GLint* value); typedef void WINAPI type_glUniform1f(GLint location, GLfloat v0); -typedef void WINAPI type_glUniform2fv(GLint location, GLsizei count, const GLfloat *value); -typedef void WINAPI type_glUniform3fv(GLint location, GLsizei count, const GLfloat *value); +typedef void WINAPI type_glUniform1fv(GLint location, GLsizei count, const GLfloat* value); +typedef void WINAPI type_glUniform2fv(GLint location, GLsizei count, const GLfloat* value); +typedef void WINAPI type_glUniform3fv(GLint location, GLsizei count, const GLfloat* value); +typedef void WINAPI type_glUniform3f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void WINAPI type_glUniform3iv(GLint location, GLsizei count, const GLint* value); +typedef void WINAPI type_glUniform3i(GLint location, GLint v0, GLint v1, GLint v2); typedef void WINAPI type_glEnableVertexAttribArray(GLuint index); typedef void WINAPI type_glDisableVertexAttribArray(GLuint index); typedef GLint WINAPI type_glGetAttribLocation(GLuint program, const GLchar *name); @@ -44,6 +1078,8 @@ typedef void WINAPI type_glVertexAttribIPointer (GLuint index, GLint size, GLenu typedef void WINAPI type_glBindVertexArray(GLuint array); typedef void WINAPI type_glGenVertexArrays(GLsizei n, GLuint *arrays); typedef void WINAPI type_glBindBuffer(GLenum target, GLuint buffer); +typedef void WINAPI type_glBindBufferBase(GLenum target, GLuint index, GLuint buffer); +typedef void WINAPI type_glBufferSubData(GLenum target, GLuint offset, GLsizeiptr size, const void* data); typedef void WINAPI type_glGenBuffers(GLsizei n, GLuint *buffers); typedef void WINAPI type_glBufferData(GLenum target, GLsizeiptr size, const void *data, GLenum usage); typedef void WINAPI type_glActiveTexture(GLenum texture); @@ -61,36 +1097,88 @@ typedef void WINAPI type_glUniformMatrix2fv(GLint location, GLsizei count, GLboo typedef void WINAPI type_glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); typedef void WINAPI type_glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); typedef void WINAPI type_glGetShaderiv(GLuint shader, GLenum pname, GLint* param); -//typedef void WINAPI type_glTexImage2D(GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +typedef void WINAPI type_glDrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instancecount); +typedef void WINAPI type_glDrawElementsInstanced(GLenum mode, GLint count, GLenum type, const void* indices, GLsizei instancecount); -#define WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091 -#define WGL_CONTEXT_MINOR_VERSION_ARB 0x2092 -#define WGL_CONTEXT_LAYER_PLANE_ARB 0x2093 -#define WGL_CONTEXT_FLAGS_ARB 0x2094 -#define WGL_CONTEXT_PROFILE_MASK_ARB 0x9126 +#define WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091 +#define WGL_CONTEXT_MINOR_VERSION_ARB 0x2092 +#define WGL_CONTEXT_LAYER_PLANE_ARB 0x2093 +#define WGL_CONTEXT_FLAGS_ARB 0x2094 +#define WGL_CONTEXT_PROFILE_MASK_ARB 0x9126 -#define WGL_CONTEXT_DEBUG_BIT_ARB 0x0001 -#define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002 +#define GL_SHADER_STORAGE_BARRIER_BIT 0x2000 +#define GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES 0x8F39 +#define GL_SHADER_STORAGE_BUFFER 0x90D2 +#define GL_SHADER_STORAGE_BUFFER_BINDING 0x90D3 +#define GL_SHADER_STORAGE_BUFFER_START 0x90D4 +#define GL_SHADER_STORAGE_BUFFER_SIZE 0x90D5 +#define GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS 0x90D6 +#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS 0x90D7 +#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS 0x90D8 +#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS 0x90D9 +#define GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS 0x90DA +#define GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS 0x90DB +#define GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS 0x90DC +#define GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS 0x90DD +#define GL_MAX_SHADER_STORAGE_BLOCK_SIZE 0x90DE +#define GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT 0x90DF -#define WGL_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001 +#define GL_UNIFORM_BUFFER 0x8A11 +#define GL_UNIFORM_BUFFER_BINDING 0x8A28 +#define GL_UNIFORM_BUFFER_START 0x8A29 +#define GL_UNIFORM_BUFFER_SIZE 0x8A2A +#define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B +#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C +#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D +#define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E +#define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F +#define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30 +#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31 +#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32 +#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33 +#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34 +#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35 +#define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36 +#define GL_UNIFORM_TYPE 0x8A37 +#define GL_UNIFORM_SIZE 0x8A38 +#define GL_UNIFORM_NAME_LENGTH 0x8A39 +#define GL_UNIFORM_BLOCK_INDEX 0x8A3A +#define GL_UNIFORM_OFFSET 0x8A3B +#define GL_UNIFORM_ARRAY_STRIDE 0x8A3C +#define GL_UNIFORM_MATRIX_STRIDE 0x8A3D +#define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E +#define GL_UNIFORM_BLOCK_BINDING 0x8A3F +#define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40 +#define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41 +#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42 +#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46 +#define GL_INVALID_INDEX 0xFFFFFFFFu + +#define WGL_CONTEXT_DEBUG_BIT_ARB 0x0001 +#define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002 + +#define WGL_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001 #define WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002 -#define WGL_DRAW_TO_WINDOW_ARB 0x2001 -#define WGL_ACCELERATION_ARB 0x2003 -#define WGL_SUPPORT_OPENGL_ARB 0x2010 -#define WGL_DOUBLE_BUFFER_ARB 0x2011 -#define WGL_PIXEL_TYPE_ARB 0x2013 +#define WGL_DRAW_TO_WINDOW_ARB 0x2001 +#define WGL_ACCELERATION_ARB 0x2003 +#define WGL_SUPPORT_OPENGL_ARB 0x2010 +#define WGL_DOUBLE_BUFFER_ARB 0x2011 +#define WGL_PIXEL_TYPE_ARB 0x2013 -#define WGL_TYPE_RGBA_ARB 0x202B -#define WGL_FULL_ACCELERATION_ARB 0x2027 +#define WGL_TYPE_RGBA_ARB 0x202B +#define WGL_FULL_ACCELERATION_ARB 0x2027 -#define WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20A9 +#define WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20A9 -#define WGL_RED_BITS_ARB 0x2015 -#define WGL_GREEN_BITS_ARB 0x2017 -#define WGL_BLUE_BITS_ARB 0x2019 -#define WGL_ALPHA_BITS_ARB 0x201B -#define WGL_DEPTH_BITS_ARB 0x2022 +#define WGL_RED_BITS_ARB 0x2015 +#define WGL_GREEN_BITS_ARB 0x2017 +#define WGL_BLUE_BITS_ARB 0x2019 +#define WGL_ALPHA_BITS_ARB 0x201B +#define WGL_DEPTH_BITS_ARB 0x2022 typedef HGLRC WINAPI wgl_create_context_attribs_arb(HDC hDC, HGLRC hShareContext, const int *attribList); typedef BOOL WINAPI wgl_get_pixel_format_attrib_iv_arb(HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, int *piValues); @@ -118,10 +1206,17 @@ struct OpenGL { type_glGetProgramiv* glGetProgramiv; type_glGetUniformLocation* glGetUniformLocation; type_glUniform4fv* glUniform4fv; + type_glUniform4i* glUniform4i; + type_glUniform4ui* glUniform4ui; type_glUniform1i* glUniform1i; + type_glUniform1iv* glUniform1iv; type_glUniform1f* glUniform1f; + type_glUniform1fv* glUniform1fv; type_glUniform2fv* glUniform2fv; type_glUniform3fv* glUniform3fv; + type_glUniform3iv* glUniform3iv; + type_glUniform3i* glUniform3i; + type_glUniform3f* glUniform3f; type_glEnableVertexAttribArray* glEnableVertexAttribArray; type_glDisableVertexAttribArray* glDisableVertexAttribArray; type_glGetAttribLocation* glGetAttribLocation; @@ -130,6 +1225,8 @@ struct OpenGL { type_glBindVertexArray* glBindVertexArray; type_glGenVertexArrays* glGenVertexArrays; type_glBindBuffer* glBindBuffer; + type_glBindBufferBase* glBindBufferBase; + type_glBufferSubData* glBufferSubData; type_glGenBuffers* glGenBuffers; type_glBufferData* glBufferData; type_glActiveTexture* glActiveTexture; @@ -147,6 +1244,8 @@ struct OpenGL { type_glUniformMatrix3fv* glUniformMatrix3fv; type_glUniformMatrix4fv* glUniformMatrix4fv; type_glGetShaderiv* glGetShaderiv; + type_glDrawArraysInstanced* glDrawArraysInstanced; + type_glDrawElementsInstanced* glDrawElementsInstanced; wgl_choose_pixel_format_arb* wglChoosePixelFormatARB; wgl_create_context_attribs_arb* wglCreateContextAttribsARB; @@ -240,8 +1339,7 @@ bool gl_extensions_load(OpenGL* gl) ++end; } - umm count = end - pos; - + // umm count = end - pos; // OpenGL->SupportsSRGBFramebuffer = strcmp(count, pos, "WGL_EXT_framebuffer_sRGB") == 0 || strcmp(count, pos, "WGL_ARB_framebuffer_sRGB") == 0; pos = end; @@ -306,10 +1404,17 @@ void opengl_init(Window* window, OpenGL* gl) gl->glGetProgramiv = (type_glGetProgramiv *) wglGetProcAddress("glGetProgramiv"); gl->glGetUniformLocation = (type_glGetUniformLocation *) wglGetProcAddress("glGetUniformLocation"); gl->glUniform4fv = (type_glUniform4fv *) wglGetProcAddress("glUniform4fv"); + gl->glUniform4i = (type_glUniform4i *) wglGetProcAddress("glUniform4i"); + gl->glUniform4ui = (type_glUniform4ui *) wglGetProcAddress("glUniform4ui"); gl->glUniform1i = (type_glUniform1i *) wglGetProcAddress("glUniform1i"); + gl->glUniform1iv = (type_glUniform1iv *) wglGetProcAddress("glUniform1iv"); gl->glUniform1f = (type_glUniform1f *) wglGetProcAddress("glUniform1f"); + gl->glUniform1fv = (type_glUniform1fv *) wglGetProcAddress("glUniform1fv"); gl->glUniform2fv = (type_glUniform2fv *) wglGetProcAddress("glUniform2fv"); gl->glUniform3fv = (type_glUniform3fv *) wglGetProcAddress("glUniform3fv"); + gl->glUniform3iv = (type_glUniform3iv *) wglGetProcAddress("glUniform3iv"); + gl->glUniform3i = (type_glUniform3i *) wglGetProcAddress("glUniform3i"); + gl->glUniform3f = (type_glUniform3f *) wglGetProcAddress("glUniform3f"); gl->glEnableVertexAttribArray = (type_glEnableVertexAttribArray *) wglGetProcAddress("glEnableVertexAttribArray"); gl->glDisableVertexAttribArray = (type_glDisableVertexAttribArray *) wglGetProcAddress("glDisableVertexAttribArray"); gl->glGetAttribLocation = (type_glGetAttribLocation *) wglGetProcAddress("glGetAttribLocation"); @@ -318,6 +1423,8 @@ void opengl_init(Window* window, OpenGL* gl) gl->glBindVertexArray = (type_glBindVertexArray *) wglGetProcAddress("glBindVertexArray"); gl->glGenVertexArrays = (type_glGenVertexArrays *) wglGetProcAddress("glGenVertexArrays"); gl->glBindBuffer = (type_glBindBuffer *) wglGetProcAddress("glBindBuffer"); + gl->glBindBufferBase = (type_glBindBufferBase *) wglGetProcAddress("glBindBufferBase"); + gl->glBufferSubData = (type_glBufferSubData *) wglGetProcAddress("glBufferSubData"); gl->glGenBuffers = (type_glGenBuffers *) wglGetProcAddress("glGenBuffers"); gl->glBufferData = (type_glBufferData *) wglGetProcAddress("glBufferData"); gl->glActiveTexture = (type_glActiveTexture *) wglGetProcAddress("glActiveTexture"); @@ -335,6 +1442,8 @@ void opengl_init(Window* window, OpenGL* gl) gl->glUniformMatrix3fv = (type_glUniformMatrix3fv *) wglGetProcAddress("glUniformMatrix3fv"); gl->glUniformMatrix4fv = (type_glUniformMatrix4fv *) wglGetProcAddress("glUniformMatrix4fv"); gl->glGetShaderiv = (type_glGetShaderiv *) wglGetProcAddress("glGetShaderiv"); + gl->glDrawArraysInstanced = (type_glDrawArraysInstanced *) wglGetProcAddress("glDrawArraysInstanced"); + gl->glDrawElementsInstanced = (type_glDrawElementsInstanced *) wglGetProcAddress("glDrawElementsInstanced"); // @todo now do: OpenGLInit } diff --git a/input/Input.h b/input/Input.h index b2b41fa..d41b025 100644 --- a/input/Input.h +++ b/input/Input.h @@ -12,8 +12,7 @@ #define MAX_KEY_PRESSES 5 #define MIN_INPUT_DEVICES 2 -#define INPUT_TYPE_MOUSE 0x01 -#define INPUT_TYPE_KEYBOARD 0x02 +#define INPUT_TYPE_MOUSE_KEYBOARD 0x01 #define INPUT_TYPE_OTHER 0x03 #define MIN_CONTROLLER_DEVICES 4 @@ -27,7 +26,6 @@ struct InputState { // Device bool is_connected = false; - char name[256]; byte type = INPUT_TYPE_OTHER; double time; @@ -44,10 +42,10 @@ struct InputState { // We only consider up to 4 pressed keys // Depending on the keyboard you may only be able to detect a limited amount of key presses anyway int up_index; - uint16 keys_down_old[MAX_KEY_PRESSES]; + uint8 keys_down_old[MAX_KEY_PRESSES]; int down_index; - uint16 keys_down[MAX_KEY_PRESSES]; + uint8 keys_down[MAX_KEY_PRESSES]; // Mouse // After handling the mouse state change the game loop should set this to false @@ -59,15 +57,24 @@ struct InputState { uint32 x_last; uint32 y_last; - // https://usb.org/sites/default/files/hid1_11.pdf Page 71 or 61 - // @question consider to use bit field (one int32 would be sufficient) - bool mouse_down_old[18]; - bool mouse1_down[18]; + // https://usb.org/sites/default/files/hid1_11.pdf Page 71 or 61 = 18 + // the bitfield represents which button is pressed + uint32 mouse_down_old; + uint32 mouse_down; int16 wheel_delta = 0; uint32 raw_button = 0; }; +void input_transition(InputState* state) +{ + // Mouse + state->x_last = state->x; + state->y_last = state->y; + + state->state_change_mouse = false; +} + struct ControllerState { uint32 id = 0; bool is_connected = false; @@ -84,9 +91,9 @@ struct ControllerState { byte trigger_old[4]; byte trigger[4]; - // @question consider to use bit field (one int32 would be sufficient) - bool button_old[10]; - bool button[10]; + // these are bitfields + uint16 button_old; + uint16 button; int16 stickl_x = 0; int16 stickl_y = 0; diff --git a/models/settings/DungeonSettings.h b/models/settings/DungeonSettings.h new file mode 100644 index 0000000..ec12a19 --- /dev/null +++ b/models/settings/DungeonSettings.h @@ -0,0 +1,20 @@ +/** + * Jingga + * + * @copyright Jingga + * @license OMS License 2.0 + * @version 1.0.0 + * @link https://jingga.app + */ +#ifndef TOS_MODELS_SETTINGS_DUNGEON_SETTINGS_H +#define TOS_MODELS_SETTINGS_DUNGEON_SETTINGS_H + +#include "../../stdlib/Types.h" +#include "ItemDistributionType.h" + +struct DungeonSettings { + ItemDistributionType item_distribution; + ItemDistributionType gold_distribution; +}; + +#endif \ No newline at end of file diff --git a/models/settings/ItemDistributionType.h b/models/settings/ItemDistributionType.h new file mode 100644 index 0000000..e78e5ae --- /dev/null +++ b/models/settings/ItemDistributionType.h @@ -0,0 +1,19 @@ +/** + * Jingga + * + * @copyright Jingga + * @license OMS License 2.0 + * @version 1.0.0 + * @link https://jingga.app + */ +#ifndef TOS_MODELS_SETTINGS_ITEM_DISTRIBUTION_TYPE_H +#define TOS_MODELS_SETTINGS_ITEM_DISTRIBUTION_TYPE_H + +enum ItemDistributionType { + ITEM_DISTRIBUTION_TYPE_DEFAULT, // Mix of individual and shared drops + ITEM_DISTRIBUTION_TYPE_INDIVIDUAL, // All loot is individual BUT not class specific + ITEM_DISTRIBUTION_TYPE_LEADER, // Leader receives all loot + ITEM_DISTRIBUTION_TYPE_GUILD_BANK, // Items go into guild bank +}; + +#endif diff --git a/models/settings/Settings.h b/models/settings/Settings.h index 1619db5..f681cae 100644 --- a/models/settings/Settings.h +++ b/models/settings/Settings.h @@ -406,11 +406,13 @@ struct CSettings { byte hotkeys_menu = 0x1B; // ESC byte hotkeys_window_close = 0x1B; // ESC - byte hotkeys_marker_1 = 0x31; // 1 - byte hotkeys_marker_2 = 0x32; // 2 - byte hotkeys_marker_3 = 0x33; // 3 - byte hotkeys_marker_4 = 0x34; // 4 - byte hotkeys_marker_5 = 0x35; // 5 + byte hotkeys_marker_1 = 0x31; + byte hotkeys_marker_2 = 0x32; + byte hotkeys_marker_3 = 0x33; + byte hotkeys_marker_4 = 0x34; + byte hotkeys_marker_5 = 0x35; + byte hotkeys_marker_6 = 0x36; + byte hotkeys_ping = 0x37; // Camera settings/positions // Makes it easy to switch to customizable camera positions diff --git a/platform/win32/input/RawInput.h b/platform/win32/input/RawInput.h index 59c881a..cd58f2d 100644 --- a/platform/win32/input/RawInput.h +++ b/platform/win32/input/RawInput.h @@ -15,46 +15,61 @@ #include "../../../input/Input.h" #include "../../../utils/TestUtils.h" #include "../../../utils/MathUtils.h" +#include "../../../memory/RingMemory.h" +#include "../../../memory/BufferMemory.h" +#include -InputState* init_input(HWND hwnd) +// IMPORTANT: +// Even if it is nowhere documented (at least not to our knowledge) the GetRawInputDeviceInfoA, GetRawInputBuffer functions requried +// aligned memory. So far we only figured out that 4 bytes works, maybe this needs to be 8 in the future?! + +int input_init(HWND hwnd, InputState* states, RingMemory* ring, BufferMemory* buf) { - uint32 nDevices; - GetRawInputDeviceList(NULL, &nDevices, sizeof(RAWINPUTDEVICELIST)); - PRAWINPUTDEVICELIST pRawInputDeviceList = (PRAWINPUTDEVICELIST) malloc(sizeof(RAWINPUTDEVICELIST) * nDevices); - nDevices = GetRawInputDeviceList(pRawInputDeviceList, &nDevices, sizeof(RAWINPUTDEVICELIST)); + uint32 device_count; + GetRawInputDeviceList(NULL, &device_count, sizeof(RAWINPUTDEVICELIST)); + PRAWINPUTDEVICELIST pRawInputDeviceList = (PRAWINPUTDEVICELIST) ring_get_memory(ring, sizeof(RAWINPUTDEVICELIST) * device_count, 4); + device_count = GetRawInputDeviceList(pRawInputDeviceList, &device_count, sizeof(RAWINPUTDEVICELIST)); - // We always want at least one empty input device slot + // We always want at least one empty input device slot // @todo Change so that we store the actual number of devices - InputState *inputs = (InputState *) calloc((nDevices + 1), sizeof(InputState)); - - if (nDevices == 0) { - free(pRawInputDeviceList); - - return inputs; + if (device_count == 0) { + return 0; } uint32 cb_size = 256; - for (uint32 i = 0; i < nDevices; ++i) { - GetRawInputDeviceInfoA(pRawInputDeviceList[i].hDevice, RIDI_DEVICENAME, inputs[i].name, &cb_size); + int32 mouse_found = 0; + int32 keyboard_found = 0; + int32 i; + for (i = 0; i < device_count; ++i) { cb_size = sizeof(RID_DEVICE_INFO); RID_DEVICE_INFO rdi; GetRawInputDeviceInfoA(pRawInputDeviceList[i].hDevice, RIDI_DEVICEINFO, &rdi, &cb_size); switch (rdi.dwType) { case RIM_TYPEMOUSE: { - inputs[i].handle_mouse = pRawInputDeviceList[i].hDevice; - inputs[i].is_connected = true; - inputs[i].type = INPUT_TYPE_MOUSE; + // @bug Would need fixing once we support controllers here + if (states[mouse_found].handle_mouse != NULL) { + ++mouse_found; + } + + states[mouse_found].handle_mouse = pRawInputDeviceList[i].hDevice; + states[mouse_found].is_connected = true; + states[mouse_found].type = INPUT_TYPE_MOUSE_KEYBOARD; } break; case RIM_TYPEKEYBOARD: { - inputs[i].handle_keyboard = pRawInputDeviceList[i].hDevice; - inputs[i].is_connected = true; - inputs[i].type = INPUT_TYPE_KEYBOARD; + // @bug Would need fixing once we support controllers here (keyboard + controller in one input bug) + if (states[keyboard_found].handle_keyboard != NULL) { + ++keyboard_found; + } + + states[keyboard_found].handle_keyboard = pRawInputDeviceList[i].hDevice; + states[keyboard_found].is_connected = true; + states[keyboard_found].type = INPUT_TYPE_MOUSE_KEYBOARD; } break; case RIM_TYPEHID: { - inputs[i].type = INPUT_TYPE_OTHER; + states[i].type = INPUT_TYPE_OTHER; } break; default: { @@ -90,39 +105,34 @@ InputState* init_input(HWND hwnd) if (!RegisterRawInputDevices((PCRAWINPUTDEVICE) rid, 4, sizeof(RAWINPUTDEVICE))) { // @todo Log + ASSERT_SIMPLE(false); } - // free(rid); - free(pRawInputDeviceList); - - return inputs; + return i; } -void handle_input(LPARAM lParam, InputState* states) +void input_raw_handle(RAWINPUT* raw, InputState* states, int state_count) { - uint32 db_size; - GetRawInputData((HRAWINPUT)lParam, RID_INPUT, NULL, &db_size, sizeof(RAWINPUTHEADER)); - - // @todo pull out, we only need to register this memory once - // Maybe even put it into the general memory pool - LPBYTE lpb = (BYTE *) malloc(db_size * sizeof(BYTE)); - - GetRawInputData((HRAWINPUT)lParam, RID_INPUT, lpb, &db_size, sizeof(RAWINPUTHEADER)); - - RAWINPUT* raw = (RAWINPUT*) lpb; - uint32 i = 0; if (raw->header.dwType == RIM_TYPEMOUSE) { // @todo Change so we can directly access the correct state (maybe map handle address to index?) - while (states[i].is_connected && states[i].handle_mouse != raw->header.hDevice) {++i;} + while (i < state_count + && states[i].handle_mouse != raw->header.hDevice + ) { + ++i; + } - if (!states[i].is_connected) { + if (i >= state_count || !states[i].is_connected) { return; } - // https://learn.microsoft.com/en-us/windows/win32/api/winuser/ns-winuser-rawmouse + InputState* input_state = states + i; + if (raw->data.mouse.usFlags & MOUSE_MOVE_ABSOLUTE) { RECT rect; + + // @todo move out, this is slow and should be stored in Window + // @performance this is slow and should be handled in the WindowProc !!! if (raw->data.mouse.usFlags & MOUSE_VIRTUAL_DESKTOP) { rect.left = GetSystemMetrics(SM_XVIRTUALSCREEN); rect.top = GetSystemMetrics(SM_YVIRTUALSCREEN); @@ -135,43 +145,90 @@ void handle_input(LPARAM lParam, InputState* states) rect.bottom = GetSystemMetrics(SM_CYSCREEN); } - states[i].x_last = states[i].x; - states[i].y_last = states[i].y; + input_state->x_last = input_state->x; + input_state->y_last = input_state->y; - states[i].x = MulDiv(raw->data.mouse.lLastX, rect.right, 65535) + rect.left; - states[i].y = MulDiv(raw->data.mouse.lLastY, rect.bottom, 65535) + rect.top; + input_state->x = MulDiv(raw->data.mouse.lLastX, rect.right, 65535) + rect.left; + input_state->y = MulDiv(raw->data.mouse.lLastY, rect.bottom, 65535) + rect.top; - states[i].state_change_mouse = true; + input_state->state_change_mouse = true; } else if (raw->data.mouse.lLastX != 0 || raw->data.mouse.lLastY != 0) { - states[i].x_last = states[i].x; - states[i].y_last = states[i].y; + input_state->x_last = input_state->x; + input_state->y_last = input_state->y; - states[i].x = states[i].x + raw->data.mouse.lLastX; - states[i].y = states[i].y + raw->data.mouse.lLastY; + input_state->x = input_state->x + raw->data.mouse.lLastX; + input_state->y = input_state->y + raw->data.mouse.lLastY; - states[i].state_change_mouse = true; + input_state->state_change_mouse = true; } } else if (raw->header.dwType == RIM_TYPEKEYBOARD) { // @todo Change so we can directly access the correct state (maybe map handle address to index?) - while (states[i].is_connected && states[i].handle_keyboard != raw->header.hDevice) {++i;} + while (i < state_count + && states[i].handle_keyboard != raw->header.hDevice + ) { + ++i; + } - if (!states[i].is_connected) { + if (i >= state_count || !states[i].is_connected) { return; } - // https://learn.microsoft.com/en-us/windows/win32/api/winuser/ns-winuser-rawkeyboard + InputState* input_state = states + i; - RAWKEYBOARD rawKB = raw->data.keyboard; + RAWKEYBOARD raw_kb = raw->data.keyboard; - if (rawKB.Flags & RI_KEY_BREAK) { - states[i].keys_down_old[states[i].up_index++] = rawKB.MakeCode; + if (raw_kb.Flags & RI_KEY_BREAK) { + input_state->keys_down_old[input_state->up_index++] = (uint8) raw_kb.VKey; } - if (rawKB.Flags & RI_KEY_MAKE) { - states[i].keys_down[states[i].down_index++] = rawKB.MakeCode; + if (raw_kb.Flags & RI_KEY_MAKE) { + input_state->keys_down[input_state->down_index++] = (uint8) raw_kb.VKey; } - states[i].state_change_keyboard = true; + input_state->state_change_keyboard = true; + } +} + +void input_handle(LPARAM lParam, InputState* states, int state_count, RingMemory* ring) +{ + uint32 db_size; + GetRawInputData((HRAWINPUT) lParam, RID_INPUT, NULL, &db_size, sizeof(RAWINPUTHEADER)); + + // @todo pull out, we only need to register this memory once + // Maybe even put it into the general memory pool + LPBYTE lpb = (BYTE *) ring_get_memory(ring, db_size * sizeof(BYTE), 4); + uint32 size = GetRawInputData((HRAWINPUT) lParam, RID_INPUT, lpb, &db_size, sizeof(RAWINPUTHEADER)); + + if (db_size != size) { + return; + } + + input_raw_handle((RAWINPUT *) lpb, states, state_count); +} + +void input_handle_buffered(LPARAM lParam, int buffer_size, InputState* states, int state_count, RingMemory* ring) +{ + uint32 cb_size; + GetRawInputBuffer(NULL, &cb_size, sizeof(RAWINPUTHEADER)); + + // Max input messages (e.g. 16) + cb_size *= buffer_size; + + PRAWINPUT raw_input = (PRAWINPUT) ring_get_memory(ring, cb_size, 4); + + uint32 input; + uint32 cb_size_t = cb_size; + + while ((input = GetRawInputBuffer(raw_input, &cb_size_t, sizeof(RAWINPUTHEADER))) > 0) { + PRAWINPUT pri = raw_input; + for (uint32 i = 0; i < input; ++i) { + input_raw_handle(pri, states, state_count); + + pri = NEXTRAWINPUTBLOCK(pri); + } + + // @question is this asign necessary? + cb_size_t = cb_size; } } diff --git a/platform/win32/input/XInput.h b/platform/win32/input/XInput.h index ee3bf62..e6ac177 100644 --- a/platform/win32/input/XInput.h +++ b/platform/win32/input/XInput.h @@ -98,6 +98,7 @@ void handle_controller_input(ControllerState* states) continue; } + /* states[controller_index].up = controller_state.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_UP; states[controller_index].down = controller_state.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_DOWN; states[controller_index].left = controller_state.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_LEFT; @@ -123,6 +124,7 @@ void handle_controller_input(ControllerState* states) states[controller_index].stickr_x = controller_state.Gamepad.sThumbRX; states[controller_index].stickr_y = controller_state.Gamepad.sThumbRY; states[controller_index].stickr_press = controller_state.Gamepad.wButtons & XINPUT_GAMEPAD_RIGHT_THUMB; + */ ++controller_index; }