From 0d3cbb8883ff59bc46a078ac1e93a725ff28e8e0 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Mon, 23 Aug 2021 21:33:39 +0100 Subject: [PATCH] Add `vendor:OpenGL` Based off a heavily modified version of: https://github.com/vassvik/odin-gl --- vendor/OpenGL/LICENSE | 21 + vendor/OpenGL/LICENSE_glad | 20 + vendor/OpenGL/README.md | 59 ++ vendor/OpenGL/constants.odin | 1412 ++++++++++++++++++++++++++++++ vendor/OpenGL/enums.odin | 1413 ++++++++++++++++++++++++++++++ vendor/OpenGL/helpers.odin | 409 +++++++++ vendor/OpenGL/impl.odin | 1590 ++++++++++++++++++++++++++++++++++ vendor/OpenGL/wrappers.odin | 1567 +++++++++++++++++++++++++++++++++ 8 files changed, 6491 insertions(+) create mode 100644 vendor/OpenGL/LICENSE create mode 100644 vendor/OpenGL/LICENSE_glad create mode 100644 vendor/OpenGL/README.md create mode 100644 vendor/OpenGL/constants.odin create mode 100644 vendor/OpenGL/enums.odin create mode 100644 vendor/OpenGL/helpers.odin create mode 100644 vendor/OpenGL/impl.odin create mode 100644 vendor/OpenGL/wrappers.odin diff --git a/vendor/OpenGL/LICENSE b/vendor/OpenGL/LICENSE new file mode 100644 index 000000000..35afce420 --- /dev/null +++ b/vendor/OpenGL/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018 vassvik + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/vendor/OpenGL/LICENSE_glad b/vendor/OpenGL/LICENSE_glad new file mode 100644 index 000000000..9490ba29c --- /dev/null +++ b/vendor/OpenGL/LICENSE_glad @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2013 David Herberth + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/OpenGL/README.md b/vendor/OpenGL/README.md new file mode 100644 index 000000000..9e7a7bbbc --- /dev/null +++ b/vendor/OpenGL/README.md @@ -0,0 +1,59 @@ +# odin-gl: opengl loader in Odin + +Includes procedures to load OpenGL function pointers. Currently only supports the `core` profile, up to version 4.6. Based on the output from the [glad](https://github.com/Dav1dde/glad) webservice using 4.6 `core`. + +#### Note: You will be required to pass your own GetProcAddress equivalent (wglGetProcAddress, glXGetProcAddress, glfwGetProcAddress, etc.), for example: + +```go +gl.load_up_to(4, 5, proc(p: rawptr, name: cstring) do (cast(^rawptr)p)^ = glfw.GetProcAddress(name); ); +``` +[odin-glfw](https://github.com/vassvik/odin-glfw) also provides a useful helper you can pass straight to `gl.load_up_to`: +```go +gl.load_up_to(4, 5, glfw.set_proc_address); +``` + +#### NOTE: It is recommended to put this into the shared collection: +``` +cd /path/to/Odin/shared +git clone https://github.com/vassvik/odin-gl.git +``` + +## Extra utility procedures (Outdated. See the end of `gl.odin`) + +Some useful helper procedures can be found in `helpers.odin`, for tasks such as: + + - loading vertex, fragment and compute shaders (from source or files) using `load_shaders_file`, `load_shaders_source`, `load_compute_file` and `load_compute_source` + - grabbing uniform and attribute locations using `get_uniform_location` and `get_attribute_location` + - getting all active uniforms from a program using `get_uniforms_from_program` + - hot reloading of shaders (windows only right now) using `update_shader_if_changed` and `update_shader_if_changed_compute` + +## Debug mode + +Each `gl` call will be appended by a debug helper calling `glGetError()` if compiled with `-debug`. This can be useful to detect incorrect usage. Sample output (also outputting the NO_ERRORS case for the sake of showcasing): + +``` +glGetError() returned NO_ERROR + call: glTexImage2D(GL_TEXTURE_2D=3553, 0, 34836, 1150, 1024, 0, GL_RGBA=6408, GL_FLOAT=5126, 0x0) + in: C://texture.odin(156:23) +glGetError() returned NO_ERROR + call: glEnable(GL_DEBUG_OUTPUT=37600) + in: C://main.odin(185:6) +glGetError() returned NO_ERROR + call: glGetError() -> 0 + in: C://main.odin(193:5) +glGetError() returned INVALID_ENUM + call: glEnable(INVALID_ENUM=123123123) + in: C://main.odin(194:5) +glGetError() returned INVALID_VALUE + call: glPointSize(-1.000) + in: C://main.odin(195:5) +glGetError() returned NO_ERROR + call: glDisable(GL_SCISSOR_TEST=3089) + in: C://main.odin(270:6) +glGetError() returned NO_ERROR + call: glViewport(0, 0, 1150, 1024) + in: C://main.odin(271:6) +glGetError() returned NO_ERROR + call: glClearColor(0.800, 0.800, 0.800, 1.000) + in: C://main.odin(272:6) +``` \ No newline at end of file diff --git a/vendor/OpenGL/constants.odin b/vendor/OpenGL/constants.odin new file mode 100644 index 000000000..1a994552b --- /dev/null +++ b/vendor/OpenGL/constants.odin @@ -0,0 +1,1412 @@ +package odin_gl + +FALSE :: false; +TRUE :: true; + +DEPTH_BUFFER_BIT :: 0x00000100; +STENCIL_BUFFER_BIT :: 0x00000400; +COLOR_BUFFER_BIT :: 0x00004000; +POINTS :: 0x0000; +LINES :: 0x0001; +LINE_LOOP :: 0x0002; +LINE_STRIP :: 0x0003; +TRIANGLES :: 0x0004; +TRIANGLE_STRIP :: 0x0005; +TRIANGLE_FAN :: 0x0006; +QUADS :: 0x0007; +NEVER :: 0x0200; +LESS :: 0x0201; +EQUAL :: 0x0202; +LEQUAL :: 0x0203; +GREATER :: 0x0204; +NOTEQUAL :: 0x0205; +GEQUAL :: 0x0206; +ALWAYS :: 0x0207; +ZERO :: 0; +ONE :: 1; +SRC_COLOR :: 0x0300; +ONE_MINUS_SRC_COLOR :: 0x0301; +SRC_ALPHA :: 0x0302; +ONE_MINUS_SRC_ALPHA :: 0x0303; +DST_ALPHA :: 0x0304; +ONE_MINUS_DST_ALPHA :: 0x0305; +DST_COLOR :: 0x0306; +ONE_MINUS_DST_COLOR :: 0x0307; +SRC_ALPHA_SATURATE :: 0x0308; +NONE :: 0; +FRONT_LEFT :: 0x0400; +FRONT_RIGHT :: 0x0401; +BACK_LEFT :: 0x0402; +BACK_RIGHT :: 0x0403; +FRONT :: 0x0404; +BACK :: 0x0405; +LEFT :: 0x0406; +RIGHT :: 0x0407; +FRONT_AND_BACK :: 0x0408; +NO_ERROR :: 0; +INVALID_ENUM :: 0x0500; +INVALID_VALUE :: 0x0501; +INVALID_OPERATION :: 0x0502; +OUT_OF_MEMORY :: 0x0505; +CW :: 0x0900; +CCW :: 0x0901; +POINT_SIZE :: 0x0B11; +POINT_SIZE_RANGE :: 0x0B12; +POINT_SIZE_GRANULARITY :: 0x0B13; +LINE_SMOOTH :: 0x0B20; +LINE_WIDTH :: 0x0B21; +LINE_WIDTH_RANGE :: 0x0B22; +LINE_WIDTH_GRANULARITY :: 0x0B23; +POLYGON_MODE :: 0x0B40; +POLYGON_SMOOTH :: 0x0B41; +CULL_FACE :: 0x0B44; +CULL_FACE_MODE :: 0x0B45; +FRONT_FACE :: 0x0B46; +DEPTH_RANGE :: 0x0B70; +DEPTH_TEST :: 0x0B71; +DEPTH_WRITEMASK :: 0x0B72; +DEPTH_CLEAR_VALUE :: 0x0B73; +DEPTH_FUNC :: 0x0B74; +STENCIL_TEST :: 0x0B90; +STENCIL_CLEAR_VALUE :: 0x0B91; +STENCIL_FUNC :: 0x0B92; +STENCIL_VALUE_MASK :: 0x0B93; +STENCIL_FAIL :: 0x0B94; +STENCIL_PASS_DEPTH_FAIL :: 0x0B95; +STENCIL_PASS_DEPTH_PASS :: 0x0B96; +STENCIL_REF :: 0x0B97; +STENCIL_WRITEMASK :: 0x0B98; +VIEWPORT :: 0x0BA2; +DITHER :: 0x0BD0; +BLEND_DST :: 0x0BE0; +BLEND_SRC :: 0x0BE1; +BLEND :: 0x0BE2; +LOGIC_OP_MODE :: 0x0BF0; +COLOR_LOGIC_OP :: 0x0BF2; +DRAW_BUFFER :: 0x0C01; +READ_BUFFER :: 0x0C02; +SCISSOR_BOX :: 0x0C10; +SCISSOR_TEST :: 0x0C11; +COLOR_CLEAR_VALUE :: 0x0C22; +COLOR_WRITEMASK :: 0x0C23; +DOUBLEBUFFER :: 0x0C32; +STEREO :: 0x0C33; +LINE_SMOOTH_HINT :: 0x0C52; +POLYGON_SMOOTH_HINT :: 0x0C53; +UNPACK_SWAP_BYTES :: 0x0CF0; +UNPACK_LSB_FIRST :: 0x0CF1; +UNPACK_ROW_LENGTH :: 0x0CF2; +UNPACK_SKIP_ROWS :: 0x0CF3; +UNPACK_SKIP_PIXELS :: 0x0CF4; +UNPACK_ALIGNMENT :: 0x0CF5; +PACK_SWAP_BYTES :: 0x0D00; +PACK_LSB_FIRST :: 0x0D01; +PACK_ROW_LENGTH :: 0x0D02; +PACK_SKIP_ROWS :: 0x0D03; +PACK_SKIP_PIXELS :: 0x0D04; +PACK_ALIGNMENT :: 0x0D05; +MAX_TEXTURE_SIZE :: 0x0D33; +MAX_VIEWPORT_DIMS :: 0x0D3A; +SUBPIXEL_BITS :: 0x0D50; +TEXTURE_1D :: 0x0DE0; +TEXTURE_2D :: 0x0DE1; +POLYGON_OFFSET_UNITS :: 0x2A00; +POLYGON_OFFSET_POINT :: 0x2A01; +POLYGON_OFFSET_LINE :: 0x2A02; +POLYGON_OFFSET_FILL :: 0x8037; +POLYGON_OFFSET_FACTOR :: 0x8038; +TEXTURE_BINDING_1D :: 0x8068; +TEXTURE_BINDING_2D :: 0x8069; +TEXTURE_WIDTH :: 0x1000; +TEXTURE_HEIGHT :: 0x1001; +TEXTURE_INTERNAL_FORMAT :: 0x1003; +TEXTURE_BORDER_COLOR :: 0x1004; +TEXTURE_RED_SIZE :: 0x805C; +TEXTURE_GREEN_SIZE :: 0x805D; +TEXTURE_BLUE_SIZE :: 0x805E; +TEXTURE_ALPHA_SIZE :: 0x805F; +DONT_CARE :: 0x1100; +FASTEST :: 0x1101; +NICEST :: 0x1102; +BYTE :: 0x1400; +UNSIGNED_BYTE :: 0x1401; +SHORT :: 0x1402; +UNSIGNED_SHORT :: 0x1403; +INT :: 0x1404; +UNSIGNED_INT :: 0x1405; +FLOAT :: 0x1406; +DOUBLE :: 0x140A; +STACK_OVERFLOW :: 0x0503; +STACK_UNDERFLOW :: 0x0504; +CLEAR :: 0x1500; +AND :: 0x1501; +AND_REVERSE :: 0x1502; +COPY :: 0x1503; +AND_INVERTED :: 0x1504; +NOOP :: 0x1505; +XOR :: 0x1506; +OR :: 0x1507; +NOR :: 0x1508; +EQUIV :: 0x1509; +INVERT :: 0x150A; +OR_REVERSE :: 0x150B; +COPY_INVERTED :: 0x150C; +OR_INVERTED :: 0x150D; +NAND :: 0x150E; +SET :: 0x150F; +TEXTURE :: 0x1702; +COLOR :: 0x1800; +DEPTH :: 0x1801; +STENCIL :: 0x1802; +STENCIL_INDEX :: 0x1901; +DEPTH_COMPONENT :: 0x1902; +RED :: 0x1903; +GREEN :: 0x1904; +BLUE :: 0x1905; +ALPHA :: 0x1906; +RGB :: 0x1907; +RGBA :: 0x1908; +POINT :: 0x1B00; +LINE :: 0x1B01; +FILL :: 0x1B02; +KEEP :: 0x1E00; +REPLACE :: 0x1E01; +INCR :: 0x1E02; +DECR :: 0x1E03; +VENDOR :: 0x1F00; +RENDERER :: 0x1F01; +VERSION :: 0x1F02; +EXTENSIONS :: 0x1F03; +NEAREST :: 0x2600; +LINEAR :: 0x2601; +NEAREST_MIPMAP_NEAREST :: 0x2700; +LINEAR_MIPMAP_NEAREST :: 0x2701; +NEAREST_MIPMAP_LINEAR :: 0x2702; +LINEAR_MIPMAP_LINEAR :: 0x2703; +TEXTURE_MAG_FILTER :: 0x2800; +TEXTURE_MIN_FILTER :: 0x2801; +TEXTURE_WRAP_S :: 0x2802; +TEXTURE_WRAP_T :: 0x2803; +PROXY_TEXTURE_1D :: 0x8063; +PROXY_TEXTURE_2D :: 0x8064; +REPEAT :: 0x2901; +R3_G3_B2 :: 0x2A10; +RGB4 :: 0x804F; +RGB5 :: 0x8050; +RGB8 :: 0x8051; +RGB10 :: 0x8052; +RGB12 :: 0x8053; +RGB16 :: 0x8054; +RGBA2 :: 0x8055; +RGBA4 :: 0x8056; +RGB5_A1 :: 0x8057; +RGBA8 :: 0x8058; +RGB10_A2 :: 0x8059; +RGBA12 :: 0x805A; +RGBA16 :: 0x805B; +VERTEX_ARRAY :: 0x8074; + +UNSIGNED_BYTE_3_3_2 :: 0x8032; +UNSIGNED_SHORT_4_4_4_4 :: 0x8033; +UNSIGNED_SHORT_5_5_5_1 :: 0x8034; +UNSIGNED_INT_8_8_8_8 :: 0x8035; +UNSIGNED_INT_10_10_10_2 :: 0x8036; +TEXTURE_BINDING_3D :: 0x806A; +PACK_SKIP_IMAGES :: 0x806B; +PACK_IMAGE_HEIGHT :: 0x806C; +UNPACK_SKIP_IMAGES :: 0x806D; +UNPACK_IMAGE_HEIGHT :: 0x806E; +TEXTURE_3D :: 0x806F; +PROXY_TEXTURE_3D :: 0x8070; +TEXTURE_DEPTH :: 0x8071; +TEXTURE_WRAP_R :: 0x8072; +MAX_3D_TEXTURE_SIZE :: 0x8073; +UNSIGNED_BYTE_2_3_3_REV :: 0x8362; +UNSIGNED_SHORT_5_6_5 :: 0x8363; +UNSIGNED_SHORT_5_6_5_REV :: 0x8364; +UNSIGNED_SHORT_4_4_4_4_REV :: 0x8365; +UNSIGNED_SHORT_1_5_5_5_REV :: 0x8366; +UNSIGNED_INT_8_8_8_8_REV :: 0x8367; +UNSIGNED_INT_2_10_10_10_REV :: 0x8368; +BGR :: 0x80E0; +BGRA :: 0x80E1; +MAX_ELEMENTS_VERTICES :: 0x80E8; +MAX_ELEMENTS_INDICES :: 0x80E9; +CLAMP_TO_EDGE :: 0x812F; +TEXTURE_MIN_LOD :: 0x813A; +TEXTURE_MAX_LOD :: 0x813B; +TEXTURE_BASE_LEVEL :: 0x813C; +TEXTURE_MAX_LEVEL :: 0x813D; +SMOOTH_POINT_SIZE_RANGE :: 0x0B12; +SMOOTH_POINT_SIZE_GRANULARITY :: 0x0B13; +SMOOTH_LINE_WIDTH_RANGE :: 0x0B22; +SMOOTH_LINE_WIDTH_GRANULARITY :: 0x0B23; +ALIASED_LINE_WIDTH_RANGE :: 0x846E; + +TEXTURE0 :: 0x84C0; +TEXTURE1 :: 0x84C1; +TEXTURE2 :: 0x84C2; +TEXTURE3 :: 0x84C3; +TEXTURE4 :: 0x84C4; +TEXTURE5 :: 0x84C5; +TEXTURE6 :: 0x84C6; +TEXTURE7 :: 0x84C7; +TEXTURE8 :: 0x84C8; +TEXTURE9 :: 0x84C9; +TEXTURE10 :: 0x84CA; +TEXTURE11 :: 0x84CB; +TEXTURE12 :: 0x84CC; +TEXTURE13 :: 0x84CD; +TEXTURE14 :: 0x84CE; +TEXTURE15 :: 0x84CF; +TEXTURE16 :: 0x84D0; +TEXTURE17 :: 0x84D1; +TEXTURE18 :: 0x84D2; +TEXTURE19 :: 0x84D3; +TEXTURE20 :: 0x84D4; +TEXTURE21 :: 0x84D5; +TEXTURE22 :: 0x84D6; +TEXTURE23 :: 0x84D7; +TEXTURE24 :: 0x84D8; +TEXTURE25 :: 0x84D9; +TEXTURE26 :: 0x84DA; +TEXTURE27 :: 0x84DB; +TEXTURE28 :: 0x84DC; +TEXTURE29 :: 0x84DD; +TEXTURE30 :: 0x84DE; +TEXTURE31 :: 0x84DF; +ACTIVE_TEXTURE :: 0x84E0; +MULTISAMPLE :: 0x809D; +SAMPLE_ALPHA_TO_COVERAGE :: 0x809E; +SAMPLE_ALPHA_TO_ONE :: 0x809F; +SAMPLE_COVERAGE :: 0x80A0; +SAMPLE_BUFFERS :: 0x80A8; +SAMPLES :: 0x80A9; +SAMPLE_COVERAGE_VALUE :: 0x80AA; +SAMPLE_COVERAGE_INVERT :: 0x80AB; +TEXTURE_CUBE_MAP :: 0x8513; +TEXTURE_BINDING_CUBE_MAP :: 0x8514; +TEXTURE_CUBE_MAP_POSITIVE_X :: 0x8515; +TEXTURE_CUBE_MAP_NEGATIVE_X :: 0x8516; +TEXTURE_CUBE_MAP_POSITIVE_Y :: 0x8517; +TEXTURE_CUBE_MAP_NEGATIVE_Y :: 0x8518; +TEXTURE_CUBE_MAP_POSITIVE_Z :: 0x8519; +TEXTURE_CUBE_MAP_NEGATIVE_Z :: 0x851A; +PROXY_TEXTURE_CUBE_MAP :: 0x851B; +MAX_CUBE_MAP_TEXTURE_SIZE :: 0x851C; +COMPRESSED_RGB :: 0x84ED; +COMPRESSED_RGBA :: 0x84EE; +TEXTURE_COMPRESSION_HINT :: 0x84EF; +TEXTURE_COMPRESSED_IMAGE_SIZE :: 0x86A0; +TEXTURE_COMPRESSED :: 0x86A1; +NUM_COMPRESSED_TEXTURE_FORMATS :: 0x86A2; +COMPRESSED_TEXTURE_FORMATS :: 0x86A3; +CLAMP_TO_BORDER :: 0x812D; + +BLEND_DST_RGB :: 0x80C8; +BLEND_SRC_RGB :: 0x80C9; +BLEND_DST_ALPHA :: 0x80CA; +BLEND_SRC_ALPHA :: 0x80CB; +POINT_FADE_THRESHOLD_SIZE :: 0x8128; +DEPTH_COMPONENT16 :: 0x81A5; +DEPTH_COMPONENT24 :: 0x81A6; +DEPTH_COMPONENT32 :: 0x81A7; +MIRRORED_REPEAT :: 0x8370; +MAX_TEXTURE_LOD_BIAS :: 0x84FD; +TEXTURE_LOD_BIAS :: 0x8501; +INCR_WRAP :: 0x8507; +DECR_WRAP :: 0x8508; +TEXTURE_DEPTH_SIZE :: 0x884A; +TEXTURE_COMPARE_MODE :: 0x884C; +TEXTURE_COMPARE_FUNC :: 0x884D; +FUNC_ADD :: 0x8006; +FUNC_SUBTRACT :: 0x800A; +FUNC_REVERSE_SUBTRACT :: 0x800B; +MIN :: 0x8007; +MAX :: 0x8008; +CONSTANT_COLOR :: 0x8001; +ONE_MINUS_CONSTANT_COLOR :: 0x8002; +CONSTANT_ALPHA :: 0x8003; +ONE_MINUS_CONSTANT_ALPHA :: 0x8004; + +BUFFER_SIZE :: 0x8764; +BUFFER_USAGE :: 0x8765; +QUERY_COUNTER_BITS :: 0x8864; +CURRENT_QUERY :: 0x8865; +QUERY_RESULT :: 0x8866; +QUERY_RESULT_AVAILABLE :: 0x8867; +ARRAY_BUFFER :: 0x8892; +ELEMENT_ARRAY_BUFFER :: 0x8893; +ARRAY_BUFFER_BINDING :: 0x8894; +ELEMENT_ARRAY_BUFFER_BINDING :: 0x8895; +VERTEX_ATTRIB_ARRAY_BUFFER_BINDING :: 0x889F; +READ_ONLY :: 0x88B8; +WRITE_ONLY :: 0x88B9; +READ_WRITE :: 0x88BA; +BUFFER_ACCESS :: 0x88BB; +BUFFER_MAPPED :: 0x88BC; +BUFFER_MAP_POINTER :: 0x88BD; +STREAM_DRAW :: 0x88E0; +STREAM_READ :: 0x88E1; +STREAM_COPY :: 0x88E2; +STATIC_DRAW :: 0x88E4; +STATIC_READ :: 0x88E5; +STATIC_COPY :: 0x88E6; +DYNAMIC_DRAW :: 0x88E8; +DYNAMIC_READ :: 0x88E9; +DYNAMIC_COPY :: 0x88EA; +SAMPLES_PASSED :: 0x8914; +SRC1_ALPHA :: 0x8589; + +BLEND_EQUATION_RGB :: 0x8009; +VERTEX_ATTRIB_ARRAY_ENABLED :: 0x8622; +VERTEX_ATTRIB_ARRAY_SIZE :: 0x8623; +VERTEX_ATTRIB_ARRAY_STRIDE :: 0x8624; +VERTEX_ATTRIB_ARRAY_TYPE :: 0x8625; +CURRENT_VERTEX_ATTRIB :: 0x8626; +VERTEX_PROGRAM_POINT_SIZE :: 0x8642; +VERTEX_ATTRIB_ARRAY_POINTER :: 0x8645; +STENCIL_BACK_FUNC :: 0x8800; +STENCIL_BACK_FAIL :: 0x8801; +STENCIL_BACK_PASS_DEPTH_FAIL :: 0x8802; +STENCIL_BACK_PASS_DEPTH_PASS :: 0x8803; +MAX_DRAW_BUFFERS :: 0x8824; +DRAW_BUFFER0 :: 0x8825; +DRAW_BUFFER1 :: 0x8826; +DRAW_BUFFER2 :: 0x8827; +DRAW_BUFFER3 :: 0x8828; +DRAW_BUFFER4 :: 0x8829; +DRAW_BUFFER5 :: 0x882A; +DRAW_BUFFER6 :: 0x882B; +DRAW_BUFFER7 :: 0x882C; +DRAW_BUFFER8 :: 0x882D; +DRAW_BUFFER9 :: 0x882E; +DRAW_BUFFER10 :: 0x882F; +DRAW_BUFFER11 :: 0x8830; +DRAW_BUFFER12 :: 0x8831; +DRAW_BUFFER13 :: 0x8832; +DRAW_BUFFER14 :: 0x8833; +DRAW_BUFFER15 :: 0x8834; +BLEND_EQUATION_ALPHA :: 0x883D; +MAX_VERTEX_ATTRIBS :: 0x8869; +VERTEX_ATTRIB_ARRAY_NORMALIZED :: 0x886A; +MAX_TEXTURE_IMAGE_UNITS :: 0x8872; +FRAGMENT_SHADER :: 0x8B30; +VERTEX_SHADER :: 0x8B31; +MAX_FRAGMENT_UNIFORM_COMPONENTS :: 0x8B49; +MAX_VERTEX_UNIFORM_COMPONENTS :: 0x8B4A; +MAX_VARYING_FLOATS :: 0x8B4B; +MAX_VERTEX_TEXTURE_IMAGE_UNITS :: 0x8B4C; +MAX_COMBINED_TEXTURE_IMAGE_UNITS :: 0x8B4D; +SHADER_TYPE :: 0x8B4F; +FLOAT_VEC2 :: 0x8B50; +FLOAT_VEC3 :: 0x8B51; +FLOAT_VEC4 :: 0x8B52; +INT_VEC2 :: 0x8B53; +INT_VEC3 :: 0x8B54; +INT_VEC4 :: 0x8B55; +BOOL :: 0x8B56; +BOOL_VEC2 :: 0x8B57; +BOOL_VEC3 :: 0x8B58; +BOOL_VEC4 :: 0x8B59; +FLOAT_MAT2 :: 0x8B5A; +FLOAT_MAT3 :: 0x8B5B; +FLOAT_MAT4 :: 0x8B5C; +SAMPLER_1D :: 0x8B5D; +SAMPLER_2D :: 0x8B5E; +SAMPLER_3D :: 0x8B5F; +SAMPLER_CUBE :: 0x8B60; +SAMPLER_1D_SHADOW :: 0x8B61; +SAMPLER_2D_SHADOW :: 0x8B62; +DELETE_STATUS :: 0x8B80; +COMPILE_STATUS :: 0x8B81; +LINK_STATUS :: 0x8B82; +VALIDATE_STATUS :: 0x8B83; +INFO_LOG_LENGTH :: 0x8B84; +ATTACHED_SHADERS :: 0x8B85; +ACTIVE_UNIFORMS :: 0x8B86; +ACTIVE_UNIFORM_MAX_LENGTH :: 0x8B87; +SHADER_SOURCE_LENGTH :: 0x8B88; +ACTIVE_ATTRIBUTES :: 0x8B89; +ACTIVE_ATTRIBUTE_MAX_LENGTH :: 0x8B8A; +FRAGMENT_SHADER_DERIVATIVE_HINT :: 0x8B8B; +SHADING_LANGUAGE_VERSION :: 0x8B8C; +CURRENT_PROGRAM :: 0x8B8D; +POINT_SPRITE_COORD_ORIGIN :: 0x8CA0; +LOWER_LEFT :: 0x8CA1; +UPPER_LEFT :: 0x8CA2; +STENCIL_BACK_REF :: 0x8CA3; +STENCIL_BACK_VALUE_MASK :: 0x8CA4; +STENCIL_BACK_WRITEMASK :: 0x8CA5; + +PIXEL_PACK_BUFFER :: 0x88EB; +PIXEL_UNPACK_BUFFER :: 0x88EC; +PIXEL_PACK_BUFFER_BINDING :: 0x88ED; +PIXEL_UNPACK_BUFFER_BINDING :: 0x88EF; +FLOAT_MAT2x3 :: 0x8B65; +FLOAT_MAT2x4 :: 0x8B66; +FLOAT_MAT3x2 :: 0x8B67; +FLOAT_MAT3x4 :: 0x8B68; +FLOAT_MAT4x2 :: 0x8B69; +FLOAT_MAT4x3 :: 0x8B6A; +SRGB :: 0x8C40; +SRGB8 :: 0x8C41; +SRGB_ALPHA :: 0x8C42; +SRGB8_ALPHA8 :: 0x8C43; +COMPRESSED_SRGB :: 0x8C48; +COMPRESSED_SRGB_ALPHA :: 0x8C49; + +COMPARE_REF_TO_TEXTURE :: 0x884E; +CLIP_DISTANCE0 :: 0x3000; +CLIP_DISTANCE1 :: 0x3001; +CLIP_DISTANCE2 :: 0x3002; +CLIP_DISTANCE3 :: 0x3003; +CLIP_DISTANCE4 :: 0x3004; +CLIP_DISTANCE5 :: 0x3005; +CLIP_DISTANCE6 :: 0x3006; +CLIP_DISTANCE7 :: 0x3007; +MAX_CLIP_DISTANCES :: 0x0D32; +MAJOR_VERSION :: 0x821B; +MINOR_VERSION :: 0x821C; +NUM_EXTENSIONS :: 0x821D; +CONTEXT_FLAGS :: 0x821E; +COMPRESSED_RED :: 0x8225; +COMPRESSED_RG :: 0x8226; +CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT :: 0x00000001; +RGBA32F :: 0x8814; +RGB32F :: 0x8815; +RGBA16F :: 0x881A; +RGB16F :: 0x881B; +VERTEX_ATTRIB_ARRAY_INTEGER :: 0x88FD; +MAX_ARRAY_TEXTURE_LAYERS :: 0x88FF; +MIN_PROGRAM_TEXEL_OFFSET :: 0x8904; +MAX_PROGRAM_TEXEL_OFFSET :: 0x8905; +CLAMP_READ_COLOR :: 0x891C; +FIXED_ONLY :: 0x891D; +MAX_VARYING_COMPONENTS :: 0x8B4B; +TEXTURE_1D_ARRAY :: 0x8C18; +PROXY_TEXTURE_1D_ARRAY :: 0x8C19; +TEXTURE_2D_ARRAY :: 0x8C1A; +PROXY_TEXTURE_2D_ARRAY :: 0x8C1B; +TEXTURE_BINDING_1D_ARRAY :: 0x8C1C; +TEXTURE_BINDING_2D_ARRAY :: 0x8C1D; +R11F_G11F_B10F :: 0x8C3A; +UNSIGNED_INT_10F_11F_11F_REV :: 0x8C3B; +RGB9_E5 :: 0x8C3D; +UNSIGNED_INT_5_9_9_9_REV :: 0x8C3E; +TEXTURE_SHARED_SIZE :: 0x8C3F; +TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH :: 0x8C76; +TRANSFORM_FEEDBACK_BUFFER_MODE :: 0x8C7F; +MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS :: 0x8C80; +TRANSFORM_FEEDBACK_VARYINGS :: 0x8C83; +TRANSFORM_FEEDBACK_BUFFER_START :: 0x8C84; +TRANSFORM_FEEDBACK_BUFFER_SIZE :: 0x8C85; +PRIMITIVES_GENERATED :: 0x8C87; +TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN :: 0x8C88; +RASTERIZER_DISCARD :: 0x8C89; +MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS :: 0x8C8A; +MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS :: 0x8C8B; +INTERLEAVED_ATTRIBS :: 0x8C8C; +SEPARATE_ATTRIBS :: 0x8C8D; +TRANSFORM_FEEDBACK_BUFFER :: 0x8C8E; +TRANSFORM_FEEDBACK_BUFFER_BINDING :: 0x8C8F; +RGBA32UI :: 0x8D70; +RGB32UI :: 0x8D71; +RGBA16UI :: 0x8D76; +RGB16UI :: 0x8D77; +RGBA8UI :: 0x8D7C; +RGB8UI :: 0x8D7D; +RGBA32I :: 0x8D82; +RGB32I :: 0x8D83; +RGBA16I :: 0x8D88; +RGB16I :: 0x8D89; +RGBA8I :: 0x8D8E; +RGB8I :: 0x8D8F; +RED_INTEGER :: 0x8D94; +GREEN_INTEGER :: 0x8D95; +BLUE_INTEGER :: 0x8D96; +RGB_INTEGER :: 0x8D98; +RGBA_INTEGER :: 0x8D99; +BGR_INTEGER :: 0x8D9A; +BGRA_INTEGER :: 0x8D9B; +SAMPLER_1D_ARRAY :: 0x8DC0; +SAMPLER_2D_ARRAY :: 0x8DC1; +SAMPLER_1D_ARRAY_SHADOW :: 0x8DC3; +SAMPLER_2D_ARRAY_SHADOW :: 0x8DC4; +SAMPLER_CUBE_SHADOW :: 0x8DC5; +UNSIGNED_INT_VEC2 :: 0x8DC6; +UNSIGNED_INT_VEC3 :: 0x8DC7; +UNSIGNED_INT_VEC4 :: 0x8DC8; +INT_SAMPLER_1D :: 0x8DC9; +INT_SAMPLER_2D :: 0x8DCA; +INT_SAMPLER_3D :: 0x8DCB; +INT_SAMPLER_CUBE :: 0x8DCC; +INT_SAMPLER_1D_ARRAY :: 0x8DCE; +INT_SAMPLER_2D_ARRAY :: 0x8DCF; +UNSIGNED_INT_SAMPLER_1D :: 0x8DD1; +UNSIGNED_INT_SAMPLER_2D :: 0x8DD2; +UNSIGNED_INT_SAMPLER_3D :: 0x8DD3; +UNSIGNED_INT_SAMPLER_CUBE :: 0x8DD4; +UNSIGNED_INT_SAMPLER_1D_ARRAY :: 0x8DD6; +UNSIGNED_INT_SAMPLER_2D_ARRAY :: 0x8DD7; +QUERY_WAIT :: 0x8E13; +QUERY_NO_WAIT :: 0x8E14; +QUERY_BY_REGION_WAIT :: 0x8E15; +QUERY_BY_REGION_NO_WAIT :: 0x8E16; +BUFFER_ACCESS_FLAGS :: 0x911F; +BUFFER_MAP_LENGTH :: 0x9120; +BUFFER_MAP_OFFSET :: 0x9121; +DEPTH_COMPONENT32F :: 0x8CAC; +DEPTH32F_STENCIL8 :: 0x8CAD; +FLOAT_32_UNSIGNED_INT_24_8_REV :: 0x8DAD; +INVALID_FRAMEBUFFER_OPERATION :: 0x0506; +FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING :: 0x8210; +FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE :: 0x8211; +FRAMEBUFFER_ATTACHMENT_RED_SIZE :: 0x8212; +FRAMEBUFFER_ATTACHMENT_GREEN_SIZE :: 0x8213; +FRAMEBUFFER_ATTACHMENT_BLUE_SIZE :: 0x8214; +FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE :: 0x8215; +FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE :: 0x8216; +FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE :: 0x8217; +FRAMEBUFFER_DEFAULT :: 0x8218; +FRAMEBUFFER_UNDEFINED :: 0x8219; +DEPTH_STENCIL_ATTACHMENT :: 0x821A; +MAX_RENDERBUFFER_SIZE :: 0x84E8; +DEPTH_STENCIL :: 0x84F9; +UNSIGNED_INT_24_8 :: 0x84FA; +DEPTH24_STENCIL8 :: 0x88F0; +TEXTURE_STENCIL_SIZE :: 0x88F1; +TEXTURE_RED_TYPE :: 0x8C10; +TEXTURE_GREEN_TYPE :: 0x8C11; +TEXTURE_BLUE_TYPE :: 0x8C12; +TEXTURE_ALPHA_TYPE :: 0x8C13; +TEXTURE_DEPTH_TYPE :: 0x8C16; +UNSIGNED_NORMALIZED :: 0x8C17; +FRAMEBUFFER_BINDING :: 0x8CA6; +DRAW_FRAMEBUFFER_BINDING :: 0x8CA6; +RENDERBUFFER_BINDING :: 0x8CA7; +READ_FRAMEBUFFER :: 0x8CA8; +DRAW_FRAMEBUFFER :: 0x8CA9; +READ_FRAMEBUFFER_BINDING :: 0x8CAA; +RENDERBUFFER_SAMPLES :: 0x8CAB; +FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE :: 0x8CD0; +FRAMEBUFFER_ATTACHMENT_OBJECT_NAME :: 0x8CD1; +FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL :: 0x8CD2; +FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE :: 0x8CD3; +FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER :: 0x8CD4; +FRAMEBUFFER_COMPLETE :: 0x8CD5; +FRAMEBUFFER_INCOMPLETE_ATTACHMENT :: 0x8CD6; +FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT :: 0x8CD7; +FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER :: 0x8CDB; +FRAMEBUFFER_INCOMPLETE_READ_BUFFER :: 0x8CDC; +FRAMEBUFFER_UNSUPPORTED :: 0x8CDD; +MAX_COLOR_ATTACHMENTS :: 0x8CDF; +COLOR_ATTACHMENT0 :: 0x8CE0; +COLOR_ATTACHMENT1 :: 0x8CE1; +COLOR_ATTACHMENT2 :: 0x8CE2; +COLOR_ATTACHMENT3 :: 0x8CE3; +COLOR_ATTACHMENT4 :: 0x8CE4; +COLOR_ATTACHMENT5 :: 0x8CE5; +COLOR_ATTACHMENT6 :: 0x8CE6; +COLOR_ATTACHMENT7 :: 0x8CE7; +COLOR_ATTACHMENT8 :: 0x8CE8; +COLOR_ATTACHMENT9 :: 0x8CE9; +COLOR_ATTACHMENT10 :: 0x8CEA; +COLOR_ATTACHMENT11 :: 0x8CEB; +COLOR_ATTACHMENT12 :: 0x8CEC; +COLOR_ATTACHMENT13 :: 0x8CED; +COLOR_ATTACHMENT14 :: 0x8CEE; +COLOR_ATTACHMENT15 :: 0x8CEF; +COLOR_ATTACHMENT16 :: 0x8CF0; +COLOR_ATTACHMENT17 :: 0x8CF1; +COLOR_ATTACHMENT18 :: 0x8CF2; +COLOR_ATTACHMENT19 :: 0x8CF3; +COLOR_ATTACHMENT20 :: 0x8CF4; +COLOR_ATTACHMENT21 :: 0x8CF5; +COLOR_ATTACHMENT22 :: 0x8CF6; +COLOR_ATTACHMENT23 :: 0x8CF7; +COLOR_ATTACHMENT24 :: 0x8CF8; +COLOR_ATTACHMENT25 :: 0x8CF9; +COLOR_ATTACHMENT26 :: 0x8CFA; +COLOR_ATTACHMENT27 :: 0x8CFB; +COLOR_ATTACHMENT28 :: 0x8CFC; +COLOR_ATTACHMENT29 :: 0x8CFD; +COLOR_ATTACHMENT30 :: 0x8CFE; +COLOR_ATTACHMENT31 :: 0x8CFF; +DEPTH_ATTACHMENT :: 0x8D00; +STENCIL_ATTACHMENT :: 0x8D20; +FRAMEBUFFER :: 0x8D40; +RENDERBUFFER :: 0x8D41; +RENDERBUFFER_WIDTH :: 0x8D42; +RENDERBUFFER_HEIGHT :: 0x8D43; +RENDERBUFFER_INTERNAL_FORMAT :: 0x8D44; +STENCIL_INDEX1 :: 0x8D46; +STENCIL_INDEX4 :: 0x8D47; +STENCIL_INDEX8 :: 0x8D48; +STENCIL_INDEX16 :: 0x8D49; +RENDERBUFFER_RED_SIZE :: 0x8D50; +RENDERBUFFER_GREEN_SIZE :: 0x8D51; +RENDERBUFFER_BLUE_SIZE :: 0x8D52; +RENDERBUFFER_ALPHA_SIZE :: 0x8D53; +RENDERBUFFER_DEPTH_SIZE :: 0x8D54; +RENDERBUFFER_STENCIL_SIZE :: 0x8D55; +FRAMEBUFFER_INCOMPLETE_MULTISAMPLE :: 0x8D56; +MAX_SAMPLES :: 0x8D57; +FRAMEBUFFER_SRGB :: 0x8DB9; +HALF_FLOAT :: 0x140B; +MAP_READ_BIT :: 0x0001; +MAP_WRITE_BIT :: 0x0002; +MAP_INVALIDATE_RANGE_BIT :: 0x0004; +MAP_INVALIDATE_BUFFER_BIT :: 0x0008; +MAP_FLUSH_EXPLICIT_BIT :: 0x0010; +MAP_UNSYNCHRONIZED_BIT :: 0x0020; +COMPRESSED_RED_RGTC1 :: 0x8DBB; +COMPRESSED_SIGNED_RED_RGTC1 :: 0x8DBC; +COMPRESSED_RG_RGTC2 :: 0x8DBD; +COMPRESSED_SIGNED_RG_RGTC2 :: 0x8DBE; +RG :: 0x8227; +RG_INTEGER :: 0x8228; +R8 :: 0x8229; +R16 :: 0x822A; +RG8 :: 0x822B; +RG16 :: 0x822C; +R16F :: 0x822D; +R32F :: 0x822E; +RG16F :: 0x822F; +RG32F :: 0x8230; +R8I :: 0x8231; +R8UI :: 0x8232; +R16I :: 0x8233; +R16UI :: 0x8234; +R32I :: 0x8235; +R32UI :: 0x8236; +RG8I :: 0x8237; +RG8UI :: 0x8238; +RG16I :: 0x8239; +RG16UI :: 0x823A; +RG32I :: 0x823B; +RG32UI :: 0x823C; +VERTEX_ARRAY_BINDING :: 0x85B5; + +SAMPLER_2D_RECT :: 0x8B63; +SAMPLER_2D_RECT_SHADOW :: 0x8B64; +SAMPLER_BUFFER :: 0x8DC2; +INT_SAMPLER_2D_RECT :: 0x8DCD; +INT_SAMPLER_BUFFER :: 0x8DD0; +UNSIGNED_INT_SAMPLER_2D_RECT :: 0x8DD5; +UNSIGNED_INT_SAMPLER_BUFFER :: 0x8DD8; +TEXTURE_BUFFER :: 0x8C2A; +MAX_TEXTURE_BUFFER_SIZE :: 0x8C2B; +TEXTURE_BINDING_BUFFER :: 0x8C2C; +TEXTURE_BUFFER_DATA_STORE_BINDING :: 0x8C2D; +TEXTURE_RECTANGLE :: 0x84F5; +TEXTURE_BINDING_RECTANGLE :: 0x84F6; +PROXY_TEXTURE_RECTANGLE :: 0x84F7; +MAX_RECTANGLE_TEXTURE_SIZE :: 0x84F8; +R8_SNORM :: 0x8F94; +RG8_SNORM :: 0x8F95; +RGB8_SNORM :: 0x8F96; +RGBA8_SNORM :: 0x8F97; +R16_SNORM :: 0x8F98; +RG16_SNORM :: 0x8F99; +RGB16_SNORM :: 0x8F9A; +RGBA16_SNORM :: 0x8F9B; +SIGNED_NORMALIZED :: 0x8F9C; +PRIMITIVE_RESTART :: 0x8F9D; +PRIMITIVE_RESTART_INDEX :: 0x8F9E; +COPY_READ_BUFFER :: 0x8F36; +COPY_WRITE_BUFFER :: 0x8F37; +UNIFORM_BUFFER :: 0x8A11; +UNIFORM_BUFFER_BINDING :: 0x8A28; +UNIFORM_BUFFER_START :: 0x8A29; +UNIFORM_BUFFER_SIZE :: 0x8A2A; +MAX_VERTEX_UNIFORM_BLOCKS :: 0x8A2B; +MAX_GEOMETRY_UNIFORM_BLOCKS :: 0x8A2C; +MAX_FRAGMENT_UNIFORM_BLOCKS :: 0x8A2D; +MAX_COMBINED_UNIFORM_BLOCKS :: 0x8A2E; +MAX_UNIFORM_BUFFER_BINDINGS :: 0x8A2F; +MAX_UNIFORM_BLOCK_SIZE :: 0x8A30; +MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS :: 0x8A31; +MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS :: 0x8A32; +MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS :: 0x8A33; +UNIFORM_BUFFER_OFFSET_ALIGNMENT :: 0x8A34; +ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH :: 0x8A35; +ACTIVE_UNIFORM_BLOCKS :: 0x8A36; +UNIFORM_TYPE :: 0x8A37; +UNIFORM_SIZE :: 0x8A38; +UNIFORM_NAME_LENGTH :: 0x8A39; +UNIFORM_BLOCK_INDEX :: 0x8A3A; +UNIFORM_OFFSET :: 0x8A3B; +UNIFORM_ARRAY_STRIDE :: 0x8A3C; +UNIFORM_MATRIX_STRIDE :: 0x8A3D; +UNIFORM_IS_ROW_MAJOR :: 0x8A3E; +UNIFORM_BLOCK_BINDING :: 0x8A3F; +UNIFORM_BLOCK_DATA_SIZE :: 0x8A40; +UNIFORM_BLOCK_NAME_LENGTH :: 0x8A41; +UNIFORM_BLOCK_ACTIVE_UNIFORMS :: 0x8A42; +UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES :: 0x8A43; +UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER :: 0x8A44; +UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER :: 0x8A45; +UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER :: 0x8A46; +INVALID_INDEX :: 0xFFFFFFFF; + +CONTEXT_CORE_PROFILE_BIT :: 0x00000001; +CONTEXT_COMPATIBILITY_PROFILE_BIT :: 0x00000002; +LINES_ADJACENCY :: 0x000A; +LINE_STRIP_ADJACENCY :: 0x000B; +TRIANGLES_ADJACENCY :: 0x000C; +TRIANGLE_STRIP_ADJACENCY :: 0x000D; +PROGRAM_POINT_SIZE :: 0x8642; +MAX_GEOMETRY_TEXTURE_IMAGE_UNITS :: 0x8C29; +FRAMEBUFFER_ATTACHMENT_LAYERED :: 0x8DA7; +FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS :: 0x8DA8; +GEOMETRY_SHADER :: 0x8DD9; +GEOMETRY_VERTICES_OUT :: 0x8916; +GEOMETRY_INPUT_TYPE :: 0x8917; +GEOMETRY_OUTPUT_TYPE :: 0x8918; +MAX_GEOMETRY_UNIFORM_COMPONENTS :: 0x8DDF; +MAX_GEOMETRY_OUTPUT_VERTICES :: 0x8DE0; +MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS :: 0x8DE1; +MAX_VERTEX_OUTPUT_COMPONENTS :: 0x9122; +MAX_GEOMETRY_INPUT_COMPONENTS :: 0x9123; +MAX_GEOMETRY_OUTPUT_COMPONENTS :: 0x9124; +MAX_FRAGMENT_INPUT_COMPONENTS :: 0x9125; +CONTEXT_PROFILE_MASK :: 0x9126; +DEPTH_CLAMP :: 0x864F; +QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION :: 0x8E4C; +FIRST_VERTEX_CONVENTION :: 0x8E4D; +LAST_VERTEX_CONVENTION :: 0x8E4E; +PROVOKING_VERTEX :: 0x8E4F; +TEXTURE_CUBE_MAP_SEAMLESS :: 0x884F; +MAX_SERVER_WAIT_TIMEOUT :: 0x9111; +OBJECT_TYPE :: 0x9112; +SYNC_CONDITION :: 0x9113; +SYNC_STATUS :: 0x9114; +SYNC_FLAGS :: 0x9115; +SYNC_FENCE :: 0x9116; +SYNC_GPU_COMMANDS_COMPLETE :: 0x9117; +UNSIGNALED :: 0x9118; +SIGNALED :: 0x9119; +ALREADY_SIGNALED :: 0x911A; +TIMEOUT_EXPIRED :: 0x911B; +CONDITION_SATISFIED :: 0x911C; +WAIT_FAILED :: 0x911D; +TIMEOUT_IGNORED :: 0xFFFFFFFFFFFFFFFF; +SYNC_FLUSH_COMMANDS_BIT :: 0x00000001; +SAMPLE_POSITION :: 0x8E50; +SAMPLE_MASK :: 0x8E51; +SAMPLE_MASK_VALUE :: 0x8E52; +MAX_SAMPLE_MASK_WORDS :: 0x8E59; +TEXTURE_2D_MULTISAMPLE :: 0x9100; +PROXY_TEXTURE_2D_MULTISAMPLE :: 0x9101; +TEXTURE_2D_MULTISAMPLE_ARRAY :: 0x9102; +PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY :: 0x9103; +TEXTURE_BINDING_2D_MULTISAMPLE :: 0x9104; +TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY :: 0x9105; +TEXTURE_SAMPLES :: 0x9106; +TEXTURE_FIXED_SAMPLE_LOCATIONS :: 0x9107; +SAMPLER_2D_MULTISAMPLE :: 0x9108; +INT_SAMPLER_2D_MULTISAMPLE :: 0x9109; +UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE :: 0x910A; +SAMPLER_2D_MULTISAMPLE_ARRAY :: 0x910B; +INT_SAMPLER_2D_MULTISAMPLE_ARRAY :: 0x910C; +UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY :: 0x910D; +MAX_COLOR_TEXTURE_SAMPLES :: 0x910E; +MAX_DEPTH_TEXTURE_SAMPLES :: 0x910F; +MAX_INTEGER_SAMPLES :: 0x9110; + +VERTEX_ATTRIB_ARRAY_DIVISOR :: 0x88FE; +SRC1_COLOR :: 0x88F9; +ONE_MINUS_SRC1_COLOR :: 0x88FA; +ONE_MINUS_SRC1_ALPHA :: 0x88FB; +MAX_DUAL_SOURCE_DRAW_BUFFERS :: 0x88FC; +ANY_SAMPLES_PASSED :: 0x8C2F; +SAMPLER_BINDING :: 0x8919; +RGB10_A2UI :: 0x906F; +TEXTURE_SWIZZLE_R :: 0x8E42; +TEXTURE_SWIZZLE_G :: 0x8E43; +TEXTURE_SWIZZLE_B :: 0x8E44; +TEXTURE_SWIZZLE_A :: 0x8E45; +TEXTURE_SWIZZLE_RGBA :: 0x8E46; +TIME_ELAPSED :: 0x88BF; +TIMESTAMP :: 0x8E28; +INT_2_10_10_10_REV :: 0x8D9F; + +SAMPLE_SHADING :: 0x8C36; +MIN_SAMPLE_SHADING_VALUE :: 0x8C37; +MIN_PROGRAM_TEXTURE_GATHER_OFFSET :: 0x8E5E; +MAX_PROGRAM_TEXTURE_GATHER_OFFSET :: 0x8E5F; +TEXTURE_CUBE_MAP_ARRAY :: 0x9009; +TEXTURE_BINDING_CUBE_MAP_ARRAY :: 0x900A; +PROXY_TEXTURE_CUBE_MAP_ARRAY :: 0x900B; +SAMPLER_CUBE_MAP_ARRAY :: 0x900C; +SAMPLER_CUBE_MAP_ARRAY_SHADOW :: 0x900D; +INT_SAMPLER_CUBE_MAP_ARRAY :: 0x900E; +UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY :: 0x900F; +DRAW_INDIRECT_BUFFER :: 0x8F3F; +DRAW_INDIRECT_BUFFER_BINDING :: 0x8F43; +GEOMETRY_SHADER_INVOCATIONS :: 0x887F; +MAX_GEOMETRY_SHADER_INVOCATIONS :: 0x8E5A; +MIN_FRAGMENT_INTERPOLATION_OFFSET :: 0x8E5B; +MAX_FRAGMENT_INTERPOLATION_OFFSET :: 0x8E5C; +FRAGMENT_INTERPOLATION_OFFSET_BITS :: 0x8E5D; +MAX_VERTEX_STREAMS :: 0x8E71; +DOUBLE_VEC2 :: 0x8FFC; +DOUBLE_VEC3 :: 0x8FFD; +DOUBLE_VEC4 :: 0x8FFE; +DOUBLE_MAT2 :: 0x8F46; +DOUBLE_MAT3 :: 0x8F47; +DOUBLE_MAT4 :: 0x8F48; +DOUBLE_MAT2x3 :: 0x8F49; +DOUBLE_MAT2x4 :: 0x8F4A; +DOUBLE_MAT3x2 :: 0x8F4B; +DOUBLE_MAT3x4 :: 0x8F4C; +DOUBLE_MAT4x2 :: 0x8F4D; +DOUBLE_MAT4x3 :: 0x8F4E; +ACTIVE_SUBROUTINES :: 0x8DE5; +ACTIVE_SUBROUTINE_UNIFORMS :: 0x8DE6; +ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS :: 0x8E47; +ACTIVE_SUBROUTINE_MAX_LENGTH :: 0x8E48; +ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH :: 0x8E49; +MAX_SUBROUTINES :: 0x8DE7; +MAX_SUBROUTINE_UNIFORM_LOCATIONS :: 0x8DE8; +NUM_COMPATIBLE_SUBROUTINES :: 0x8E4A; +COMPATIBLE_SUBROUTINES :: 0x8E4B; +PATCHES :: 0x000E; +PATCH_VERTICES :: 0x8E72; +PATCH_DEFAULT_INNER_LEVEL :: 0x8E73; +PATCH_DEFAULT_OUTER_LEVEL :: 0x8E74; +TESS_CONTROL_OUTPUT_VERTICES :: 0x8E75; +TESS_GEN_MODE :: 0x8E76; +TESS_GEN_SPACING :: 0x8E77; +TESS_GEN_VERTEX_ORDER :: 0x8E78; +TESS_GEN_POINT_MODE :: 0x8E79; +ISOLINES :: 0x8E7A; +FRACTIONAL_ODD :: 0x8E7B; +FRACTIONAL_EVEN :: 0x8E7C; +MAX_PATCH_VERTICES :: 0x8E7D; +MAX_TESS_GEN_LEVEL :: 0x8E7E; +MAX_TESS_CONTROL_UNIFORM_COMPONENTS :: 0x8E7F; +MAX_TESS_EVALUATION_UNIFORM_COMPONENTS :: 0x8E80; +MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS :: 0x8E81; +MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS :: 0x8E82; +MAX_TESS_CONTROL_OUTPUT_COMPONENTS :: 0x8E83; +MAX_TESS_PATCH_COMPONENTS :: 0x8E84; +MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS :: 0x8E85; +MAX_TESS_EVALUATION_OUTPUT_COMPONENTS :: 0x8E86; +MAX_TESS_CONTROL_UNIFORM_BLOCKS :: 0x8E89; +MAX_TESS_EVALUATION_UNIFORM_BLOCKS :: 0x8E8A; +MAX_TESS_CONTROL_INPUT_COMPONENTS :: 0x886C; +MAX_TESS_EVALUATION_INPUT_COMPONENTS :: 0x886D; +MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS :: 0x8E1E; +MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS :: 0x8E1F; +UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER :: 0x84F0; +UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER :: 0x84F1; +TESS_EVALUATION_SHADER :: 0x8E87; +TESS_CONTROL_SHADER :: 0x8E88; +TRANSFORM_FEEDBACK :: 0x8E22; +TRANSFORM_FEEDBACK_BUFFER_PAUSED :: 0x8E23; +TRANSFORM_FEEDBACK_BUFFER_ACTIVE :: 0x8E24; +TRANSFORM_FEEDBACK_BINDING :: 0x8E25; +MAX_TRANSFORM_FEEDBACK_BUFFERS :: 0x8E70; + +FIXED :: 0x140C; +IMPLEMENTATION_COLOR_READ_TYPE :: 0x8B9A; +IMPLEMENTATION_COLOR_READ_FORMAT :: 0x8B9B; +LOW_FLOAT :: 0x8DF0; +MEDIUM_FLOAT :: 0x8DF1; +HIGH_FLOAT :: 0x8DF2; +LOW_INT :: 0x8DF3; +MEDIUM_INT :: 0x8DF4; +HIGH_INT :: 0x8DF5; +SHADER_COMPILER :: 0x8DFA; +SHADER_BINARY_FORMATS :: 0x8DF8; +NUM_SHADER_BINARY_FORMATS :: 0x8DF9; +MAX_VERTEX_UNIFORM_VECTORS :: 0x8DFB; +MAX_VARYING_VECTORS :: 0x8DFC; +MAX_FRAGMENT_UNIFORM_VECTORS :: 0x8DFD; +RGB565 :: 0x8D62; +PROGRAM_BINARY_RETRIEVABLE_HINT :: 0x8257; +PROGRAM_BINARY_LENGTH :: 0x8741; +NUM_PROGRAM_BINARY_FORMATS :: 0x87FE; +PROGRAM_BINARY_FORMATS :: 0x87FF; +VERTEX_SHADER_BIT :: 0x00000001; +FRAGMENT_SHADER_BIT :: 0x00000002; +GEOMETRY_SHADER_BIT :: 0x00000004; +TESS_CONTROL_SHADER_BIT :: 0x00000008; +TESS_EVALUATION_SHADER_BIT :: 0x00000010; +ALL_SHADER_BITS :: 0xFFFFFFFF; +PROGRAM_SEPARABLE :: 0x8258; +ACTIVE_PROGRAM :: 0x8259; +PROGRAM_PIPELINE_BINDING :: 0x825A; +MAX_VIEWPORTS :: 0x825B; +VIEWPORT_SUBPIXEL_BITS :: 0x825C; +VIEWPORT_BOUNDS_RANGE :: 0x825D; +LAYER_PROVOKING_VERTEX :: 0x825E; +VIEWPORT_INDEX_PROVOKING_VERTEX :: 0x825F; +UNDEFINED_VERTEX :: 0x8260; + +COPY_READ_BUFFER_BINDING :: 0x8F36; +COPY_WRITE_BUFFER_BINDING :: 0x8F37; +TRANSFORM_FEEDBACK_ACTIVE :: 0x8E24; +TRANSFORM_FEEDBACK_PAUSED :: 0x8E23; +UNPACK_COMPRESSED_BLOCK_WIDTH :: 0x9127; +UNPACK_COMPRESSED_BLOCK_HEIGHT :: 0x9128; +UNPACK_COMPRESSED_BLOCK_DEPTH :: 0x9129; +UNPACK_COMPRESSED_BLOCK_SIZE :: 0x912A; +PACK_COMPRESSED_BLOCK_WIDTH :: 0x912B; +PACK_COMPRESSED_BLOCK_HEIGHT :: 0x912C; +PACK_COMPRESSED_BLOCK_DEPTH :: 0x912D; +PACK_COMPRESSED_BLOCK_SIZE :: 0x912E; +NUM_SAMPLE_COUNTS :: 0x9380; +MIN_MAP_BUFFER_ALIGNMENT :: 0x90BC; +ATOMIC_COUNTER_BUFFER :: 0x92C0; +ATOMIC_COUNTER_BUFFER_BINDING :: 0x92C1; +ATOMIC_COUNTER_BUFFER_START :: 0x92C2; +ATOMIC_COUNTER_BUFFER_SIZE :: 0x92C3; +ATOMIC_COUNTER_BUFFER_DATA_SIZE :: 0x92C4; +ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS :: 0x92C5; +ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES :: 0x92C6; +ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER :: 0x92C7; +ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER :: 0x92C8; +ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER :: 0x92C9; +ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER :: 0x92CA; +ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER :: 0x92CB; +MAX_VERTEX_ATOMIC_COUNTER_BUFFERS :: 0x92CC; +MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS :: 0x92CD; +MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS :: 0x92CE; +MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS :: 0x92CF; +MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS :: 0x92D0; +MAX_COMBINED_ATOMIC_COUNTER_BUFFERS :: 0x92D1; +MAX_VERTEX_ATOMIC_COUNTERS :: 0x92D2; +MAX_TESS_CONTROL_ATOMIC_COUNTERS :: 0x92D3; +MAX_TESS_EVALUATION_ATOMIC_COUNTERS :: 0x92D4; +MAX_GEOMETRY_ATOMIC_COUNTERS :: 0x92D5; +MAX_FRAGMENT_ATOMIC_COUNTERS :: 0x92D6; +MAX_COMBINED_ATOMIC_COUNTERS :: 0x92D7; +MAX_ATOMIC_COUNTER_BUFFER_SIZE :: 0x92D8; +MAX_ATOMIC_COUNTER_BUFFER_BINDINGS :: 0x92DC; +ACTIVE_ATOMIC_COUNTER_BUFFERS :: 0x92D9; +UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX :: 0x92DA; +UNSIGNED_INT_ATOMIC_COUNTER :: 0x92DB; +VERTEX_ATTRIB_ARRAY_BARRIER_BIT :: 0x00000001; +ELEMENT_ARRAY_BARRIER_BIT :: 0x00000002; +UNIFORM_BARRIER_BIT :: 0x00000004; +TEXTURE_FETCH_BARRIER_BIT :: 0x00000008; +SHADER_IMAGE_ACCESS_BARRIER_BIT :: 0x00000020; +COMMAND_BARRIER_BIT :: 0x00000040; +PIXEL_BUFFER_BARRIER_BIT :: 0x00000080; +TEXTURE_UPDATE_BARRIER_BIT :: 0x00000100; +BUFFER_UPDATE_BARRIER_BIT :: 0x00000200; +FRAMEBUFFER_BARRIER_BIT :: 0x00000400; +TRANSFORM_FEEDBACK_BARRIER_BIT :: 0x00000800; +ATOMIC_COUNTER_BARRIER_BIT :: 0x00001000; +ALL_BARRIER_BITS :: 0xFFFFFFFF; +MAX_IMAGE_UNITS :: 0x8F38; +MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS :: 0x8F39; +IMAGE_BINDING_NAME :: 0x8F3A; +IMAGE_BINDING_LEVEL :: 0x8F3B; +IMAGE_BINDING_LAYERED :: 0x8F3C; +IMAGE_BINDING_LAYER :: 0x8F3D; +IMAGE_BINDING_ACCESS :: 0x8F3E; +IMAGE_1D :: 0x904C; +IMAGE_2D :: 0x904D; +IMAGE_3D :: 0x904E; +IMAGE_2D_RECT :: 0x904F; +IMAGE_CUBE :: 0x9050; +IMAGE_BUFFER :: 0x9051; +IMAGE_1D_ARRAY :: 0x9052; +IMAGE_2D_ARRAY :: 0x9053; +IMAGE_CUBE_MAP_ARRAY :: 0x9054; +IMAGE_2D_MULTISAMPLE :: 0x9055; +IMAGE_2D_MULTISAMPLE_ARRAY :: 0x9056; +INT_IMAGE_1D :: 0x9057; +INT_IMAGE_2D :: 0x9058; +INT_IMAGE_3D :: 0x9059; +INT_IMAGE_2D_RECT :: 0x905A; +INT_IMAGE_CUBE :: 0x905B; +INT_IMAGE_BUFFER :: 0x905C; +INT_IMAGE_1D_ARRAY :: 0x905D; +INT_IMAGE_2D_ARRAY :: 0x905E; +INT_IMAGE_CUBE_MAP_ARRAY :: 0x905F; +INT_IMAGE_2D_MULTISAMPLE :: 0x9060; +INT_IMAGE_2D_MULTISAMPLE_ARRAY :: 0x9061; +UNSIGNED_INT_IMAGE_1D :: 0x9062; +UNSIGNED_INT_IMAGE_2D :: 0x9063; +UNSIGNED_INT_IMAGE_3D :: 0x9064; +UNSIGNED_INT_IMAGE_2D_RECT :: 0x9065; +UNSIGNED_INT_IMAGE_CUBE :: 0x9066; +UNSIGNED_INT_IMAGE_BUFFER :: 0x9067; +UNSIGNED_INT_IMAGE_1D_ARRAY :: 0x9068; +UNSIGNED_INT_IMAGE_2D_ARRAY :: 0x9069; +UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY :: 0x906A; +UNSIGNED_INT_IMAGE_2D_MULTISAMPLE :: 0x906B; +UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY :: 0x906C; +MAX_IMAGE_SAMPLES :: 0x906D; +IMAGE_BINDING_FORMAT :: 0x906E; +IMAGE_FORMAT_COMPATIBILITY_TYPE :: 0x90C7; +IMAGE_FORMAT_COMPATIBILITY_BY_SIZE :: 0x90C8; +IMAGE_FORMAT_COMPATIBILITY_BY_CLASS :: 0x90C9; +MAX_VERTEX_IMAGE_UNIFORMS :: 0x90CA; +MAX_TESS_CONTROL_IMAGE_UNIFORMS :: 0x90CB; +MAX_TESS_EVALUATION_IMAGE_UNIFORMS :: 0x90CC; +MAX_GEOMETRY_IMAGE_UNIFORMS :: 0x90CD; +MAX_FRAGMENT_IMAGE_UNIFORMS :: 0x90CE; +MAX_COMBINED_IMAGE_UNIFORMS :: 0x90CF; +COMPRESSED_RGBA_BPTC_UNORM :: 0x8E8C; +COMPRESSED_SRGB_ALPHA_BPTC_UNORM :: 0x8E8D; +COMPRESSED_RGB_BPTC_SIGNED_FLOAT :: 0x8E8E; +COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT :: 0x8E8F; +TEXTURE_IMMUTABLE_FORMAT :: 0x912F; + +NUM_SHADING_LANGUAGE_VERSIONS :: 0x82E9; +VERTEX_ATTRIB_ARRAY_LONG :: 0x874E; +COMPRESSED_RGB8_ETC2 :: 0x9274; +COMPRESSED_SRGB8_ETC2 :: 0x9275; +COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 :: 0x9276; +COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 :: 0x9277; +COMPRESSED_RGBA8_ETC2_EAC :: 0x9278; +COMPRESSED_SRGB8_ALPHA8_ETC2_EAC :: 0x9279; +COMPRESSED_R11_EAC :: 0x9270; +COMPRESSED_SIGNED_R11_EAC :: 0x9271; +COMPRESSED_RG11_EAC :: 0x9272; +COMPRESSED_SIGNED_RG11_EAC :: 0x9273; +PRIMITIVE_RESTART_FIXED_INDEX :: 0x8D69; +ANY_SAMPLES_PASSED_CONSERVATIVE :: 0x8D6A; +MAX_ELEMENT_INDEX :: 0x8D6B; +COMPUTE_SHADER :: 0x91B9; +MAX_COMPUTE_UNIFORM_BLOCKS :: 0x91BB; +MAX_COMPUTE_TEXTURE_IMAGE_UNITS :: 0x91BC; +MAX_COMPUTE_IMAGE_UNIFORMS :: 0x91BD; +MAX_COMPUTE_SHARED_MEMORY_SIZE :: 0x8262; +MAX_COMPUTE_UNIFORM_COMPONENTS :: 0x8263; +MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS :: 0x8264; +MAX_COMPUTE_ATOMIC_COUNTERS :: 0x8265; +MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS :: 0x8266; +MAX_COMPUTE_WORK_GROUP_INVOCATIONS :: 0x90EB; +MAX_COMPUTE_WORK_GROUP_COUNT :: 0x91BE; +MAX_COMPUTE_WORK_GROUP_SIZE :: 0x91BF; +COMPUTE_WORK_GROUP_SIZE :: 0x8267; +UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER :: 0x90EC; +ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER :: 0x90ED; +DISPATCH_INDIRECT_BUFFER :: 0x90EE; +DISPATCH_INDIRECT_BUFFER_BINDING :: 0x90EF; +COMPUTE_SHADER_BIT :: 0x00000020; +DEBUG_OUTPUT_SYNCHRONOUS :: 0x8242; +DEBUG_NEXT_LOGGED_MESSAGE_LENGTH :: 0x8243; +DEBUG_CALLBACK_FUNCTION :: 0x8244; +DEBUG_CALLBACK_USER_PARAM :: 0x8245; +DEBUG_SOURCE_API :: 0x8246; +DEBUG_SOURCE_WINDOW_SYSTEM :: 0x8247; +DEBUG_SOURCE_SHADER_COMPILER :: 0x8248; +DEBUG_SOURCE_THIRD_PARTY :: 0x8249; +DEBUG_SOURCE_APPLICATION :: 0x824A; +DEBUG_SOURCE_OTHER :: 0x824B; +DEBUG_TYPE_ERROR :: 0x824C; +DEBUG_TYPE_DEPRECATED_BEHAVIOR :: 0x824D; +DEBUG_TYPE_UNDEFINED_BEHAVIOR :: 0x824E; +DEBUG_TYPE_PORTABILITY :: 0x824F; +DEBUG_TYPE_PERFORMANCE :: 0x8250; +DEBUG_TYPE_OTHER :: 0x8251; +MAX_DEBUG_MESSAGE_LENGTH :: 0x9143; +MAX_DEBUG_LOGGED_MESSAGES :: 0x9144; +DEBUG_LOGGED_MESSAGES :: 0x9145; +DEBUG_SEVERITY_HIGH :: 0x9146; +DEBUG_SEVERITY_MEDIUM :: 0x9147; +DEBUG_SEVERITY_LOW :: 0x9148; +DEBUG_TYPE_MARKER :: 0x8268; +DEBUG_TYPE_PUSH_GROUP :: 0x8269; +DEBUG_TYPE_POP_GROUP :: 0x826A; +DEBUG_SEVERITY_NOTIFICATION :: 0x826B; +MAX_DEBUG_GROUP_STACK_DEPTH :: 0x826C; +DEBUG_GROUP_STACK_DEPTH :: 0x826D; +BUFFER :: 0x82E0; +SHADER :: 0x82E1; +PROGRAM :: 0x82E2; +QUERY :: 0x82E3; +PROGRAM_PIPELINE :: 0x82E4; +SAMPLER :: 0x82E6; +MAX_LABEL_LENGTH :: 0x82E8; +DEBUG_OUTPUT :: 0x92E0; +CONTEXT_FLAG_DEBUG_BIT :: 0x00000002; +MAX_UNIFORM_LOCATIONS :: 0x826E; +FRAMEBUFFER_DEFAULT_WIDTH :: 0x9310; +FRAMEBUFFER_DEFAULT_HEIGHT :: 0x9311; +FRAMEBUFFER_DEFAULT_LAYERS :: 0x9312; +FRAMEBUFFER_DEFAULT_SAMPLES :: 0x9313; +FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS :: 0x9314; +MAX_FRAMEBUFFER_WIDTH :: 0x9315; +MAX_FRAMEBUFFER_HEIGHT :: 0x9316; +MAX_FRAMEBUFFER_LAYERS :: 0x9317; +MAX_FRAMEBUFFER_SAMPLES :: 0x9318; +INTERNALFORMAT_SUPPORTED :: 0x826F; +INTERNALFORMAT_PREFERRED :: 0x8270; +INTERNALFORMAT_RED_SIZE :: 0x8271; +INTERNALFORMAT_GREEN_SIZE :: 0x8272; +INTERNALFORMAT_BLUE_SIZE :: 0x8273; +INTERNALFORMAT_ALPHA_SIZE :: 0x8274; +INTERNALFORMAT_DEPTH_SIZE :: 0x8275; +INTERNALFORMAT_STENCIL_SIZE :: 0x8276; +INTERNALFORMAT_SHARED_SIZE :: 0x8277; +INTERNALFORMAT_RED_TYPE :: 0x8278; +INTERNALFORMAT_GREEN_TYPE :: 0x8279; +INTERNALFORMAT_BLUE_TYPE :: 0x827A; +INTERNALFORMAT_ALPHA_TYPE :: 0x827B; +INTERNALFORMAT_DEPTH_TYPE :: 0x827C; +INTERNALFORMAT_STENCIL_TYPE :: 0x827D; +MAX_WIDTH :: 0x827E; +MAX_HEIGHT :: 0x827F; +MAX_DEPTH :: 0x8280; +MAX_LAYERS :: 0x8281; +MAX_COMBINED_DIMENSIONS :: 0x8282; +COLOR_COMPONENTS :: 0x8283; +DEPTH_COMPONENTS :: 0x8284; +STENCIL_COMPONENTS :: 0x8285; +COLOR_RENDERABLE :: 0x8286; +DEPTH_RENDERABLE :: 0x8287; +STENCIL_RENDERABLE :: 0x8288; +FRAMEBUFFER_RENDERABLE :: 0x8289; +FRAMEBUFFER_RENDERABLE_LAYERED :: 0x828A; +FRAMEBUFFER_BLEND :: 0x828B; +READ_PIXELS :: 0x828C; +READ_PIXELS_FORMAT :: 0x828D; +READ_PIXELS_TYPE :: 0x828E; +TEXTURE_IMAGE_FORMAT :: 0x828F; +TEXTURE_IMAGE_TYPE :: 0x8290; +GET_TEXTURE_IMAGE_FORMAT :: 0x8291; +GET_TEXTURE_IMAGE_TYPE :: 0x8292; +MIPMAP :: 0x8293; +MANUAL_GENERATE_MIPMAP :: 0x8294; +AUTO_GENERATE_MIPMAP :: 0x8295; +COLOR_ENCODING :: 0x8296; +SRGB_READ :: 0x8297; +SRGB_WRITE :: 0x8298; +FILTER :: 0x829A; +VERTEX_TEXTURE :: 0x829B; +TESS_CONTROL_TEXTURE :: 0x829C; +TESS_EVALUATION_TEXTURE :: 0x829D; +GEOMETRY_TEXTURE :: 0x829E; +FRAGMENT_TEXTURE :: 0x829F; +COMPUTE_TEXTURE :: 0x82A0; +TEXTURE_SHADOW :: 0x82A1; +TEXTURE_GATHER :: 0x82A2; +TEXTURE_GATHER_SHADOW :: 0x82A3; +SHADER_IMAGE_LOAD :: 0x82A4; +SHADER_IMAGE_STORE :: 0x82A5; +SHADER_IMAGE_ATOMIC :: 0x82A6; +IMAGE_TEXEL_SIZE :: 0x82A7; +IMAGE_COMPATIBILITY_CLASS :: 0x82A8; +IMAGE_PIXEL_FORMAT :: 0x82A9; +IMAGE_PIXEL_TYPE :: 0x82AA; +SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST :: 0x82AC; +SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST :: 0x82AD; +SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE :: 0x82AE; +SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE :: 0x82AF; +TEXTURE_COMPRESSED_BLOCK_WIDTH :: 0x82B1; +TEXTURE_COMPRESSED_BLOCK_HEIGHT :: 0x82B2; +TEXTURE_COMPRESSED_BLOCK_SIZE :: 0x82B3; +CLEAR_BUFFER :: 0x82B4; +TEXTURE_VIEW :: 0x82B5; +VIEW_COMPATIBILITY_CLASS :: 0x82B6; +FULL_SUPPORT :: 0x82B7; +CAVEAT_SUPPORT :: 0x82B8; +IMAGE_CLASS_4_X_32 :: 0x82B9; +IMAGE_CLASS_2_X_32 :: 0x82BA; +IMAGE_CLASS_1_X_32 :: 0x82BB; +IMAGE_CLASS_4_X_16 :: 0x82BC; +IMAGE_CLASS_2_X_16 :: 0x82BD; +IMAGE_CLASS_1_X_16 :: 0x82BE; +IMAGE_CLASS_4_X_8 :: 0x82BF; +IMAGE_CLASS_2_X_8 :: 0x82C0; +IMAGE_CLASS_1_X_8 :: 0x82C1; +IMAGE_CLASS_11_11_10 :: 0x82C2; +IMAGE_CLASS_10_10_10_2 :: 0x82C3; +VIEW_CLASS_128_BITS :: 0x82C4; +VIEW_CLASS_96_BITS :: 0x82C5; +VIEW_CLASS_64_BITS :: 0x82C6; +VIEW_CLASS_48_BITS :: 0x82C7; +VIEW_CLASS_32_BITS :: 0x82C8; +VIEW_CLASS_24_BITS :: 0x82C9; +VIEW_CLASS_16_BITS :: 0x82CA; +VIEW_CLASS_8_BITS :: 0x82CB; +VIEW_CLASS_S3TC_DXT1_RGB :: 0x82CC; +VIEW_CLASS_S3TC_DXT1_RGBA :: 0x82CD; +VIEW_CLASS_S3TC_DXT3_RGBA :: 0x82CE; +VIEW_CLASS_S3TC_DXT5_RGBA :: 0x82CF; +VIEW_CLASS_RGTC1_RED :: 0x82D0; +VIEW_CLASS_RGTC2_RG :: 0x82D1; +VIEW_CLASS_BPTC_UNORM :: 0x82D2; +VIEW_CLASS_BPTC_FLOAT :: 0x82D3; +UNIFORM :: 0x92E1; +UNIFORM_BLOCK :: 0x92E2; +PROGRAM_INPUT :: 0x92E3; +PROGRAM_OUTPUT :: 0x92E4; +BUFFER_VARIABLE :: 0x92E5; +SHADER_STORAGE_BLOCK :: 0x92E6; +VERTEX_SUBROUTINE :: 0x92E8; +TESS_CONTROL_SUBROUTINE :: 0x92E9; +TESS_EVALUATION_SUBROUTINE :: 0x92EA; +GEOMETRY_SUBROUTINE :: 0x92EB; +FRAGMENT_SUBROUTINE :: 0x92EC; +COMPUTE_SUBROUTINE :: 0x92ED; +VERTEX_SUBROUTINE_UNIFORM :: 0x92EE; +TESS_CONTROL_SUBROUTINE_UNIFORM :: 0x92EF; +TESS_EVALUATION_SUBROUTINE_UNIFORM :: 0x92F0; +GEOMETRY_SUBROUTINE_UNIFORM :: 0x92F1; +FRAGMENT_SUBROUTINE_UNIFORM :: 0x92F2; +COMPUTE_SUBROUTINE_UNIFORM :: 0x92F3; +TRANSFORM_FEEDBACK_VARYING :: 0x92F4; +ACTIVE_RESOURCES :: 0x92F5; +MAX_NAME_LENGTH :: 0x92F6; +MAX_NUM_ACTIVE_VARIABLES :: 0x92F7; +MAX_NUM_COMPATIBLE_SUBROUTINES :: 0x92F8; +NAME_LENGTH :: 0x92F9; +TYPE :: 0x92FA; +ARRAY_SIZE :: 0x92FB; +OFFSET :: 0x92FC; +BLOCK_INDEX :: 0x92FD; +ARRAY_STRIDE :: 0x92FE; +MATRIX_STRIDE :: 0x92FF; +IS_ROW_MAJOR :: 0x9300; +ATOMIC_COUNTER_BUFFER_INDEX :: 0x9301; +BUFFER_BINDING :: 0x9302; +BUFFER_DATA_SIZE :: 0x9303; +NUM_ACTIVE_VARIABLES :: 0x9304; +ACTIVE_VARIABLES :: 0x9305; +REFERENCED_BY_VERTEX_SHADER :: 0x9306; +REFERENCED_BY_TESS_CONTROL_SHADER :: 0x9307; +REFERENCED_BY_TESS_EVALUATION_SHADER :: 0x9308; +REFERENCED_BY_GEOMETRY_SHADER :: 0x9309; +REFERENCED_BY_FRAGMENT_SHADER :: 0x930A; +REFERENCED_BY_COMPUTE_SHADER :: 0x930B; +TOP_LEVEL_ARRAY_SIZE :: 0x930C; +TOP_LEVEL_ARRAY_STRIDE :: 0x930D; +LOCATION :: 0x930E; +LOCATION_INDEX :: 0x930F; +IS_PER_PATCH :: 0x92E7; +SHADER_STORAGE_BUFFER :: 0x90D2; +SHADER_STORAGE_BUFFER_BINDING :: 0x90D3; +SHADER_STORAGE_BUFFER_START :: 0x90D4; +SHADER_STORAGE_BUFFER_SIZE :: 0x90D5; +MAX_VERTEX_SHADER_STORAGE_BLOCKS :: 0x90D6; +MAX_GEOMETRY_SHADER_STORAGE_BLOCKS :: 0x90D7; +MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS :: 0x90D8; +MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS :: 0x90D9; +MAX_FRAGMENT_SHADER_STORAGE_BLOCKS :: 0x90DA; +MAX_COMPUTE_SHADER_STORAGE_BLOCKS :: 0x90DB; +MAX_COMBINED_SHADER_STORAGE_BLOCKS :: 0x90DC; +MAX_SHADER_STORAGE_BUFFER_BINDINGS :: 0x90DD; +MAX_SHADER_STORAGE_BLOCK_SIZE :: 0x90DE; +SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT :: 0x90DF; +SHADER_STORAGE_BARRIER_BIT :: 0x00002000; +MAX_COMBINED_SHADER_OUTPUT_RESOURCES :: 0x8F39; +DEPTH_STENCIL_TEXTURE_MODE :: 0x90EA; +TEXTURE_BUFFER_OFFSET :: 0x919D; +TEXTURE_BUFFER_SIZE :: 0x919E; +TEXTURE_BUFFER_OFFSET_ALIGNMENT :: 0x919F; +TEXTURE_VIEW_MIN_LEVEL :: 0x82DB; +TEXTURE_VIEW_NUM_LEVELS :: 0x82DC; +TEXTURE_VIEW_MIN_LAYER :: 0x82DD; +TEXTURE_VIEW_NUM_LAYERS :: 0x82DE; +TEXTURE_IMMUTABLE_LEVELS :: 0x82DF; +VERTEX_ATTRIB_BINDING :: 0x82D4; +VERTEX_ATTRIB_RELATIVE_OFFSET :: 0x82D5; +VERTEX_BINDING_DIVISOR :: 0x82D6; +VERTEX_BINDING_OFFSET :: 0x82D7; +VERTEX_BINDING_STRIDE :: 0x82D8; +MAX_VERTEX_ATTRIB_RELATIVE_OFFSET :: 0x82D9; +MAX_VERTEX_ATTRIB_BINDINGS :: 0x82DA; +VERTEX_BINDING_BUFFER :: 0x8F4F; + +MAX_VERTEX_ATTRIB_STRIDE :: 0x82E5; +PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED :: 0x8221; +TEXTURE_BUFFER_BINDING :: 0x8C2A; +MAP_PERSISTENT_BIT :: 0x0040; +MAP_COHERENT_BIT :: 0x0080; +DYNAMIC_STORAGE_BIT :: 0x0100; +CLIENT_STORAGE_BIT :: 0x0200; +CLIENT_MAPPED_BUFFER_BARRIER_BIT :: 0x00004000; +BUFFER_IMMUTABLE_STORAGE :: 0x821F; +BUFFER_STORAGE_FLAGS :: 0x8220; +CLEAR_TEXTURE :: 0x9365; +LOCATION_COMPONENT :: 0x934A; +TRANSFORM_FEEDBACK_BUFFER_INDEX :: 0x934B; +TRANSFORM_FEEDBACK_BUFFER_STRIDE :: 0x934C; +QUERY_BUFFER :: 0x9192; +QUERY_BUFFER_BARRIER_BIT :: 0x00008000; +QUERY_BUFFER_BINDING :: 0x9193; +QUERY_RESULT_NO_WAIT :: 0x9194; +MIRROR_CLAMP_TO_EDGE :: 0x8743; + +CONTEXT_LOST :: 0x0507; +NEGATIVE_ONE_TO_ONE :: 0x935E; +ZERO_TO_ONE :: 0x935F; +CLIP_ORIGIN :: 0x935C; +CLIP_DEPTH_MODE :: 0x935D; +QUERY_WAIT_INVERTED :: 0x8E17; +QUERY_NO_WAIT_INVERTED :: 0x8E18; +QUERY_BY_REGION_WAIT_INVERTED :: 0x8E19; +QUERY_BY_REGION_NO_WAIT_INVERTED :: 0x8E1A; +MAX_CULL_DISTANCES :: 0x82F9; +MAX_COMBINED_CLIP_AND_CULL_DISTANCES :: 0x82FA; +TEXTURE_TARGET :: 0x1006; +QUERY_TARGET :: 0x82EA; +GUILTY_CONTEXT_RESET :: 0x8253; +INNOCENT_CONTEXT_RESET :: 0x8254; +UNKNOWN_CONTEXT_RESET :: 0x8255; +RESET_NOTIFICATION_STRATEGY :: 0x8256; +LOSE_CONTEXT_ON_RESET :: 0x8252; +NO_RESET_NOTIFICATION :: 0x8261; +CONTEXT_FLAG_ROBUST_ACCESS_BIT :: 0x00000004; +CONTEXT_RELEASE_BEHAVIOR :: 0x82FB; +CONTEXT_RELEASE_BEHAVIOR_FLUSH :: 0x82FC; + +DEBUG_OUTPUT_SYNCHRONOUS_ARB :: 0x8242; +DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB :: 0x8243; +DEBUG_CALLBACK_FUNCTION_ARB :: 0x8244; +DEBUG_CALLBACK_USER_PARAM_ARB :: 0x8245; +DEBUG_SOURCE_API_ARB :: 0x8246; +DEBUG_SOURCE_WINDOW_SYSTEM_ARB :: 0x8247; +DEBUG_SOURCE_SHADER_COMPILER_ARB :: 0x8248; +DEBUG_SOURCE_THIRD_PARTY_ARB :: 0x8249; +DEBUG_SOURCE_APPLICATION_ARB :: 0x824A; +DEBUG_SOURCE_OTHER_ARB :: 0x824B; +DEBUG_TYPE_ERROR_ARB :: 0x824C; +DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB :: 0x824D; +DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB :: 0x824E; +DEBUG_TYPE_PORTABILITY_ARB :: 0x824F; +DEBUG_TYPE_PERFORMANCE_ARB :: 0x8250; +DEBUG_TYPE_OTHER_ARB :: 0x8251; +MAX_DEBUG_MESSAGE_LENGTH_ARB :: 0x9143; +MAX_DEBUG_LOGGED_MESSAGES_ARB :: 0x9144; +DEBUG_LOGGED_MESSAGES_ARB :: 0x9145; +DEBUG_SEVERITY_HIGH_ARB :: 0x9146; +DEBUG_SEVERITY_MEDIUM_ARB :: 0x9147; +DEBUG_SEVERITY_LOW_ARB :: 0x9148; + + +SHADER_BINARY_FORMAT_SPIR_V :: 0x9551; +SPIR_V_BINARY :: 0x9552; +PARAMETER_BUFFER :: 0x80EE; +PARAMETER_BUFFER_BINDING :: 0x80EF; +CONTEXT_FLAG_NO_ERROR_BIT :: 0x00000008; +VERTICES_SUBMITTED :: 0x82EE; +PRIMITIVES_SUBMITTED :: 0x82EF; +VERTEX_SHADER_INVOCATIONS :: 0x82F0; +TESS_CONTROL_SHADER_PATCHES :: 0x82F1; +TESS_EVALUATION_SHADER_INVOCATIONS :: 0x82F2; +GEOMETRY_SHADER_PRIMITIVES_EMITTED :: 0x82F3; +FRAGMENT_SHADER_INVOCATIONS :: 0x82F4; +COMPUTE_SHADER_INVOCATIONS :: 0x82F5; +CLIPPING_INPUT_PRIMITIVES :: 0x82F6; +CLIPPING_OUTPUT_PRIMITIVES :: 0x82F7; +POLYGON_OFFSET_CLAMP :: 0x8E1B; +SPIR_V_EXTENSIONS :: 0x9553; +NUM_SPIR_V_EXTENSIONS :: 0x9554; +TEXTURE_MAX_ANISOTROPY :: 0x84FE; +MAX_TEXTURE_MAX_ANISOTROPY :: 0x84FF; +TRANSFORM_FEEDBACK_OVERFLOW :: 0x82EC; +TRANSFORM_FEEDBACK_STREAM_OVERFLOW :: 0x82ED; + +// Extensions, extended as necessary +DEVICE_LUID_EXT :: 0x9599; \ No newline at end of file diff --git a/vendor/OpenGL/enums.odin b/vendor/OpenGL/enums.odin new file mode 100644 index 000000000..3802b7e76 --- /dev/null +++ b/vendor/OpenGL/enums.odin @@ -0,0 +1,1413 @@ +package odin_gl + +GL_Enum :: enum u64 { + FALSE = 0, + TRUE = 1, + + DEPTH_BUFFER_BIT = DEPTH_BUFFER_BIT, + STENCIL_BUFFER_BIT = STENCIL_BUFFER_BIT, + COLOR_BUFFER_BIT = COLOR_BUFFER_BIT, + POINTS = POINTS, + LINES = LINES, + LINE_LOOP = LINE_LOOP, + LINE_STRIP = LINE_STRIP, + TRIANGLES = TRIANGLES, + TRIANGLE_STRIP = TRIANGLE_STRIP, + TRIANGLE_FAN = TRIANGLE_FAN, + QUADS = QUADS, + NEVER = NEVER, + LESS = LESS, + EQUAL = EQUAL, + LEQUAL = LEQUAL, + GREATER = GREATER, + NOTEQUAL = NOTEQUAL, + GEQUAL = GEQUAL, + ALWAYS = ALWAYS, + ZERO = ZERO, + ONE = ONE, + SRC_COLOR = SRC_COLOR, + ONE_MINUS_SRC_COLOR = ONE_MINUS_SRC_COLOR, + SRC_ALPHA = SRC_ALPHA, + ONE_MINUS_SRC_ALPHA = ONE_MINUS_SRC_ALPHA, + DST_ALPHA = DST_ALPHA, + ONE_MINUS_DST_ALPHA = ONE_MINUS_DST_ALPHA, + DST_COLOR = DST_COLOR, + ONE_MINUS_DST_COLOR = ONE_MINUS_DST_COLOR, + SRC_ALPHA_SATURATE = SRC_ALPHA_SATURATE, + NONE = NONE, + FRONT_LEFT = FRONT_LEFT, + FRONT_RIGHT = FRONT_RIGHT, + BACK_LEFT = BACK_LEFT, + BACK_RIGHT = BACK_RIGHT, + FRONT = FRONT, + BACK = BACK, + LEFT = LEFT, + RIGHT = RIGHT, + FRONT_AND_BACK = FRONT_AND_BACK, + NO_ERROR = NO_ERROR, + INVALID_ENUM = INVALID_ENUM, + INVALID_VALUE = INVALID_VALUE, + INVALID_OPERATION = INVALID_OPERATION, + OUT_OF_MEMORY = OUT_OF_MEMORY, + CW = CW, + CCW = CCW, + POINT_SIZE = POINT_SIZE, + POINT_SIZE_RANGE = POINT_SIZE_RANGE, + POINT_SIZE_GRANULARITY = POINT_SIZE_GRANULARITY, + LINE_SMOOTH = LINE_SMOOTH, + LINE_WIDTH = LINE_WIDTH, + LINE_WIDTH_RANGE = LINE_WIDTH_RANGE, + LINE_WIDTH_GRANULARITY = LINE_WIDTH_GRANULARITY, + POLYGON_MODE = POLYGON_MODE, + POLYGON_SMOOTH = POLYGON_SMOOTH, + CULL_FACE = CULL_FACE, + CULL_FACE_MODE = CULL_FACE_MODE, + FRONT_FACE = FRONT_FACE, + DEPTH_RANGE = DEPTH_RANGE, + DEPTH_TEST = DEPTH_TEST, + DEPTH_WRITEMASK = DEPTH_WRITEMASK, + DEPTH_CLEAR_VALUE = DEPTH_CLEAR_VALUE, + DEPTH_FUNC = DEPTH_FUNC, + STENCIL_TEST = STENCIL_TEST, + STENCIL_CLEAR_VALUE = STENCIL_CLEAR_VALUE, + STENCIL_FUNC = STENCIL_FUNC, + STENCIL_VALUE_MASK = STENCIL_VALUE_MASK, + STENCIL_FAIL = STENCIL_FAIL, + STENCIL_PASS_DEPTH_FAIL = STENCIL_PASS_DEPTH_FAIL, + STENCIL_PASS_DEPTH_PASS = STENCIL_PASS_DEPTH_PASS, + STENCIL_REF = STENCIL_REF, + STENCIL_WRITEMASK = STENCIL_WRITEMASK, + VIEWPORT = VIEWPORT, + DITHER = DITHER, + BLEND_DST = BLEND_DST, + BLEND_SRC = BLEND_SRC, + BLEND = BLEND, + LOGIC_OP_MODE = LOGIC_OP_MODE, + COLOR_LOGIC_OP = COLOR_LOGIC_OP, + DRAW_BUFFER = DRAW_BUFFER, + READ_BUFFER = READ_BUFFER, + SCISSOR_BOX = SCISSOR_BOX, + SCISSOR_TEST = SCISSOR_TEST, + COLOR_CLEAR_VALUE = COLOR_CLEAR_VALUE, + COLOR_WRITEMASK = COLOR_WRITEMASK, + DOUBLEBUFFER = DOUBLEBUFFER, + STEREO = STEREO, + LINE_SMOOTH_HINT = LINE_SMOOTH_HINT, + POLYGON_SMOOTH_HINT = POLYGON_SMOOTH_HINT, + UNPACK_SWAP_BYTES = UNPACK_SWAP_BYTES, + UNPACK_LSB_FIRST = UNPACK_LSB_FIRST, + UNPACK_ROW_LENGTH = UNPACK_ROW_LENGTH, + UNPACK_SKIP_ROWS = UNPACK_SKIP_ROWS, + UNPACK_SKIP_PIXELS = UNPACK_SKIP_PIXELS, + UNPACK_ALIGNMENT = UNPACK_ALIGNMENT, + PACK_SWAP_BYTES = PACK_SWAP_BYTES, + PACK_LSB_FIRST = PACK_LSB_FIRST, + PACK_ROW_LENGTH = PACK_ROW_LENGTH, + PACK_SKIP_ROWS = PACK_SKIP_ROWS, + PACK_SKIP_PIXELS = PACK_SKIP_PIXELS, + PACK_ALIGNMENT = PACK_ALIGNMENT, + MAX_TEXTURE_SIZE = MAX_TEXTURE_SIZE, + MAX_VIEWPORT_DIMS = MAX_VIEWPORT_DIMS, + SUBPIXEL_BITS = SUBPIXEL_BITS, + TEXTURE_1D = TEXTURE_1D, + TEXTURE_2D = TEXTURE_2D, + POLYGON_OFFSET_UNITS = POLYGON_OFFSET_UNITS, + POLYGON_OFFSET_POINT = POLYGON_OFFSET_POINT, + POLYGON_OFFSET_LINE = POLYGON_OFFSET_LINE, + POLYGON_OFFSET_FILL = POLYGON_OFFSET_FILL, + POLYGON_OFFSET_FACTOR = POLYGON_OFFSET_FACTOR, + TEXTURE_BINDING_1D = TEXTURE_BINDING_1D, + TEXTURE_BINDING_2D = TEXTURE_BINDING_2D, + TEXTURE_WIDTH = TEXTURE_WIDTH, + TEXTURE_HEIGHT = TEXTURE_HEIGHT, + TEXTURE_INTERNAL_FORMAT = TEXTURE_INTERNAL_FORMAT, + TEXTURE_BORDER_COLOR = TEXTURE_BORDER_COLOR, + TEXTURE_RED_SIZE = TEXTURE_RED_SIZE, + TEXTURE_GREEN_SIZE = TEXTURE_GREEN_SIZE, + TEXTURE_BLUE_SIZE = TEXTURE_BLUE_SIZE, + TEXTURE_ALPHA_SIZE = TEXTURE_ALPHA_SIZE, + DONT_CARE = DONT_CARE, + FASTEST = FASTEST, + NICEST = NICEST, + BYTE = BYTE, + UNSIGNED_BYTE = UNSIGNED_BYTE, + SHORT = SHORT, + UNSIGNED_SHORT = UNSIGNED_SHORT, + INT = INT, + UNSIGNED_INT = UNSIGNED_INT, + FLOAT = FLOAT, + DOUBLE = DOUBLE, + STACK_OVERFLOW = STACK_OVERFLOW, + STACK_UNDERFLOW = STACK_UNDERFLOW, + CLEAR = CLEAR, + AND = AND, + AND_REVERSE = AND_REVERSE, + COPY = COPY, + AND_INVERTED = AND_INVERTED, + NOOP = NOOP, + XOR = XOR, + OR = OR, + NOR = NOR, + EQUIV = EQUIV, + INVERT = INVERT, + OR_REVERSE = OR_REVERSE, + COPY_INVERTED = COPY_INVERTED, + OR_INVERTED = OR_INVERTED, + NAND = NAND, + SET = SET, + TEXTURE = TEXTURE, + COLOR = COLOR, + DEPTH = DEPTH, + STENCIL = STENCIL, + STENCIL_INDEX = STENCIL_INDEX, + DEPTH_COMPONENT = DEPTH_COMPONENT, + RED = RED, + GREEN = GREEN, + BLUE = BLUE, + ALPHA = ALPHA, + RGB = RGB, + RGBA = RGBA, + POINT = POINT, + LINE = LINE, + FILL = FILL, + KEEP = KEEP, + REPLACE = REPLACE, + INCR = INCR, + DECR = DECR, + VENDOR = VENDOR, + RENDERER = RENDERER, + VERSION = VERSION, + EXTENSIONS = EXTENSIONS, + NEAREST = NEAREST, + LINEAR = LINEAR, + NEAREST_MIPMAP_NEAREST = NEAREST_MIPMAP_NEAREST, + LINEAR_MIPMAP_NEAREST = LINEAR_MIPMAP_NEAREST, + NEAREST_MIPMAP_LINEAR = NEAREST_MIPMAP_LINEAR, + LINEAR_MIPMAP_LINEAR = LINEAR_MIPMAP_LINEAR, + TEXTURE_MAG_FILTER = TEXTURE_MAG_FILTER, + TEXTURE_MIN_FILTER = TEXTURE_MIN_FILTER, + TEXTURE_WRAP_S = TEXTURE_WRAP_S, + TEXTURE_WRAP_T = TEXTURE_WRAP_T, + PROXY_TEXTURE_1D = PROXY_TEXTURE_1D, + PROXY_TEXTURE_2D = PROXY_TEXTURE_2D, + REPEAT = REPEAT, + R3_G3_B2 = R3_G3_B2, + RGB4 = RGB4, + RGB5 = RGB5, + RGB8 = RGB8, + RGB10 = RGB10, + RGB12 = RGB12, + RGB16 = RGB16, + RGBA2 = RGBA2, + RGBA4 = RGBA4, + RGB5_A1 = RGB5_A1, + RGBA8 = RGBA8, + RGB10_A2 = RGB10_A2, + RGBA12 = RGBA12, + RGBA16 = RGBA16, + VERTEX_ARRAY = VERTEX_ARRAY, + + UNSIGNED_BYTE_3_3_2 = UNSIGNED_BYTE_3_3_2, + UNSIGNED_SHORT_4_4_4_4 = UNSIGNED_SHORT_4_4_4_4, + UNSIGNED_SHORT_5_5_5_1 = UNSIGNED_SHORT_5_5_5_1, + UNSIGNED_INT_8_8_8_8 = UNSIGNED_INT_8_8_8_8, + UNSIGNED_INT_10_10_10_2 = UNSIGNED_INT_10_10_10_2, + TEXTURE_BINDING_3D = TEXTURE_BINDING_3D, + PACK_SKIP_IMAGES = PACK_SKIP_IMAGES, + PACK_IMAGE_HEIGHT = PACK_IMAGE_HEIGHT, + UNPACK_SKIP_IMAGES = UNPACK_SKIP_IMAGES, + UNPACK_IMAGE_HEIGHT = UNPACK_IMAGE_HEIGHT, + TEXTURE_3D = TEXTURE_3D, + PROXY_TEXTURE_3D = PROXY_TEXTURE_3D, + TEXTURE_DEPTH = TEXTURE_DEPTH, + TEXTURE_WRAP_R = TEXTURE_WRAP_R, + MAX_3D_TEXTURE_SIZE = MAX_3D_TEXTURE_SIZE, + UNSIGNED_BYTE_2_3_3_REV = UNSIGNED_BYTE_2_3_3_REV, + UNSIGNED_SHORT_5_6_5 = UNSIGNED_SHORT_5_6_5, + UNSIGNED_SHORT_5_6_5_REV = UNSIGNED_SHORT_5_6_5_REV, + UNSIGNED_SHORT_4_4_4_4_REV = UNSIGNED_SHORT_4_4_4_4_REV, + UNSIGNED_SHORT_1_5_5_5_REV = UNSIGNED_SHORT_1_5_5_5_REV, + UNSIGNED_INT_8_8_8_8_REV = UNSIGNED_INT_8_8_8_8_REV, + UNSIGNED_INT_2_10_10_10_REV = UNSIGNED_INT_2_10_10_10_REV, + BGR = BGR, + BGRA = BGRA, + MAX_ELEMENTS_VERTICES = MAX_ELEMENTS_VERTICES, + MAX_ELEMENTS_INDICES = MAX_ELEMENTS_INDICES, + CLAMP_TO_EDGE = CLAMP_TO_EDGE, + TEXTURE_MIN_LOD = TEXTURE_MIN_LOD, + TEXTURE_MAX_LOD = TEXTURE_MAX_LOD, + TEXTURE_BASE_LEVEL = TEXTURE_BASE_LEVEL, + TEXTURE_MAX_LEVEL = TEXTURE_MAX_LEVEL, + SMOOTH_POINT_SIZE_RANGE = SMOOTH_POINT_SIZE_RANGE, + SMOOTH_POINT_SIZE_GRANULARITY = SMOOTH_POINT_SIZE_GRANULARITY, + SMOOTH_LINE_WIDTH_RANGE = SMOOTH_LINE_WIDTH_RANGE, + SMOOTH_LINE_WIDTH_GRANULARITY = SMOOTH_LINE_WIDTH_GRANULARITY, + ALIASED_LINE_WIDTH_RANGE = ALIASED_LINE_WIDTH_RANGE, + + TEXTURE0 = TEXTURE0, + TEXTURE1 = TEXTURE1, + TEXTURE2 = TEXTURE2, + TEXTURE3 = TEXTURE3, + TEXTURE4 = TEXTURE4, + TEXTURE5 = TEXTURE5, + TEXTURE6 = TEXTURE6, + TEXTURE7 = TEXTURE7, + TEXTURE8 = TEXTURE8, + TEXTURE9 = TEXTURE9, + TEXTURE10 = TEXTURE10, + TEXTURE11 = TEXTURE11, + TEXTURE12 = TEXTURE12, + TEXTURE13 = TEXTURE13, + TEXTURE14 = TEXTURE14, + TEXTURE15 = TEXTURE15, + TEXTURE16 = TEXTURE16, + TEXTURE17 = TEXTURE17, + TEXTURE18 = TEXTURE18, + TEXTURE19 = TEXTURE19, + TEXTURE20 = TEXTURE20, + TEXTURE21 = TEXTURE21, + TEXTURE22 = TEXTURE22, + TEXTURE23 = TEXTURE23, + TEXTURE24 = TEXTURE24, + TEXTURE25 = TEXTURE25, + TEXTURE26 = TEXTURE26, + TEXTURE27 = TEXTURE27, + TEXTURE28 = TEXTURE28, + TEXTURE29 = TEXTURE29, + TEXTURE30 = TEXTURE30, + TEXTURE31 = TEXTURE31, + ACTIVE_TEXTURE = ACTIVE_TEXTURE, + MULTISAMPLE = MULTISAMPLE, + SAMPLE_ALPHA_TO_COVERAGE = SAMPLE_ALPHA_TO_COVERAGE, + SAMPLE_ALPHA_TO_ONE = SAMPLE_ALPHA_TO_ONE, + SAMPLE_COVERAGE = SAMPLE_COVERAGE, + SAMPLE_BUFFERS = SAMPLE_BUFFERS, + SAMPLES = SAMPLES, + SAMPLE_COVERAGE_VALUE = SAMPLE_COVERAGE_VALUE, + SAMPLE_COVERAGE_INVERT = SAMPLE_COVERAGE_INVERT, + TEXTURE_CUBE_MAP = TEXTURE_CUBE_MAP, + TEXTURE_BINDING_CUBE_MAP = TEXTURE_BINDING_CUBE_MAP, + TEXTURE_CUBE_MAP_POSITIVE_X = TEXTURE_CUBE_MAP_POSITIVE_X, + TEXTURE_CUBE_MAP_NEGATIVE_X = TEXTURE_CUBE_MAP_NEGATIVE_X, + TEXTURE_CUBE_MAP_POSITIVE_Y = TEXTURE_CUBE_MAP_POSITIVE_Y, + TEXTURE_CUBE_MAP_NEGATIVE_Y = TEXTURE_CUBE_MAP_NEGATIVE_Y, + TEXTURE_CUBE_MAP_POSITIVE_Z = TEXTURE_CUBE_MAP_POSITIVE_Z, + TEXTURE_CUBE_MAP_NEGATIVE_Z = TEXTURE_CUBE_MAP_NEGATIVE_Z, + PROXY_TEXTURE_CUBE_MAP = PROXY_TEXTURE_CUBE_MAP, + MAX_CUBE_MAP_TEXTURE_SIZE = MAX_CUBE_MAP_TEXTURE_SIZE, + COMPRESSED_RGB = COMPRESSED_RGB, + COMPRESSED_RGBA = COMPRESSED_RGBA, + TEXTURE_COMPRESSION_HINT = TEXTURE_COMPRESSION_HINT, + TEXTURE_COMPRESSED_IMAGE_SIZE = TEXTURE_COMPRESSED_IMAGE_SIZE, + TEXTURE_COMPRESSED = TEXTURE_COMPRESSED, + NUM_COMPRESSED_TEXTURE_FORMATS = NUM_COMPRESSED_TEXTURE_FORMATS, + COMPRESSED_TEXTURE_FORMATS = COMPRESSED_TEXTURE_FORMATS, + CLAMP_TO_BORDER = CLAMP_TO_BORDER, + + BLEND_DST_RGB = BLEND_DST_RGB, + BLEND_SRC_RGB = BLEND_SRC_RGB, + BLEND_DST_ALPHA = BLEND_DST_ALPHA, + BLEND_SRC_ALPHA = BLEND_SRC_ALPHA, + POINT_FADE_THRESHOLD_SIZE = POINT_FADE_THRESHOLD_SIZE, + DEPTH_COMPONENT16 = DEPTH_COMPONENT16, + DEPTH_COMPONENT24 = DEPTH_COMPONENT24, + DEPTH_COMPONENT32 = DEPTH_COMPONENT32, + MIRRORED_REPEAT = MIRRORED_REPEAT, + MAX_TEXTURE_LOD_BIAS = MAX_TEXTURE_LOD_BIAS, + TEXTURE_LOD_BIAS = TEXTURE_LOD_BIAS, + INCR_WRAP = INCR_WRAP, + DECR_WRAP = DECR_WRAP, + TEXTURE_DEPTH_SIZE = TEXTURE_DEPTH_SIZE, + TEXTURE_COMPARE_MODE = TEXTURE_COMPARE_MODE, + TEXTURE_COMPARE_FUNC = TEXTURE_COMPARE_FUNC, + FUNC_ADD = FUNC_ADD, + FUNC_SUBTRACT = FUNC_SUBTRACT, + FUNC_REVERSE_SUBTRACT = FUNC_REVERSE_SUBTRACT, + MIN = MIN, + MAX = MAX, + CONSTANT_COLOR = CONSTANT_COLOR, + ONE_MINUS_CONSTANT_COLOR = ONE_MINUS_CONSTANT_COLOR, + CONSTANT_ALPHA = CONSTANT_ALPHA, + ONE_MINUS_CONSTANT_ALPHA = ONE_MINUS_CONSTANT_ALPHA, + + BUFFER_SIZE = BUFFER_SIZE, + BUFFER_USAGE = BUFFER_USAGE, + QUERY_COUNTER_BITS = QUERY_COUNTER_BITS, + CURRENT_QUERY = CURRENT_QUERY, + QUERY_RESULT = QUERY_RESULT, + QUERY_RESULT_AVAILABLE = QUERY_RESULT_AVAILABLE, + ARRAY_BUFFER = ARRAY_BUFFER, + ELEMENT_ARRAY_BUFFER = ELEMENT_ARRAY_BUFFER, + ARRAY_BUFFER_BINDING = ARRAY_BUFFER_BINDING, + ELEMENT_ARRAY_BUFFER_BINDING = ELEMENT_ARRAY_BUFFER_BINDING, + VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = VERTEX_ATTRIB_ARRAY_BUFFER_BINDING, + READ_ONLY = READ_ONLY, + WRITE_ONLY = WRITE_ONLY, + READ_WRITE = READ_WRITE, + BUFFER_ACCESS = BUFFER_ACCESS, + BUFFER_MAPPED = BUFFER_MAPPED, + BUFFER_MAP_POINTER = BUFFER_MAP_POINTER, + STREAM_DRAW = STREAM_DRAW, + STREAM_READ = STREAM_READ, + STREAM_COPY = STREAM_COPY, + STATIC_DRAW = STATIC_DRAW, + STATIC_READ = STATIC_READ, + STATIC_COPY = STATIC_COPY, + DYNAMIC_DRAW = DYNAMIC_DRAW, + DYNAMIC_READ = DYNAMIC_READ, + DYNAMIC_COPY = DYNAMIC_COPY, + SAMPLES_PASSED = SAMPLES_PASSED, + SRC1_ALPHA = SRC1_ALPHA, + + BLEND_EQUATION_RGB = BLEND_EQUATION_RGB, + VERTEX_ATTRIB_ARRAY_ENABLED = VERTEX_ATTRIB_ARRAY_ENABLED, + VERTEX_ATTRIB_ARRAY_SIZE = VERTEX_ATTRIB_ARRAY_SIZE, + VERTEX_ATTRIB_ARRAY_STRIDE = VERTEX_ATTRIB_ARRAY_STRIDE, + VERTEX_ATTRIB_ARRAY_TYPE = VERTEX_ATTRIB_ARRAY_TYPE, + CURRENT_VERTEX_ATTRIB = CURRENT_VERTEX_ATTRIB, + VERTEX_PROGRAM_POINT_SIZE = VERTEX_PROGRAM_POINT_SIZE, + VERTEX_ATTRIB_ARRAY_POINTER = VERTEX_ATTRIB_ARRAY_POINTER, + STENCIL_BACK_FUNC = STENCIL_BACK_FUNC, + STENCIL_BACK_FAIL = STENCIL_BACK_FAIL, + STENCIL_BACK_PASS_DEPTH_FAIL = STENCIL_BACK_PASS_DEPTH_FAIL, + STENCIL_BACK_PASS_DEPTH_PASS = STENCIL_BACK_PASS_DEPTH_PASS, + MAX_DRAW_BUFFERS = MAX_DRAW_BUFFERS, + DRAW_BUFFER0 = DRAW_BUFFER0, + DRAW_BUFFER1 = DRAW_BUFFER1, + DRAW_BUFFER2 = DRAW_BUFFER2, + DRAW_BUFFER3 = DRAW_BUFFER3, + DRAW_BUFFER4 = DRAW_BUFFER4, + DRAW_BUFFER5 = DRAW_BUFFER5, + DRAW_BUFFER6 = DRAW_BUFFER6, + DRAW_BUFFER7 = DRAW_BUFFER7, + DRAW_BUFFER8 = DRAW_BUFFER8, + DRAW_BUFFER9 = DRAW_BUFFER9, + DRAW_BUFFER10 = DRAW_BUFFER10, + DRAW_BUFFER11 = DRAW_BUFFER11, + DRAW_BUFFER12 = DRAW_BUFFER12, + DRAW_BUFFER13 = DRAW_BUFFER13, + DRAW_BUFFER14 = DRAW_BUFFER14, + DRAW_BUFFER15 = DRAW_BUFFER15, + BLEND_EQUATION_ALPHA = BLEND_EQUATION_ALPHA, + MAX_VERTEX_ATTRIBS = MAX_VERTEX_ATTRIBS, + VERTEX_ATTRIB_ARRAY_NORMALIZED = VERTEX_ATTRIB_ARRAY_NORMALIZED, + MAX_TEXTURE_IMAGE_UNITS = MAX_TEXTURE_IMAGE_UNITS, + FRAGMENT_SHADER = FRAGMENT_SHADER, + VERTEX_SHADER = VERTEX_SHADER, + MAX_FRAGMENT_UNIFORM_COMPONENTS = MAX_FRAGMENT_UNIFORM_COMPONENTS, + MAX_VERTEX_UNIFORM_COMPONENTS = MAX_VERTEX_UNIFORM_COMPONENTS, + MAX_VARYING_FLOATS = MAX_VARYING_FLOATS, + MAX_VERTEX_TEXTURE_IMAGE_UNITS = MAX_VERTEX_TEXTURE_IMAGE_UNITS, + MAX_COMBINED_TEXTURE_IMAGE_UNITS = MAX_COMBINED_TEXTURE_IMAGE_UNITS, + SHADER_TYPE = SHADER_TYPE, + FLOAT_VEC2 = FLOAT_VEC2, + FLOAT_VEC3 = FLOAT_VEC3, + FLOAT_VEC4 = FLOAT_VEC4, + INT_VEC2 = INT_VEC2, + INT_VEC3 = INT_VEC3, + INT_VEC4 = INT_VEC4, + BOOL = BOOL, + BOOL_VEC2 = BOOL_VEC2, + BOOL_VEC3 = BOOL_VEC3, + BOOL_VEC4 = BOOL_VEC4, + FLOAT_MAT2 = FLOAT_MAT2, + FLOAT_MAT3 = FLOAT_MAT3, + FLOAT_MAT4 = FLOAT_MAT4, + SAMPLER_1D = SAMPLER_1D, + SAMPLER_2D = SAMPLER_2D, + SAMPLER_3D = SAMPLER_3D, + SAMPLER_CUBE = SAMPLER_CUBE, + SAMPLER_1D_SHADOW = SAMPLER_1D_SHADOW, + SAMPLER_2D_SHADOW = SAMPLER_2D_SHADOW, + DELETE_STATUS = DELETE_STATUS, + COMPILE_STATUS = COMPILE_STATUS, + LINK_STATUS = LINK_STATUS, + VALIDATE_STATUS = VALIDATE_STATUS, + INFO_LOG_LENGTH = INFO_LOG_LENGTH, + ATTACHED_SHADERS = ATTACHED_SHADERS, + ACTIVE_UNIFORMS = ACTIVE_UNIFORMS, + ACTIVE_UNIFORM_MAX_LENGTH = ACTIVE_UNIFORM_MAX_LENGTH, + SHADER_SOURCE_LENGTH = SHADER_SOURCE_LENGTH, + ACTIVE_ATTRIBUTES = ACTIVE_ATTRIBUTES, + ACTIVE_ATTRIBUTE_MAX_LENGTH = ACTIVE_ATTRIBUTE_MAX_LENGTH, + FRAGMENT_SHADER_DERIVATIVE_HINT = FRAGMENT_SHADER_DERIVATIVE_HINT, + SHADING_LANGUAGE_VERSION = SHADING_LANGUAGE_VERSION, + CURRENT_PROGRAM = CURRENT_PROGRAM, + POINT_SPRITE_COORD_ORIGIN = POINT_SPRITE_COORD_ORIGIN, + LOWER_LEFT = LOWER_LEFT, + UPPER_LEFT = UPPER_LEFT, + STENCIL_BACK_REF = STENCIL_BACK_REF, + STENCIL_BACK_VALUE_MASK = STENCIL_BACK_VALUE_MASK, + STENCIL_BACK_WRITEMASK = STENCIL_BACK_WRITEMASK, + + PIXEL_PACK_BUFFER = PIXEL_PACK_BUFFER, + PIXEL_UNPACK_BUFFER = PIXEL_UNPACK_BUFFER, + PIXEL_PACK_BUFFER_BINDING = PIXEL_PACK_BUFFER_BINDING, + PIXEL_UNPACK_BUFFER_BINDING = PIXEL_UNPACK_BUFFER_BINDING, + FLOAT_MAT2x3 = FLOAT_MAT2x3, + FLOAT_MAT2x4 = FLOAT_MAT2x4, + FLOAT_MAT3x2 = FLOAT_MAT3x2, + FLOAT_MAT3x4 = FLOAT_MAT3x4, + FLOAT_MAT4x2 = FLOAT_MAT4x2, + FLOAT_MAT4x3 = FLOAT_MAT4x3, + SRGB = SRGB, + SRGB8 = SRGB8, + SRGB_ALPHA = SRGB_ALPHA, + SRGB8_ALPHA8 = SRGB8_ALPHA8, + COMPRESSED_SRGB = COMPRESSED_SRGB, + COMPRESSED_SRGB_ALPHA = COMPRESSED_SRGB_ALPHA, + + COMPARE_REF_TO_TEXTURE = COMPARE_REF_TO_TEXTURE, + CLIP_DISTANCE0 = CLIP_DISTANCE0, + CLIP_DISTANCE1 = CLIP_DISTANCE1, + CLIP_DISTANCE2 = CLIP_DISTANCE2, + CLIP_DISTANCE3 = CLIP_DISTANCE3, + CLIP_DISTANCE4 = CLIP_DISTANCE4, + CLIP_DISTANCE5 = CLIP_DISTANCE5, + CLIP_DISTANCE6 = CLIP_DISTANCE6, + CLIP_DISTANCE7 = CLIP_DISTANCE7, + MAX_CLIP_DISTANCES = MAX_CLIP_DISTANCES, + MAJOR_VERSION = MAJOR_VERSION, + MINOR_VERSION = MINOR_VERSION, + NUM_EXTENSIONS = NUM_EXTENSIONS, + CONTEXT_FLAGS = CONTEXT_FLAGS, + COMPRESSED_RED = COMPRESSED_RED, + COMPRESSED_RG = COMPRESSED_RG, + CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT = CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT, + RGBA32F = RGBA32F, + RGB32F = RGB32F, + RGBA16F = RGBA16F, + RGB16F = RGB16F, + VERTEX_ATTRIB_ARRAY_INTEGER = VERTEX_ATTRIB_ARRAY_INTEGER, + MAX_ARRAY_TEXTURE_LAYERS = MAX_ARRAY_TEXTURE_LAYERS, + MIN_PROGRAM_TEXEL_OFFSET = MIN_PROGRAM_TEXEL_OFFSET, + MAX_PROGRAM_TEXEL_OFFSET = MAX_PROGRAM_TEXEL_OFFSET, + CLAMP_READ_COLOR = CLAMP_READ_COLOR, + FIXED_ONLY = FIXED_ONLY, + MAX_VARYING_COMPONENTS = MAX_VARYING_COMPONENTS, + TEXTURE_1D_ARRAY = TEXTURE_1D_ARRAY, + PROXY_TEXTURE_1D_ARRAY = PROXY_TEXTURE_1D_ARRAY, + TEXTURE_2D_ARRAY = TEXTURE_2D_ARRAY, + PROXY_TEXTURE_2D_ARRAY = PROXY_TEXTURE_2D_ARRAY, + TEXTURE_BINDING_1D_ARRAY = TEXTURE_BINDING_1D_ARRAY, + TEXTURE_BINDING_2D_ARRAY = TEXTURE_BINDING_2D_ARRAY, + R11F_G11F_B10F = R11F_G11F_B10F, + UNSIGNED_INT_10F_11F_11F_REV = UNSIGNED_INT_10F_11F_11F_REV, + RGB9_E5 = RGB9_E5, + UNSIGNED_INT_5_9_9_9_REV = UNSIGNED_INT_5_9_9_9_REV, + TEXTURE_SHARED_SIZE = TEXTURE_SHARED_SIZE, + TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH = TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH, + TRANSFORM_FEEDBACK_BUFFER_MODE = TRANSFORM_FEEDBACK_BUFFER_MODE, + MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS = MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS, + TRANSFORM_FEEDBACK_VARYINGS = TRANSFORM_FEEDBACK_VARYINGS, + TRANSFORM_FEEDBACK_BUFFER_START = TRANSFORM_FEEDBACK_BUFFER_START, + TRANSFORM_FEEDBACK_BUFFER_SIZE = TRANSFORM_FEEDBACK_BUFFER_SIZE, + PRIMITIVES_GENERATED = PRIMITIVES_GENERATED, + TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN = TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN, + RASTERIZER_DISCARD = RASTERIZER_DISCARD, + MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS, + MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS, + INTERLEAVED_ATTRIBS = INTERLEAVED_ATTRIBS, + SEPARATE_ATTRIBS = SEPARATE_ATTRIBS, + TRANSFORM_FEEDBACK_BUFFER = TRANSFORM_FEEDBACK_BUFFER, + TRANSFORM_FEEDBACK_BUFFER_BINDING = TRANSFORM_FEEDBACK_BUFFER_BINDING, + RGBA32UI = RGBA32UI, + RGB32UI = RGB32UI, + RGBA16UI = RGBA16UI, + RGB16UI = RGB16UI, + RGBA8UI = RGBA8UI, + RGB8UI = RGB8UI, + RGBA32I = RGBA32I, + RGB32I = RGB32I, + RGBA16I = RGBA16I, + RGB16I = RGB16I, + RGBA8I = RGBA8I, + RGB8I = RGB8I, + RED_INTEGER = RED_INTEGER, + GREEN_INTEGER = GREEN_INTEGER, + BLUE_INTEGER = BLUE_INTEGER, + RGB_INTEGER = RGB_INTEGER, + RGBA_INTEGER = RGBA_INTEGER, + BGR_INTEGER = BGR_INTEGER, + BGRA_INTEGER = BGRA_INTEGER, + SAMPLER_1D_ARRAY = SAMPLER_1D_ARRAY, + SAMPLER_2D_ARRAY = SAMPLER_2D_ARRAY, + SAMPLER_1D_ARRAY_SHADOW = SAMPLER_1D_ARRAY_SHADOW, + SAMPLER_2D_ARRAY_SHADOW = SAMPLER_2D_ARRAY_SHADOW, + SAMPLER_CUBE_SHADOW = SAMPLER_CUBE_SHADOW, + UNSIGNED_INT_VEC2 = UNSIGNED_INT_VEC2, + UNSIGNED_INT_VEC3 = UNSIGNED_INT_VEC3, + UNSIGNED_INT_VEC4 = UNSIGNED_INT_VEC4, + INT_SAMPLER_1D = INT_SAMPLER_1D, + INT_SAMPLER_2D = INT_SAMPLER_2D, + INT_SAMPLER_3D = INT_SAMPLER_3D, + INT_SAMPLER_CUBE = INT_SAMPLER_CUBE, + INT_SAMPLER_1D_ARRAY = INT_SAMPLER_1D_ARRAY, + INT_SAMPLER_2D_ARRAY = INT_SAMPLER_2D_ARRAY, + UNSIGNED_INT_SAMPLER_1D = UNSIGNED_INT_SAMPLER_1D, + UNSIGNED_INT_SAMPLER_2D = UNSIGNED_INT_SAMPLER_2D, + UNSIGNED_INT_SAMPLER_3D = UNSIGNED_INT_SAMPLER_3D, + UNSIGNED_INT_SAMPLER_CUBE = UNSIGNED_INT_SAMPLER_CUBE, + UNSIGNED_INT_SAMPLER_1D_ARRAY = UNSIGNED_INT_SAMPLER_1D_ARRAY, + UNSIGNED_INT_SAMPLER_2D_ARRAY = UNSIGNED_INT_SAMPLER_2D_ARRAY, + QUERY_WAIT = QUERY_WAIT, + QUERY_NO_WAIT = QUERY_NO_WAIT, + QUERY_BY_REGION_WAIT = QUERY_BY_REGION_WAIT, + QUERY_BY_REGION_NO_WAIT = QUERY_BY_REGION_NO_WAIT, + BUFFER_ACCESS_FLAGS = BUFFER_ACCESS_FLAGS, + BUFFER_MAP_LENGTH = BUFFER_MAP_LENGTH, + BUFFER_MAP_OFFSET = BUFFER_MAP_OFFSET, + DEPTH_COMPONENT32F = DEPTH_COMPONENT32F, + DEPTH32F_STENCIL8 = DEPTH32F_STENCIL8, + FLOAT_32_UNSIGNED_INT_24_8_REV = FLOAT_32_UNSIGNED_INT_24_8_REV, + INVALID_FRAMEBUFFER_OPERATION = INVALID_FRAMEBUFFER_OPERATION, + FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING = FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING, + FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE = FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE, + FRAMEBUFFER_ATTACHMENT_RED_SIZE = FRAMEBUFFER_ATTACHMENT_RED_SIZE, + FRAMEBUFFER_ATTACHMENT_GREEN_SIZE = FRAMEBUFFER_ATTACHMENT_GREEN_SIZE, + FRAMEBUFFER_ATTACHMENT_BLUE_SIZE = FRAMEBUFFER_ATTACHMENT_BLUE_SIZE, + FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE = FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE, + FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE = FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE, + FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE = FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE, + FRAMEBUFFER_DEFAULT = FRAMEBUFFER_DEFAULT, + FRAMEBUFFER_UNDEFINED = FRAMEBUFFER_UNDEFINED, + DEPTH_STENCIL_ATTACHMENT = DEPTH_STENCIL_ATTACHMENT, + MAX_RENDERBUFFER_SIZE = MAX_RENDERBUFFER_SIZE, + DEPTH_STENCIL = DEPTH_STENCIL, + UNSIGNED_INT_24_8 = UNSIGNED_INT_24_8, + DEPTH24_STENCIL8 = DEPTH24_STENCIL8, + TEXTURE_STENCIL_SIZE = TEXTURE_STENCIL_SIZE, + TEXTURE_RED_TYPE = TEXTURE_RED_TYPE, + TEXTURE_GREEN_TYPE = TEXTURE_GREEN_TYPE, + TEXTURE_BLUE_TYPE = TEXTURE_BLUE_TYPE, + TEXTURE_ALPHA_TYPE = TEXTURE_ALPHA_TYPE, + TEXTURE_DEPTH_TYPE = TEXTURE_DEPTH_TYPE, + UNSIGNED_NORMALIZED = UNSIGNED_NORMALIZED, + FRAMEBUFFER_BINDING = FRAMEBUFFER_BINDING, + DRAW_FRAMEBUFFER_BINDING = DRAW_FRAMEBUFFER_BINDING, + RENDERBUFFER_BINDING = RENDERBUFFER_BINDING, + READ_FRAMEBUFFER = READ_FRAMEBUFFER, + DRAW_FRAMEBUFFER = DRAW_FRAMEBUFFER, + READ_FRAMEBUFFER_BINDING = READ_FRAMEBUFFER_BINDING, + RENDERBUFFER_SAMPLES = RENDERBUFFER_SAMPLES, + FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, + FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, + FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL, + FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE, + FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER = FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER, + FRAMEBUFFER_COMPLETE = FRAMEBUFFER_COMPLETE, + FRAMEBUFFER_INCOMPLETE_ATTACHMENT = FRAMEBUFFER_INCOMPLETE_ATTACHMENT, + FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT, + FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER = FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER, + FRAMEBUFFER_INCOMPLETE_READ_BUFFER = FRAMEBUFFER_INCOMPLETE_READ_BUFFER, + FRAMEBUFFER_UNSUPPORTED = FRAMEBUFFER_UNSUPPORTED, + MAX_COLOR_ATTACHMENTS = MAX_COLOR_ATTACHMENTS, + COLOR_ATTACHMENT0 = COLOR_ATTACHMENT0, + COLOR_ATTACHMENT1 = COLOR_ATTACHMENT1, + COLOR_ATTACHMENT2 = COLOR_ATTACHMENT2, + COLOR_ATTACHMENT3 = COLOR_ATTACHMENT3, + COLOR_ATTACHMENT4 = COLOR_ATTACHMENT4, + COLOR_ATTACHMENT5 = COLOR_ATTACHMENT5, + COLOR_ATTACHMENT6 = COLOR_ATTACHMENT6, + COLOR_ATTACHMENT7 = COLOR_ATTACHMENT7, + COLOR_ATTACHMENT8 = COLOR_ATTACHMENT8, + COLOR_ATTACHMENT9 = COLOR_ATTACHMENT9, + COLOR_ATTACHMENT10 = COLOR_ATTACHMENT10, + COLOR_ATTACHMENT11 = COLOR_ATTACHMENT11, + COLOR_ATTACHMENT12 = COLOR_ATTACHMENT12, + COLOR_ATTACHMENT13 = COLOR_ATTACHMENT13, + COLOR_ATTACHMENT14 = COLOR_ATTACHMENT14, + COLOR_ATTACHMENT15 = COLOR_ATTACHMENT15, + COLOR_ATTACHMENT16 = COLOR_ATTACHMENT16, + COLOR_ATTACHMENT17 = COLOR_ATTACHMENT17, + COLOR_ATTACHMENT18 = COLOR_ATTACHMENT18, + COLOR_ATTACHMENT19 = COLOR_ATTACHMENT19, + COLOR_ATTACHMENT20 = COLOR_ATTACHMENT20, + COLOR_ATTACHMENT21 = COLOR_ATTACHMENT21, + COLOR_ATTACHMENT22 = COLOR_ATTACHMENT22, + COLOR_ATTACHMENT23 = COLOR_ATTACHMENT23, + COLOR_ATTACHMENT24 = COLOR_ATTACHMENT24, + COLOR_ATTACHMENT25 = COLOR_ATTACHMENT25, + COLOR_ATTACHMENT26 = COLOR_ATTACHMENT26, + COLOR_ATTACHMENT27 = COLOR_ATTACHMENT27, + COLOR_ATTACHMENT28 = COLOR_ATTACHMENT28, + COLOR_ATTACHMENT29 = COLOR_ATTACHMENT29, + COLOR_ATTACHMENT30 = COLOR_ATTACHMENT30, + COLOR_ATTACHMENT31 = COLOR_ATTACHMENT31, + DEPTH_ATTACHMENT = DEPTH_ATTACHMENT, + STENCIL_ATTACHMENT = STENCIL_ATTACHMENT, + FRAMEBUFFER = FRAMEBUFFER, + RENDERBUFFER = RENDERBUFFER, + RENDERBUFFER_WIDTH = RENDERBUFFER_WIDTH, + RENDERBUFFER_HEIGHT = RENDERBUFFER_HEIGHT, + RENDERBUFFER_INTERNAL_FORMAT = RENDERBUFFER_INTERNAL_FORMAT, + STENCIL_INDEX1 = STENCIL_INDEX1, + STENCIL_INDEX4 = STENCIL_INDEX4, + STENCIL_INDEX8 = STENCIL_INDEX8, + STENCIL_INDEX16 = STENCIL_INDEX16, + RENDERBUFFER_RED_SIZE = RENDERBUFFER_RED_SIZE, + RENDERBUFFER_GREEN_SIZE = RENDERBUFFER_GREEN_SIZE, + RENDERBUFFER_BLUE_SIZE = RENDERBUFFER_BLUE_SIZE, + RENDERBUFFER_ALPHA_SIZE = RENDERBUFFER_ALPHA_SIZE, + RENDERBUFFER_DEPTH_SIZE = RENDERBUFFER_DEPTH_SIZE, + RENDERBUFFER_STENCIL_SIZE = RENDERBUFFER_STENCIL_SIZE, + FRAMEBUFFER_INCOMPLETE_MULTISAMPLE = FRAMEBUFFER_INCOMPLETE_MULTISAMPLE, + MAX_SAMPLES = MAX_SAMPLES, + FRAMEBUFFER_SRGB = FRAMEBUFFER_SRGB, + HALF_FLOAT = HALF_FLOAT, + MAP_READ_BIT = MAP_READ_BIT, + MAP_WRITE_BIT = MAP_WRITE_BIT, + MAP_INVALIDATE_RANGE_BIT = MAP_INVALIDATE_RANGE_BIT, + MAP_INVALIDATE_BUFFER_BIT = MAP_INVALIDATE_BUFFER_BIT, + MAP_FLUSH_EXPLICIT_BIT = MAP_FLUSH_EXPLICIT_BIT, + MAP_UNSYNCHRONIZED_BIT = MAP_UNSYNCHRONIZED_BIT, + COMPRESSED_RED_RGTC1 = COMPRESSED_RED_RGTC1, + COMPRESSED_SIGNED_RED_RGTC1 = COMPRESSED_SIGNED_RED_RGTC1, + COMPRESSED_RG_RGTC2 = COMPRESSED_RG_RGTC2, + COMPRESSED_SIGNED_RG_RGTC2 = COMPRESSED_SIGNED_RG_RGTC2, + RG = RG, + RG_INTEGER = RG_INTEGER, + R8 = R8, + R16 = R16, + RG8 = RG8, + RG16 = RG16, + R16F = R16F, + R32F = R32F, + RG16F = RG16F, + RG32F = RG32F, + R8I = R8I, + R8UI = R8UI, + R16I = R16I, + R16UI = R16UI, + R32I = R32I, + R32UI = R32UI, + RG8I = RG8I, + RG8UI = RG8UI, + RG16I = RG16I, + RG16UI = RG16UI, + RG32I = RG32I, + RG32UI = RG32UI, + VERTEX_ARRAY_BINDING = VERTEX_ARRAY_BINDING, + + SAMPLER_2D_RECT = SAMPLER_2D_RECT, + SAMPLER_2D_RECT_SHADOW = SAMPLER_2D_RECT_SHADOW, + SAMPLER_BUFFER = SAMPLER_BUFFER, + INT_SAMPLER_2D_RECT = INT_SAMPLER_2D_RECT, + INT_SAMPLER_BUFFER = INT_SAMPLER_BUFFER, + UNSIGNED_INT_SAMPLER_2D_RECT = UNSIGNED_INT_SAMPLER_2D_RECT, + UNSIGNED_INT_SAMPLER_BUFFER = UNSIGNED_INT_SAMPLER_BUFFER, + TEXTURE_BUFFER = TEXTURE_BUFFER, + MAX_TEXTURE_BUFFER_SIZE = MAX_TEXTURE_BUFFER_SIZE, + TEXTURE_BINDING_BUFFER = TEXTURE_BINDING_BUFFER, + TEXTURE_BUFFER_DATA_STORE_BINDING = TEXTURE_BUFFER_DATA_STORE_BINDING, + TEXTURE_RECTANGLE = TEXTURE_RECTANGLE, + TEXTURE_BINDING_RECTANGLE = TEXTURE_BINDING_RECTANGLE, + PROXY_TEXTURE_RECTANGLE = PROXY_TEXTURE_RECTANGLE, + MAX_RECTANGLE_TEXTURE_SIZE = MAX_RECTANGLE_TEXTURE_SIZE, + R8_SNORM = R8_SNORM, + RG8_SNORM = RG8_SNORM, + RGB8_SNORM = RGB8_SNORM, + RGBA8_SNORM = RGBA8_SNORM, + R16_SNORM = R16_SNORM, + RG16_SNORM = RG16_SNORM, + RGB16_SNORM = RGB16_SNORM, + RGBA16_SNORM = RGBA16_SNORM, + SIGNED_NORMALIZED = SIGNED_NORMALIZED, + PRIMITIVE_RESTART = PRIMITIVE_RESTART, + PRIMITIVE_RESTART_INDEX = PRIMITIVE_RESTART_INDEX, + COPY_READ_BUFFER = COPY_READ_BUFFER, + COPY_WRITE_BUFFER = COPY_WRITE_BUFFER, + UNIFORM_BUFFER = UNIFORM_BUFFER, + UNIFORM_BUFFER_BINDING = UNIFORM_BUFFER_BINDING, + UNIFORM_BUFFER_START = UNIFORM_BUFFER_START, + UNIFORM_BUFFER_SIZE = UNIFORM_BUFFER_SIZE, + MAX_VERTEX_UNIFORM_BLOCKS = MAX_VERTEX_UNIFORM_BLOCKS, + MAX_GEOMETRY_UNIFORM_BLOCKS = MAX_GEOMETRY_UNIFORM_BLOCKS, + MAX_FRAGMENT_UNIFORM_BLOCKS = MAX_FRAGMENT_UNIFORM_BLOCKS, + MAX_COMBINED_UNIFORM_BLOCKS = MAX_COMBINED_UNIFORM_BLOCKS, + MAX_UNIFORM_BUFFER_BINDINGS = MAX_UNIFORM_BUFFER_BINDINGS, + MAX_UNIFORM_BLOCK_SIZE = MAX_UNIFORM_BLOCK_SIZE, + MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS = MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS, + MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS = MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS, + MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS = MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS, + UNIFORM_BUFFER_OFFSET_ALIGNMENT = UNIFORM_BUFFER_OFFSET_ALIGNMENT, + ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH = ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH, + ACTIVE_UNIFORM_BLOCKS = ACTIVE_UNIFORM_BLOCKS, + UNIFORM_TYPE = UNIFORM_TYPE, + UNIFORM_SIZE = UNIFORM_SIZE, + UNIFORM_NAME_LENGTH = UNIFORM_NAME_LENGTH, + UNIFORM_BLOCK_INDEX = UNIFORM_BLOCK_INDEX, + UNIFORM_OFFSET = UNIFORM_OFFSET, + UNIFORM_ARRAY_STRIDE = UNIFORM_ARRAY_STRIDE, + UNIFORM_MATRIX_STRIDE = UNIFORM_MATRIX_STRIDE, + UNIFORM_IS_ROW_MAJOR = UNIFORM_IS_ROW_MAJOR, + UNIFORM_BLOCK_BINDING = UNIFORM_BLOCK_BINDING, + UNIFORM_BLOCK_DATA_SIZE = UNIFORM_BLOCK_DATA_SIZE, + UNIFORM_BLOCK_NAME_LENGTH = UNIFORM_BLOCK_NAME_LENGTH, + UNIFORM_BLOCK_ACTIVE_UNIFORMS = UNIFORM_BLOCK_ACTIVE_UNIFORMS, + UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES = UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES, + UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER = UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER, + UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER = UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER, + UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER = UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER, + INVALID_INDEX = INVALID_INDEX, + + CONTEXT_CORE_PROFILE_BIT = CONTEXT_CORE_PROFILE_BIT, + CONTEXT_COMPATIBILITY_PROFILE_BIT = CONTEXT_COMPATIBILITY_PROFILE_BIT, + LINES_ADJACENCY = LINES_ADJACENCY, + LINE_STRIP_ADJACENCY = LINE_STRIP_ADJACENCY, + TRIANGLES_ADJACENCY = TRIANGLES_ADJACENCY, + TRIANGLE_STRIP_ADJACENCY = TRIANGLE_STRIP_ADJACENCY, + PROGRAM_POINT_SIZE = PROGRAM_POINT_SIZE, + MAX_GEOMETRY_TEXTURE_IMAGE_UNITS = MAX_GEOMETRY_TEXTURE_IMAGE_UNITS, + FRAMEBUFFER_ATTACHMENT_LAYERED = FRAMEBUFFER_ATTACHMENT_LAYERED, + FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS = FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS, + GEOMETRY_SHADER = GEOMETRY_SHADER, + GEOMETRY_VERTICES_OUT = GEOMETRY_VERTICES_OUT, + GEOMETRY_INPUT_TYPE = GEOMETRY_INPUT_TYPE, + GEOMETRY_OUTPUT_TYPE = GEOMETRY_OUTPUT_TYPE, + MAX_GEOMETRY_UNIFORM_COMPONENTS = MAX_GEOMETRY_UNIFORM_COMPONENTS, + MAX_GEOMETRY_OUTPUT_VERTICES = MAX_GEOMETRY_OUTPUT_VERTICES, + MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS = MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS, + MAX_VERTEX_OUTPUT_COMPONENTS = MAX_VERTEX_OUTPUT_COMPONENTS, + MAX_GEOMETRY_INPUT_COMPONENTS = MAX_GEOMETRY_INPUT_COMPONENTS, + MAX_GEOMETRY_OUTPUT_COMPONENTS = MAX_GEOMETRY_OUTPUT_COMPONENTS, + MAX_FRAGMENT_INPUT_COMPONENTS = MAX_FRAGMENT_INPUT_COMPONENTS, + CONTEXT_PROFILE_MASK = CONTEXT_PROFILE_MASK, + DEPTH_CLAMP = DEPTH_CLAMP, + QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION = QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION, + FIRST_VERTEX_CONVENTION = FIRST_VERTEX_CONVENTION, + LAST_VERTEX_CONVENTION = LAST_VERTEX_CONVENTION, + PROVOKING_VERTEX = PROVOKING_VERTEX, + TEXTURE_CUBE_MAP_SEAMLESS = TEXTURE_CUBE_MAP_SEAMLESS, + MAX_SERVER_WAIT_TIMEOUT = MAX_SERVER_WAIT_TIMEOUT, + OBJECT_TYPE = OBJECT_TYPE, + SYNC_CONDITION = SYNC_CONDITION, + SYNC_STATUS = SYNC_STATUS, + SYNC_FLAGS = SYNC_FLAGS, + SYNC_FENCE = SYNC_FENCE, + SYNC_GPU_COMMANDS_COMPLETE = SYNC_GPU_COMMANDS_COMPLETE, + UNSIGNALED = UNSIGNALED, + SIGNALED = SIGNALED, + ALREADY_SIGNALED = ALREADY_SIGNALED, + TIMEOUT_EXPIRED = TIMEOUT_EXPIRED, + CONDITION_SATISFIED = CONDITION_SATISFIED, + WAIT_FAILED = WAIT_FAILED, + TIMEOUT_IGNORED = TIMEOUT_IGNORED, + SYNC_FLUSH_COMMANDS_BIT = SYNC_FLUSH_COMMANDS_BIT, + SAMPLE_POSITION = SAMPLE_POSITION, + SAMPLE_MASK = SAMPLE_MASK, + SAMPLE_MASK_VALUE = SAMPLE_MASK_VALUE, + MAX_SAMPLE_MASK_WORDS = MAX_SAMPLE_MASK_WORDS, + TEXTURE_2D_MULTISAMPLE = TEXTURE_2D_MULTISAMPLE, + PROXY_TEXTURE_2D_MULTISAMPLE = PROXY_TEXTURE_2D_MULTISAMPLE, + TEXTURE_2D_MULTISAMPLE_ARRAY = TEXTURE_2D_MULTISAMPLE_ARRAY, + PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY = PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY, + TEXTURE_BINDING_2D_MULTISAMPLE = TEXTURE_BINDING_2D_MULTISAMPLE, + TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY = TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY, + TEXTURE_SAMPLES = TEXTURE_SAMPLES, + TEXTURE_FIXED_SAMPLE_LOCATIONS = TEXTURE_FIXED_SAMPLE_LOCATIONS, + SAMPLER_2D_MULTISAMPLE = SAMPLER_2D_MULTISAMPLE, + INT_SAMPLER_2D_MULTISAMPLE = INT_SAMPLER_2D_MULTISAMPLE, + UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE = UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE, + SAMPLER_2D_MULTISAMPLE_ARRAY = SAMPLER_2D_MULTISAMPLE_ARRAY, + INT_SAMPLER_2D_MULTISAMPLE_ARRAY = INT_SAMPLER_2D_MULTISAMPLE_ARRAY, + UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY = UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY, + MAX_COLOR_TEXTURE_SAMPLES = MAX_COLOR_TEXTURE_SAMPLES, + MAX_DEPTH_TEXTURE_SAMPLES = MAX_DEPTH_TEXTURE_SAMPLES, + MAX_INTEGER_SAMPLES = MAX_INTEGER_SAMPLES, + + VERTEX_ATTRIB_ARRAY_DIVISOR = VERTEX_ATTRIB_ARRAY_DIVISOR, + SRC1_COLOR = SRC1_COLOR, + ONE_MINUS_SRC1_COLOR = ONE_MINUS_SRC1_COLOR, + ONE_MINUS_SRC1_ALPHA = ONE_MINUS_SRC1_ALPHA, + MAX_DUAL_SOURCE_DRAW_BUFFERS = MAX_DUAL_SOURCE_DRAW_BUFFERS, + ANY_SAMPLES_PASSED = ANY_SAMPLES_PASSED, + SAMPLER_BINDING = SAMPLER_BINDING, + RGB10_A2UI = RGB10_A2UI, + TEXTURE_SWIZZLE_R = TEXTURE_SWIZZLE_R, + TEXTURE_SWIZZLE_G = TEXTURE_SWIZZLE_G, + TEXTURE_SWIZZLE_B = TEXTURE_SWIZZLE_B, + TEXTURE_SWIZZLE_A = TEXTURE_SWIZZLE_A, + TEXTURE_SWIZZLE_RGBA = TEXTURE_SWIZZLE_RGBA, + TIME_ELAPSED = TIME_ELAPSED, + TIMESTAMP = TIMESTAMP, + INT_2_10_10_10_REV = INT_2_10_10_10_REV, + + SAMPLE_SHADING = SAMPLE_SHADING, + MIN_SAMPLE_SHADING_VALUE = MIN_SAMPLE_SHADING_VALUE, + MIN_PROGRAM_TEXTURE_GATHER_OFFSET = MIN_PROGRAM_TEXTURE_GATHER_OFFSET, + MAX_PROGRAM_TEXTURE_GATHER_OFFSET = MAX_PROGRAM_TEXTURE_GATHER_OFFSET, + TEXTURE_CUBE_MAP_ARRAY = TEXTURE_CUBE_MAP_ARRAY, + TEXTURE_BINDING_CUBE_MAP_ARRAY = TEXTURE_BINDING_CUBE_MAP_ARRAY, + PROXY_TEXTURE_CUBE_MAP_ARRAY = PROXY_TEXTURE_CUBE_MAP_ARRAY, + SAMPLER_CUBE_MAP_ARRAY = SAMPLER_CUBE_MAP_ARRAY, + SAMPLER_CUBE_MAP_ARRAY_SHADOW = SAMPLER_CUBE_MAP_ARRAY_SHADOW, + INT_SAMPLER_CUBE_MAP_ARRAY = INT_SAMPLER_CUBE_MAP_ARRAY, + UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY = UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY, + DRAW_INDIRECT_BUFFER = DRAW_INDIRECT_BUFFER, + DRAW_INDIRECT_BUFFER_BINDING = DRAW_INDIRECT_BUFFER_BINDING, + GEOMETRY_SHADER_INVOCATIONS = GEOMETRY_SHADER_INVOCATIONS, + MAX_GEOMETRY_SHADER_INVOCATIONS = MAX_GEOMETRY_SHADER_INVOCATIONS, + MIN_FRAGMENT_INTERPOLATION_OFFSET = MIN_FRAGMENT_INTERPOLATION_OFFSET, + MAX_FRAGMENT_INTERPOLATION_OFFSET = MAX_FRAGMENT_INTERPOLATION_OFFSET, + FRAGMENT_INTERPOLATION_OFFSET_BITS = FRAGMENT_INTERPOLATION_OFFSET_BITS, + MAX_VERTEX_STREAMS = MAX_VERTEX_STREAMS, + DOUBLE_VEC2 = DOUBLE_VEC2, + DOUBLE_VEC3 = DOUBLE_VEC3, + DOUBLE_VEC4 = DOUBLE_VEC4, + DOUBLE_MAT2 = DOUBLE_MAT2, + DOUBLE_MAT3 = DOUBLE_MAT3, + DOUBLE_MAT4 = DOUBLE_MAT4, + DOUBLE_MAT2x3 = DOUBLE_MAT2x3, + DOUBLE_MAT2x4 = DOUBLE_MAT2x4, + DOUBLE_MAT3x2 = DOUBLE_MAT3x2, + DOUBLE_MAT3x4 = DOUBLE_MAT3x4, + DOUBLE_MAT4x2 = DOUBLE_MAT4x2, + DOUBLE_MAT4x3 = DOUBLE_MAT4x3, + ACTIVE_SUBROUTINES = ACTIVE_SUBROUTINES, + ACTIVE_SUBROUTINE_UNIFORMS = ACTIVE_SUBROUTINE_UNIFORMS, + ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS = ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS, + ACTIVE_SUBROUTINE_MAX_LENGTH = ACTIVE_SUBROUTINE_MAX_LENGTH, + ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH = ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH, + MAX_SUBROUTINES = MAX_SUBROUTINES, + MAX_SUBROUTINE_UNIFORM_LOCATIONS = MAX_SUBROUTINE_UNIFORM_LOCATIONS, + NUM_COMPATIBLE_SUBROUTINES = NUM_COMPATIBLE_SUBROUTINES, + COMPATIBLE_SUBROUTINES = COMPATIBLE_SUBROUTINES, + PATCHES = PATCHES, + PATCH_VERTICES = PATCH_VERTICES, + PATCH_DEFAULT_INNER_LEVEL = PATCH_DEFAULT_INNER_LEVEL, + PATCH_DEFAULT_OUTER_LEVEL = PATCH_DEFAULT_OUTER_LEVEL, + TESS_CONTROL_OUTPUT_VERTICES = TESS_CONTROL_OUTPUT_VERTICES, + TESS_GEN_MODE = TESS_GEN_MODE, + TESS_GEN_SPACING = TESS_GEN_SPACING, + TESS_GEN_VERTEX_ORDER = TESS_GEN_VERTEX_ORDER, + TESS_GEN_POINT_MODE = TESS_GEN_POINT_MODE, + ISOLINES = ISOLINES, + FRACTIONAL_ODD = FRACTIONAL_ODD, + FRACTIONAL_EVEN = FRACTIONAL_EVEN, + MAX_PATCH_VERTICES = MAX_PATCH_VERTICES, + MAX_TESS_GEN_LEVEL = MAX_TESS_GEN_LEVEL, + MAX_TESS_CONTROL_UNIFORM_COMPONENTS = MAX_TESS_CONTROL_UNIFORM_COMPONENTS, + MAX_TESS_EVALUATION_UNIFORM_COMPONENTS = MAX_TESS_EVALUATION_UNIFORM_COMPONENTS, + MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS = MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS, + MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS = MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS, + MAX_TESS_CONTROL_OUTPUT_COMPONENTS = MAX_TESS_CONTROL_OUTPUT_COMPONENTS, + MAX_TESS_PATCH_COMPONENTS = MAX_TESS_PATCH_COMPONENTS, + MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS = MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS, + MAX_TESS_EVALUATION_OUTPUT_COMPONENTS = MAX_TESS_EVALUATION_OUTPUT_COMPONENTS, + MAX_TESS_CONTROL_UNIFORM_BLOCKS = MAX_TESS_CONTROL_UNIFORM_BLOCKS, + MAX_TESS_EVALUATION_UNIFORM_BLOCKS = MAX_TESS_EVALUATION_UNIFORM_BLOCKS, + MAX_TESS_CONTROL_INPUT_COMPONENTS = MAX_TESS_CONTROL_INPUT_COMPONENTS, + MAX_TESS_EVALUATION_INPUT_COMPONENTS = MAX_TESS_EVALUATION_INPUT_COMPONENTS, + MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS = MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS, + MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS = MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS, + UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER = UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER, + UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER = UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER, + TESS_EVALUATION_SHADER = TESS_EVALUATION_SHADER, + TESS_CONTROL_SHADER = TESS_CONTROL_SHADER, + TRANSFORM_FEEDBACK = TRANSFORM_FEEDBACK, + TRANSFORM_FEEDBACK_BUFFER_PAUSED = TRANSFORM_FEEDBACK_BUFFER_PAUSED, + TRANSFORM_FEEDBACK_BUFFER_ACTIVE = TRANSFORM_FEEDBACK_BUFFER_ACTIVE, + TRANSFORM_FEEDBACK_BINDING = TRANSFORM_FEEDBACK_BINDING, + MAX_TRANSFORM_FEEDBACK_BUFFERS = MAX_TRANSFORM_FEEDBACK_BUFFERS, + + FIXED = FIXED, + IMPLEMENTATION_COLOR_READ_TYPE = IMPLEMENTATION_COLOR_READ_TYPE, + IMPLEMENTATION_COLOR_READ_FORMAT = IMPLEMENTATION_COLOR_READ_FORMAT, + LOW_FLOAT = LOW_FLOAT, + MEDIUM_FLOAT = MEDIUM_FLOAT, + HIGH_FLOAT = HIGH_FLOAT, + LOW_INT = LOW_INT, + MEDIUM_INT = MEDIUM_INT, + HIGH_INT = HIGH_INT, + SHADER_COMPILER = SHADER_COMPILER, + SHADER_BINARY_FORMATS = SHADER_BINARY_FORMATS, + NUM_SHADER_BINARY_FORMATS = NUM_SHADER_BINARY_FORMATS, + MAX_VERTEX_UNIFORM_VECTORS = MAX_VERTEX_UNIFORM_VECTORS, + MAX_VARYING_VECTORS = MAX_VARYING_VECTORS, + MAX_FRAGMENT_UNIFORM_VECTORS = MAX_FRAGMENT_UNIFORM_VECTORS, + RGB565 = RGB565, + PROGRAM_BINARY_RETRIEVABLE_HINT = PROGRAM_BINARY_RETRIEVABLE_HINT, + PROGRAM_BINARY_LENGTH = PROGRAM_BINARY_LENGTH, + NUM_PROGRAM_BINARY_FORMATS = NUM_PROGRAM_BINARY_FORMATS, + PROGRAM_BINARY_FORMATS = PROGRAM_BINARY_FORMATS, + VERTEX_SHADER_BIT = VERTEX_SHADER_BIT, + FRAGMENT_SHADER_BIT = FRAGMENT_SHADER_BIT, + GEOMETRY_SHADER_BIT = GEOMETRY_SHADER_BIT, + TESS_CONTROL_SHADER_BIT = TESS_CONTROL_SHADER_BIT, + TESS_EVALUATION_SHADER_BIT = TESS_EVALUATION_SHADER_BIT, + ALL_SHADER_BITS = ALL_SHADER_BITS, + PROGRAM_SEPARABLE = PROGRAM_SEPARABLE, + ACTIVE_PROGRAM = ACTIVE_PROGRAM, + PROGRAM_PIPELINE_BINDING = PROGRAM_PIPELINE_BINDING, + MAX_VIEWPORTS = MAX_VIEWPORTS, + VIEWPORT_SUBPIXEL_BITS = VIEWPORT_SUBPIXEL_BITS, + VIEWPORT_BOUNDS_RANGE = VIEWPORT_BOUNDS_RANGE, + LAYER_PROVOKING_VERTEX = LAYER_PROVOKING_VERTEX, + VIEWPORT_INDEX_PROVOKING_VERTEX = VIEWPORT_INDEX_PROVOKING_VERTEX, + UNDEFINED_VERTEX = UNDEFINED_VERTEX, + + COPY_READ_BUFFER_BINDING = COPY_READ_BUFFER_BINDING, + COPY_WRITE_BUFFER_BINDING = COPY_WRITE_BUFFER_BINDING, + TRANSFORM_FEEDBACK_ACTIVE = TRANSFORM_FEEDBACK_ACTIVE, + TRANSFORM_FEEDBACK_PAUSED = TRANSFORM_FEEDBACK_PAUSED, + UNPACK_COMPRESSED_BLOCK_WIDTH = UNPACK_COMPRESSED_BLOCK_WIDTH, + UNPACK_COMPRESSED_BLOCK_HEIGHT = UNPACK_COMPRESSED_BLOCK_HEIGHT, + UNPACK_COMPRESSED_BLOCK_DEPTH = UNPACK_COMPRESSED_BLOCK_DEPTH, + UNPACK_COMPRESSED_BLOCK_SIZE = UNPACK_COMPRESSED_BLOCK_SIZE, + PACK_COMPRESSED_BLOCK_WIDTH = PACK_COMPRESSED_BLOCK_WIDTH, + PACK_COMPRESSED_BLOCK_HEIGHT = PACK_COMPRESSED_BLOCK_HEIGHT, + PACK_COMPRESSED_BLOCK_DEPTH = PACK_COMPRESSED_BLOCK_DEPTH, + PACK_COMPRESSED_BLOCK_SIZE = PACK_COMPRESSED_BLOCK_SIZE, + NUM_SAMPLE_COUNTS = NUM_SAMPLE_COUNTS, + MIN_MAP_BUFFER_ALIGNMENT = MIN_MAP_BUFFER_ALIGNMENT, + ATOMIC_COUNTER_BUFFER = ATOMIC_COUNTER_BUFFER, + ATOMIC_COUNTER_BUFFER_BINDING = ATOMIC_COUNTER_BUFFER_BINDING, + ATOMIC_COUNTER_BUFFER_START = ATOMIC_COUNTER_BUFFER_START, + ATOMIC_COUNTER_BUFFER_SIZE = ATOMIC_COUNTER_BUFFER_SIZE, + ATOMIC_COUNTER_BUFFER_DATA_SIZE = ATOMIC_COUNTER_BUFFER_DATA_SIZE, + ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS = ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS, + ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES = ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES, + ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER = ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER, + ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER = ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER, + ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER = ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER, + ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER = ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER, + ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER = ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER, + MAX_VERTEX_ATOMIC_COUNTER_BUFFERS = MAX_VERTEX_ATOMIC_COUNTER_BUFFERS, + MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS = MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS, + MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS = MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS, + MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS = MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS, + MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS = MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS, + MAX_COMBINED_ATOMIC_COUNTER_BUFFERS = MAX_COMBINED_ATOMIC_COUNTER_BUFFERS, + MAX_VERTEX_ATOMIC_COUNTERS = MAX_VERTEX_ATOMIC_COUNTERS, + MAX_TESS_CONTROL_ATOMIC_COUNTERS = MAX_TESS_CONTROL_ATOMIC_COUNTERS, + MAX_TESS_EVALUATION_ATOMIC_COUNTERS = MAX_TESS_EVALUATION_ATOMIC_COUNTERS, + MAX_GEOMETRY_ATOMIC_COUNTERS = MAX_GEOMETRY_ATOMIC_COUNTERS, + MAX_FRAGMENT_ATOMIC_COUNTERS = MAX_FRAGMENT_ATOMIC_COUNTERS, + MAX_COMBINED_ATOMIC_COUNTERS = MAX_COMBINED_ATOMIC_COUNTERS, + MAX_ATOMIC_COUNTER_BUFFER_SIZE = MAX_ATOMIC_COUNTER_BUFFER_SIZE, + MAX_ATOMIC_COUNTER_BUFFER_BINDINGS = MAX_ATOMIC_COUNTER_BUFFER_BINDINGS, + ACTIVE_ATOMIC_COUNTER_BUFFERS = ACTIVE_ATOMIC_COUNTER_BUFFERS, + UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX = UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX, + UNSIGNED_INT_ATOMIC_COUNTER = UNSIGNED_INT_ATOMIC_COUNTER, + VERTEX_ATTRIB_ARRAY_BARRIER_BIT = VERTEX_ATTRIB_ARRAY_BARRIER_BIT, + ELEMENT_ARRAY_BARRIER_BIT = ELEMENT_ARRAY_BARRIER_BIT, + UNIFORM_BARRIER_BIT = UNIFORM_BARRIER_BIT, + TEXTURE_FETCH_BARRIER_BIT = TEXTURE_FETCH_BARRIER_BIT, + SHADER_IMAGE_ACCESS_BARRIER_BIT = SHADER_IMAGE_ACCESS_BARRIER_BIT, + COMMAND_BARRIER_BIT = COMMAND_BARRIER_BIT, + PIXEL_BUFFER_BARRIER_BIT = PIXEL_BUFFER_BARRIER_BIT, + TEXTURE_UPDATE_BARRIER_BIT = TEXTURE_UPDATE_BARRIER_BIT, + BUFFER_UPDATE_BARRIER_BIT = BUFFER_UPDATE_BARRIER_BIT, + FRAMEBUFFER_BARRIER_BIT = FRAMEBUFFER_BARRIER_BIT, + TRANSFORM_FEEDBACK_BARRIER_BIT = TRANSFORM_FEEDBACK_BARRIER_BIT, + ATOMIC_COUNTER_BARRIER_BIT = ATOMIC_COUNTER_BARRIER_BIT, + ALL_BARRIER_BITS = ALL_BARRIER_BITS, + MAX_IMAGE_UNITS = MAX_IMAGE_UNITS, + MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS = MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS, + IMAGE_BINDING_NAME = IMAGE_BINDING_NAME, + IMAGE_BINDING_LEVEL = IMAGE_BINDING_LEVEL, + IMAGE_BINDING_LAYERED = IMAGE_BINDING_LAYERED, + IMAGE_BINDING_LAYER = IMAGE_BINDING_LAYER, + IMAGE_BINDING_ACCESS = IMAGE_BINDING_ACCESS, + IMAGE_1D = IMAGE_1D, + IMAGE_2D = IMAGE_2D, + IMAGE_3D = IMAGE_3D, + IMAGE_2D_RECT = IMAGE_2D_RECT, + IMAGE_CUBE = IMAGE_CUBE, + IMAGE_BUFFER = IMAGE_BUFFER, + IMAGE_1D_ARRAY = IMAGE_1D_ARRAY, + IMAGE_2D_ARRAY = IMAGE_2D_ARRAY, + IMAGE_CUBE_MAP_ARRAY = IMAGE_CUBE_MAP_ARRAY, + IMAGE_2D_MULTISAMPLE = IMAGE_2D_MULTISAMPLE, + IMAGE_2D_MULTISAMPLE_ARRAY = IMAGE_2D_MULTISAMPLE_ARRAY, + INT_IMAGE_1D = INT_IMAGE_1D, + INT_IMAGE_2D = INT_IMAGE_2D, + INT_IMAGE_3D = INT_IMAGE_3D, + INT_IMAGE_2D_RECT = INT_IMAGE_2D_RECT, + INT_IMAGE_CUBE = INT_IMAGE_CUBE, + INT_IMAGE_BUFFER = INT_IMAGE_BUFFER, + INT_IMAGE_1D_ARRAY = INT_IMAGE_1D_ARRAY, + INT_IMAGE_2D_ARRAY = INT_IMAGE_2D_ARRAY, + INT_IMAGE_CUBE_MAP_ARRAY = INT_IMAGE_CUBE_MAP_ARRAY, + INT_IMAGE_2D_MULTISAMPLE = INT_IMAGE_2D_MULTISAMPLE, + INT_IMAGE_2D_MULTISAMPLE_ARRAY = INT_IMAGE_2D_MULTISAMPLE_ARRAY, + UNSIGNED_INT_IMAGE_1D = UNSIGNED_INT_IMAGE_1D, + UNSIGNED_INT_IMAGE_2D = UNSIGNED_INT_IMAGE_2D, + UNSIGNED_INT_IMAGE_3D = UNSIGNED_INT_IMAGE_3D, + UNSIGNED_INT_IMAGE_2D_RECT = UNSIGNED_INT_IMAGE_2D_RECT, + UNSIGNED_INT_IMAGE_CUBE = UNSIGNED_INT_IMAGE_CUBE, + UNSIGNED_INT_IMAGE_BUFFER = UNSIGNED_INT_IMAGE_BUFFER, + UNSIGNED_INT_IMAGE_1D_ARRAY = UNSIGNED_INT_IMAGE_1D_ARRAY, + UNSIGNED_INT_IMAGE_2D_ARRAY = UNSIGNED_INT_IMAGE_2D_ARRAY, + UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY = UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY, + UNSIGNED_INT_IMAGE_2D_MULTISAMPLE = UNSIGNED_INT_IMAGE_2D_MULTISAMPLE, + UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY = UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY, + MAX_IMAGE_SAMPLES = MAX_IMAGE_SAMPLES, + IMAGE_BINDING_FORMAT = IMAGE_BINDING_FORMAT, + IMAGE_FORMAT_COMPATIBILITY_TYPE = IMAGE_FORMAT_COMPATIBILITY_TYPE, + IMAGE_FORMAT_COMPATIBILITY_BY_SIZE = IMAGE_FORMAT_COMPATIBILITY_BY_SIZE, + IMAGE_FORMAT_COMPATIBILITY_BY_CLASS = IMAGE_FORMAT_COMPATIBILITY_BY_CLASS, + MAX_VERTEX_IMAGE_UNIFORMS = MAX_VERTEX_IMAGE_UNIFORMS, + MAX_TESS_CONTROL_IMAGE_UNIFORMS = MAX_TESS_CONTROL_IMAGE_UNIFORMS, + MAX_TESS_EVALUATION_IMAGE_UNIFORMS = MAX_TESS_EVALUATION_IMAGE_UNIFORMS, + MAX_GEOMETRY_IMAGE_UNIFORMS = MAX_GEOMETRY_IMAGE_UNIFORMS, + MAX_FRAGMENT_IMAGE_UNIFORMS = MAX_FRAGMENT_IMAGE_UNIFORMS, + MAX_COMBINED_IMAGE_UNIFORMS = MAX_COMBINED_IMAGE_UNIFORMS, + COMPRESSED_RGBA_BPTC_UNORM = COMPRESSED_RGBA_BPTC_UNORM, + COMPRESSED_SRGB_ALPHA_BPTC_UNORM = COMPRESSED_SRGB_ALPHA_BPTC_UNORM, + COMPRESSED_RGB_BPTC_SIGNED_FLOAT = COMPRESSED_RGB_BPTC_SIGNED_FLOAT, + COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT = COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT, + TEXTURE_IMMUTABLE_FORMAT = TEXTURE_IMMUTABLE_FORMAT, + + NUM_SHADING_LANGUAGE_VERSIONS = NUM_SHADING_LANGUAGE_VERSIONS, + VERTEX_ATTRIB_ARRAY_LONG = VERTEX_ATTRIB_ARRAY_LONG, + COMPRESSED_RGB8_ETC2 = COMPRESSED_RGB8_ETC2, + COMPRESSED_SRGB8_ETC2 = COMPRESSED_SRGB8_ETC2, + COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 = COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, + COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 = COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, + COMPRESSED_RGBA8_ETC2_EAC = COMPRESSED_RGBA8_ETC2_EAC, + COMPRESSED_SRGB8_ALPHA8_ETC2_EAC = COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, + COMPRESSED_R11_EAC = COMPRESSED_R11_EAC, + COMPRESSED_SIGNED_R11_EAC = COMPRESSED_SIGNED_R11_EAC, + COMPRESSED_RG11_EAC = COMPRESSED_RG11_EAC, + COMPRESSED_SIGNED_RG11_EAC = COMPRESSED_SIGNED_RG11_EAC, + PRIMITIVE_RESTART_FIXED_INDEX = PRIMITIVE_RESTART_FIXED_INDEX, + ANY_SAMPLES_PASSED_CONSERVATIVE = ANY_SAMPLES_PASSED_CONSERVATIVE, + MAX_ELEMENT_INDEX = MAX_ELEMENT_INDEX, + COMPUTE_SHADER = COMPUTE_SHADER, + MAX_COMPUTE_UNIFORM_BLOCKS = MAX_COMPUTE_UNIFORM_BLOCKS, + MAX_COMPUTE_TEXTURE_IMAGE_UNITS = MAX_COMPUTE_TEXTURE_IMAGE_UNITS, + MAX_COMPUTE_IMAGE_UNIFORMS = MAX_COMPUTE_IMAGE_UNIFORMS, + MAX_COMPUTE_SHARED_MEMORY_SIZE = MAX_COMPUTE_SHARED_MEMORY_SIZE, + MAX_COMPUTE_UNIFORM_COMPONENTS = MAX_COMPUTE_UNIFORM_COMPONENTS, + MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS = MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS, + MAX_COMPUTE_ATOMIC_COUNTERS = MAX_COMPUTE_ATOMIC_COUNTERS, + MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS = MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS, + MAX_COMPUTE_WORK_GROUP_INVOCATIONS = MAX_COMPUTE_WORK_GROUP_INVOCATIONS, + MAX_COMPUTE_WORK_GROUP_COUNT = MAX_COMPUTE_WORK_GROUP_COUNT, + MAX_COMPUTE_WORK_GROUP_SIZE = MAX_COMPUTE_WORK_GROUP_SIZE, + COMPUTE_WORK_GROUP_SIZE = COMPUTE_WORK_GROUP_SIZE, + UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER = UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER, + ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER = ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER, + DISPATCH_INDIRECT_BUFFER = DISPATCH_INDIRECT_BUFFER, + DISPATCH_INDIRECT_BUFFER_BINDING = DISPATCH_INDIRECT_BUFFER_BINDING, + COMPUTE_SHADER_BIT = COMPUTE_SHADER_BIT, + DEBUG_OUTPUT_SYNCHRONOUS = DEBUG_OUTPUT_SYNCHRONOUS, + DEBUG_NEXT_LOGGED_MESSAGE_LENGTH = DEBUG_NEXT_LOGGED_MESSAGE_LENGTH, + DEBUG_CALLBACK_FUNCTION = DEBUG_CALLBACK_FUNCTION, + DEBUG_CALLBACK_USER_PARAM = DEBUG_CALLBACK_USER_PARAM, + DEBUG_SOURCE_API = DEBUG_SOURCE_API, + DEBUG_SOURCE_WINDOW_SYSTEM = DEBUG_SOURCE_WINDOW_SYSTEM, + DEBUG_SOURCE_SHADER_COMPILER = DEBUG_SOURCE_SHADER_COMPILER, + DEBUG_SOURCE_THIRD_PARTY = DEBUG_SOURCE_THIRD_PARTY, + DEBUG_SOURCE_APPLICATION = DEBUG_SOURCE_APPLICATION, + DEBUG_SOURCE_OTHER = DEBUG_SOURCE_OTHER, + DEBUG_TYPE_ERROR = DEBUG_TYPE_ERROR, + DEBUG_TYPE_DEPRECATED_BEHAVIOR = DEBUG_TYPE_DEPRECATED_BEHAVIOR, + DEBUG_TYPE_UNDEFINED_BEHAVIOR = DEBUG_TYPE_UNDEFINED_BEHAVIOR, + DEBUG_TYPE_PORTABILITY = DEBUG_TYPE_PORTABILITY, + DEBUG_TYPE_PERFORMANCE = DEBUG_TYPE_PERFORMANCE, + DEBUG_TYPE_OTHER = DEBUG_TYPE_OTHER, + MAX_DEBUG_MESSAGE_LENGTH = MAX_DEBUG_MESSAGE_LENGTH, + MAX_DEBUG_LOGGED_MESSAGES = MAX_DEBUG_LOGGED_MESSAGES, + DEBUG_LOGGED_MESSAGES = DEBUG_LOGGED_MESSAGES, + DEBUG_SEVERITY_HIGH = DEBUG_SEVERITY_HIGH, + DEBUG_SEVERITY_MEDIUM = DEBUG_SEVERITY_MEDIUM, + DEBUG_SEVERITY_LOW = DEBUG_SEVERITY_LOW, + DEBUG_TYPE_MARKER = DEBUG_TYPE_MARKER, + DEBUG_TYPE_PUSH_GROUP = DEBUG_TYPE_PUSH_GROUP, + DEBUG_TYPE_POP_GROUP = DEBUG_TYPE_POP_GROUP, + DEBUG_SEVERITY_NOTIFICATION = DEBUG_SEVERITY_NOTIFICATION, + MAX_DEBUG_GROUP_STACK_DEPTH = MAX_DEBUG_GROUP_STACK_DEPTH, + DEBUG_GROUP_STACK_DEPTH = DEBUG_GROUP_STACK_DEPTH, + BUFFER = BUFFER, + SHADER = SHADER, + PROGRAM = PROGRAM, + QUERY = QUERY, + PROGRAM_PIPELINE = PROGRAM_PIPELINE, + SAMPLER = SAMPLER, + MAX_LABEL_LENGTH = MAX_LABEL_LENGTH, + DEBUG_OUTPUT = DEBUG_OUTPUT, + CONTEXT_FLAG_DEBUG_BIT = CONTEXT_FLAG_DEBUG_BIT, + MAX_UNIFORM_LOCATIONS = MAX_UNIFORM_LOCATIONS, + FRAMEBUFFER_DEFAULT_WIDTH = FRAMEBUFFER_DEFAULT_WIDTH, + FRAMEBUFFER_DEFAULT_HEIGHT = FRAMEBUFFER_DEFAULT_HEIGHT, + FRAMEBUFFER_DEFAULT_LAYERS = FRAMEBUFFER_DEFAULT_LAYERS, + FRAMEBUFFER_DEFAULT_SAMPLES = FRAMEBUFFER_DEFAULT_SAMPLES, + FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS = FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS, + MAX_FRAMEBUFFER_WIDTH = MAX_FRAMEBUFFER_WIDTH, + MAX_FRAMEBUFFER_HEIGHT = MAX_FRAMEBUFFER_HEIGHT, + MAX_FRAMEBUFFER_LAYERS = MAX_FRAMEBUFFER_LAYERS, + MAX_FRAMEBUFFER_SAMPLES = MAX_FRAMEBUFFER_SAMPLES, + INTERNALFORMAT_SUPPORTED = INTERNALFORMAT_SUPPORTED, + INTERNALFORMAT_PREFERRED = INTERNALFORMAT_PREFERRED, + INTERNALFORMAT_RED_SIZE = INTERNALFORMAT_RED_SIZE, + INTERNALFORMAT_GREEN_SIZE = INTERNALFORMAT_GREEN_SIZE, + INTERNALFORMAT_BLUE_SIZE = INTERNALFORMAT_BLUE_SIZE, + INTERNALFORMAT_ALPHA_SIZE = INTERNALFORMAT_ALPHA_SIZE, + INTERNALFORMAT_DEPTH_SIZE = INTERNALFORMAT_DEPTH_SIZE, + INTERNALFORMAT_STENCIL_SIZE = INTERNALFORMAT_STENCIL_SIZE, + INTERNALFORMAT_SHARED_SIZE = INTERNALFORMAT_SHARED_SIZE, + INTERNALFORMAT_RED_TYPE = INTERNALFORMAT_RED_TYPE, + INTERNALFORMAT_GREEN_TYPE = INTERNALFORMAT_GREEN_TYPE, + INTERNALFORMAT_BLUE_TYPE = INTERNALFORMAT_BLUE_TYPE, + INTERNALFORMAT_ALPHA_TYPE = INTERNALFORMAT_ALPHA_TYPE, + INTERNALFORMAT_DEPTH_TYPE = INTERNALFORMAT_DEPTH_TYPE, + INTERNALFORMAT_STENCIL_TYPE = INTERNALFORMAT_STENCIL_TYPE, + MAX_WIDTH = MAX_WIDTH, + MAX_HEIGHT = MAX_HEIGHT, + MAX_DEPTH = MAX_DEPTH, + MAX_LAYERS = MAX_LAYERS, + MAX_COMBINED_DIMENSIONS = MAX_COMBINED_DIMENSIONS, + COLOR_COMPONENTS = COLOR_COMPONENTS, + DEPTH_COMPONENTS = DEPTH_COMPONENTS, + STENCIL_COMPONENTS = STENCIL_COMPONENTS, + COLOR_RENDERABLE = COLOR_RENDERABLE, + DEPTH_RENDERABLE = DEPTH_RENDERABLE, + STENCIL_RENDERABLE = STENCIL_RENDERABLE, + FRAMEBUFFER_RENDERABLE = FRAMEBUFFER_RENDERABLE, + FRAMEBUFFER_RENDERABLE_LAYERED = FRAMEBUFFER_RENDERABLE_LAYERED, + FRAMEBUFFER_BLEND = FRAMEBUFFER_BLEND, + READ_PIXELS = READ_PIXELS, + READ_PIXELS_FORMAT = READ_PIXELS_FORMAT, + READ_PIXELS_TYPE = READ_PIXELS_TYPE, + TEXTURE_IMAGE_FORMAT = TEXTURE_IMAGE_FORMAT, + TEXTURE_IMAGE_TYPE = TEXTURE_IMAGE_TYPE, + GET_TEXTURE_IMAGE_FORMAT = GET_TEXTURE_IMAGE_FORMAT, + GET_TEXTURE_IMAGE_TYPE = GET_TEXTURE_IMAGE_TYPE, + MIPMAP = MIPMAP, + MANUAL_GENERATE_MIPMAP = MANUAL_GENERATE_MIPMAP, + AUTO_GENERATE_MIPMAP = AUTO_GENERATE_MIPMAP, + COLOR_ENCODING = COLOR_ENCODING, + SRGB_READ = SRGB_READ, + SRGB_WRITE = SRGB_WRITE, + FILTER = FILTER, + VERTEX_TEXTURE = VERTEX_TEXTURE, + TESS_CONTROL_TEXTURE = TESS_CONTROL_TEXTURE, + TESS_EVALUATION_TEXTURE = TESS_EVALUATION_TEXTURE, + GEOMETRY_TEXTURE = GEOMETRY_TEXTURE, + FRAGMENT_TEXTURE = FRAGMENT_TEXTURE, + COMPUTE_TEXTURE = COMPUTE_TEXTURE, + TEXTURE_SHADOW = TEXTURE_SHADOW, + TEXTURE_GATHER = TEXTURE_GATHER, + TEXTURE_GATHER_SHADOW = TEXTURE_GATHER_SHADOW, + SHADER_IMAGE_LOAD = SHADER_IMAGE_LOAD, + SHADER_IMAGE_STORE = SHADER_IMAGE_STORE, + SHADER_IMAGE_ATOMIC = SHADER_IMAGE_ATOMIC, + IMAGE_TEXEL_SIZE = IMAGE_TEXEL_SIZE, + IMAGE_COMPATIBILITY_CLASS = IMAGE_COMPATIBILITY_CLASS, + IMAGE_PIXEL_FORMAT = IMAGE_PIXEL_FORMAT, + IMAGE_PIXEL_TYPE = IMAGE_PIXEL_TYPE, + SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST = SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST, + SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST = SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST, + SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE = SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE, + SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE = SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE, + TEXTURE_COMPRESSED_BLOCK_WIDTH = TEXTURE_COMPRESSED_BLOCK_WIDTH, + TEXTURE_COMPRESSED_BLOCK_HEIGHT = TEXTURE_COMPRESSED_BLOCK_HEIGHT, + TEXTURE_COMPRESSED_BLOCK_SIZE = TEXTURE_COMPRESSED_BLOCK_SIZE, + CLEAR_BUFFER = CLEAR_BUFFER, + TEXTURE_VIEW = TEXTURE_VIEW, + VIEW_COMPATIBILITY_CLASS = VIEW_COMPATIBILITY_CLASS, + FULL_SUPPORT = FULL_SUPPORT, + CAVEAT_SUPPORT = CAVEAT_SUPPORT, + IMAGE_CLASS_4_X_32 = IMAGE_CLASS_4_X_32, + IMAGE_CLASS_2_X_32 = IMAGE_CLASS_2_X_32, + IMAGE_CLASS_1_X_32 = IMAGE_CLASS_1_X_32, + IMAGE_CLASS_4_X_16 = IMAGE_CLASS_4_X_16, + IMAGE_CLASS_2_X_16 = IMAGE_CLASS_2_X_16, + IMAGE_CLASS_1_X_16 = IMAGE_CLASS_1_X_16, + IMAGE_CLASS_4_X_8 = IMAGE_CLASS_4_X_8, + IMAGE_CLASS_2_X_8 = IMAGE_CLASS_2_X_8, + IMAGE_CLASS_1_X_8 = IMAGE_CLASS_1_X_8, + IMAGE_CLASS_11_11_10 = IMAGE_CLASS_11_11_10, + IMAGE_CLASS_10_10_10_2 = IMAGE_CLASS_10_10_10_2, + VIEW_CLASS_128_BITS = VIEW_CLASS_128_BITS, + VIEW_CLASS_96_BITS = VIEW_CLASS_96_BITS, + VIEW_CLASS_64_BITS = VIEW_CLASS_64_BITS, + VIEW_CLASS_48_BITS = VIEW_CLASS_48_BITS, + VIEW_CLASS_32_BITS = VIEW_CLASS_32_BITS, + VIEW_CLASS_24_BITS = VIEW_CLASS_24_BITS, + VIEW_CLASS_16_BITS = VIEW_CLASS_16_BITS, + VIEW_CLASS_8_BITS = VIEW_CLASS_8_BITS, + VIEW_CLASS_S3TC_DXT1_RGB = VIEW_CLASS_S3TC_DXT1_RGB, + VIEW_CLASS_S3TC_DXT1_RGBA = VIEW_CLASS_S3TC_DXT1_RGBA, + VIEW_CLASS_S3TC_DXT3_RGBA = VIEW_CLASS_S3TC_DXT3_RGBA, + VIEW_CLASS_S3TC_DXT5_RGBA = VIEW_CLASS_S3TC_DXT5_RGBA, + VIEW_CLASS_RGTC1_RED = VIEW_CLASS_RGTC1_RED, + VIEW_CLASS_RGTC2_RG = VIEW_CLASS_RGTC2_RG, + VIEW_CLASS_BPTC_UNORM = VIEW_CLASS_BPTC_UNORM, + VIEW_CLASS_BPTC_FLOAT = VIEW_CLASS_BPTC_FLOAT, + UNIFORM = UNIFORM, + UNIFORM_BLOCK = UNIFORM_BLOCK, + PROGRAM_INPUT = PROGRAM_INPUT, + PROGRAM_OUTPUT = PROGRAM_OUTPUT, + BUFFER_VARIABLE = BUFFER_VARIABLE, + SHADER_STORAGE_BLOCK = SHADER_STORAGE_BLOCK, + VERTEX_SUBROUTINE = VERTEX_SUBROUTINE, + TESS_CONTROL_SUBROUTINE = TESS_CONTROL_SUBROUTINE, + TESS_EVALUATION_SUBROUTINE = TESS_EVALUATION_SUBROUTINE, + GEOMETRY_SUBROUTINE = GEOMETRY_SUBROUTINE, + FRAGMENT_SUBROUTINE = FRAGMENT_SUBROUTINE, + COMPUTE_SUBROUTINE = COMPUTE_SUBROUTINE, + VERTEX_SUBROUTINE_UNIFORM = VERTEX_SUBROUTINE_UNIFORM, + TESS_CONTROL_SUBROUTINE_UNIFORM = TESS_CONTROL_SUBROUTINE_UNIFORM, + TESS_EVALUATION_SUBROUTINE_UNIFORM = TESS_EVALUATION_SUBROUTINE_UNIFORM, + GEOMETRY_SUBROUTINE_UNIFORM = GEOMETRY_SUBROUTINE_UNIFORM, + FRAGMENT_SUBROUTINE_UNIFORM = FRAGMENT_SUBROUTINE_UNIFORM, + COMPUTE_SUBROUTINE_UNIFORM = COMPUTE_SUBROUTINE_UNIFORM, + TRANSFORM_FEEDBACK_VARYING = TRANSFORM_FEEDBACK_VARYING, + ACTIVE_RESOURCES = ACTIVE_RESOURCES, + MAX_NAME_LENGTH = MAX_NAME_LENGTH, + MAX_NUM_ACTIVE_VARIABLES = MAX_NUM_ACTIVE_VARIABLES, + MAX_NUM_COMPATIBLE_SUBROUTINES = MAX_NUM_COMPATIBLE_SUBROUTINES, + NAME_LENGTH = NAME_LENGTH, + TYPE = TYPE, + ARRAY_SIZE = ARRAY_SIZE, + OFFSET = OFFSET, + BLOCK_INDEX = BLOCK_INDEX, + ARRAY_STRIDE = ARRAY_STRIDE, + MATRIX_STRIDE = MATRIX_STRIDE, + IS_ROW_MAJOR = IS_ROW_MAJOR, + ATOMIC_COUNTER_BUFFER_INDEX = ATOMIC_COUNTER_BUFFER_INDEX, + BUFFER_BINDING = BUFFER_BINDING, + BUFFER_DATA_SIZE = BUFFER_DATA_SIZE, + NUM_ACTIVE_VARIABLES = NUM_ACTIVE_VARIABLES, + ACTIVE_VARIABLES = ACTIVE_VARIABLES, + REFERENCED_BY_VERTEX_SHADER = REFERENCED_BY_VERTEX_SHADER, + REFERENCED_BY_TESS_CONTROL_SHADER = REFERENCED_BY_TESS_CONTROL_SHADER, + REFERENCED_BY_TESS_EVALUATION_SHADER = REFERENCED_BY_TESS_EVALUATION_SHADER, + REFERENCED_BY_GEOMETRY_SHADER = REFERENCED_BY_GEOMETRY_SHADER, + REFERENCED_BY_FRAGMENT_SHADER = REFERENCED_BY_FRAGMENT_SHADER, + REFERENCED_BY_COMPUTE_SHADER = REFERENCED_BY_COMPUTE_SHADER, + TOP_LEVEL_ARRAY_SIZE = TOP_LEVEL_ARRAY_SIZE, + TOP_LEVEL_ARRAY_STRIDE = TOP_LEVEL_ARRAY_STRIDE, + LOCATION = LOCATION, + LOCATION_INDEX = LOCATION_INDEX, + IS_PER_PATCH = IS_PER_PATCH, + SHADER_STORAGE_BUFFER = SHADER_STORAGE_BUFFER, + SHADER_STORAGE_BUFFER_BINDING = SHADER_STORAGE_BUFFER_BINDING, + SHADER_STORAGE_BUFFER_START = SHADER_STORAGE_BUFFER_START, + SHADER_STORAGE_BUFFER_SIZE = SHADER_STORAGE_BUFFER_SIZE, + MAX_VERTEX_SHADER_STORAGE_BLOCKS = MAX_VERTEX_SHADER_STORAGE_BLOCKS, + MAX_GEOMETRY_SHADER_STORAGE_BLOCKS = MAX_GEOMETRY_SHADER_STORAGE_BLOCKS, + MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS = MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS, + MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS = MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS, + MAX_FRAGMENT_SHADER_STORAGE_BLOCKS = MAX_FRAGMENT_SHADER_STORAGE_BLOCKS, + MAX_COMPUTE_SHADER_STORAGE_BLOCKS = MAX_COMPUTE_SHADER_STORAGE_BLOCKS, + MAX_COMBINED_SHADER_STORAGE_BLOCKS = MAX_COMBINED_SHADER_STORAGE_BLOCKS, + MAX_SHADER_STORAGE_BUFFER_BINDINGS = MAX_SHADER_STORAGE_BUFFER_BINDINGS, + MAX_SHADER_STORAGE_BLOCK_SIZE = MAX_SHADER_STORAGE_BLOCK_SIZE, + SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT = SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT, + SHADER_STORAGE_BARRIER_BIT = SHADER_STORAGE_BARRIER_BIT, + MAX_COMBINED_SHADER_OUTPUT_RESOURCES = MAX_COMBINED_SHADER_OUTPUT_RESOURCES, + DEPTH_STENCIL_TEXTURE_MODE = DEPTH_STENCIL_TEXTURE_MODE, + TEXTURE_BUFFER_OFFSET = TEXTURE_BUFFER_OFFSET, + TEXTURE_BUFFER_SIZE = TEXTURE_BUFFER_SIZE, + TEXTURE_BUFFER_OFFSET_ALIGNMENT = TEXTURE_BUFFER_OFFSET_ALIGNMENT, + TEXTURE_VIEW_MIN_LEVEL = TEXTURE_VIEW_MIN_LEVEL, + TEXTURE_VIEW_NUM_LEVELS = TEXTURE_VIEW_NUM_LEVELS, + TEXTURE_VIEW_MIN_LAYER = TEXTURE_VIEW_MIN_LAYER, + TEXTURE_VIEW_NUM_LAYERS = TEXTURE_VIEW_NUM_LAYERS, + TEXTURE_IMMUTABLE_LEVELS = TEXTURE_IMMUTABLE_LEVELS, + VERTEX_ATTRIB_BINDING = VERTEX_ATTRIB_BINDING, + VERTEX_ATTRIB_RELATIVE_OFFSET = VERTEX_ATTRIB_RELATIVE_OFFSET, + VERTEX_BINDING_DIVISOR = VERTEX_BINDING_DIVISOR, + VERTEX_BINDING_OFFSET = VERTEX_BINDING_OFFSET, + VERTEX_BINDING_STRIDE = VERTEX_BINDING_STRIDE, + MAX_VERTEX_ATTRIB_RELATIVE_OFFSET = MAX_VERTEX_ATTRIB_RELATIVE_OFFSET, + MAX_VERTEX_ATTRIB_BINDINGS = MAX_VERTEX_ATTRIB_BINDINGS, + VERTEX_BINDING_BUFFER = VERTEX_BINDING_BUFFER, + + MAX_VERTEX_ATTRIB_STRIDE = MAX_VERTEX_ATTRIB_STRIDE, + PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED = PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED, + TEXTURE_BUFFER_BINDING = TEXTURE_BUFFER_BINDING, + MAP_PERSISTENT_BIT = MAP_PERSISTENT_BIT, + MAP_COHERENT_BIT = MAP_COHERENT_BIT, + DYNAMIC_STORAGE_BIT = DYNAMIC_STORAGE_BIT, + CLIENT_STORAGE_BIT = CLIENT_STORAGE_BIT, + CLIENT_MAPPED_BUFFER_BARRIER_BIT = CLIENT_MAPPED_BUFFER_BARRIER_BIT, + BUFFER_IMMUTABLE_STORAGE = BUFFER_IMMUTABLE_STORAGE, + BUFFER_STORAGE_FLAGS = BUFFER_STORAGE_FLAGS, + CLEAR_TEXTURE = CLEAR_TEXTURE, + LOCATION_COMPONENT = LOCATION_COMPONENT, + TRANSFORM_FEEDBACK_BUFFER_INDEX = TRANSFORM_FEEDBACK_BUFFER_INDEX, + TRANSFORM_FEEDBACK_BUFFER_STRIDE = TRANSFORM_FEEDBACK_BUFFER_STRIDE, + QUERY_BUFFER = QUERY_BUFFER, + QUERY_BUFFER_BARRIER_BIT = QUERY_BUFFER_BARRIER_BIT, + QUERY_BUFFER_BINDING = QUERY_BUFFER_BINDING, + QUERY_RESULT_NO_WAIT = QUERY_RESULT_NO_WAIT, + MIRROR_CLAMP_TO_EDGE = MIRROR_CLAMP_TO_EDGE, + + CONTEXT_LOST = CONTEXT_LOST, + NEGATIVE_ONE_TO_ONE = NEGATIVE_ONE_TO_ONE, + ZERO_TO_ONE = ZERO_TO_ONE, + CLIP_ORIGIN = CLIP_ORIGIN, + CLIP_DEPTH_MODE = CLIP_DEPTH_MODE, + QUERY_WAIT_INVERTED = QUERY_WAIT_INVERTED, + QUERY_NO_WAIT_INVERTED = QUERY_NO_WAIT_INVERTED, + QUERY_BY_REGION_WAIT_INVERTED = QUERY_BY_REGION_WAIT_INVERTED, + QUERY_BY_REGION_NO_WAIT_INVERTED = QUERY_BY_REGION_NO_WAIT_INVERTED, + MAX_CULL_DISTANCES = MAX_CULL_DISTANCES, + MAX_COMBINED_CLIP_AND_CULL_DISTANCES = MAX_COMBINED_CLIP_AND_CULL_DISTANCES, + TEXTURE_TARGET = TEXTURE_TARGET, + QUERY_TARGET = QUERY_TARGET, + GUILTY_CONTEXT_RESET = GUILTY_CONTEXT_RESET, + INNOCENT_CONTEXT_RESET = INNOCENT_CONTEXT_RESET, + UNKNOWN_CONTEXT_RESET = UNKNOWN_CONTEXT_RESET, + RESET_NOTIFICATION_STRATEGY = RESET_NOTIFICATION_STRATEGY, + LOSE_CONTEXT_ON_RESET = LOSE_CONTEXT_ON_RESET, + NO_RESET_NOTIFICATION = NO_RESET_NOTIFICATION, + CONTEXT_FLAG_ROBUST_ACCESS_BIT = CONTEXT_FLAG_ROBUST_ACCESS_BIT, + CONTEXT_RELEASE_BEHAVIOR = CONTEXT_RELEASE_BEHAVIOR, + CONTEXT_RELEASE_BEHAVIOR_FLUSH = CONTEXT_RELEASE_BEHAVIOR_FLUSH, + + DEBUG_OUTPUT_SYNCHRONOUS_ARB = DEBUG_OUTPUT_SYNCHRONOUS_ARB, + DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB = DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB, + DEBUG_CALLBACK_FUNCTION_ARB = DEBUG_CALLBACK_FUNCTION_ARB, + DEBUG_CALLBACK_USER_PARAM_ARB = DEBUG_CALLBACK_USER_PARAM_ARB, + DEBUG_SOURCE_API_ARB = DEBUG_SOURCE_API_ARB, + DEBUG_SOURCE_WINDOW_SYSTEM_ARB = DEBUG_SOURCE_WINDOW_SYSTEM_ARB, + DEBUG_SOURCE_SHADER_COMPILER_ARB = DEBUG_SOURCE_SHADER_COMPILER_ARB, + DEBUG_SOURCE_THIRD_PARTY_ARB = DEBUG_SOURCE_THIRD_PARTY_ARB, + DEBUG_SOURCE_APPLICATION_ARB = DEBUG_SOURCE_APPLICATION_ARB, + DEBUG_SOURCE_OTHER_ARB = DEBUG_SOURCE_OTHER_ARB, + DEBUG_TYPE_ERROR_ARB = DEBUG_TYPE_ERROR_ARB, + DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB = DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB, + DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB = DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB, + DEBUG_TYPE_PORTABILITY_ARB = DEBUG_TYPE_PORTABILITY_ARB, + DEBUG_TYPE_PERFORMANCE_ARB = DEBUG_TYPE_PERFORMANCE_ARB, + DEBUG_TYPE_OTHER_ARB = DEBUG_TYPE_OTHER_ARB, + MAX_DEBUG_MESSAGE_LENGTH_ARB = MAX_DEBUG_MESSAGE_LENGTH_ARB, + MAX_DEBUG_LOGGED_MESSAGES_ARB = MAX_DEBUG_LOGGED_MESSAGES_ARB, + DEBUG_LOGGED_MESSAGES_ARB = DEBUG_LOGGED_MESSAGES_ARB, + DEBUG_SEVERITY_HIGH_ARB = DEBUG_SEVERITY_HIGH_ARB, + DEBUG_SEVERITY_MEDIUM_ARB = DEBUG_SEVERITY_MEDIUM_ARB, + DEBUG_SEVERITY_LOW_ARB = DEBUG_SEVERITY_LOW_ARB, + + SHADER_BINARY_FORMAT_SPIR_V = SHADER_BINARY_FORMAT_SPIR_V, + SPIR_V_BINARY = SPIR_V_BINARY, + PARAMETER_BUFFER = PARAMETER_BUFFER, + PARAMETER_BUFFER_BINDING = PARAMETER_BUFFER_BINDING, + CONTEXT_FLAG_NO_ERROR_BIT = CONTEXT_FLAG_NO_ERROR_BIT, + VERTICES_SUBMITTED = VERTICES_SUBMITTED, + PRIMITIVES_SUBMITTED = PRIMITIVES_SUBMITTED, + VERTEX_SHADER_INVOCATIONS = VERTEX_SHADER_INVOCATIONS, + TESS_CONTROL_SHADER_PATCHES = TESS_CONTROL_SHADER_PATCHES, + TESS_EVALUATION_SHADER_INVOCATIONS = TESS_EVALUATION_SHADER_INVOCATIONS, + GEOMETRY_SHADER_PRIMITIVES_EMITTED = GEOMETRY_SHADER_PRIMITIVES_EMITTED, + FRAGMENT_SHADER_INVOCATIONS = FRAGMENT_SHADER_INVOCATIONS, + COMPUTE_SHADER_INVOCATIONS = COMPUTE_SHADER_INVOCATIONS, + CLIPPING_INPUT_PRIMITIVES = CLIPPING_INPUT_PRIMITIVES, + CLIPPING_OUTPUT_PRIMITIVES = CLIPPING_OUTPUT_PRIMITIVES, + POLYGON_OFFSET_CLAMP = POLYGON_OFFSET_CLAMP, + SPIR_V_EXTENSIONS = SPIR_V_EXTENSIONS, + NUM_SPIR_V_EXTENSIONS = NUM_SPIR_V_EXTENSIONS, + TEXTURE_MAX_ANISOTROPY = TEXTURE_MAX_ANISOTROPY, + MAX_TEXTURE_MAX_ANISOTROPY = MAX_TEXTURE_MAX_ANISOTROPY, + TRANSFORM_FEEDBACK_OVERFLOW = TRANSFORM_FEEDBACK_OVERFLOW, + TRANSFORM_FEEDBACK_STREAM_OVERFLOW = TRANSFORM_FEEDBACK_STREAM_OVERFLOW, + + // Extensions + DEVICE_LUID_EXT = DEVICE_LUID_EXT, +} \ No newline at end of file diff --git a/vendor/OpenGL/helpers.odin b/vendor/OpenGL/helpers.odin new file mode 100644 index 000000000..384a1e1dc --- /dev/null +++ b/vendor/OpenGL/helpers.odin @@ -0,0 +1,409 @@ +package odin_gl + +// Helper for loading shaders into a program + +import "core:os" +import "core:fmt" +import "core:strings" + +Shader_Type :: enum i32 { + NONE = 0x0000, + FRAGMENT_SHADER = 0x8B30, + VERTEX_SHADER = 0x8B31, + GEOMETRY_SHADER = 0x8DD9, + COMPUTE_SHADER = 0x91B9, + TESS_EVALUATION_SHADER = 0x8E87, + TESS_CONTROL_SHADER = 0x8E88, + SHADER_LINK = -1, // @Note: Not an OpenGL constant, but used for error checking. +} + + +@(private, thread_local) +last_compile_error_message: []byte; +@(private, thread_local) +last_link_error_message: []byte; + +@(private, thread_local) +last_compile_error_type: Shader_Type; +@(private, thread_local) +last_link_error_type: Shader_Type; + +get_last_error_messages :: proc() -> (compile_message: string, compile_type: Shader_Type, link_message: string, link_type: Shader_Type) { + compile_message = string(last_compile_error_message[:max(0, len(last_compile_error_message)-1)]); + compile_type = last_compile_error_type; + link_message = string(last_link_error_message[:max(0, len(last_link_error_message)-1)]); + link_type = last_link_error_type; + return; +} + +get_last_error_message :: proc() -> (compile_message: string, compile_type: Shader_Type) { + compile_message = string(last_compile_error_message[:max(0, len(last_compile_error_message)-1)]); + compile_type = last_compile_error_type; + return; +} + +// Shader checking and linking checking are identical +// except for calling differently named GL functions +// it's a bit ugly looking, but meh +when ODIN_DEBUG { + import "core:runtime" + + @private + check_error :: proc( + id: u32, type: Shader_Type, status: u32, + iv_func: proc "c" (u32, u32, [^]i32, runtime.Source_Code_Location), + log_func: proc "c" (u32, i32, ^i32, [^]u8, runtime.Source_Code_Location), + loc := #caller_location, + ) -> (success: bool) { + result, info_log_length: i32; + iv_func(id, status, &result, loc); + iv_func(id, INFO_LOG_LENGTH, &info_log_length, loc); + + if result == 0 { + if log_func == GetShaderInfoLog { + delete(last_compile_error_message); + last_compile_error_message = make([]byte, info_log_length); + last_compile_error_type = type; + + log_func(id, i32(info_log_length), nil, raw_data(last_compile_error_message), loc); + //fmt.printf_err("Error in %v:\n%s", type, string(last_compile_error_message[0:len(last_compile_error_message)-1])); + } else { + + delete(last_link_error_message); + last_link_error_message = make([]byte, info_log_length); + last_compile_error_type = type; + + log_func(id, i32(info_log_length), nil, raw_data(last_link_error_message), loc); + //fmt.printf_err("Error in %v:\n%s", type, string(last_link_error_message[0:len(last_link_error_message)-1])); + } + + return false; + } + + return true; + } +} else { + @private + check_error :: proc( + id: u32, type: Shader_Type, status: u32, + iv_func: proc "c" (u32, u32, [^]i32), + log_func: proc "c" (u32, i32, ^i32, [^]u8), + ) -> (success: bool) { + result, info_log_length: i32; + iv_func(id, status, &result); + iv_func(id, INFO_LOG_LENGTH, &info_log_length); + + if result == 0 { + if log_func == GetShaderInfoLog { + delete(last_compile_error_message); + last_compile_error_message = make([]u8, info_log_length); + last_link_error_type = type; + + log_func(id, i32(info_log_length), nil, raw_data(last_compile_error_message)); + fmt.eprintf("Error in %v:\n%s", type, string(last_compile_error_message[0:len(last_compile_error_message)-1])); + } else { + delete(last_link_error_message); + last_link_error_message = make([]u8, info_log_length); + last_link_error_type = type; + + log_func(id, i32(info_log_length), nil, raw_data(last_link_error_message)); + fmt.eprintf("Error in %v:\n%s", type, string(last_link_error_message[0:len(last_link_error_message)-1])); + + } + + return false; + } + + return true; + } +} + +// Compiling shaders are identical for any shader (vertex, geometry, fragment, tesselation, (maybe compute too)) +@private +compile_shader_from_source :: proc(shader_data: string, shader_type: Shader_Type) -> (shader_id: u32, ok: bool) { + shader_id = CreateShader(cast(u32)shader_type); + length := i32(len(shader_data)); + shader_data_copy := cstring(raw_data(shader_data)); + ShaderSource(shader_id, 1, &shader_data_copy, &length); + CompileShader(shader_id); + + check_error(shader_id, shader_type, COMPILE_STATUS, GetShaderiv, GetShaderInfoLog) or_return; + return; +} + +// only used once, but I'd just make a subprocedure(?) for consistency +@private +create_and_link_program :: proc(shader_ids: []u32, binary_retrievable := false) -> (program_id: u32, ok: bool) { + program_id = CreateProgram(); + for id in shader_ids { + AttachShader(program_id, id); + } + if binary_retrievable { + ProgramParameteri(program_id, PROGRAM_BINARY_RETRIEVABLE_HINT, 1/*true*/); + } + LinkProgram(program_id); + + check_error(program_id, Shader_Type.SHADER_LINK, LINK_STATUS, GetProgramiv, GetProgramInfoLog) or_return; + ok = true; + return; +} + +load_compute_file :: proc(filename: string, binary_retrievable := false) -> (program_id: u32, ok: bool) { + cs_data := os.read_entire_file(filename) or_return; + defer delete(cs_data); + + // Create the shaders + compute_shader_id := compile_shader_from_source(string(cs_data), Shader_Type(COMPUTE_SHADER)) or_return; + return create_and_link_program([]u32{compute_shader_id}, binary_retrievable); +} + +load_compute_source :: proc(cs_data: string, binary_retrievable := false) -> (program_id: u32, ok: bool) { + // Create the shaders + compute_shader_id := compile_shader_from_source(cs_data, Shader_Type(COMPUTE_SHADER)) or_return; + return create_and_link_program([]u32{compute_shader_id}, binary_retrievable); +} + +load_shaders_file :: proc(vs_filename, fs_filename: string, binary_retrievable := false) -> (program_id: u32, ok: bool) { + vs_data := os.read_entire_file(vs_filename) or_return; + defer delete(vs_data); + + fs_data := os.read_entire_file(fs_filename) or_return; + defer delete(fs_data); + + return load_shaders_source(string(vs_data), string(fs_data), binary_retrievable); +} + +load_shaders_source :: proc(vs_source, fs_source: string, binary_retrievable := false) -> (program_id: u32, ok: bool) { + // actual function from here + vertex_shader_id := compile_shader_from_source(vs_source, Shader_Type.VERTEX_SHADER) or_return; + defer DeleteShader(vertex_shader_id); + + fragment_shader_id := compile_shader_from_source(fs_source, Shader_Type.FRAGMENT_SHADER) or_return; + defer DeleteShader(fragment_shader_id); + + return create_and_link_program([]u32{vertex_shader_id, fragment_shader_id}, binary_retrievable); +} + +load_shaders :: proc{load_shaders_file}; + + +when ODIN_OS == "windows" { + update_shader_if_changed :: proc( + vertex_name, fragment_name: string, + program: u32, + last_vertex_time, last_fragment_time: os.File_Time, + ) -> ( + old_program: u32, + current_vertex_time, current_fragment_time: os.File_Time, + updated: bool, + ) { + current_vertex_time, _ = os.last_write_time_by_name(vertex_name); + current_fragment_time, _ = os.last_write_time_by_name(fragment_name); + old_program = program; + + if current_vertex_time != last_vertex_time || current_fragment_time != last_fragment_time { + new_program, success := load_shaders(vertex_name, fragment_name); + if success { + DeleteProgram(old_program); + old_program = new_program; + fmt.println("Updated shaders"); + updated = true; + } else { + fmt.println("Failed to update shaders"); + } + } + + return old_program, current_vertex_time, current_fragment_time, updated; + } + + update_shader_if_changed_compute :: proc( + compute_name: string, + program: u32, + last_compute_time: os.File_Time, + ) -> ( + old_program: u32, + current_compute_time: os.File_Time, + updated: bool, + ) { + current_compute_time, _ = os.last_write_time_by_name(compute_name); + old_program = program; + + if current_compute_time != last_compute_time { + new_program, success := load_compute_file(compute_name); + if success { + DeleteProgram(old_program); + old_program = new_program; + fmt.println("Updated shaders"); + updated = true; + } else { + fmt.println("Failed to update shaders"); + } + } + + return old_program, current_compute_time, updated; + } +} + + +Uniform_Type :: enum i32 { + FLOAT = 0x1406, + FLOAT_VEC2 = 0x8B50, + FLOAT_VEC3 = 0x8B51, + FLOAT_VEC4 = 0x8B52, + + DOUBLE = 0x140A, + DOUBLE_VEC2 = 0x8FFC, + DOUBLE_VEC3 = 0x8FFD, + DOUBLE_VEC4 = 0x8FFE, + + INT = 0x1404, + INT_VEC2 = 0x8B53, + INT_VEC3 = 0x8B54, + INT_VEC4 = 0x8B55, + + UNSIGNED_INT = 0x1405, + UNSIGNED_INT_VEC2 = 0x8DC6, + UNSIGNED_INT_VEC3 = 0x8DC7, + UNSIGNED_INT_VEC4 = 0x8DC8, + + BOOL = 0x8B56, + BOOL_VEC2 = 0x8B57, + BOOL_VEC3 = 0x8B58, + BOOL_VEC4 = 0x8B59, + + FLOAT_MAT2 = 0x8B5A, + FLOAT_MAT3 = 0x8B5B, + FLOAT_MAT4 = 0x8B5C, + FLOAT_MAT2x3 = 0x8B65, + FLOAT_MAT2x4 = 0x8B66, + FLOAT_MAT3x2 = 0x8B67, + FLOAT_MAT3x4 = 0x8B68, + FLOAT_MAT4x2 = 0x8B69, + FLOAT_MAT4x3 = 0x8B6A, + + DOUBLE_MAT2 = 0x8F46, + DOUBLE_MAT3 = 0x8F47, + DOUBLE_MAT4 = 0x8F48, + DOUBLE_MAT2x3 = 0x8F49, + DOUBLE_MAT2x4 = 0x8F4A, + DOUBLE_MAT3x2 = 0x8F4B, + DOUBLE_MAT3x4 = 0x8F4C, + DOUBLE_MAT4x2 = 0x8F4D, + DOUBLE_MAT4x3 = 0x8F4E, + + SAMPLER_1D = 0x8B5D, + SAMPLER_2D = 0x8B5E, + SAMPLER_3D = 0x8B5F, + SAMPLER_CUBE = 0x8B60, + SAMPLER_1D_SHADOW = 0x8B61, + SAMPLER_2D_SHADOW = 0x8B62, + SAMPLER_1D_ARRAY = 0x8DC0, + SAMPLER_2D_ARRAY = 0x8DC1, + SAMPLER_1D_ARRAY_SHADOW = 0x8DC3, + SAMPLER_2D_ARRAY_SHADOW = 0x8DC4, + SAMPLER_2D_MULTISAMPLE = 0x9108, + SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910B, + SAMPLER_CUBE_SHADOW = 0x8DC5, + SAMPLER_BUFFER = 0x8DC2, + SAMPLER_2D_RECT = 0x8B63, + SAMPLER_2D_RECT_SHADOW = 0x8B64, + + INT_SAMPLER_1D = 0x8DC9, + INT_SAMPLER_2D = 0x8DCA, + INT_SAMPLER_3D = 0x8DCB, + INT_SAMPLER_CUBE = 0x8DCC, + INT_SAMPLER_1D_ARRAY = 0x8DCE, + INT_SAMPLER_2D_ARRAY = 0x8DCF, + INT_SAMPLER_2D_MULTISAMPLE = 0x9109, + INT_SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910C, + INT_SAMPLER_BUFFER = 0x8DD0, + INT_SAMPLER_2D_RECT = 0x8DCD, + + UNSIGNED_INT_SAMPLER_1D = 0x8DD1, + UNSIGNED_INT_SAMPLER_2D = 0x8DD2, + UNSIGNED_INT_SAMPLER_3D = 0x8DD3, + UNSIGNED_INT_SAMPLER_CUBE = 0x8DD4, + UNSIGNED_INT_SAMPLER_1D_ARRAY = 0x8DD6, + UNSIGNED_INT_SAMPLER_2D_ARRAY = 0x8DD7, + UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE = 0x910A, + UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910D, + UNSIGNED_INT_SAMPLER_BUFFER = 0x8DD8, + UNSIGNED_INT_SAMPLER_2D_RECT = 0x8DD5, + + IMAGE_1D = 0x904C, + IMAGE_2D = 0x904D, + IMAGE_3D = 0x904E, + IMAGE_2D_RECT = 0x904F, + IMAGE_CUBE = 0x9050, + IMAGE_BUFFER = 0x9051, + IMAGE_1D_ARRAY = 0x9052, + IMAGE_2D_ARRAY = 0x9053, + IMAGE_CUBE_MAP_ARRAY = 0x9054, + IMAGE_2D_MULTISAMPLE = 0x9055, + IMAGE_2D_MULTISAMPLE_ARRAY = 0x9056, + + INT_IMAGE_1D = 0x9057, + INT_IMAGE_2D = 0x9058, + INT_IMAGE_3D = 0x9059, + INT_IMAGE_2D_RECT = 0x905A, + INT_IMAGE_CUBE = 0x905B, + INT_IMAGE_BUFFER = 0x905C, + INT_IMAGE_1D_ARRAY = 0x905D, + INT_IMAGE_2D_ARRAY = 0x905E, + INT_IMAGE_CUBE_MAP_ARRAY = 0x905F, + INT_IMAGE_2D_MULTISAMPLE = 0x9060, + INT_IMAGE_2D_MULTISAMPLE_ARRAY = 0x9061, + + UNSIGNED_INT_IMAGE_1D = 0x9062, + UNSIGNED_INT_IMAGE_2D = 0x9063, + UNSIGNED_INT_IMAGE_3D = 0x9064, + UNSIGNED_INT_IMAGE_2D_RECT = 0x9065, + UNSIGNED_INT_IMAGE_CUBE = 0x9066, + UNSIGNED_INT_IMAGE_BUFFER = 0x9067, + UNSIGNED_INT_IMAGE_1D_ARRAY = 0x9068, + UNSIGNED_INT_IMAGE_2D_ARRAY = 0x9069, + UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY = 0x906A, + UNSIGNED_INT_IMAGE_2D_MULTISAMPLE = 0x906B, + UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY = 0x906C, + + UNSIGNED_INT_ATOMIC_COUNTER = 0x92DB, +} + +Uniform_Info :: struct { + location: i32, + size: i32, + kind: Uniform_Type, + name: string, // NOTE: This will need to be freed +} + +Uniforms :: map[string]Uniform_Info; + +destroy_uniforms :: proc(u: Uniforms) { + for _, v in u { + delete(v.name); + } + delete(u); +} + +get_uniforms_from_program :: proc(program: u32) -> (uniforms: Uniforms) { + uniform_count: i32; + GetProgramiv(program, ACTIVE_UNIFORMS, &uniform_count); + + if uniform_count > 0 { + reserve(&uniforms, int(uniform_count)); + } + + for i in 0.. u32 + typedef unsigned char GLboolean; -> bool + typedef unsigned int GLbitfield; -> u32 + typedef signed char GLbyte; -> i8 + typedef short GLshort; -> i16 + typedef int GLint; -> i32 + typedef unsigned char GLubyte; -> u8 + typedef unsigned short GLushort; -> u16 + typedef unsigned int GLuint; -> u32 + typedef int GLsizei; -> i32 + typedef float GLfloat; -> f32 + typedef double GLdouble; -> f64 + typedef char GLchar; -> u8 + typedef ptrdiff_t GLintptr; -> int + typedef ptrdiff_t GLsizeiptr; -> int + typedef int64_t GLint64; -> i64 + typedef uint64_t GLuint64; -> u64 + + void* -> rawptr +*/ + +sync_t :: rawptr; +debug_proc_t :: #type proc "c" (source: u32, type: u32, id: u32, severity: u32, length: i32, message: cstring, userParam: rawptr); + + +// VERSION_1_0 +impl_CullFace: proc "c" (mode: u32); +impl_FrontFace: proc "c" (mode: u32); +impl_Hint: proc "c" (target: u32, mode: u32); +impl_LineWidth: proc "c" (width: f32); +impl_PointSize: proc "c" (size: f32); +impl_PolygonMode: proc "c" (face: u32, mode: u32); +impl_Scissor: proc "c" (x: i32, y: i32, width: i32, height: i32); +impl_TexParameterf: proc "c" (target: u32, pname: u32, param: f32); +impl_TexParameterfv: proc "c" (target: u32, pname: u32, params: [^]f32); +impl_TexParameteri: proc "c" (target: u32, pname: u32, param: i32); +impl_TexParameteriv: proc "c" (target: u32, pname: u32, params: [^]i32); +impl_TexImage1D: proc "c" (target: u32, level: i32, internalformat: i32, width: i32, border: i32, format: u32, type: u32, pixels: rawptr); +impl_TexImage2D: proc "c" (target: u32, level: i32, internalformat: i32, width: i32, height: i32, border: i32, format: u32, type: u32, pixels: rawptr); +impl_DrawBuffer: proc "c" (buf: u32); +impl_Clear: proc "c" (mask: u32); +impl_ClearColor: proc "c" (red: f32, green: f32, blue: f32, alpha: f32); +impl_ClearStencil: proc "c" (s: i32); +impl_ClearDepth: proc "c" (depth: f64); +impl_StencilMask: proc "c" (mask: u32); +impl_ColorMask: proc "c" (red: u8, green: u8, blue: u8, alpha: u8); +impl_DepthMask: proc "c" (flag: u8); +impl_Disable: proc "c" (cap: u32); +impl_Enable: proc "c" (cap: u32); +impl_Finish: proc "c" (); +impl_Flush: proc "c" (); +impl_BlendFunc: proc "c" (sfactor: u32, dfactor: u32); +impl_LogicOp: proc "c" (opcode: u32); +impl_StencilFunc: proc "c" (func: u32, ref: i32, mask: u32); +impl_StencilOp: proc "c" (fail: u32, zfail: u32, zpass: u32); +impl_DepthFunc: proc "c" (func: u32); +impl_PixelStoref: proc "c" (pname: u32, param: f32); +impl_PixelStorei: proc "c" (pname: u32, param: i32); +impl_ReadBuffer: proc "c" (src: u32); +impl_ReadPixels: proc "c" (x: i32, y: i32, width: i32, height: i32, format: u32, type: u32, pixels: rawptr); +impl_GetBooleanv: proc "c" (pname: u32, data: ^bool); +impl_GetDoublev: proc "c" (pname: u32, data: ^f64); +impl_GetError: proc "c" () -> u32; +impl_GetFloatv: proc "c" (pname: u32, data: ^f32); +impl_GetIntegerv: proc "c" (pname: u32, data: ^i32); +impl_GetString: proc "c" (name: u32) -> cstring; +impl_GetTexImage: proc "c" (target: u32, level: i32, format: u32, type: u32, pixels: rawptr); +impl_GetTexParameterfv: proc "c" (target: u32, pname: u32, params: [^]f32); +impl_GetTexParameteriv: proc "c" (target: u32, pname: u32, params: [^]i32); +impl_GetTexLevelParameterfv: proc "c" (target: u32, level: i32, pname: u32, params: [^]f32); +impl_GetTexLevelParameteriv: proc "c" (target: u32, level: i32, pname: u32, params: [^]i32); +impl_IsEnabled: proc "c" (cap: u32) -> bool; +impl_DepthRange: proc "c" (near: f64, far: f64); +impl_Viewport: proc "c" (x: i32, y: i32, width: i32, height: i32); + +load_1_0 :: proc(set_proc_address: Set_Proc_Address_Type) { + set_proc_address(&impl_CullFace, "glCullFace"); + set_proc_address(&impl_FrontFace, "glFrontFace"); + set_proc_address(&impl_Hint, "glHint"); + set_proc_address(&impl_LineWidth, "glLineWidth"); + set_proc_address(&impl_PointSize, "glPointSize"); + set_proc_address(&impl_PolygonMode, "glPolygonMode"); + set_proc_address(&impl_Scissor, "glScissor"); + set_proc_address(&impl_TexParameterf, "glTexParameterf"); + set_proc_address(&impl_TexParameterfv, "glTexParameterfv"); + set_proc_address(&impl_TexParameteri, "glTexParameteri"); + set_proc_address(&impl_TexParameteriv, "glTexParameteriv"); + set_proc_address(&impl_TexImage1D, "glTexImage1D"); + set_proc_address(&impl_TexImage2D, "glTexImage2D"); + set_proc_address(&impl_DrawBuffer, "glDrawBuffer"); + set_proc_address(&impl_Clear, "glClear"); + set_proc_address(&impl_ClearColor, "glClearColor"); + set_proc_address(&impl_ClearStencil, "glClearStencil"); + set_proc_address(&impl_ClearDepth, "glClearDepth"); + set_proc_address(&impl_StencilMask, "glStencilMask"); + set_proc_address(&impl_ColorMask, "glColorMask"); + set_proc_address(&impl_DepthMask, "glDepthMask"); + set_proc_address(&impl_Disable, "glDisable"); + set_proc_address(&impl_Enable, "glEnable"); + set_proc_address(&impl_Finish, "glFinish"); + set_proc_address(&impl_Flush, "glFlush"); + set_proc_address(&impl_BlendFunc, "glBlendFunc"); + set_proc_address(&impl_LogicOp, "glLogicOp"); + set_proc_address(&impl_StencilFunc, "glStencilFunc"); + set_proc_address(&impl_StencilOp, "glStencilOp"); + set_proc_address(&impl_DepthFunc, "glDepthFunc"); + set_proc_address(&impl_PixelStoref, "glPixelStoref"); + set_proc_address(&impl_PixelStorei, "glPixelStorei"); + set_proc_address(&impl_ReadBuffer, "glReadBuffer"); + set_proc_address(&impl_ReadPixels, "glReadPixels"); + set_proc_address(&impl_GetBooleanv, "glGetBooleanv"); + set_proc_address(&impl_GetDoublev, "glGetDoublev"); + set_proc_address(&impl_GetError, "glGetError"); + set_proc_address(&impl_GetFloatv, "glGetFloatv"); + set_proc_address(&impl_GetIntegerv, "glGetIntegerv"); + set_proc_address(&impl_GetString, "glGetString"); + set_proc_address(&impl_GetTexImage, "glGetTexImage"); + set_proc_address(&impl_GetTexParameterfv, "glGetTexParameterfv"); + set_proc_address(&impl_GetTexParameteriv, "glGetTexParameteriv"); + set_proc_address(&impl_GetTexLevelParameterfv, "glGetTexLevelParameterfv"); + set_proc_address(&impl_GetTexLevelParameteriv, "glGetTexLevelParameteriv"); + set_proc_address(&impl_IsEnabled, "glIsEnabled"); + set_proc_address(&impl_DepthRange, "glDepthRange"); + set_proc_address(&impl_Viewport, "glViewport"); +} + + +// VERSION_1_1 +impl_DrawArrays: proc "c" (mode: u32, first: i32, count: i32); +impl_DrawElements: proc "c" (mode: u32, count: i32, type: u32, indices: rawptr); +impl_PolygonOffset: proc "c" (factor: f32, units: f32); +impl_CopyTexImage1D: proc "c" (target: u32, level: i32, internalformat: u32, x: i32, y: i32, width: i32, border: i32); +impl_CopyTexImage2D: proc "c" (target: u32, level: i32, internalformat: u32, x: i32, y: i32, width: i32, height: i32, border: i32); +impl_CopyTexSubImage1D: proc "c" (target: u32, level: i32, xoffset: i32, x: i32, y: i32, width: i32); +impl_CopyTexSubImage2D: proc "c" (target: u32, level: i32, xoffset: i32, yoffset: i32, x: i32, y: i32, width: i32, height: i32); +impl_TexSubImage1D: proc "c" (target: u32, level: i32, xoffset: i32, width: i32, format: u32, type: u32, pixels: rawptr); +impl_TexSubImage2D: proc "c" (target: u32, level: i32, xoffset: i32, yoffset: i32, width: i32, height: i32, format: u32, type: u32, pixels: rawptr); +impl_BindTexture: proc "c" (target: u32, texture: u32); +impl_DeleteTextures: proc "c" (n: i32, textures: [^]u32); +impl_GenTextures: proc "c" (n: i32, textures: [^]u32); +impl_IsTexture: proc "c" (texture: u32) -> bool; + +load_1_1 :: proc(set_proc_address: Set_Proc_Address_Type) { + set_proc_address(&impl_DrawArrays, "glDrawArrays"); + set_proc_address(&impl_DrawElements, "glDrawElements"); + set_proc_address(&impl_PolygonOffset, "glPolygonOffset"); + set_proc_address(&impl_CopyTexImage1D, "glCopyTexImage1D"); + set_proc_address(&impl_CopyTexImage2D, "glCopyTexImage2D"); + set_proc_address(&impl_CopyTexSubImage1D, "glCopyTexSubImage1D"); + set_proc_address(&impl_CopyTexSubImage2D, "glCopyTexSubImage2D"); + set_proc_address(&impl_TexSubImage1D, "glTexSubImage1D"); + set_proc_address(&impl_TexSubImage2D, "glTexSubImage2D"); + set_proc_address(&impl_BindTexture, "glBindTexture"); + set_proc_address(&impl_DeleteTextures, "glDeleteTextures"); + set_proc_address(&impl_GenTextures, "glGenTextures"); + set_proc_address(&impl_IsTexture, "glIsTexture"); +} + + +// VERSION_1_2 +impl_DrawRangeElements: proc "c" (mode: u32, start: u32, end: u32, count: i32, type: u32, indices: rawptr); +impl_TexImage3D: proc "c" (target: u32, level: i32, internalformat: i32, width: i32, height: i32, depth: i32, border: i32, format: u32, type: u32, pixels: rawptr); +impl_TexSubImage3D: proc "c" (target: u32, level: i32, xoffset: i32, yoffset: i32, zoffset: i32, width: i32, height: i32, depth: i32, format: u32, type: u32, pixels: rawptr); +impl_CopyTexSubImage3D: proc "c" (target: u32, level: i32, xoffset: i32, yoffset: i32, zoffset: i32, x: i32, y: i32, width: i32, height: i32); + +load_1_2 :: proc(set_proc_address: Set_Proc_Address_Type) { + + set_proc_address(&impl_DrawRangeElements, "glDrawRangeElements"); + set_proc_address(&impl_TexImage3D, "glTexImage3D"); + set_proc_address(&impl_TexSubImage3D, "glTexSubImage3D"); + set_proc_address(&impl_CopyTexSubImage3D, "glCopyTexSubImage3D"); +} + + +// VERSION_1_3 +impl_ActiveTexture: proc "c" (texture: u32); +impl_SampleCoverage: proc "c" (value: f32, invert: u8); +impl_CompressedTexImage3D: proc "c" (target: u32, level: i32, internalformat: u32, width: i32, height: i32, depth: i32, border: i32, imageSize: i32, data: rawptr); +impl_CompressedTexImage2D: proc "c" (target: u32, level: i32, internalformat: u32, width: i32, height: i32, border: i32, imageSize: i32, data: rawptr); +impl_CompressedTexImage1D: proc "c" (target: u32, level: i32, internalformat: u32, width: i32, border: i32, imageSize: i32, data: rawptr); +impl_CompressedTexSubImage3D: proc "c" (target: u32, level: i32, xoffset: i32, yoffset: i32, zoffset: i32, width: i32, height: i32, depth: i32, format: u32, imageSize: i32, data: rawptr); +impl_CompressedTexSubImage2D: proc "c" (target: u32, level: i32, xoffset: i32, yoffset: i32, width: i32, height: i32, format: u32, imageSize: i32, data: rawptr); +impl_CompressedTexSubImage1D: proc "c" (target: u32, level: i32, xoffset: i32, width: i32, format: u32, imageSize: i32, data: rawptr); +impl_GetCompressedTexImage: proc "c" (target: u32, level: i32, img: rawptr); + +load_1_3 :: proc(set_proc_address: Set_Proc_Address_Type) { + set_proc_address(&impl_ActiveTexture, "glActiveTexture"); + set_proc_address(&impl_SampleCoverage, "glSampleCoverage"); + set_proc_address(&impl_CompressedTexImage3D, "glCompressedTexImage3D"); + set_proc_address(&impl_CompressedTexImage2D, "glCompressedTexImage2D"); + set_proc_address(&impl_CompressedTexImage1D, "glCompressedTexImage1D"); + set_proc_address(&impl_CompressedTexSubImage3D, "glCompressedTexSubImage3D"); + set_proc_address(&impl_CompressedTexSubImage2D, "glCompressedTexSubImage2D"); + set_proc_address(&impl_CompressedTexSubImage1D, "glCompressedTexSubImage1D"); + set_proc_address(&impl_GetCompressedTexImage, "glGetCompressedTexImage"); +} + + +// VERSION_1_4 +impl_BlendFuncSeparate: proc "c" (sfactorRGB: u32, dfactorRGB: u32, sfactorAlpha: u32, dfactorAlpha: u32); +impl_MultiDrawArrays: proc "c" (mode: u32, first: [^]i32, count: [^]i32, drawcount: i32); +impl_MultiDrawElements: proc "c" (mode: u32, count: [^]i32, type: u32, indices: [^]rawptr, drawcount: i32); +impl_PointParameterf: proc "c" (pname: u32, param: f32); +impl_PointParameterfv: proc "c" (pname: u32, params: [^]f32); +impl_PointParameteri: proc "c" (pname: u32, param: i32); +impl_PointParameteriv: proc "c" (pname: u32, params: [^]i32); +impl_BlendColor: proc "c" (red: f32, green: f32, blue: f32, alpha: f32); +impl_BlendEquation: proc "c" (mode: u32); + + +load_1_4 :: proc(set_proc_address: Set_Proc_Address_Type) { + set_proc_address(&impl_BlendFuncSeparate, "glBlendFuncSeparate"); + set_proc_address(&impl_MultiDrawArrays, "glMultiDrawArrays"); + set_proc_address(&impl_MultiDrawElements, "glMultiDrawElements"); + set_proc_address(&impl_PointParameterf, "glPointParameterf"); + set_proc_address(&impl_PointParameterfv, "glPointParameterfv"); + set_proc_address(&impl_PointParameteri, "glPointParameteri"); + set_proc_address(&impl_PointParameteriv, "glPointParameteriv"); + set_proc_address(&impl_BlendColor, "glBlendColor"); + set_proc_address(&impl_BlendEquation, "glBlendEquation"); +} + + +// VERSION_1_5 +impl_GenQueries: proc "c" (n: i32, ids: [^]u32); +impl_DeleteQueries: proc "c" (n: i32, ids: [^]u32); +impl_IsQuery: proc "c" (id: u32) -> bool; +impl_BeginQuery: proc "c" (target: u32, id: u32); +impl_EndQuery: proc "c" (target: u32); +impl_GetQueryiv: proc "c" (target: u32, pname: u32, params: [^]i32); +impl_GetQueryObjectiv: proc "c" (id: u32, pname: u32, params: [^]i32); +impl_GetQueryObjectuiv: proc "c" (id: u32, pname: u32, params: [^]u32); +impl_BindBuffer: proc "c" (target: u32, buffer: u32); +impl_DeleteBuffers: proc "c" (n: i32, buffers: [^]u32); +impl_GenBuffers: proc "c" (n: i32, buffers: [^]u32); +impl_IsBuffer: proc "c" (buffer: u32) -> bool; +impl_BufferData: proc "c" (target: u32, size: int, data: rawptr, usage: u32); +impl_BufferSubData: proc "c" (target: u32, offset: int, size: int, data: rawptr); +impl_GetBufferSubData: proc "c" (target: u32, offset: int, size: int, data: rawptr); +impl_MapBuffer: proc "c" (target: u32, access: u32) -> rawptr; +impl_UnmapBuffer: proc "c" (target: u32) -> bool; +impl_GetBufferParameteriv: proc "c" (target: u32, pname: u32, params: [^]i32); +impl_GetBufferPointerv: proc "c" (target: u32, pname: u32, params: [^]rawptr); + +load_1_5 :: proc(set_proc_address: Set_Proc_Address_Type) { + set_proc_address(&impl_GenQueries, "glGenQueries"); + set_proc_address(&impl_DeleteQueries, "glDeleteQueries"); + set_proc_address(&impl_IsQuery, "glIsQuery"); + set_proc_address(&impl_BeginQuery, "glBeginQuery"); + set_proc_address(&impl_EndQuery, "glEndQuery"); + set_proc_address(&impl_GetQueryiv, "glGetQueryiv"); + set_proc_address(&impl_GetQueryObjectiv, "glGetQueryObjectiv"); + set_proc_address(&impl_GetQueryObjectuiv, "glGetQueryObjectuiv"); + set_proc_address(&impl_BindBuffer, "glBindBuffer"); + set_proc_address(&impl_DeleteBuffers, "glDeleteBuffers"); + set_proc_address(&impl_GenBuffers, "glGenBuffers"); + set_proc_address(&impl_IsBuffer, "glIsBuffer"); + set_proc_address(&impl_BufferData, "glBufferData"); + set_proc_address(&impl_BufferSubData, "glBufferSubData"); + set_proc_address(&impl_GetBufferSubData, "glGetBufferSubData"); + set_proc_address(&impl_MapBuffer, "glMapBuffer"); + set_proc_address(&impl_UnmapBuffer, "glUnmapBuffer"); + set_proc_address(&impl_GetBufferParameteriv, "glGetBufferParameteriv"); + set_proc_address(&impl_GetBufferPointerv, "glGetBufferPointerv"); +} + + +// VERSION_2_0 +impl_BlendEquationSeparate: proc "c" (modeRGB: u32, modeAlpha: u32); +impl_DrawBuffers: proc "c" (n: i32, bufs: [^]u32); +impl_StencilOpSeparate: proc "c" (face: u32, sfail: u32, dpfail: u32, dppass: u32); +impl_StencilFuncSeparate: proc "c" (face: u32, func: u32, ref: i32, mask: u32); +impl_StencilMaskSeparate: proc "c" (face: u32, mask: u32); +impl_AttachShader: proc "c" (program: u32, shader: u32); +impl_BindAttribLocation: proc "c" (program: u32, index: u32, name: cstring); +impl_CompileShader: proc "c" (shader: u32); +impl_CreateProgram: proc "c" () -> u32; +impl_CreateShader: proc "c" (type: u32) -> u32; +impl_DeleteProgram: proc "c" (program: u32); +impl_DeleteShader: proc "c" (shader: u32); +impl_DetachShader: proc "c" (program: u32, shader: u32); +impl_DisableVertexAttribArray: proc "c" (index: u32); +impl_EnableVertexAttribArray: proc "c" (index: u32); +impl_GetActiveAttrib: proc "c" (program: u32, index: u32, bufSize: i32, length: ^i32, size: ^i32, type: ^u32, name: [^]u8); +impl_GetActiveUniform: proc "c" (program: u32, index: u32, bufSize: i32, length: ^i32, size: ^i32, type: ^u32, name: [^]u8); +impl_GetAttachedShaders: proc "c" (program: u32, maxCount: i32, count: ^i32, shaders: ^u32); +impl_GetAttribLocation: proc "c" (program: u32, name: cstring) -> i32; +impl_GetProgramiv: proc "c" (program: u32, pname: u32, params: [^]i32); +impl_GetProgramInfoLog: proc "c" (program: u32, bufSize: i32, length: ^i32, infoLog: ^u8); +impl_GetShaderiv: proc "c" (shader: u32, pname: u32, params: [^]i32); +impl_GetShaderInfoLog: proc "c" (shader: u32, bufSize: i32, length: ^i32, infoLog: ^u8); +impl_GetShaderSource: proc "c" (shader: u32, bufSize: i32, length: ^i32, source: ^u8); +impl_GetUniformLocation: proc "c" (program: u32, name: cstring) -> i32; +impl_GetUniformfv: proc "c" (program: u32, location: i32, params: [^]f32); +impl_GetUniformiv: proc "c" (program: u32, location: i32, params: [^]i32); +impl_GetVertexAttribdv: proc "c" (index: u32, pname: u32, params: [^]f64); +impl_GetVertexAttribfv: proc "c" (index: u32, pname: u32, params: [^]f32); +impl_GetVertexAttribiv: proc "c" (index: u32, pname: u32, params: [^]i32); +impl_GetVertexAttribPointerv: proc "c" (index: u32, pname: u32, pointer: ^rawptr); +impl_IsProgram: proc "c" (program: u32) -> bool; +impl_IsShader: proc "c" (shader: u32) -> bool; +impl_LinkProgram: proc "c" (program: u32); +impl_ShaderSource: proc "c" (shader: u32, count: i32, string: [^]cstring, length: [^]i32); +impl_UseProgram: proc "c" (program: u32); +impl_Uniform1f: proc "c" (location: i32, v0: f32); +impl_Uniform2f: proc "c" (location: i32, v0: f32, v1: f32); +impl_Uniform3f: proc "c" (location: i32, v0: f32, v1: f32, v2: f32); +impl_Uniform4f: proc "c" (location: i32, v0: f32, v1: f32, v2: f32, v3: f32); +impl_Uniform1i: proc "c" (location: i32, v0: i32); +impl_Uniform2i: proc "c" (location: i32, v0: i32, v1: i32); +impl_Uniform3i: proc "c" (location: i32, v0: i32, v1: i32, v2: i32); +impl_Uniform4i: proc "c" (location: i32, v0: i32, v1: i32, v2: i32, v3: i32); +impl_Uniform1fv: proc "c" (location: i32, count: i32, value: [^]f32); +impl_Uniform2fv: proc "c" (location: i32, count: i32, value: [^]f32); +impl_Uniform3fv: proc "c" (location: i32, count: i32, value: [^]f32); +impl_Uniform4fv: proc "c" (location: i32, count: i32, value: [^]f32); +impl_Uniform1iv: proc "c" (location: i32, count: i32, value: [^]i32); +impl_Uniform2iv: proc "c" (location: i32, count: i32, value: [^]i32); +impl_Uniform3iv: proc "c" (location: i32, count: i32, value: [^]i32); +impl_Uniform4iv: proc "c" (location: i32, count: i32, value: [^]i32); +impl_UniformMatrix2fv: proc "c" (location: i32, count: i32, transpose: bool, value: [^]f32); +impl_UniformMatrix3fv: proc "c" (location: i32, count: i32, transpose: bool, value: [^]f32); +impl_UniformMatrix4fv: proc "c" (location: i32, count: i32, transpose: bool, value: [^]f32); +impl_ValidateProgram: proc "c" (program: u32); +impl_VertexAttrib1d: proc "c" (index: u32, x: f64); +impl_VertexAttrib1dv: proc "c" (index: u32, v: ^f64); +impl_VertexAttrib1f: proc "c" (index: u32, x: f32); +impl_VertexAttrib1fv: proc "c" (index: u32, v: ^f32); +impl_VertexAttrib1s: proc "c" (index: u32, x: i16); +impl_VertexAttrib1sv: proc "c" (index: u32, v: ^i16); +impl_VertexAttrib2d: proc "c" (index: u32, x: f64, y: f64); +impl_VertexAttrib2dv: proc "c" (index: u32, v: ^f64); +impl_VertexAttrib2f: proc "c" (index: u32, x: f32, y: f32); +impl_VertexAttrib2fv: proc "c" (index: u32, v: ^f32); +impl_VertexAttrib2s: proc "c" (index: u32, x: i16, y: i16); +impl_VertexAttrib2sv: proc "c" (index: u32, v: ^i16); +impl_VertexAttrib3d: proc "c" (index: u32, x: f64, y: f64, z: f64); +impl_VertexAttrib3dv: proc "c" (index: u32, v: ^f64); +impl_VertexAttrib3f: proc "c" (index: u32, x: f32, y: f32, z: f32); +impl_VertexAttrib3fv: proc "c" (index: u32, v: ^f32); +impl_VertexAttrib3s: proc "c" (index: u32, x: i16, y: i16, z: i16); +impl_VertexAttrib3sv: proc "c" (index: u32, v: ^i16); +impl_VertexAttrib4Nbv: proc "c" (index: u32, v: ^i8); +impl_VertexAttrib4Niv: proc "c" (index: u32, v: ^i32); +impl_VertexAttrib4Nsv: proc "c" (index: u32, v: ^i16); +impl_VertexAttrib4Nub: proc "c" (index: u32, x: u8, y: u8, z: u8, w: u8); +impl_VertexAttrib4Nubv: proc "c" (index: u32, v: ^u8); +impl_VertexAttrib4Nuiv: proc "c" (index: u32, v: ^u32); +impl_VertexAttrib4Nusv: proc "c" (index: u32, v: ^u16); +impl_VertexAttrib4bv: proc "c" (index: u32, v: ^i8); +impl_VertexAttrib4d: proc "c" (index: u32, x: f64, y: f64, z: f64, w: f64); +impl_VertexAttrib4dv: proc "c" (index: u32, v: ^f64); +impl_VertexAttrib4f: proc "c" (index: u32, x: f32, y: f32, z: f32, w: f32); +impl_VertexAttrib4fv: proc "c" (index: u32, v: ^f32); +impl_VertexAttrib4iv: proc "c" (index: u32, v: ^i32); +impl_VertexAttrib4s: proc "c" (index: u32, x: i16, y: i16, z: i16, w: i16); +impl_VertexAttrib4sv: proc "c" (index: u32, v: ^i16); +impl_VertexAttrib4ubv: proc "c" (index: u32, v: ^u8); +impl_VertexAttrib4uiv: proc "c" (index: u32, v: ^u32); +impl_VertexAttrib4usv: proc "c" (index: u32, v: ^u16); +impl_VertexAttribPointer: proc "c" (index: u32, size: i32, type: u32, normalized: bool, stride: i32, pointer: rawptr); + +load_2_0 :: proc(set_proc_address: Set_Proc_Address_Type) { + set_proc_address(&impl_BlendEquationSeparate, "glBlendEquationSeparate"); + set_proc_address(&impl_DrawBuffers, "glDrawBuffers"); + set_proc_address(&impl_StencilOpSeparate, "glStencilOpSeparate"); + set_proc_address(&impl_StencilFuncSeparate, "glStencilFuncSeparate"); + set_proc_address(&impl_StencilMaskSeparate, "glStencilMaskSeparate"); + set_proc_address(&impl_AttachShader, "glAttachShader"); + set_proc_address(&impl_BindAttribLocation, "glBindAttribLocation"); + set_proc_address(&impl_CompileShader, "glCompileShader"); + set_proc_address(&impl_CreateProgram, "glCreateProgram"); + set_proc_address(&impl_CreateShader, "glCreateShader"); + set_proc_address(&impl_DeleteProgram, "glDeleteProgram"); + set_proc_address(&impl_DeleteShader, "glDeleteShader"); + set_proc_address(&impl_DetachShader, "glDetachShader"); + set_proc_address(&impl_DisableVertexAttribArray, "glDisableVertexAttribArray"); + set_proc_address(&impl_EnableVertexAttribArray, "glEnableVertexAttribArray"); + set_proc_address(&impl_GetActiveAttrib, "glGetActiveAttrib"); + set_proc_address(&impl_GetActiveUniform, "glGetActiveUniform"); + set_proc_address(&impl_GetAttachedShaders, "glGetAttachedShaders"); + set_proc_address(&impl_GetAttribLocation, "glGetAttribLocation"); + set_proc_address(&impl_GetProgramiv, "glGetProgramiv"); + set_proc_address(&impl_GetProgramInfoLog, "glGetProgramInfoLog"); + set_proc_address(&impl_GetShaderiv, "glGetShaderiv"); + set_proc_address(&impl_GetShaderInfoLog, "glGetShaderInfoLog"); + set_proc_address(&impl_GetShaderSource, "glGetShaderSource"); + set_proc_address(&impl_GetUniformLocation, "glGetUniformLocation"); + set_proc_address(&impl_GetUniformfv, "glGetUniformfv"); + set_proc_address(&impl_GetUniformiv, "glGetUniformiv"); + set_proc_address(&impl_GetVertexAttribdv, "glGetVertexAttribdv"); + set_proc_address(&impl_GetVertexAttribfv, "glGetVertexAttribfv"); + set_proc_address(&impl_GetVertexAttribiv, "glGetVertexAttribiv"); + set_proc_address(&impl_GetVertexAttribPointerv, "glGetVertexAttribPointerv"); + set_proc_address(&impl_IsProgram, "glIsProgram"); + set_proc_address(&impl_IsShader, "glIsShader"); + set_proc_address(&impl_LinkProgram, "glLinkProgram"); + set_proc_address(&impl_ShaderSource, "glShaderSource"); + set_proc_address(&impl_UseProgram, "glUseProgram"); + set_proc_address(&impl_Uniform1f, "glUniform1f"); + set_proc_address(&impl_Uniform2f, "glUniform2f"); + set_proc_address(&impl_Uniform3f, "glUniform3f"); + set_proc_address(&impl_Uniform4f, "glUniform4f"); + set_proc_address(&impl_Uniform1i, "glUniform1i"); + set_proc_address(&impl_Uniform2i, "glUniform2i"); + set_proc_address(&impl_Uniform3i, "glUniform3i"); + set_proc_address(&impl_Uniform4i, "glUniform4i"); + set_proc_address(&impl_Uniform1fv, "glUniform1fv"); + set_proc_address(&impl_Uniform2fv, "glUniform2fv"); + set_proc_address(&impl_Uniform3fv, "glUniform3fv"); + set_proc_address(&impl_Uniform4fv, "glUniform4fv"); + set_proc_address(&impl_Uniform1iv, "glUniform1iv"); + set_proc_address(&impl_Uniform2iv, "glUniform2iv"); + set_proc_address(&impl_Uniform3iv, "glUniform3iv"); + set_proc_address(&impl_Uniform4iv, "glUniform4iv"); + set_proc_address(&impl_UniformMatrix2fv, "glUniformMatrix2fv"); + set_proc_address(&impl_UniformMatrix3fv, "glUniformMatrix3fv"); + set_proc_address(&impl_UniformMatrix4fv, "glUniformMatrix4fv"); + set_proc_address(&impl_ValidateProgram, "glValidateProgram"); + set_proc_address(&impl_VertexAttrib1d, "glVertexAttrib1d"); + set_proc_address(&impl_VertexAttrib1dv, "glVertexAttrib1dv"); + set_proc_address(&impl_VertexAttrib1f, "glVertexAttrib1f"); + set_proc_address(&impl_VertexAttrib1fv, "glVertexAttrib1fv"); + set_proc_address(&impl_VertexAttrib1s, "glVertexAttrib1s"); + set_proc_address(&impl_VertexAttrib1sv, "glVertexAttrib1sv"); + set_proc_address(&impl_VertexAttrib2d, "glVertexAttrib2d"); + set_proc_address(&impl_VertexAttrib2dv, "glVertexAttrib2dv"); + set_proc_address(&impl_VertexAttrib2f, "glVertexAttrib2f"); + set_proc_address(&impl_VertexAttrib2fv, "glVertexAttrib2fv"); + set_proc_address(&impl_VertexAttrib2s, "glVertexAttrib2s"); + set_proc_address(&impl_VertexAttrib2sv, "glVertexAttrib2sv"); + set_proc_address(&impl_VertexAttrib3d, "glVertexAttrib3d"); + set_proc_address(&impl_VertexAttrib3dv, "glVertexAttrib3dv"); + set_proc_address(&impl_VertexAttrib3f, "glVertexAttrib3f"); + set_proc_address(&impl_VertexAttrib3fv, "glVertexAttrib3fv"); + set_proc_address(&impl_VertexAttrib3s, "glVertexAttrib3s"); + set_proc_address(&impl_VertexAttrib3sv, "glVertexAttrib3sv"); + set_proc_address(&impl_VertexAttrib4Nbv, "glVertexAttrib4Nbv"); + set_proc_address(&impl_VertexAttrib4Niv, "glVertexAttrib4Niv"); + set_proc_address(&impl_VertexAttrib4Nsv, "glVertexAttrib4Nsv"); + set_proc_address(&impl_VertexAttrib4Nub, "glVertexAttrib4Nub"); + set_proc_address(&impl_VertexAttrib4Nubv, "glVertexAttrib4Nubv"); + set_proc_address(&impl_VertexAttrib4Nuiv, "glVertexAttrib4Nuiv"); + set_proc_address(&impl_VertexAttrib4Nusv, "glVertexAttrib4Nusv"); + set_proc_address(&impl_VertexAttrib4bv, "glVertexAttrib4bv"); + set_proc_address(&impl_VertexAttrib4d, "glVertexAttrib4d"); + set_proc_address(&impl_VertexAttrib4dv, "glVertexAttrib4dv"); + set_proc_address(&impl_VertexAttrib4f, "glVertexAttrib4f"); + set_proc_address(&impl_VertexAttrib4fv, "glVertexAttrib4fv"); + set_proc_address(&impl_VertexAttrib4iv, "glVertexAttrib4iv"); + set_proc_address(&impl_VertexAttrib4s, "glVertexAttrib4s"); + set_proc_address(&impl_VertexAttrib4sv, "glVertexAttrib4sv"); + set_proc_address(&impl_VertexAttrib4ubv, "glVertexAttrib4ubv"); + set_proc_address(&impl_VertexAttrib4uiv, "glVertexAttrib4uiv"); + set_proc_address(&impl_VertexAttrib4usv, "glVertexAttrib4usv"); + set_proc_address(&impl_VertexAttribPointer, "glVertexAttribPointer"); +} + + +// VERSION_2_1 +impl_UniformMatrix2x3fv: proc "c" (location: i32, count: i32, transpose: bool, value: [^]f32); +impl_UniformMatrix3x2fv: proc "c" (location: i32, count: i32, transpose: bool, value: [^]f32); +impl_UniformMatrix2x4fv: proc "c" (location: i32, count: i32, transpose: bool, value: [^]f32); +impl_UniformMatrix4x2fv: proc "c" (location: i32, count: i32, transpose: bool, value: [^]f32); +impl_UniformMatrix3x4fv: proc "c" (location: i32, count: i32, transpose: bool, value: [^]f32); +impl_UniformMatrix4x3fv: proc "c" (location: i32, count: i32, transpose: bool, value: [^]f32); + +load_2_1 :: proc(set_proc_address: Set_Proc_Address_Type) { + set_proc_address(&impl_UniformMatrix2x3fv, "glUniformMatrix2x3fv"); + set_proc_address(&impl_UniformMatrix3x2fv, "glUniformMatrix3x2fv"); + set_proc_address(&impl_UniformMatrix2x4fv, "glUniformMatrix2x4fv"); + set_proc_address(&impl_UniformMatrix4x2fv, "glUniformMatrix4x2fv"); + set_proc_address(&impl_UniformMatrix3x4fv, "glUniformMatrix3x4fv"); + set_proc_address(&impl_UniformMatrix4x3fv, "glUniformMatrix4x3fv"); +} + + +// VERSION_3_0 + impl_ColorMaski: proc "c" (index: u32, r: u8, g: u8, b: u8, a: u8); + impl_GetBooleani_v: proc "c" (target: u32, index: u32, data: ^bool); + impl_GetIntegeri_v: proc "c" (target: u32, index: u32, data: ^i32); + impl_Enablei: proc "c" (target: u32, index: u32); + impl_Disablei: proc "c" (target: u32, index: u32); + impl_IsEnabledi: proc "c" (target: u32, index: u32) -> bool; + impl_BeginTransformFeedback: proc "c" (primitiveMode: u32); + impl_EndTransformFeedback: proc "c" (); + impl_BindBufferRange: proc "c" (target: u32, index: u32, buffer: u32, offset: int, size: int); + impl_BindBufferBase: proc "c" (target: u32, index: u32, buffer: u32); + impl_TransformFeedbackVaryings: proc "c" (program: u32, count: i32, varyings: [^]cstring, bufferMode: u32); + impl_GetTransformFeedbackVarying: proc "c" (program: u32, index: u32, bufSize: i32, length: ^i32, size: ^i32, type: ^u32, name: [^]u8); + impl_ClampColor: proc "c" (target: u32, clamp: u32); + impl_BeginConditionalRender: proc "c" (id: u32, mode: u32); + impl_EndConditionalRender: proc "c" (); + impl_VertexAttribIPointer: proc "c" (index: u32, size: i32, type: u32, stride: i32, pointer: rawptr); + impl_GetVertexAttribIiv: proc "c" (index: u32, pname: u32, params: [^]i32); + impl_GetVertexAttribIuiv: proc "c" (index: u32, pname: u32, params: [^]u32); + impl_VertexAttribI1i: proc "c" (index: u32, x: i32); + impl_VertexAttribI2i: proc "c" (index: u32, x: i32, y: i32); + impl_VertexAttribI3i: proc "c" (index: u32, x: i32, y: i32, z: i32); + impl_VertexAttribI4i: proc "c" (index: u32, x: i32, y: i32, z: i32, w: i32); + impl_VertexAttribI1ui: proc "c" (index: u32, x: u32); + impl_VertexAttribI2ui: proc "c" (index: u32, x: u32, y: u32); + impl_VertexAttribI3ui: proc "c" (index: u32, x: u32, y: u32, z: u32); + impl_VertexAttribI4ui: proc "c" (index: u32, x: u32, y: u32, z: u32, w: u32); + impl_VertexAttribI1iv: proc "c" (index: u32, v: ^i32); + impl_VertexAttribI2iv: proc "c" (index: u32, v: ^i32); + impl_VertexAttribI3iv: proc "c" (index: u32, v: ^i32); + impl_VertexAttribI4iv: proc "c" (index: u32, v: ^i32); + impl_VertexAttribI1uiv: proc "c" (index: u32, v: ^u32); + impl_VertexAttribI2uiv: proc "c" (index: u32, v: ^u32); + impl_VertexAttribI3uiv: proc "c" (index: u32, v: ^u32); + impl_VertexAttribI4uiv: proc "c" (index: u32, v: ^u32); + impl_VertexAttribI4bv: proc "c" (index: u32, v: ^i8); + impl_VertexAttribI4sv: proc "c" (index: u32, v: ^i16); + impl_VertexAttribI4ubv: proc "c" (index: u32, v: ^u8); + impl_VertexAttribI4usv: proc "c" (index: u32, v: ^u16); + impl_GetUniformuiv: proc "c" (program: u32, location: i32, params: [^]u32); + impl_BindFragDataLocation: proc "c" (program: u32, color: u32, name: cstring); + impl_GetFragDataLocation: proc "c" (program: u32, name: cstring) -> i32; + impl_Uniform1ui: proc "c" (location: i32, v0: u32); + impl_Uniform2ui: proc "c" (location: i32, v0: u32, v1: u32); + impl_Uniform3ui: proc "c" (location: i32, v0: u32, v1: u32, v2: u32); + impl_Uniform4ui: proc "c" (location: i32, v0: u32, v1: u32, v2: u32, v3: u32); + impl_Uniform1uiv: proc "c" (location: i32, count: i32, value: [^]u32); + impl_Uniform2uiv: proc "c" (location: i32, count: i32, value: [^]u32); + impl_Uniform3uiv: proc "c" (location: i32, count: i32, value: [^]u32); + impl_Uniform4uiv: proc "c" (location: i32, count: i32, value: [^]u32); + impl_TexParameterIiv: proc "c" (target: u32, pname: u32, params: [^]i32); + impl_TexParameterIuiv: proc "c" (target: u32, pname: u32, params: [^]u32); + impl_GetTexParameterIiv: proc "c" (target: u32, pname: u32, params: [^]i32); + impl_GetTexParameterIuiv: proc "c" (target: u32, pname: u32, params: [^]u32); + impl_ClearBufferiv: proc "c" (buffer: u32, drawbuffer: i32, value: ^i32); + impl_ClearBufferuiv: proc "c" (buffer: u32, drawbuffer: i32, value: ^u32); + impl_ClearBufferfv: proc "c" (buffer: u32, drawbuffer: i32, value: ^f32); + impl_ClearBufferfi: proc "c" (buffer: u32, drawbuffer: i32, depth: f32, stencil: i32) -> rawptr; + impl_GetStringi: proc "c" (name: u32, index: u32) -> cstring; + impl_IsRenderbuffer: proc "c" (renderbuffer: u32) -> bool; + impl_BindRenderbuffer: proc "c" (target: u32, renderbuffer: u32); + impl_DeleteRenderbuffers: proc "c" (n: i32, renderbuffers: [^]u32); + impl_GenRenderbuffers: proc "c" (n: i32, renderbuffers: [^]u32); + impl_RenderbufferStorage: proc "c" (target: u32, internalformat: u32, width: i32, height: i32); + impl_GetRenderbufferParameteriv: proc "c" (target: u32, pname: u32, params: [^]i32); + impl_IsFramebuffer: proc "c" (framebuffer: u32) -> bool; + impl_BindFramebuffer: proc "c" (target: u32, framebuffer: u32); + impl_DeleteFramebuffers: proc "c" (n: i32, framebuffers: [^]u32); + impl_GenFramebuffers: proc "c" (n: i32, framebuffers: [^]u32); + impl_CheckFramebufferStatus: proc "c" (target: u32) -> u32; + impl_FramebufferTexture1D: proc "c" (target: u32, attachment: u32, textarget: u32, texture: u32, level: i32); + impl_FramebufferTexture2D: proc "c" (target: u32, attachment: u32, textarget: u32, texture: u32, level: i32); + impl_FramebufferTexture3D: proc "c" (target: u32, attachment: u32, textarget: u32, texture: u32, level: i32, zoffset: i32); + impl_FramebufferRenderbuffer: proc "c" (target: u32, attachment: u32, renderbuffertarget: u32, renderbuffer: u32); + impl_GetFramebufferAttachmentParameteriv: proc "c" (target: u32, attachment: u32, pname: u32, params: [^]i32); + impl_GenerateMipmap: proc "c" (target: u32); + impl_BlitFramebuffer: proc "c" (srcX0: i32, srcY0: i32, srcX1: i32, srcY1: i32, dstX0: i32, dstY0: i32, dstX1: i32, dstY1: i32, mask: u32, filter: u32); + impl_RenderbufferStorageMultisample: proc "c" (target: u32, samples: i32, internalformat: u32, width: i32, height: i32); + impl_FramebufferTextureLayer: proc "c" (target: u32, attachment: u32, texture: u32, level: i32, layer: i32); + impl_MapBufferRange: proc "c" (target: u32, offset: int, length: int, access: u32) -> rawptr; + impl_FlushMappedBufferRange: proc "c" (target: u32, offset: int, length: int); + impl_BindVertexArray: proc "c" (array: u32); + impl_DeleteVertexArrays: proc "c" (n: i32, arrays: [^]u32); + impl_GenVertexArrays: proc "c" (n: i32, arrays: [^]u32); + impl_IsVertexArray: proc "c" (array: u32) -> bool; + +load_3_0 :: proc(set_proc_address: Set_Proc_Address_Type) { + set_proc_address(&impl_ColorMaski, "glColorMaski"); + set_proc_address(&impl_GetBooleani_v, "glGetBooleani_v"); + set_proc_address(&impl_GetIntegeri_v, "glGetIntegeri_v"); + set_proc_address(&impl_Enablei, "glEnablei"); + set_proc_address(&impl_Disablei, "glDisablei"); + set_proc_address(&impl_IsEnabledi, "glIsEnabledi"); + set_proc_address(&impl_BeginTransformFeedback, "glBeginTransformFeedback"); + set_proc_address(&impl_EndTransformFeedback, "glEndTransformFeedback"); + set_proc_address(&impl_BindBufferRange, "glBindBufferRange"); + set_proc_address(&impl_BindBufferBase, "glBindBufferBase"); + set_proc_address(&impl_TransformFeedbackVaryings, "glTransformFeedbackVaryings"); + set_proc_address(&impl_GetTransformFeedbackVarying, "glGetTransformFeedbackVarying"); + set_proc_address(&impl_ClampColor, "glClampColor"); + set_proc_address(&impl_BeginConditionalRender, "glBeginConditionalRender"); + set_proc_address(&impl_EndConditionalRender, "glEndConditionalRender"); + set_proc_address(&impl_VertexAttribIPointer, "glVertexAttribIPointer"); + set_proc_address(&impl_GetVertexAttribIiv, "glGetVertexAttribIiv"); + set_proc_address(&impl_GetVertexAttribIuiv, "glGetVertexAttribIuiv"); + set_proc_address(&impl_VertexAttribI1i, "glVertexAttribI1i"); + set_proc_address(&impl_VertexAttribI2i, "glVertexAttribI2i"); + set_proc_address(&impl_VertexAttribI3i, "glVertexAttribI3i"); + set_proc_address(&impl_VertexAttribI4i, "glVertexAttribI4i"); + set_proc_address(&impl_VertexAttribI1ui, "glVertexAttribI1ui"); + set_proc_address(&impl_VertexAttribI2ui, "glVertexAttribI2ui"); + set_proc_address(&impl_VertexAttribI3ui, "glVertexAttribI3ui"); + set_proc_address(&impl_VertexAttribI4ui, "glVertexAttribI4ui"); + set_proc_address(&impl_VertexAttribI1iv, "glVertexAttribI1iv"); + set_proc_address(&impl_VertexAttribI2iv, "glVertexAttribI2iv"); + set_proc_address(&impl_VertexAttribI3iv, "glVertexAttribI3iv"); + set_proc_address(&impl_VertexAttribI4iv, "glVertexAttribI4iv"); + set_proc_address(&impl_VertexAttribI1uiv, "glVertexAttribI1uiv"); + set_proc_address(&impl_VertexAttribI2uiv, "glVertexAttribI2uiv"); + set_proc_address(&impl_VertexAttribI3uiv, "glVertexAttribI3uiv"); + set_proc_address(&impl_VertexAttribI4uiv, "glVertexAttribI4uiv"); + set_proc_address(&impl_VertexAttribI4bv, "glVertexAttribI4bv"); + set_proc_address(&impl_VertexAttribI4sv, "glVertexAttribI4sv"); + set_proc_address(&impl_VertexAttribI4ubv, "glVertexAttribI4ubv"); + set_proc_address(&impl_VertexAttribI4usv, "glVertexAttribI4usv"); + set_proc_address(&impl_GetUniformuiv, "glGetUniformuiv"); + set_proc_address(&impl_BindFragDataLocation, "glBindFragDataLocation"); + set_proc_address(&impl_GetFragDataLocation, "glGetFragDataLocation"); + set_proc_address(&impl_Uniform1ui, "glUniform1ui"); + set_proc_address(&impl_Uniform2ui, "glUniform2ui"); + set_proc_address(&impl_Uniform3ui, "glUniform3ui"); + set_proc_address(&impl_Uniform4ui, "glUniform4ui"); + set_proc_address(&impl_Uniform1uiv, "glUniform1uiv"); + set_proc_address(&impl_Uniform2uiv, "glUniform2uiv"); + set_proc_address(&impl_Uniform3uiv, "glUniform3uiv"); + set_proc_address(&impl_Uniform4uiv, "glUniform4uiv"); + set_proc_address(&impl_TexParameterIiv, "glTexParameterIiv"); + set_proc_address(&impl_TexParameterIuiv, "glTexParameterIuiv"); + set_proc_address(&impl_GetTexParameterIiv, "glGetTexParameterIiv"); + set_proc_address(&impl_GetTexParameterIuiv, "glGetTexParameterIuiv"); + set_proc_address(&impl_ClearBufferiv, "glClearBufferiv"); + set_proc_address(&impl_ClearBufferuiv, "glClearBufferuiv"); + set_proc_address(&impl_ClearBufferfv, "glClearBufferfv"); + set_proc_address(&impl_ClearBufferfi, "glClearBufferfi"); + set_proc_address(&impl_GetStringi, "glGetStringi"); + set_proc_address(&impl_IsRenderbuffer, "glIsRenderbuffer"); + set_proc_address(&impl_BindRenderbuffer, "glBindRenderbuffer"); + set_proc_address(&impl_DeleteRenderbuffers, "glDeleteRenderbuffers"); + set_proc_address(&impl_GenRenderbuffers, "glGenRenderbuffers"); + set_proc_address(&impl_RenderbufferStorage, "glRenderbufferStorage"); + set_proc_address(&impl_GetRenderbufferParameteriv, "glGetRenderbufferParameteriv"); + set_proc_address(&impl_IsFramebuffer, "glIsFramebuffer"); + set_proc_address(&impl_BindFramebuffer, "glBindFramebuffer"); + set_proc_address(&impl_DeleteFramebuffers, "glDeleteFramebuffers"); + set_proc_address(&impl_GenFramebuffers, "glGenFramebuffers"); + set_proc_address(&impl_CheckFramebufferStatus, "glCheckFramebufferStatus"); + set_proc_address(&impl_FramebufferTexture1D, "glFramebufferTexture1D"); + set_proc_address(&impl_FramebufferTexture2D, "glFramebufferTexture2D"); + set_proc_address(&impl_FramebufferTexture3D, "glFramebufferTexture3D"); + set_proc_address(&impl_FramebufferRenderbuffer, "glFramebufferRenderbuffer"); + set_proc_address(&impl_GetFramebufferAttachmentParameteriv, "glGetFramebufferAttachmentParameteriv"); + set_proc_address(&impl_GenerateMipmap, "glGenerateMipmap"); + set_proc_address(&impl_BlitFramebuffer, "glBlitFramebuffer"); + set_proc_address(&impl_RenderbufferStorageMultisample, "glRenderbufferStorageMultisample"); + set_proc_address(&impl_FramebufferTextureLayer, "glFramebufferTextureLayer"); + set_proc_address(&impl_MapBufferRange, "glMapBufferRange"); + set_proc_address(&impl_FlushMappedBufferRange, "glFlushMappedBufferRange"); + set_proc_address(&impl_BindVertexArray, "glBindVertexArray"); + set_proc_address(&impl_DeleteVertexArrays, "glDeleteVertexArrays"); + set_proc_address(&impl_GenVertexArrays, "glGenVertexArrays"); + set_proc_address(&impl_IsVertexArray, "glIsVertexArray"); +} + + +// VERSION_3_1 +impl_DrawArraysInstanced: proc "c" (mode: u32, first: i32, count: i32, instancecount: i32); +impl_DrawElementsInstanced: proc "c" (mode: u32, count: i32, type: u32, indices: rawptr, instancecount: i32); +impl_TexBuffer: proc "c" (target: u32, internalformat: u32, buffer: u32); +impl_PrimitiveRestartIndex: proc "c" (index: u32); +impl_CopyBufferSubData: proc "c" (readTarget: u32, writeTarget: u32, readOffset: int, writeOffset: int, size: int); +impl_GetUniformIndices: proc "c" (program: u32, uniformCount: i32, uniformNames: [^]cstring, uniformIndices: [^]u32); +impl_GetActiveUniformsiv: proc "c" (program: u32, uniformCount: i32, uniformIndices: [^]u32, pname: u32, params: [^]i32); +impl_GetActiveUniformName: proc "c" (program: u32, uniformIndex: u32, bufSize: i32, length: ^i32, uniformName: [^]u8); +impl_GetUniformBlockIndex: proc "c" (program: u32, uniformBlockName: cstring) -> u32; +impl_GetActiveUniformBlockiv: proc "c" (program: u32, uniformBlockIndex: u32, pname: u32, params: [^]i32); +impl_GetActiveUniformBlockName: proc "c" (program: u32, uniformBlockIndex: u32, bufSize: i32, length: ^i32, uniformBlockName: [^]u8); +impl_UniformBlockBinding: proc "c" (program: u32, uniformBlockIndex: u32, uniformBlockBinding: u32); + +load_3_1 :: proc(set_proc_address: Set_Proc_Address_Type) { + set_proc_address(&impl_DrawArraysInstanced, "glDrawArraysInstanced"); + set_proc_address(&impl_DrawElementsInstanced, "glDrawElementsInstanced"); + set_proc_address(&impl_TexBuffer, "glTexBuffer"); + set_proc_address(&impl_PrimitiveRestartIndex, "glPrimitiveRestartIndex"); + set_proc_address(&impl_CopyBufferSubData, "glCopyBufferSubData"); + set_proc_address(&impl_GetUniformIndices, "glGetUniformIndices"); + set_proc_address(&impl_GetActiveUniformsiv, "glGetActiveUniformsiv"); + set_proc_address(&impl_GetActiveUniformName, "glGetActiveUniformName"); + set_proc_address(&impl_GetUniformBlockIndex, "glGetUniformBlockIndex"); + set_proc_address(&impl_GetActiveUniformBlockiv, "glGetActiveUniformBlockiv"); + set_proc_address(&impl_GetActiveUniformBlockName, "glGetActiveUniformBlockName"); + set_proc_address(&impl_UniformBlockBinding, "glUniformBlockBinding"); +} + + +// VERSION_3_2 +impl_DrawElementsBaseVertex: proc "c" (mode: u32, count: i32, type: u32, indices: rawptr, basevertex: i32); +impl_DrawRangeElementsBaseVertex: proc "c" (mode: u32, start: u32, end: u32, count: i32, type: u32, indices: rawptr, basevertex: i32); +impl_DrawElementsInstancedBaseVertex: proc "c" (mode: u32, count: i32, type: u32, indices: rawptr, instancecount: i32, basevertex: i32); +impl_MultiDrawElementsBaseVertex: proc "c" (mode: u32, count: ^i32, type: u32, indices: [^]rawptr, drawcount: i32, basevertex: ^i32); +impl_ProvokingVertex: proc "c" (mode: u32); +impl_FenceSync: proc "c" (condition: u32, flags: u32) -> sync_t; +impl_IsSync: proc "c" (sync: sync_t) -> bool; +impl_DeleteSync: proc "c" (sync: sync_t); +impl_ClientWaitSync: proc "c" (sync: sync_t, flags: u32, timeout: u64) -> u32; +impl_WaitSync: proc "c" (sync: sync_t, flags: u32, timeout: u64); +impl_GetInteger64v: proc "c" (pname: u32, data: ^i64); +impl_GetSynciv: proc "c" (sync: sync_t, pname: u32, bufSize: i32, length: ^i32, values: [^]i32); +impl_GetInteger64i_v: proc "c" (target: u32, index: u32, data: ^i64); +impl_GetBufferParameteri64v: proc "c" (target: u32, pname: u32, params: [^]i64); +impl_FramebufferTexture: proc "c" (target: u32, attachment: u32, texture: u32, level: i32); +impl_TexImage2DMultisample: proc "c" (target: u32, samples: i32, internalformat: u32, width: i32, height: i32, fixedsamplelocations: u8); +impl_TexImage3DMultisample: proc "c" (target: u32, samples: i32, internalformat: u32, width: i32, height: i32, depth: i32, fixedsamplelocations: u8); +impl_GetMultisamplefv: proc "c" (pname: u32, index: u32, val: ^f32); +impl_SampleMaski: proc "c" (maskNumber: u32, mask: u32); + +load_3_2 :: proc(set_proc_address: Set_Proc_Address_Type) { + set_proc_address(&impl_DrawElementsBaseVertex, "glDrawElementsBaseVertex"); + set_proc_address(&impl_DrawRangeElementsBaseVertex, "glDrawRangeElementsBaseVertex"); + set_proc_address(&impl_DrawElementsInstancedBaseVertex, "glDrawElementsInstancedBaseVertex"); + set_proc_address(&impl_MultiDrawElementsBaseVertex, "glMultiDrawElementsBaseVertex"); + set_proc_address(&impl_ProvokingVertex, "glProvokingVertex"); + set_proc_address(&impl_FenceSync, "glFenceSync"); + set_proc_address(&impl_IsSync, "glIsSync"); + set_proc_address(&impl_DeleteSync, "glDeleteSync"); + set_proc_address(&impl_ClientWaitSync, "glClientWaitSync"); + set_proc_address(&impl_WaitSync, "glWaitSync"); + set_proc_address(&impl_GetInteger64v, "glGetInteger64v"); + set_proc_address(&impl_GetSynciv, "glGetSynciv"); + set_proc_address(&impl_GetInteger64i_v, "glGetInteger64i_v"); + set_proc_address(&impl_GetBufferParameteri64v, "glGetBufferParameteri64v"); + set_proc_address(&impl_FramebufferTexture, "glFramebufferTexture"); + set_proc_address(&impl_TexImage2DMultisample, "glTexImage2DMultisample"); + set_proc_address(&impl_TexImage3DMultisample, "glTexImage3DMultisample"); + set_proc_address(&impl_GetMultisamplefv, "glGetMultisamplefv"); + set_proc_address(&impl_SampleMaski, "glSampleMaski"); +} + + +// VERSION_3_3 +impl_BindFragDataLocationIndexed: proc "c" (program: u32, colorNumber: u32, index: u32, name: cstring); +impl_GetFragDataIndex: proc "c" (program: u32, name: cstring) -> i32; +impl_GenSamplers: proc "c" (count: i32, samplers: [^]u32); +impl_DeleteSamplers: proc "c" (count: i32, samplers: [^]u32); +impl_IsSampler: proc "c" (sampler: u32) -> bool; +impl_BindSampler: proc "c" (unit: u32, sampler: u32); +impl_SamplerParameteri: proc "c" (sampler: u32, pname: u32, param: i32); +impl_SamplerParameteriv: proc "c" (sampler: u32, pname: u32, param: ^i32); +impl_SamplerParameterf: proc "c" (sampler: u32, pname: u32, param: f32); +impl_SamplerParameterfv: proc "c" (sampler: u32, pname: u32, param: ^f32); +impl_SamplerParameterIiv: proc "c" (sampler: u32, pname: u32, param: ^i32); +impl_SamplerParameterIuiv: proc "c" (sampler: u32, pname: u32, param: ^u32); +impl_GetSamplerParameteriv: proc "c" (sampler: u32, pname: u32, params: [^]i32); +impl_GetSamplerParameterIiv: proc "c" (sampler: u32, pname: u32, params: [^]i32); +impl_GetSamplerParameterfv: proc "c" (sampler: u32, pname: u32, params: [^]f32); +impl_GetSamplerParameterIuiv: proc "c" (sampler: u32, pname: u32, params: [^]u32); +impl_QueryCounter: proc "c" (id: u32, target: u32); +impl_GetQueryObjecti64v: proc "c" (id: u32, pname: u32, params: [^]i64); +impl_GetQueryObjectui64v: proc "c" (id: u32, pname: u32, params: [^]u64); +impl_VertexAttribDivisor: proc "c" (index: u32, divisor: u32); +impl_VertexAttribP1ui: proc "c" (index: u32, type: u32, normalized: bool, value: u32); +impl_VertexAttribP1uiv: proc "c" (index: u32, type: u32, normalized: bool, value: ^u32); +impl_VertexAttribP2ui: proc "c" (index: u32, type: u32, normalized: bool, value: u32); +impl_VertexAttribP2uiv: proc "c" (index: u32, type: u32, normalized: bool, value: ^u32); +impl_VertexAttribP3ui: proc "c" (index: u32, type: u32, normalized: bool, value: u32); +impl_VertexAttribP3uiv: proc "c" (index: u32, type: u32, normalized: bool, value: ^u32); +impl_VertexAttribP4ui: proc "c" (index: u32, type: u32, normalized: bool, value: u32); +impl_VertexAttribP4uiv: proc "c" (index: u32, type: u32, normalized: bool, value: ^u32); +impl_VertexP2ui: proc "c" (type: u32, value: u32); +impl_VertexP2uiv: proc "c" (type: u32, value: ^u32); +impl_VertexP3ui: proc "c" (type: u32, value: u32); +impl_VertexP3uiv: proc "c" (type: u32, value: ^u32); +impl_VertexP4ui: proc "c" (type: u32, value: u32); +impl_VertexP4uiv: proc "c" (type: u32, value: ^u32); +impl_TexCoordP1ui: proc "c" (type: u32, coords: u32); +impl_TexCoordP1uiv: proc "c" (type: u32, coords: [^]u32); +impl_TexCoordP2ui: proc "c" (type: u32, coords: u32); +impl_TexCoordP2uiv: proc "c" (type: u32, coords: [^]u32); +impl_TexCoordP3ui: proc "c" (type: u32, coords: u32); +impl_TexCoordP3uiv: proc "c" (type: u32, coords: [^]u32); +impl_TexCoordP4ui: proc "c" (type: u32, coords: u32); +impl_TexCoordP4uiv: proc "c" (type: u32, coords: [^]u32); +impl_MultiTexCoordP1ui: proc "c" (texture: u32, type: u32, coords: u32); +impl_MultiTexCoordP1uiv: proc "c" (texture: u32, type: u32, coords: [^]u32); +impl_MultiTexCoordP2ui: proc "c" (texture: u32, type: u32, coords: u32); +impl_MultiTexCoordP2uiv: proc "c" (texture: u32, type: u32, coords: [^]u32); +impl_MultiTexCoordP3ui: proc "c" (texture: u32, type: u32, coords: u32); +impl_MultiTexCoordP3uiv: proc "c" (texture: u32, type: u32, coords: [^]u32); +impl_MultiTexCoordP4ui: proc "c" (texture: u32, type: u32, coords: u32); +impl_MultiTexCoordP4uiv: proc "c" (texture: u32, type: u32, coords: [^]u32); +impl_NormalP3ui: proc "c" (type: u32, coords: u32); +impl_NormalP3uiv: proc "c" (type: u32, coords: [^]u32); +impl_ColorP3ui: proc "c" (type: u32, color: u32); +impl_ColorP3uiv: proc "c" (type: u32, color: ^u32); +impl_ColorP4ui: proc "c" (type: u32, color: u32); +impl_ColorP4uiv: proc "c" (type: u32, color: ^u32); +impl_SecondaryColorP3ui: proc "c" (type: u32, color: u32); +impl_SecondaryColorP3uiv: proc "c" (type: u32, color: ^u32); + +load_3_3 :: proc(set_proc_address: Set_Proc_Address_Type) { + set_proc_address(&impl_BindFragDataLocationIndexed, "glBindFragDataLocationIndexed"); + set_proc_address(&impl_GetFragDataIndex, "glGetFragDataIndex"); + set_proc_address(&impl_GenSamplers, "glGenSamplers"); + set_proc_address(&impl_DeleteSamplers, "glDeleteSamplers"); + set_proc_address(&impl_IsSampler, "glIsSampler"); + set_proc_address(&impl_BindSampler, "glBindSampler"); + set_proc_address(&impl_SamplerParameteri, "glSamplerParameteri"); + set_proc_address(&impl_SamplerParameteriv, "glSamplerParameteriv"); + set_proc_address(&impl_SamplerParameterf, "glSamplerParameterf"); + set_proc_address(&impl_SamplerParameterfv, "glSamplerParameterfv"); + set_proc_address(&impl_SamplerParameterIiv, "glSamplerParameterIiv"); + set_proc_address(&impl_SamplerParameterIuiv, "glSamplerParameterIuiv"); + set_proc_address(&impl_GetSamplerParameteriv, "glGetSamplerParameteriv"); + set_proc_address(&impl_GetSamplerParameterIiv, "glGetSamplerParameterIiv"); + set_proc_address(&impl_GetSamplerParameterfv, "glGetSamplerParameterfv"); + set_proc_address(&impl_GetSamplerParameterIuiv, "glGetSamplerParameterIuiv"); + set_proc_address(&impl_QueryCounter, "glQueryCounter"); + set_proc_address(&impl_GetQueryObjecti64v, "glGetQueryObjecti64v"); + set_proc_address(&impl_GetQueryObjectui64v, "glGetQueryObjectui64v"); + set_proc_address(&impl_VertexAttribDivisor, "glVertexAttribDivisor"); + set_proc_address(&impl_VertexAttribP1ui, "glVertexAttribP1ui"); + set_proc_address(&impl_VertexAttribP1uiv, "glVertexAttribP1uiv"); + set_proc_address(&impl_VertexAttribP2ui, "glVertexAttribP2ui"); + set_proc_address(&impl_VertexAttribP2uiv, "glVertexAttribP2uiv"); + set_proc_address(&impl_VertexAttribP3ui, "glVertexAttribP3ui"); + set_proc_address(&impl_VertexAttribP3uiv, "glVertexAttribP3uiv"); + set_proc_address(&impl_VertexAttribP4ui, "glVertexAttribP4ui"); + set_proc_address(&impl_VertexAttribP4uiv, "glVertexAttribP4uiv"); + set_proc_address(&impl_VertexP2ui, "glVertexP2ui"); + set_proc_address(&impl_VertexP2uiv, "glVertexP2uiv"); + set_proc_address(&impl_VertexP3ui, "glVertexP3ui"); + set_proc_address(&impl_VertexP3uiv, "glVertexP3uiv"); + set_proc_address(&impl_VertexP4ui, "glVertexP4ui"); + set_proc_address(&impl_VertexP4uiv, "glVertexP4uiv"); + set_proc_address(&impl_TexCoordP1ui, "glTexCoordP1ui"); + set_proc_address(&impl_TexCoordP1uiv, "glTexCoordP1uiv"); + set_proc_address(&impl_TexCoordP2ui, "glTexCoordP2ui"); + set_proc_address(&impl_TexCoordP2uiv, "glTexCoordP2uiv"); + set_proc_address(&impl_TexCoordP3ui, "glTexCoordP3ui"); + set_proc_address(&impl_TexCoordP3uiv, "glTexCoordP3uiv"); + set_proc_address(&impl_TexCoordP4ui, "glTexCoordP4ui"); + set_proc_address(&impl_TexCoordP4uiv, "glTexCoordP4uiv"); + set_proc_address(&impl_MultiTexCoordP1ui, "glMultiTexCoordP1ui"); + set_proc_address(&impl_MultiTexCoordP1uiv, "glMultiTexCoordP1uiv"); + set_proc_address(&impl_MultiTexCoordP2ui, "glMultiTexCoordP2ui"); + set_proc_address(&impl_MultiTexCoordP2uiv, "glMultiTexCoordP2uiv"); + set_proc_address(&impl_MultiTexCoordP3ui, "glMultiTexCoordP3ui"); + set_proc_address(&impl_MultiTexCoordP3uiv, "glMultiTexCoordP3uiv"); + set_proc_address(&impl_MultiTexCoordP4ui, "glMultiTexCoordP4ui"); + set_proc_address(&impl_MultiTexCoordP4uiv, "glMultiTexCoordP4uiv"); + set_proc_address(&impl_NormalP3ui, "glNormalP3ui"); + set_proc_address(&impl_NormalP3uiv, "glNormalP3uiv"); + set_proc_address(&impl_ColorP3ui, "glColorP3ui"); + set_proc_address(&impl_ColorP3uiv, "glColorP3uiv"); + set_proc_address(&impl_ColorP4ui, "glColorP4ui"); + set_proc_address(&impl_ColorP4uiv, "glColorP4uiv"); + set_proc_address(&impl_SecondaryColorP3ui, "glSecondaryColorP3ui"); + set_proc_address(&impl_SecondaryColorP3uiv, "glSecondaryColorP3uiv"); +} + + +// VERSION_4_0 +impl_MinSampleShading: proc "c" (value: f32); +impl_BlendEquationi: proc "c" (buf: u32, mode: u32); +impl_BlendEquationSeparatei: proc "c" (buf: u32, modeRGB: u32, modeAlpha: u32); +impl_BlendFunci: proc "c" (buf: u32, src: u32, dst: u32); +impl_BlendFuncSeparatei: proc "c" (buf: u32, srcRGB: u32, dstRGB: u32, srcAlpha: u32, dstAlpha: u32); +impl_DrawArraysIndirect: proc "c" (mode: u32, indirect: rawptr); +impl_DrawElementsIndirect: proc "c" (mode: u32, type: u32, indirect: rawptr); +impl_Uniform1d: proc "c" (location: i32, x: f64); +impl_Uniform2d: proc "c" (location: i32, x: f64, y: f64); +impl_Uniform3d: proc "c" (location: i32, x: f64, y: f64, z: f64); +impl_Uniform4d: proc "c" (location: i32, x: f64, y: f64, z: f64, w: f64); +impl_Uniform1dv: proc "c" (location: i32, count: i32, value: [^]f64); +impl_Uniform2dv: proc "c" (location: i32, count: i32, value: [^]f64); +impl_Uniform3dv: proc "c" (location: i32, count: i32, value: [^]f64); +impl_Uniform4dv: proc "c" (location: i32, count: i32, value: [^]f64); +impl_UniformMatrix2dv: proc "c" (location: i32, count: i32, transpose: bool, value: [^]f64); +impl_UniformMatrix3dv: proc "c" (location: i32, count: i32, transpose: bool, value: [^]f64); +impl_UniformMatrix4dv: proc "c" (location: i32, count: i32, transpose: bool, value: [^]f64); +impl_UniformMatrix2x3dv: proc "c" (location: i32, count: i32, transpose: bool, value: [^]f64); +impl_UniformMatrix2x4dv: proc "c" (location: i32, count: i32, transpose: bool, value: [^]f64); +impl_UniformMatrix3x2dv: proc "c" (location: i32, count: i32, transpose: bool, value: [^]f64); +impl_UniformMatrix3x4dv: proc "c" (location: i32, count: i32, transpose: bool, value: [^]f64); +impl_UniformMatrix4x2dv: proc "c" (location: i32, count: i32, transpose: bool, value: [^]f64); +impl_UniformMatrix4x3dv: proc "c" (location: i32, count: i32, transpose: bool, value: [^]f64); +impl_GetUniformdv: proc "c" (program: u32, location: i32, params: [^]f64); +impl_GetSubroutineUniformLocation: proc "c" (program: u32, shadertype: u32, name: cstring) -> i32; +impl_GetSubroutineIndex: proc "c" (program: u32, shadertype: u32, name: cstring) -> u32; +impl_GetActiveSubroutineUniformiv: proc "c" (program: u32, shadertype: u32, index: u32, pname: u32, values: ^i32); +impl_GetActiveSubroutineUniformName: proc "c" (program: u32, shadertype: u32, index: u32, bufsize: i32, length: ^i32, name: [^]u8); +impl_GetActiveSubroutineName: proc "c" (program: u32, shadertype: u32, index: u32, bufsize: i32, length: ^i32, name: [^]u8); +impl_UniformSubroutinesuiv: proc "c" (shadertype: u32, count: i32, indices: ^u32); +impl_GetUniformSubroutineuiv: proc "c" (shadertype: u32, location: i32, params: [^]u32); +impl_GetProgramStageiv: proc "c" (program: u32, shadertype: u32, pname: u32, values: ^i32); +impl_PatchParameteri: proc "c" (pname: u32, value: i32); +impl_PatchParameterfv: proc "c" (pname: u32, values: ^f32); +impl_BindTransformFeedback: proc "c" (target: u32, id: u32); +impl_DeleteTransformFeedbacks: proc "c" (n: i32, ids: [^]u32); +impl_GenTransformFeedbacks: proc "c" (n: i32, ids: [^]u32); +impl_IsTransformFeedback: proc "c" (id: u32) -> bool; +impl_PauseTransformFeedback: proc "c" (); +impl_ResumeTransformFeedback: proc "c" (); +impl_DrawTransformFeedback: proc "c" (mode: u32, id: u32); +impl_DrawTransformFeedbackStream: proc "c" (mode: u32, id: u32, stream: u32); +impl_BeginQueryIndexed: proc "c" (target: u32, index: u32, id: u32); +impl_EndQueryIndexed: proc "c" (target: u32, index: u32); +impl_GetQueryIndexediv: proc "c" (target: u32, index: u32, pname: u32, params: [^]i32); + +load_4_0 :: proc(set_proc_address: Set_Proc_Address_Type) { + set_proc_address(&impl_MinSampleShading, "glMinSampleShading"); + set_proc_address(&impl_BlendEquationi, "glBlendEquationi"); + set_proc_address(&impl_BlendEquationSeparatei, "glBlendEquationSeparatei"); + set_proc_address(&impl_BlendFunci, "glBlendFunci"); + set_proc_address(&impl_BlendFuncSeparatei, "glBlendFuncSeparatei"); + set_proc_address(&impl_DrawArraysIndirect, "glDrawArraysIndirect"); + set_proc_address(&impl_DrawElementsIndirect, "glDrawElementsIndirect"); + set_proc_address(&impl_Uniform1d, "glUniform1d"); + set_proc_address(&impl_Uniform2d, "glUniform2d"); + set_proc_address(&impl_Uniform3d, "glUniform3d"); + set_proc_address(&impl_Uniform4d, "glUniform4d"); + set_proc_address(&impl_Uniform1dv, "glUniform1dv"); + set_proc_address(&impl_Uniform2dv, "glUniform2dv"); + set_proc_address(&impl_Uniform3dv, "glUniform3dv"); + set_proc_address(&impl_Uniform4dv, "glUniform4dv"); + set_proc_address(&impl_UniformMatrix2dv, "glUniformMatrix2dv"); + set_proc_address(&impl_UniformMatrix3dv, "glUniformMatrix3dv"); + set_proc_address(&impl_UniformMatrix4dv, "glUniformMatrix4dv"); + set_proc_address(&impl_UniformMatrix2x3dv, "glUniformMatrix2x3dv"); + set_proc_address(&impl_UniformMatrix2x4dv, "glUniformMatrix2x4dv"); + set_proc_address(&impl_UniformMatrix3x2dv, "glUniformMatrix3x2dv"); + set_proc_address(&impl_UniformMatrix3x4dv, "glUniformMatrix3x4dv"); + set_proc_address(&impl_UniformMatrix4x2dv, "glUniformMatrix4x2dv"); + set_proc_address(&impl_UniformMatrix4x3dv, "glUniformMatrix4x3dv"); + set_proc_address(&impl_GetUniformdv, "glGetUniformdv"); + set_proc_address(&impl_GetSubroutineUniformLocation, "glGetSubroutineUniformLocation"); + set_proc_address(&impl_GetSubroutineIndex, "glGetSubroutineIndex"); + set_proc_address(&impl_GetActiveSubroutineUniformiv, "glGetActiveSubroutineUniformiv"); + set_proc_address(&impl_GetActiveSubroutineUniformName, "glGetActiveSubroutineUniformName"); + set_proc_address(&impl_GetActiveSubroutineName, "glGetActiveSubroutineName"); + set_proc_address(&impl_UniformSubroutinesuiv, "glUniformSubroutinesuiv"); + set_proc_address(&impl_GetUniformSubroutineuiv, "glGetUniformSubroutineuiv"); + set_proc_address(&impl_GetProgramStageiv, "glGetProgramStageiv"); + set_proc_address(&impl_PatchParameteri, "glPatchParameteri"); + set_proc_address(&impl_PatchParameterfv, "glPatchParameterfv"); + set_proc_address(&impl_BindTransformFeedback, "glBindTransformFeedback"); + set_proc_address(&impl_DeleteTransformFeedbacks, "glDeleteTransformFeedbacks"); + set_proc_address(&impl_GenTransformFeedbacks, "glGenTransformFeedbacks"); + set_proc_address(&impl_IsTransformFeedback, "glIsTransformFeedback"); + set_proc_address(&impl_PauseTransformFeedback, "glPauseTransformFeedback"); + set_proc_address(&impl_ResumeTransformFeedback, "glResumeTransformFeedback"); + set_proc_address(&impl_DrawTransformFeedback, "glDrawTransformFeedback"); + set_proc_address(&impl_DrawTransformFeedbackStream, "glDrawTransformFeedbackStream"); + set_proc_address(&impl_BeginQueryIndexed, "glBeginQueryIndexed"); + set_proc_address(&impl_EndQueryIndexed, "glEndQueryIndexed"); + set_proc_address(&impl_GetQueryIndexediv, "glGetQueryIndexediv"); +} + + +// VERSION_4_1 +impl_ReleaseShaderCompiler: proc "c" (); +impl_ShaderBinary: proc "c" (count: i32, shaders: ^u32, binaryformat: u32, binary: rawptr, length: i32); +impl_GetShaderPrecisionFormat: proc "c" (shadertype: u32, precisiontype: u32, range: ^i32, precision: ^i32); +impl_DepthRangef: proc "c" (n: f32, f: f32); +impl_ClearDepthf: proc "c" (d: f32); +impl_GetProgramBinary: proc "c" (program: u32, bufSize: i32, length: ^i32, binaryFormat: ^u32, binary: rawptr); +impl_ProgramBinary: proc "c" (program: u32, binaryFormat: u32, binary: rawptr, length: i32); +impl_ProgramParameteri: proc "c" (program: u32, pname: u32, value: i32); +impl_UseProgramStages: proc "c" (pipeline: u32, stages: u32, program: u32); +impl_ActiveShaderProgram: proc "c" (pipeline: u32, program: u32); +impl_CreateShaderProgramv: proc "c" (type: u32, count: i32, strings: [^]cstring) -> u32; +impl_BindProgramPipeline: proc "c" (pipeline: u32); +impl_DeleteProgramPipelines: proc "c" (n: i32, pipelines: [^]u32); +impl_GenProgramPipelines: proc "c" (n: i32, pipelines: [^]u32); +impl_IsProgramPipeline: proc "c" (pipeline: u32) -> bool; +impl_GetProgramPipelineiv: proc "c" (pipeline: u32, pname: u32, params: [^]i32); +impl_ProgramUniform1i: proc "c" (program: u32, location: i32, v0: i32); +impl_ProgramUniform1iv: proc "c" (program: u32, location: i32, count: i32, value: [^]i32); +impl_ProgramUniform1f: proc "c" (program: u32, location: i32, v0: f32); +impl_ProgramUniform1fv: proc "c" (program: u32, location: i32, count: i32, value: [^]f32); +impl_ProgramUniform1d: proc "c" (program: u32, location: i32, v0: f64); +impl_ProgramUniform1dv: proc "c" (program: u32, location: i32, count: i32, value: [^]f64); +impl_ProgramUniform1ui: proc "c" (program: u32, location: i32, v0: u32); +impl_ProgramUniform1uiv: proc "c" (program: u32, location: i32, count: i32, value: [^]u32); +impl_ProgramUniform2i: proc "c" (program: u32, location: i32, v0: i32, v1: i32); +impl_ProgramUniform2iv: proc "c" (program: u32, location: i32, count: i32, value: [^]i32); +impl_ProgramUniform2f: proc "c" (program: u32, location: i32, v0: f32, v1: f32); +impl_ProgramUniform2fv: proc "c" (program: u32, location: i32, count: i32, value: [^]f32); +impl_ProgramUniform2d: proc "c" (program: u32, location: i32, v0: f64, v1: f64); +impl_ProgramUniform2dv: proc "c" (program: u32, location: i32, count: i32, value: [^]f64); +impl_ProgramUniform2ui: proc "c" (program: u32, location: i32, v0: u32, v1: u32); +impl_ProgramUniform2uiv: proc "c" (program: u32, location: i32, count: i32, value: [^]u32); +impl_ProgramUniform3i: proc "c" (program: u32, location: i32, v0: i32, v1: i32, v2: i32); +impl_ProgramUniform3iv: proc "c" (program: u32, location: i32, count: i32, value: [^]i32); +impl_ProgramUniform3f: proc "c" (program: u32, location: i32, v0: f32, v1: f32, v2: f32); +impl_ProgramUniform3fv: proc "c" (program: u32, location: i32, count: i32, value: [^]f32); +impl_ProgramUniform3d: proc "c" (program: u32, location: i32, v0: f64, v1: f64, v2: f64); +impl_ProgramUniform3dv: proc "c" (program: u32, location: i32, count: i32, value: [^]f64); +impl_ProgramUniform3ui: proc "c" (program: u32, location: i32, v0: u32, v1: u32, v2: u32); +impl_ProgramUniform3uiv: proc "c" (program: u32, location: i32, count: i32, value: [^]u32); +impl_ProgramUniform4i: proc "c" (program: u32, location: i32, v0: i32, v1: i32, v2: i32, v3: i32); +impl_ProgramUniform4iv: proc "c" (program: u32, location: i32, count: i32, value: [^]i32); +impl_ProgramUniform4f: proc "c" (program: u32, location: i32, v0: f32, v1: f32, v2: f32, v3: f32); +impl_ProgramUniform4fv: proc "c" (program: u32, location: i32, count: i32, value: [^]f32); +impl_ProgramUniform4d: proc "c" (program: u32, location: i32, v0: f64, v1: f64, v2: f64, v3: f64); +impl_ProgramUniform4dv: proc "c" (program: u32, location: i32, count: i32, value: [^]f64); +impl_ProgramUniform4ui: proc "c" (program: u32, location: i32, v0: u32, v1: u32, v2: u32, v3: u32); +impl_ProgramUniform4uiv: proc "c" (program: u32, location: i32, count: i32, value: [^]u32); +impl_ProgramUniformMatrix2fv: proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f32); +impl_ProgramUniformMatrix3fv: proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f32); +impl_ProgramUniformMatrix4fv: proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f32); +impl_ProgramUniformMatrix2dv: proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f64); +impl_ProgramUniformMatrix3dv: proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f64); +impl_ProgramUniformMatrix4dv: proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f64); +impl_ProgramUniformMatrix2x3fv: proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f32); +impl_ProgramUniformMatrix3x2fv: proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f32); +impl_ProgramUniformMatrix2x4fv: proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f32); +impl_ProgramUniformMatrix4x2fv: proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f32); +impl_ProgramUniformMatrix3x4fv: proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f32); +impl_ProgramUniformMatrix4x3fv: proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f32); +impl_ProgramUniformMatrix2x3dv: proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f64); +impl_ProgramUniformMatrix3x2dv: proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f64); +impl_ProgramUniformMatrix2x4dv: proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f64); +impl_ProgramUniformMatrix4x2dv: proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f64); +impl_ProgramUniformMatrix3x4dv: proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f64); +impl_ProgramUniformMatrix4x3dv: proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f64); +impl_ValidateProgramPipeline: proc "c" (pipeline: u32); +impl_GetProgramPipelineInfoLog: proc "c" (pipeline: u32, bufSize: i32, length: ^i32, infoLog: ^u8); +impl_VertexAttribL1d: proc "c" (index: u32, x: f64); +impl_VertexAttribL2d: proc "c" (index: u32, x: f64, y: f64); +impl_VertexAttribL3d: proc "c" (index: u32, x: f64, y: f64, z: f64); +impl_VertexAttribL4d: proc "c" (index: u32, x: f64, y: f64, z: f64, w: f64); +impl_VertexAttribL1dv: proc "c" (index: u32, v: ^f64); +impl_VertexAttribL2dv: proc "c" (index: u32, v: ^f64); +impl_VertexAttribL3dv: proc "c" (index: u32, v: ^f64); +impl_VertexAttribL4dv: proc "c" (index: u32, v: ^f64); +impl_VertexAttribLPointer: proc "c" (index: u32, size: i32, type: u32, stride: i32, pointer: rawptr); +impl_GetVertexAttribLdv: proc "c" (index: u32, pname: u32, params: [^]f64); +impl_ViewportArrayv: proc "c" (first: u32, count: i32, v: ^f32); +impl_ViewportIndexedf: proc "c" (index: u32, x: f32, y: f32, w: f32, h: f32); +impl_ViewportIndexedfv: proc "c" (index: u32, v: ^f32); +impl_ScissorArrayv: proc "c" (first: u32, count: i32, v: ^i32); +impl_ScissorIndexed: proc "c" (index: u32, left: i32, bottom: i32, width: i32, height: i32); +impl_ScissorIndexedv: proc "c" (index: u32, v: ^i32); +impl_DepthRangeArrayv: proc "c" (first: u32, count: i32, v: ^f64); +impl_DepthRangeIndexed: proc "c" (index: u32, n: f64, f: f64); +impl_GetFloati_v: proc "c" (target: u32, index: u32, data: ^f32); +impl_GetDoublei_v: proc "c" (target: u32, index: u32, data: ^f64); + +load_4_1 :: proc(set_proc_address: Set_Proc_Address_Type) { + set_proc_address(&impl_ReleaseShaderCompiler, "glReleaseShaderCompiler"); + set_proc_address(&impl_ShaderBinary, "glShaderBinary"); + set_proc_address(&impl_GetShaderPrecisionFormat, "glGetShaderPrecisionFormat"); + set_proc_address(&impl_DepthRangef, "glDepthRangef"); + set_proc_address(&impl_ClearDepthf, "glClearDepthf"); + set_proc_address(&impl_GetProgramBinary, "glGetProgramBinary"); + set_proc_address(&impl_ProgramBinary, "glProgramBinary"); + set_proc_address(&impl_ProgramParameteri, "glProgramParameteri"); + set_proc_address(&impl_UseProgramStages, "glUseProgramStages"); + set_proc_address(&impl_ActiveShaderProgram, "glActiveShaderProgram"); + set_proc_address(&impl_CreateShaderProgramv, "glCreateShaderProgramv"); + set_proc_address(&impl_BindProgramPipeline, "glBindProgramPipeline"); + set_proc_address(&impl_DeleteProgramPipelines, "glDeleteProgramPipelines"); + set_proc_address(&impl_GenProgramPipelines, "glGenProgramPipelines"); + set_proc_address(&impl_IsProgramPipeline, "glIsProgramPipeline"); + set_proc_address(&impl_GetProgramPipelineiv, "glGetProgramPipelineiv"); + set_proc_address(&impl_ProgramUniform1i, "glProgramUniform1i"); + set_proc_address(&impl_ProgramUniform1iv, "glProgramUniform1iv"); + set_proc_address(&impl_ProgramUniform1f, "glProgramUniform1f"); + set_proc_address(&impl_ProgramUniform1fv, "glProgramUniform1fv"); + set_proc_address(&impl_ProgramUniform1d, "glProgramUniform1d"); + set_proc_address(&impl_ProgramUniform1dv, "glProgramUniform1dv"); + set_proc_address(&impl_ProgramUniform1ui, "glProgramUniform1ui"); + set_proc_address(&impl_ProgramUniform1uiv, "glProgramUniform1uiv"); + set_proc_address(&impl_ProgramUniform2i, "glProgramUniform2i"); + set_proc_address(&impl_ProgramUniform2iv, "glProgramUniform2iv"); + set_proc_address(&impl_ProgramUniform2f, "glProgramUniform2f"); + set_proc_address(&impl_ProgramUniform2fv, "glProgramUniform2fv"); + set_proc_address(&impl_ProgramUniform2d, "glProgramUniform2d"); + set_proc_address(&impl_ProgramUniform2dv, "glProgramUniform2dv"); + set_proc_address(&impl_ProgramUniform2ui, "glProgramUniform2ui"); + set_proc_address(&impl_ProgramUniform2uiv, "glProgramUniform2uiv"); + set_proc_address(&impl_ProgramUniform3i, "glProgramUniform3i"); + set_proc_address(&impl_ProgramUniform3iv, "glProgramUniform3iv"); + set_proc_address(&impl_ProgramUniform3f, "glProgramUniform3f"); + set_proc_address(&impl_ProgramUniform3fv, "glProgramUniform3fv"); + set_proc_address(&impl_ProgramUniform3d, "glProgramUniform3d"); + set_proc_address(&impl_ProgramUniform3dv, "glProgramUniform3dv"); + set_proc_address(&impl_ProgramUniform3ui, "glProgramUniform3ui"); + set_proc_address(&impl_ProgramUniform3uiv, "glProgramUniform3uiv"); + set_proc_address(&impl_ProgramUniform4i, "glProgramUniform4i"); + set_proc_address(&impl_ProgramUniform4iv, "glProgramUniform4iv"); + set_proc_address(&impl_ProgramUniform4f, "glProgramUniform4f"); + set_proc_address(&impl_ProgramUniform4fv, "glProgramUniform4fv"); + set_proc_address(&impl_ProgramUniform4d, "glProgramUniform4d"); + set_proc_address(&impl_ProgramUniform4dv, "glProgramUniform4dv"); + set_proc_address(&impl_ProgramUniform4ui, "glProgramUniform4ui"); + set_proc_address(&impl_ProgramUniform4uiv, "glProgramUniform4uiv"); + set_proc_address(&impl_ProgramUniformMatrix2fv, "glProgramUniformMatrix2fv"); + set_proc_address(&impl_ProgramUniformMatrix3fv, "glProgramUniformMatrix3fv"); + set_proc_address(&impl_ProgramUniformMatrix4fv, "glProgramUniformMatrix4fv"); + set_proc_address(&impl_ProgramUniformMatrix2dv, "glProgramUniformMatrix2dv"); + set_proc_address(&impl_ProgramUniformMatrix3dv, "glProgramUniformMatrix3dv"); + set_proc_address(&impl_ProgramUniformMatrix4dv, "glProgramUniformMatrix4dv"); + set_proc_address(&impl_ProgramUniformMatrix2x3fv, "glProgramUniformMatrix2x3fv"); + set_proc_address(&impl_ProgramUniformMatrix3x2fv, "glProgramUniformMatrix3x2fv"); + set_proc_address(&impl_ProgramUniformMatrix2x4fv, "glProgramUniformMatrix2x4fv"); + set_proc_address(&impl_ProgramUniformMatrix4x2fv, "glProgramUniformMatrix4x2fv"); + set_proc_address(&impl_ProgramUniformMatrix3x4fv, "glProgramUniformMatrix3x4fv"); + set_proc_address(&impl_ProgramUniformMatrix4x3fv, "glProgramUniformMatrix4x3fv"); + set_proc_address(&impl_ProgramUniformMatrix2x3dv, "glProgramUniformMatrix2x3dv"); + set_proc_address(&impl_ProgramUniformMatrix3x2dv, "glProgramUniformMatrix3x2dv"); + set_proc_address(&impl_ProgramUniformMatrix2x4dv, "glProgramUniformMatrix2x4dv"); + set_proc_address(&impl_ProgramUniformMatrix4x2dv, "glProgramUniformMatrix4x2dv"); + set_proc_address(&impl_ProgramUniformMatrix3x4dv, "glProgramUniformMatrix3x4dv"); + set_proc_address(&impl_ProgramUniformMatrix4x3dv, "glProgramUniformMatrix4x3dv"); + set_proc_address(&impl_ValidateProgramPipeline, "glValidateProgramPipeline"); + set_proc_address(&impl_GetProgramPipelineInfoLog, "glGetProgramPipelineInfoLog"); + set_proc_address(&impl_VertexAttribL1d, "glVertexAttribL1d"); + set_proc_address(&impl_VertexAttribL2d, "glVertexAttribL2d"); + set_proc_address(&impl_VertexAttribL3d, "glVertexAttribL3d"); + set_proc_address(&impl_VertexAttribL4d, "glVertexAttribL4d"); + set_proc_address(&impl_VertexAttribL1dv, "glVertexAttribL1dv"); + set_proc_address(&impl_VertexAttribL2dv, "glVertexAttribL2dv"); + set_proc_address(&impl_VertexAttribL3dv, "glVertexAttribL3dv"); + set_proc_address(&impl_VertexAttribL4dv, "glVertexAttribL4dv"); + set_proc_address(&impl_VertexAttribLPointer, "glVertexAttribLPointer"); + set_proc_address(&impl_GetVertexAttribLdv, "glGetVertexAttribLdv"); + set_proc_address(&impl_ViewportArrayv, "glViewportArrayv"); + set_proc_address(&impl_ViewportIndexedf, "glViewportIndexedf"); + set_proc_address(&impl_ViewportIndexedfv, "glViewportIndexedfv"); + set_proc_address(&impl_ScissorArrayv, "glScissorArrayv"); + set_proc_address(&impl_ScissorIndexed, "glScissorIndexed"); + set_proc_address(&impl_ScissorIndexedv, "glScissorIndexedv"); + set_proc_address(&impl_DepthRangeArrayv, "glDepthRangeArrayv"); + set_proc_address(&impl_DepthRangeIndexed, "glDepthRangeIndexed"); + set_proc_address(&impl_GetFloati_v, "glGetFloati_v"); + set_proc_address(&impl_GetDoublei_v, "glGetDoublei_v"); +} + + +// VERSION_4_2 +impl_DrawArraysInstancedBaseInstance: proc "c" (mode: u32, first: i32, count: i32, instancecount: i32, baseinstance: u32); +impl_DrawElementsInstancedBaseInstance: proc "c" (mode: u32, count: i32, type: u32, indices: rawptr, instancecount: i32, baseinstance: u32); +impl_DrawElementsInstancedBaseVertexBaseInstance: proc "c" (mode: u32, count: i32, type: u32, indices: rawptr, instancecount: i32, basevertex: i32, baseinstance: u32); +impl_GetInternalformativ: proc "c" (target: u32, internalformat: u32, pname: u32, bufSize: i32, params: [^]i32); +impl_GetActiveAtomicCounterBufferiv: proc "c" (program: u32, bufferIndex: u32, pname: u32, params: [^]i32); +impl_BindImageTexture: proc "c" (unit: u32, texture: u32, level: i32, layered: u8, layer: i32, access: u32, format: u32); +impl_MemoryBarrier: proc "c" (barriers: u32); +impl_TexStorage1D: proc "c" (target: u32, levels: i32, internalformat: u32, width: i32); +impl_TexStorage2D: proc "c" (target: u32, levels: i32, internalformat: u32, width: i32, height: i32); +impl_TexStorage3D: proc "c" (target: u32, levels: i32, internalformat: u32, width: i32, height: i32, depth: i32); +impl_DrawTransformFeedbackInstanced: proc "c" (mode: u32, id: u32, instancecount: i32); +impl_DrawTransformFeedbackStreamInstanced: proc "c" (mode: u32, id: u32, stream: u32, instancecount: i32); + +load_4_2 :: proc(set_proc_address: Set_Proc_Address_Type) { + set_proc_address(&impl_DrawArraysInstancedBaseInstance, "glDrawArraysInstancedBaseInstance"); + set_proc_address(&impl_DrawElementsInstancedBaseInstance, "glDrawElementsInstancedBaseInstance"); + set_proc_address(&impl_DrawElementsInstancedBaseVertexBaseInstance, "glDrawElementsInstancedBaseVertexBaseInstance"); + set_proc_address(&impl_GetInternalformativ, "glGetInternalformativ"); + set_proc_address(&impl_GetActiveAtomicCounterBufferiv, "glGetActiveAtomicCounterBufferiv"); + set_proc_address(&impl_BindImageTexture, "glBindImageTexture"); + set_proc_address(&impl_MemoryBarrier, "glMemoryBarrier"); + set_proc_address(&impl_TexStorage1D, "glTexStorage1D"); + set_proc_address(&impl_TexStorage2D, "glTexStorage2D"); + set_proc_address(&impl_TexStorage3D, "glTexStorage3D"); + set_proc_address(&impl_DrawTransformFeedbackInstanced, "glDrawTransformFeedbackInstanced"); + set_proc_address(&impl_DrawTransformFeedbackStreamInstanced, "glDrawTransformFeedbackStreamInstanced"); +} + +// VERSION_4_3 +impl_ClearBufferData: proc "c" (target: u32, internalformat: u32, format: u32, type: u32, data: rawptr); +impl_ClearBufferSubData: proc "c" (target: u32, internalformat: u32, offset: int, size: int, format: u32, type: u32, data: rawptr); +impl_DispatchCompute: proc "c" (num_groups_x: u32, num_groups_y: u32, num_groups_z: u32); +impl_DispatchComputeIndirect: proc "c" (indirect: int); +impl_CopyImageSubData: proc "c" (srcName: u32, srcTarget: u32, srcLevel: i32, srcX: i32, srcY: i32, srcZ: i32, dstName: u32, dstTarget: u32, dstLevel: i32, dstX: i32, dstY: i32, dstZ: i32, srcWidth: i32, srcHeight: i32, srcDepth: i32); +impl_FramebufferParameteri: proc "c" (target: u32, pname: u32, param: i32); +impl_GetFramebufferParameteriv: proc "c" (target: u32, pname: u32, params: [^]i32); +impl_GetInternalformati64v: proc "c" (target: u32, internalformat: u32, pname: u32, bufSize: i32, params: [^]i64); +impl_InvalidateTexSubImage: proc "c" (texture: u32, level: i32, xoffset: i32, yoffset: i32, zoffset: i32, width: i32, height: i32, depth: i32); +impl_InvalidateTexImage: proc "c" (texture: u32, level: i32); +impl_InvalidateBufferSubData: proc "c" (buffer: u32, offset: int, length: int); +impl_InvalidateBufferData: proc "c" (buffer: u32); +impl_InvalidateFramebuffer: proc "c" (target: u32, numAttachments: i32, attachments: ^u32); +impl_InvalidateSubFramebuffer: proc "c" (target: u32, numAttachments: i32, attachments: ^u32, x: i32, y: i32, width: i32, height: i32); +impl_MultiDrawArraysIndirect: proc "c" (mode: u32, indirect: rawptr, drawcount: i32, stride: i32); +impl_MultiDrawElementsIndirect: proc "c" (mode: u32, type: u32, indirect: rawptr, drawcount: i32, stride: i32); +impl_GetProgramInterfaceiv: proc "c" (program: u32, programInterface: u32, pname: u32, params: [^]i32); +impl_GetProgramResourceIndex: proc "c" (program: u32, programInterface: u32, name: cstring) -> u32; +impl_GetProgramResourceName: proc "c" (program: u32, programInterface: u32, index: u32, bufSize: i32, length: ^i32, name: [^]u8); +impl_GetProgramResourceiv: proc "c" (program: u32, programInterface: u32, index: u32, propCount: i32, props: ^u32, bufSize: i32, length: ^i32, params: [^]i32); +impl_GetProgramResourceLocation: proc "c" (program: u32, programInterface: u32, name: cstring) -> i32; +impl_GetProgramResourceLocationIndex: proc "c" (program: u32, programInterface: u32, name: cstring) -> i32; +impl_ShaderStorageBlockBinding: proc "c" (program: u32, storageBlockIndex: u32, storageBlockBinding: u32); +impl_TexBufferRange: proc "c" (target: u32, internalformat: u32, buffer: u32, offset: int, size: int); +impl_TexStorage2DMultisample: proc "c" (target: u32, samples: i32, internalformat: u32, width: i32, height: i32, fixedsamplelocations: u8); +impl_TexStorage3DMultisample: proc "c" (target: u32, samples: i32, internalformat: u32, width: i32, height: i32, depth: i32, fixedsamplelocations: u8); +impl_TextureView: proc "c" (texture: u32, target: u32, origtexture: u32, internalformat: u32, minlevel: u32, numlevels: u32, minlayer: u32, numlayers: u32); +impl_BindVertexBuffer: proc "c" (bindingindex: u32, buffer: u32, offset: int, stride: i32); +impl_VertexAttribFormat: proc "c" (attribindex: u32, size: i32, type: u32, normalized: bool, relativeoffset: u32); +impl_VertexAttribIFormat: proc "c" (attribindex: u32, size: i32, type: u32, relativeoffset: u32); +impl_VertexAttribLFormat: proc "c" (attribindex: u32, size: i32, type: u32, relativeoffset: u32); +impl_VertexAttribBinding: proc "c" (attribindex: u32, bindingindex: u32); +impl_VertexBindingDivisor: proc "c" (bindingindex: u32, divisor: u32); +impl_DebugMessageControl: proc "c" (source: u32, type: u32, severity: u32, count: i32, ids: ^u32, enabled: u8); +impl_DebugMessageInsert: proc "c" (source: u32, type: u32, id: u32, severity: u32, length: i32, buf: ^u8); +impl_DebugMessageCallback: proc "c" (callback: debug_proc_t, userParam: rawptr); +impl_GetDebugMessageLog: proc "c" (count: u32, bufSize: i32, sources: [^]u32, types: [^]u32, ids: [^]u32, severities: [^]u32, lengths: [^]i32, messageLog: [^]u8) -> u32; +impl_PushDebugGroup: proc "c" (source: u32, id: u32, length: i32, message: cstring); +impl_PopDebugGroup: proc "c" (); +impl_ObjectLabel: proc "c" (identifier: u32, name: u32, length: i32, label: [^]u8); +impl_GetObjectLabel: proc "c" (identifier: u32, name: u32, bufSize: i32, length: ^i32, label: [^]u8); +impl_ObjectPtrLabel: proc "c" (ptr: rawptr, length: i32, label: [^]u8); +impl_GetObjectPtrLabel: proc "c" (ptr: rawptr, bufSize: i32, length: ^i32, label: [^]u8); + +load_4_3 :: proc(set_proc_address: Set_Proc_Address_Type) { + set_proc_address(&impl_ClearBufferData, "glClearBufferData"); + set_proc_address(&impl_ClearBufferSubData, "glClearBufferSubData"); + set_proc_address(&impl_DispatchCompute, "glDispatchCompute"); + set_proc_address(&impl_DispatchComputeIndirect, "glDispatchComputeIndirect"); + set_proc_address(&impl_CopyImageSubData, "glCopyImageSubData"); + set_proc_address(&impl_FramebufferParameteri, "glFramebufferParameteri"); + set_proc_address(&impl_GetFramebufferParameteriv, "glGetFramebufferParameteriv"); + set_proc_address(&impl_GetInternalformati64v, "glGetInternalformati64v"); + set_proc_address(&impl_InvalidateTexSubImage, "glInvalidateTexSubImage"); + set_proc_address(&impl_InvalidateTexImage, "glInvalidateTexImage"); + set_proc_address(&impl_InvalidateBufferSubData, "glInvalidateBufferSubData"); + set_proc_address(&impl_InvalidateBufferData, "glInvalidateBufferData"); + set_proc_address(&impl_InvalidateFramebuffer, "glInvalidateFramebuffer"); + set_proc_address(&impl_InvalidateSubFramebuffer, "glInvalidateSubFramebuffer"); + set_proc_address(&impl_MultiDrawArraysIndirect, "glMultiDrawArraysIndirect"); + set_proc_address(&impl_MultiDrawElementsIndirect, "glMultiDrawElementsIndirect"); + set_proc_address(&impl_GetProgramInterfaceiv, "glGetProgramInterfaceiv"); + set_proc_address(&impl_GetProgramResourceIndex, "glGetProgramResourceIndex"); + set_proc_address(&impl_GetProgramResourceName, "glGetProgramResourceName"); + set_proc_address(&impl_GetProgramResourceiv, "glGetProgramResourceiv"); + set_proc_address(&impl_GetProgramResourceLocation, "glGetProgramResourceLocation"); + set_proc_address(&impl_GetProgramResourceLocationIndex, "glGetProgramResourceLocationIndex"); + set_proc_address(&impl_ShaderStorageBlockBinding, "glShaderStorageBlockBinding"); + set_proc_address(&impl_TexBufferRange, "glTexBufferRange"); + set_proc_address(&impl_TexStorage2DMultisample, "glTexStorage2DMultisample"); + set_proc_address(&impl_TexStorage3DMultisample, "glTexStorage3DMultisample"); + set_proc_address(&impl_TextureView, "glTextureView"); + set_proc_address(&impl_BindVertexBuffer, "glBindVertexBuffer"); + set_proc_address(&impl_VertexAttribFormat, "glVertexAttribFormat"); + set_proc_address(&impl_VertexAttribIFormat, "glVertexAttribIFormat"); + set_proc_address(&impl_VertexAttribLFormat, "glVertexAttribLFormat"); + set_proc_address(&impl_VertexAttribBinding, "glVertexAttribBinding"); + set_proc_address(&impl_VertexBindingDivisor, "glVertexBindingDivisor"); + set_proc_address(&impl_DebugMessageControl, "glDebugMessageControl"); + set_proc_address(&impl_DebugMessageInsert, "glDebugMessageInsert"); + set_proc_address(&impl_DebugMessageCallback, "glDebugMessageCallback"); + set_proc_address(&impl_GetDebugMessageLog, "glGetDebugMessageLog"); + set_proc_address(&impl_PushDebugGroup, "glPushDebugGroup"); + set_proc_address(&impl_PopDebugGroup, "glPopDebugGroup"); + set_proc_address(&impl_ObjectLabel, "glObjectLabel"); + set_proc_address(&impl_GetObjectLabel, "glGetObjectLabel"); + set_proc_address(&impl_ObjectPtrLabel, "glObjectPtrLabel"); + set_proc_address(&impl_GetObjectPtrLabel, "glGetObjectPtrLabel"); +} + +// VERSION_4_4 +impl_BufferStorage: proc "c" (target: u32, size: int, data: rawptr, flags: u32); +impl_ClearTexImage: proc "c" (texture: u32, level: i32, format: u32, type: u32, data: rawptr); +impl_ClearTexSubImage: proc "c" (texture: u32, level: i32, xoffset: i32, yoffset: i32, zoffset: i32, width: i32, height: i32, depth: i32, format: u32, type: u32, data: rawptr); +impl_BindBuffersBase: proc "c" (target: u32, first: u32, count: i32, buffers: [^]u32); +impl_BindBuffersRange: proc "c" (target: u32, first: u32, count: i32, buffers: [^]u32, offsets: [^]uintptr, sizes: [^]int); +impl_BindTextures: proc "c" (first: u32, count: i32, textures: [^]u32); +impl_BindSamplers: proc "c" (first: u32, count: i32, samplers: [^]u32); +impl_BindImageTextures: proc "c" (first: u32, count: i32, textures: [^]u32); +impl_BindVertexBuffers: proc "c" (first: u32, count: i32, buffers: [^]u32, offsets: [^]uintptr, strides: [^]i32); + +load_4_4 :: proc(set_proc_address: Set_Proc_Address_Type) { + set_proc_address(&impl_BufferStorage, "glBufferStorage"); + set_proc_address(&impl_ClearTexImage, "glClearTexImage"); + set_proc_address(&impl_ClearTexSubImage, "glClearTexSubImage"); + set_proc_address(&impl_BindBuffersBase, "glBindBuffersBase"); + set_proc_address(&impl_BindBuffersRange, "glBindBuffersRange"); + set_proc_address(&impl_BindTextures, "glBindTextures"); + set_proc_address(&impl_BindSamplers, "glBindSamplers"); + set_proc_address(&impl_BindImageTextures, "glBindImageTextures"); + set_proc_address(&impl_BindVertexBuffers, "glBindVertexBuffers"); +} + +// VERSION_4_5 +impl_ClipControl: proc "c" (origin: u32, depth: u32); +impl_CreateTransformFeedbacks: proc "c" (n: i32, ids: [^]u32); +impl_TransformFeedbackBufferBase: proc "c" (xfb: u32, index: u32, buffer: u32); +impl_TransformFeedbackBufferRange: proc "c" (xfb: u32, index: u32, buffer: u32, offset: int, size: int); +impl_GetTransformFeedbackiv: proc "c" (xfb: u32, pname: u32, param: ^i32); +impl_GetTransformFeedbacki_v: proc "c" (xfb: u32, pname: u32, index: u32, param: ^i32); +impl_GetTransformFeedbacki64_v: proc "c" (xfb: u32, pname: u32, index: u32, param: ^i64); +impl_CreateBuffers: proc "c" (n: i32, buffers: [^]u32); +impl_NamedBufferStorage: proc "c" (buffer: u32, size: int, data: rawptr, flags: u32); +impl_NamedBufferData: proc "c" (buffer: u32, size: int, data: rawptr, usage: u32); +impl_NamedBufferSubData: proc "c" (buffer: u32, offset: int, size: int, data: rawptr); +impl_CopyNamedBufferSubData: proc "c" (readBuffer: u32, writeBuffer: u32, readOffset: int, writeOffset: int, size: int); +impl_ClearNamedBufferData: proc "c" (buffer: u32, internalformat: u32, format: u32, type: u32, data: rawptr); +impl_ClearNamedBufferSubData: proc "c" (buffer: u32, internalformat: u32, offset: int, size: int, format: u32, type: u32, data: rawptr); +impl_MapNamedBuffer: proc "c" (buffer: u32, access: u32) -> rawptr; +impl_MapNamedBufferRange: proc "c" (buffer: u32, offset: int, length: int, access: u32) -> rawptr; +impl_UnmapNamedBuffer: proc "c" (buffer: u32) -> bool; +impl_FlushMappedNamedBufferRange: proc "c" (buffer: u32, offset: int, length: int); +impl_GetNamedBufferParameteriv: proc "c" (buffer: u32, pname: u32, params: [^]i32); +impl_GetNamedBufferParameteri64v: proc "c" (buffer: u32, pname: u32, params: [^]i64); +impl_GetNamedBufferPointerv: proc "c" (buffer: u32, pname: u32, params: [^]rawptr); +impl_GetNamedBufferSubData: proc "c" (buffer: u32, offset: int, size: int, data: rawptr); +impl_CreateFramebuffers: proc "c" (n: i32, framebuffers: [^]u32); +impl_NamedFramebufferRenderbuffer: proc "c" (framebuffer: u32, attachment: u32, renderbuffertarget: u32, renderbuffer: u32); +impl_NamedFramebufferParameteri: proc "c" (framebuffer: u32, pname: u32, param: i32); +impl_NamedFramebufferTexture: proc "c" (framebuffer: u32, attachment: u32, texture: u32, level: i32); +impl_NamedFramebufferTextureLayer: proc "c" (framebuffer: u32, attachment: u32, texture: u32, level: i32, layer: i32); +impl_NamedFramebufferDrawBuffer: proc "c" (framebuffer: u32, buf: u32); +impl_NamedFramebufferDrawBuffers: proc "c" (framebuffer: u32, n: i32, bufs: ^u32); +impl_NamedFramebufferReadBuffer: proc "c" (framebuffer: u32, src: u32); +impl_InvalidateNamedFramebufferData: proc "c" (framebuffer: u32, numAttachments: i32, attachments: ^u32); +impl_InvalidateNamedFramebufferSubData: proc "c" (framebuffer: u32, numAttachments: i32, attachments: ^u32, x: i32, y: i32, width: i32, height: i32); +impl_ClearNamedFramebufferiv: proc "c" (framebuffer: u32, buffer: u32, drawbuffer: i32, value: ^i32); +impl_ClearNamedFramebufferuiv: proc "c" (framebuffer: u32, buffer: u32, drawbuffer: i32, value: ^u32); +impl_ClearNamedFramebufferfv: proc "c" (framebuffer: u32, buffer: u32, drawbuffer: i32, value: ^f32); +impl_ClearNamedFramebufferfi: proc "c" (framebuffer: u32, buffer: u32, drawbuffer: i32, depth: f32, stencil: i32); +impl_BlitNamedFramebuffer: proc "c" (readFramebuffer: u32, drawFramebuffer: u32, srcX0: i32, srcY0: i32, srcX1: i32, srcY1: i32, dstX0: i32, dstY0: i32, dstX1: i32, dstY1: i32, mask: u32, filter: u32); +impl_CheckNamedFramebufferStatus: proc "c" (framebuffer: u32, target: u32) -> u32; +impl_GetNamedFramebufferParameteriv: proc "c" (framebuffer: u32, pname: u32, param: ^i32); +impl_GetNamedFramebufferAttachmentParameteriv: proc "c" (framebuffer: u32, attachment: u32, pname: u32, params: [^]i32); +impl_CreateRenderbuffers: proc "c" (n: i32, renderbuffers: [^]u32); +impl_NamedRenderbufferStorage: proc "c" (renderbuffer: u32, internalformat: u32, width: i32, height: i32); +impl_NamedRenderbufferStorageMultisample: proc "c" (renderbuffer: u32, samples: i32, internalformat: u32, width: i32, height: i32); +impl_GetNamedRenderbufferParameteriv: proc "c" (renderbuffer: u32, pname: u32, params: [^]i32); +impl_CreateTextures: proc "c" (target: u32, n: i32, textures: [^]u32); +impl_TextureBuffer: proc "c" (texture: u32, internalformat: u32, buffer: u32); +impl_TextureBufferRange: proc "c" (texture: u32, internalformat: u32, buffer: u32, offset: int, size: int); +impl_TextureStorage1D: proc "c" (texture: u32, levels: i32, internalformat: u32, width: i32); +impl_TextureStorage2D: proc "c" (texture: u32, levels: i32, internalformat: u32, width: i32, height: i32); +impl_TextureStorage3D: proc "c" (texture: u32, levels: i32, internalformat: u32, width: i32, height: i32, depth: i32); +impl_TextureStorage2DMultisample: proc "c" (texture: u32, samples: i32, internalformat: u32, width: i32, height: i32, fixedsamplelocations: u8); +impl_TextureStorage3DMultisample: proc "c" (texture: u32, samples: i32, internalformat: u32, width: i32, height: i32, depth: i32, fixedsamplelocations: u8); +impl_TextureSubImage1D: proc "c" (texture: u32, level: i32, xoffset: i32, width: i32, format: u32, type: u32, pixels: rawptr); +impl_TextureSubImage2D: proc "c" (texture: u32, level: i32, xoffset: i32, yoffset: i32, width: i32, height: i32, format: u32, type: u32, pixels: rawptr); +impl_TextureSubImage3D: proc "c" (texture: u32, level: i32, xoffset: i32, yoffset: i32, zoffset: i32, width: i32, height: i32, depth: i32, format: u32, type: u32, pixels: rawptr); +impl_CompressedTextureSubImage1D: proc "c" (texture: u32, level: i32, xoffset: i32, width: i32, format: u32, imageSize: i32, data: rawptr); +impl_CompressedTextureSubImage2D: proc "c" (texture: u32, level: i32, xoffset: i32, yoffset: i32, width: i32, height: i32, format: u32, imageSize: i32, data: rawptr); +impl_CompressedTextureSubImage3D: proc "c" (texture: u32, level: i32, xoffset: i32, yoffset: i32, zoffset: i32, width: i32, height: i32, depth: i32, format: u32, imageSize: i32, data: rawptr); +impl_CopyTextureSubImage1D: proc "c" (texture: u32, level: i32, xoffset: i32, x: i32, y: i32, width: i32); +impl_CopyTextureSubImage2D: proc "c" (texture: u32, level: i32, xoffset: i32, yoffset: i32, x: i32, y: i32, width: i32, height: i32); +impl_CopyTextureSubImage3D: proc "c" (texture: u32, level: i32, xoffset: i32, yoffset: i32, zoffset: i32, x: i32, y: i32, width: i32, height: i32); +impl_TextureParameterf: proc "c" (texture: u32, pname: u32, param: f32); +impl_TextureParameterfv: proc "c" (texture: u32, pname: u32, param: ^f32); +impl_TextureParameteri: proc "c" (texture: u32, pname: u32, param: i32); +impl_TextureParameterIiv: proc "c" (texture: u32, pname: u32, params: [^]i32); +impl_TextureParameterIuiv: proc "c" (texture: u32, pname: u32, params: [^]u32); +impl_TextureParameteriv: proc "c" (texture: u32, pname: u32, param: ^i32); +impl_GenerateTextureMipmap: proc "c" (texture: u32); +impl_BindTextureUnit: proc "c" (unit: u32, texture: u32); +impl_GetTextureImage: proc "c" (texture: u32, level: i32, format: u32, type: u32, bufSize: i32, pixels: rawptr); +impl_GetCompressedTextureImage: proc "c" (texture: u32, level: i32, bufSize: i32, pixels: rawptr); +impl_GetTextureLevelParameterfv: proc "c" (texture: u32, level: i32, pname: u32, params: [^]f32); +impl_GetTextureLevelParameteriv: proc "c" (texture: u32, level: i32, pname: u32, params: [^]i32); +impl_GetTextureParameterfv: proc "c" (texture: u32, pname: u32, params: [^]f32); +impl_GetTextureParameterIiv: proc "c" (texture: u32, pname: u32, params: [^]i32); +impl_GetTextureParameterIuiv: proc "c" (texture: u32, pname: u32, params: [^]u32); +impl_GetTextureParameteriv: proc "c" (texture: u32, pname: u32, params: [^]i32); +impl_CreateVertexArrays: proc "c" (n: i32, arrays: [^]u32); +impl_DisableVertexArrayAttrib: proc "c" (vaobj: u32, index: u32); +impl_EnableVertexArrayAttrib: proc "c" (vaobj: u32, index: u32); +impl_VertexArrayElementBuffer: proc "c" (vaobj: u32, buffer: u32); +impl_VertexArrayVertexBuffer: proc "c" (vaobj: u32, bindingindex: u32, buffer: u32, offset: int, stride: i32); +impl_VertexArrayVertexBuffers: proc "c" (vaobj: u32, first: u32, count: i32, buffers: [^]u32, offsets: [^]uintptr, strides: [^]i32); +impl_VertexArrayAttribBinding: proc "c" (vaobj: u32, attribindex: u32, bindingindex: u32); +impl_VertexArrayAttribFormat: proc "c" (vaobj: u32, attribindex: u32, size: i32, type: u32, normalized: bool, relativeoffset: u32); +impl_VertexArrayAttribIFormat: proc "c" (vaobj: u32, attribindex: u32, size: i32, type: u32, relativeoffset: u32); +impl_VertexArrayAttribLFormat: proc "c" (vaobj: u32, attribindex: u32, size: i32, type: u32, relativeoffset: u32); +impl_VertexArrayBindingDivisor: proc "c" (vaobj: u32, bindingindex: u32, divisor: u32); +impl_GetVertexArrayiv: proc "c" (vaobj: u32, pname: u32, param: ^i32); +impl_GetVertexArrayIndexediv: proc "c" (vaobj: u32, index: u32, pname: u32, param: ^i32); +impl_GetVertexArrayIndexed64iv: proc "c" (vaobj: u32, index: u32, pname: u32, param: ^i64); +impl_CreateSamplers: proc "c" (n: i32, samplers: [^]u32); +impl_CreateProgramPipelines: proc "c" (n: i32, pipelines: [^]u32); +impl_CreateQueries: proc "c" (target: u32, n: i32, ids: [^]u32); +impl_GetQueryBufferObjecti64v: proc "c" (id: u32, buffer: u32, pname: u32, offset: int); +impl_GetQueryBufferObjectiv: proc "c" (id: u32, buffer: u32, pname: u32, offset: int); +impl_GetQueryBufferObjectui64v: proc "c" (id: u32, buffer: u32, pname: u32, offset: int); +impl_GetQueryBufferObjectuiv: proc "c" (id: u32, buffer: u32, pname: u32, offset: int); +impl_MemoryBarrierByRegion: proc "c" (barriers: u32); +impl_GetTextureSubImage: proc "c" (texture: u32, level: i32, xoffset: i32, yoffset: i32, zoffset: i32, width: i32, height: i32, depth: i32, format: u32, type: u32, bufSize: i32, pixels: rawptr); +impl_GetCompressedTextureSubImage: proc "c" (texture: u32, level: i32, xoffset: i32, yoffset: i32, zoffset: i32, width: i32, height: i32, depth: i32, bufSize: i32, pixels: rawptr); +impl_GetGraphicsResetStatus: proc "c" () -> u32; +impl_GetnCompressedTexImage: proc "c" (target: u32, lod: i32, bufSize: i32, pixels: rawptr); +impl_GetnTexImage: proc "c" (target: u32, level: i32, format: u32, type: u32, bufSize: i32, pixels: rawptr); +impl_GetnUniformdv: proc "c" (program: u32, location: i32, bufSize: i32, params: [^]f64); +impl_GetnUniformfv: proc "c" (program: u32, location: i32, bufSize: i32, params: [^]f32); +impl_GetnUniformiv: proc "c" (program: u32, location: i32, bufSize: i32, params: [^]i32); +impl_GetnUniformuiv: proc "c" (program: u32, location: i32, bufSize: i32, params: [^]u32); +impl_ReadnPixels: proc "c" (x: i32, y: i32, width: i32, height: i32, format: u32, type: u32, bufSize: i32, data: rawptr); +impl_GetnMapdv: proc "c" (target: u32, query: u32, bufSize: i32, v: ^f64); +impl_GetnMapfv: proc "c" (target: u32, query: u32, bufSize: i32, v: ^f32); +impl_GetnMapiv: proc "c" (target: u32, query: u32, bufSize: i32, v: ^i32); +impl_GetnPixelMapusv: proc "c" (map_: u32, bufSize: i32, values: ^u16); +impl_GetnPixelMapfv: proc "c" (map_: u32, bufSize: i32, values: ^f32); +impl_GetnPixelMapuiv: proc "c" (map_: u32, bufSize: i32, values: ^u32); +impl_GetnPolygonStipple: proc "c" (bufSize: i32, pattern: ^u8); +impl_GetnColorTable: proc "c" (target: u32, format: u32, type: u32, bufSize: i32, table: rawptr); +impl_GetnConvolutionFilter: proc "c" (target: u32, format: u32, type: u32, bufSize: i32, image: rawptr); +impl_GetnSeparableFilter: proc "c" (target: u32, format: u32, type: u32, rowBufSize: i32, row: rawptr, columnBufSize: i32, column: rawptr, span: rawptr); +impl_GetnHistogram: proc "c" (target: u32, reset: u8, format: u32, type: u32, bufSize: i32, values: rawptr); +impl_GetnMinmax: proc "c" (target: u32, reset: u8, format: u32, type: u32, bufSize: i32, values: rawptr); +impl_TextureBarrier: proc "c" (); +impl_glGetUnsignedBytevEXT: proc "c" (pname: u32, data: ^byte); +impl_TexPageCommitmentARB: proc "c"(target: u32, + level: i32, + xoffset: i32, + yoffset: i32, + zoffset: i32, + width: i32, + height: i32, + depth: i32, + commit: bool); + +load_4_5 :: proc(set_proc_address: Set_Proc_Address_Type) { + set_proc_address(&impl_ClipControl, "glClipControl"); + set_proc_address(&impl_CreateTransformFeedbacks, "glCreateTransformFeedbacks"); + set_proc_address(&impl_TransformFeedbackBufferBase, "glTransformFeedbackBufferBase"); + set_proc_address(&impl_TransformFeedbackBufferRange, "glTransformFeedbackBufferRange"); + set_proc_address(&impl_GetTransformFeedbackiv, "glGetTransformFeedbackiv"); + set_proc_address(&impl_GetTransformFeedbacki_v, "glGetTransformFeedbacki_v"); + set_proc_address(&impl_GetTransformFeedbacki64_v, "glGetTransformFeedbacki64_v"); + set_proc_address(&impl_CreateBuffers, "glCreateBuffers"); + set_proc_address(&impl_NamedBufferStorage, "glNamedBufferStorage"); + set_proc_address(&impl_NamedBufferData, "glNamedBufferData"); + set_proc_address(&impl_NamedBufferSubData, "glNamedBufferSubData"); + set_proc_address(&impl_CopyNamedBufferSubData, "glCopyNamedBufferSubData"); + set_proc_address(&impl_ClearNamedBufferData, "glClearNamedBufferData"); + set_proc_address(&impl_ClearNamedBufferSubData, "glClearNamedBufferSubData"); + set_proc_address(&impl_MapNamedBuffer, "glMapNamedBuffer"); + set_proc_address(&impl_MapNamedBufferRange, "glMapNamedBufferRange"); + set_proc_address(&impl_UnmapNamedBuffer, "glUnmapNamedBuffer"); + set_proc_address(&impl_FlushMappedNamedBufferRange, "glFlushMappedNamedBufferRange"); + set_proc_address(&impl_GetNamedBufferParameteriv, "glGetNamedBufferParameteriv"); + set_proc_address(&impl_GetNamedBufferParameteri64v, "glGetNamedBufferParameteri64v"); + set_proc_address(&impl_GetNamedBufferPointerv, "glGetNamedBufferPointerv"); + set_proc_address(&impl_GetNamedBufferSubData, "glGetNamedBufferSubData"); + set_proc_address(&impl_CreateFramebuffers, "glCreateFramebuffers"); + set_proc_address(&impl_NamedFramebufferRenderbuffer, "glNamedFramebufferRenderbuffer"); + set_proc_address(&impl_NamedFramebufferParameteri, "glNamedFramebufferParameteri"); + set_proc_address(&impl_NamedFramebufferTexture, "glNamedFramebufferTexture"); + set_proc_address(&impl_NamedFramebufferTextureLayer, "glNamedFramebufferTextureLayer"); + set_proc_address(&impl_NamedFramebufferDrawBuffer, "glNamedFramebufferDrawBuffer"); + set_proc_address(&impl_NamedFramebufferDrawBuffers, "glNamedFramebufferDrawBuffers"); + set_proc_address(&impl_NamedFramebufferReadBuffer, "glNamedFramebufferReadBuffer"); + set_proc_address(&impl_InvalidateNamedFramebufferData, "glInvalidateNamedFramebufferData"); + set_proc_address(&impl_InvalidateNamedFramebufferSubData, "glInvalidateNamedFramebufferSubData"); + set_proc_address(&impl_ClearNamedFramebufferiv, "glClearNamedFramebufferiv"); + set_proc_address(&impl_ClearNamedFramebufferuiv, "glClearNamedFramebufferuiv"); + set_proc_address(&impl_ClearNamedFramebufferfv, "glClearNamedFramebufferfv"); + set_proc_address(&impl_ClearNamedFramebufferfi, "glClearNamedFramebufferfi"); + set_proc_address(&impl_BlitNamedFramebuffer, "glBlitNamedFramebuffer"); + set_proc_address(&impl_CheckNamedFramebufferStatus, "glCheckNamedFramebufferStatus"); + set_proc_address(&impl_GetNamedFramebufferParameteriv, "glGetNamedFramebufferParameteriv"); + set_proc_address(&impl_GetNamedFramebufferAttachmentParameteriv, "glGetNamedFramebufferAttachmentParameteriv"); + set_proc_address(&impl_CreateRenderbuffers, "glCreateRenderbuffers"); + set_proc_address(&impl_NamedRenderbufferStorage, "glNamedRenderbufferStorage"); + set_proc_address(&impl_NamedRenderbufferStorageMultisample, "glNamedRenderbufferStorageMultisample"); + set_proc_address(&impl_GetNamedRenderbufferParameteriv, "glGetNamedRenderbufferParameteriv"); + set_proc_address(&impl_CreateTextures, "glCreateTextures"); + set_proc_address(&impl_TextureBuffer, "glTextureBuffer"); + set_proc_address(&impl_TextureBufferRange, "glTextureBufferRange"); + set_proc_address(&impl_TextureStorage1D, "glTextureStorage1D"); + set_proc_address(&impl_TextureStorage2D, "glTextureStorage2D"); + set_proc_address(&impl_TextureStorage3D, "glTextureStorage3D"); + set_proc_address(&impl_TextureStorage2DMultisample, "glTextureStorage2DMultisample"); + set_proc_address(&impl_TextureStorage3DMultisample, "glTextureStorage3DMultisample"); + set_proc_address(&impl_TextureSubImage1D, "glTextureSubImage1D"); + set_proc_address(&impl_TextureSubImage2D, "glTextureSubImage2D"); + set_proc_address(&impl_TextureSubImage3D, "glTextureSubImage3D"); + set_proc_address(&impl_CompressedTextureSubImage1D, "glCompressedTextureSubImage1D"); + set_proc_address(&impl_CompressedTextureSubImage2D, "glCompressedTextureSubImage2D"); + set_proc_address(&impl_CompressedTextureSubImage3D, "glCompressedTextureSubImage3D"); + set_proc_address(&impl_CopyTextureSubImage1D, "glCopyTextureSubImage1D"); + set_proc_address(&impl_CopyTextureSubImage2D, "glCopyTextureSubImage2D"); + set_proc_address(&impl_CopyTextureSubImage3D, "glCopyTextureSubImage3D"); + set_proc_address(&impl_TextureParameterf, "glTextureParameterf"); + set_proc_address(&impl_TextureParameterfv, "glTextureParameterfv"); + set_proc_address(&impl_TextureParameteri, "glTextureParameteri"); + set_proc_address(&impl_TextureParameterIiv, "glTextureParameterIiv"); + set_proc_address(&impl_TextureParameterIuiv, "glTextureParameterIuiv"); + set_proc_address(&impl_TextureParameteriv, "glTextureParameteriv"); + set_proc_address(&impl_GenerateTextureMipmap, "glGenerateTextureMipmap"); + set_proc_address(&impl_BindTextureUnit, "glBindTextureUnit"); + set_proc_address(&impl_GetTextureImage, "glGetTextureImage"); + set_proc_address(&impl_GetCompressedTextureImage, "glGetCompressedTextureImage"); + set_proc_address(&impl_GetTextureLevelParameterfv, "glGetTextureLevelParameterfv"); + set_proc_address(&impl_GetTextureLevelParameteriv, "glGetTextureLevelParameteriv"); + set_proc_address(&impl_GetTextureParameterfv, "glGetTextureParameterfv"); + set_proc_address(&impl_GetTextureParameterIiv, "glGetTextureParameterIiv"); + set_proc_address(&impl_GetTextureParameterIuiv, "glGetTextureParameterIuiv"); + set_proc_address(&impl_GetTextureParameteriv, "glGetTextureParameteriv"); + set_proc_address(&impl_CreateVertexArrays, "glCreateVertexArrays"); + set_proc_address(&impl_DisableVertexArrayAttrib, "glDisableVertexArrayAttrib"); + set_proc_address(&impl_EnableVertexArrayAttrib, "glEnableVertexArrayAttrib"); + set_proc_address(&impl_VertexArrayElementBuffer, "glVertexArrayElementBuffer"); + set_proc_address(&impl_VertexArrayVertexBuffer, "glVertexArrayVertexBuffer"); + set_proc_address(&impl_VertexArrayVertexBuffers, "glVertexArrayVertexBuffers"); + set_proc_address(&impl_VertexArrayAttribBinding, "glVertexArrayAttribBinding"); + set_proc_address(&impl_VertexArrayAttribFormat, "glVertexArrayAttribFormat"); + set_proc_address(&impl_VertexArrayAttribIFormat, "glVertexArrayAttribIFormat"); + set_proc_address(&impl_VertexArrayAttribLFormat, "glVertexArrayAttribLFormat"); + set_proc_address(&impl_VertexArrayBindingDivisor, "glVertexArrayBindingDivisor"); + set_proc_address(&impl_GetVertexArrayiv, "glGetVertexArrayiv"); + set_proc_address(&impl_GetVertexArrayIndexediv, "glGetVertexArrayIndexediv"); + set_proc_address(&impl_GetVertexArrayIndexed64iv, "glGetVertexArrayIndexed64iv"); + set_proc_address(&impl_CreateSamplers, "glCreateSamplers"); + set_proc_address(&impl_CreateProgramPipelines, "glCreateProgramPipelines"); + set_proc_address(&impl_CreateQueries, "glCreateQueries"); + set_proc_address(&impl_GetQueryBufferObjecti64v, "glGetQueryBufferObjecti64v"); + set_proc_address(&impl_GetQueryBufferObjectiv, "glGetQueryBufferObjectiv"); + set_proc_address(&impl_GetQueryBufferObjectui64v, "glGetQueryBufferObjectui64v"); + set_proc_address(&impl_GetQueryBufferObjectuiv, "glGetQueryBufferObjectuiv"); + set_proc_address(&impl_MemoryBarrierByRegion, "glMemoryBarrierByRegion"); + set_proc_address(&impl_GetTextureSubImage, "glGetTextureSubImage"); + set_proc_address(&impl_GetCompressedTextureSubImage, "glGetCompressedTextureSubImage"); + set_proc_address(&impl_GetGraphicsResetStatus, "glGetGraphicsResetStatus"); + set_proc_address(&impl_GetnCompressedTexImage, "glGetnCompressedTexImage"); + set_proc_address(&impl_GetnTexImage, "glGetnTexImage"); + set_proc_address(&impl_GetnUniformdv, "glGetnUniformdv"); + set_proc_address(&impl_GetnUniformfv, "glGetnUniformfv"); + set_proc_address(&impl_GetnUniformiv, "glGetnUniformiv"); + set_proc_address(&impl_GetnUniformuiv, "glGetnUniformuiv"); + set_proc_address(&impl_ReadnPixels, "glReadnPixels"); + set_proc_address(&impl_GetnMapdv, "glGetnMapdv"); + set_proc_address(&impl_GetnMapfv, "glGetnMapfv"); + set_proc_address(&impl_GetnMapiv, "glGetnMapiv"); + set_proc_address(&impl_GetnPixelMapfv, "glGetnPixelMapfv"); + set_proc_address(&impl_GetnPixelMapuiv, "glGetnPixelMapuiv"); + set_proc_address(&impl_GetnPixelMapusv, "glGetnPixelMapusv"); + set_proc_address(&impl_GetnPolygonStipple, "glGetnPolygonStipple"); + set_proc_address(&impl_GetnColorTable, "glGetnColorTable"); + set_proc_address(&impl_GetnConvolutionFilter, "glGetnConvolutionFilter"); + set_proc_address(&impl_GetnSeparableFilter, "glGetnSeparableFilter"); + set_proc_address(&impl_GetnHistogram, "glGetnHistogram"); + set_proc_address(&impl_GetnMinmax, "glGetnMinmax"); + set_proc_address(&impl_TextureBarrier, "glTextureBarrier"); + set_proc_address(&impl_glGetUnsignedBytevEXT, "glGetUnsignedBytevEXT"); + set_proc_address(&impl_TexPageCommitmentARB, "glTexPageCommitmentARB"); +} + + +// VERSION_4_6 +impl_SpecializeShader: proc "c" (shader: u32, pEntryPoint: ^u8, numSpecializationConstants: u32, pConstantIndex: ^u32, pConstantValue: ^u32); +impl_MultiDrawArraysIndirectCount: proc "c" (mode: i32, indirect: rawptr, drawcount: int, maxdrawcount, stride: i32); +impl_MultiDrawElementsIndirectCount: proc "c" (mode: i32, type: i32, indirect: rawptr, drawcount: int, maxdrawcount, stride: i32); +impl_PolygonOffsetClamp: proc "c" (factor, units, clamp: f32); + +load_4_6 :: proc(set_proc_address: Set_Proc_Address_Type) { + set_proc_address(&impl_SpecializeShader, "glSpecializeShader"); + set_proc_address(&impl_MultiDrawArraysIndirectCount, "glMultiDrawArraysIndirectCount"); + set_proc_address(&impl_MultiDrawElementsIndirectCount, "glMultiDrawElementsIndirectCount"); + set_proc_address(&impl_PolygonOffsetClamp, "glPolygonOffsetClamp"); +} + +init :: proc(set_proc_address: Set_Proc_Address_Type) { + // Placeholder for loading maximum supported version +} + + diff --git a/vendor/OpenGL/wrappers.odin b/vendor/OpenGL/wrappers.odin new file mode 100644 index 000000000..df7e8432f --- /dev/null +++ b/vendor/OpenGL/wrappers.odin @@ -0,0 +1,1567 @@ +package odin_gl + +when !ODIN_DEBUG { + // VERSION_1_0 + CullFace :: #force_inline proc "c" (mode: u32) { impl_CullFace(mode); } + FrontFace :: #force_inline proc "c" (mode: u32) { impl_FrontFace(mode); } + Hint :: #force_inline proc "c" (target, mode: u32) { impl_Hint(target, mode); } + LineWidth :: #force_inline proc "c" (width: f32) { impl_LineWidth(width); } + PointSize :: #force_inline proc "c" (size: f32) { impl_PointSize(size); } + PolygonMode :: #force_inline proc "c" (face, mode: u32) { impl_PolygonMode(face, mode); } + Scissor :: #force_inline proc "c" (x, y, width, height: i32) { impl_Scissor(x, y, width, height); } + TexParameterf :: #force_inline proc "c" (target, pname: u32, param: f32) { impl_TexParameterf(target, pname, param); } + TexParameterfv :: #force_inline proc "c" (target, pname: u32, params: [^]f32) { impl_TexParameterfv(target, pname, params); } + TexParameteri :: #force_inline proc "c" (target, pname: u32, param: i32) { impl_TexParameteri(target, pname, param); } + TexParameteriv :: #force_inline proc "c" (target, pname: u32, params: [^]i32) { impl_TexParameteriv(target, pname, params); } + TexImage1D :: #force_inline proc "c" (target: u32, level, internalformat, width, border: i32, format, type: u32, pixels: rawptr) { impl_TexImage1D(target, level, internalformat, width, border, format, type, pixels); } + TexImage2D :: #force_inline proc "c" (target: u32, level, internalformat, width, height, border: i32, format, type: u32, pixels: rawptr) { impl_TexImage2D(target, level, internalformat, width, height, border, format, type, pixels); } + DrawBuffer :: #force_inline proc "c" (buf: u32) { impl_DrawBuffer(buf); } + Clear :: #force_inline proc "c" (mask: u32) { impl_Clear(mask); } + ClearColor :: #force_inline proc "c" (red, green, blue, alpha: f32) { impl_ClearColor(red, green, blue, alpha); } + ClearStencil :: #force_inline proc "c" (s: i32) { impl_ClearStencil(s); } + ClearDepth :: #force_inline proc "c" (depth: f64) { impl_ClearDepth(depth); } + StencilMask :: #force_inline proc "c" (mask: u32) { impl_StencilMask(mask); } + ColorMask :: #force_inline proc "c" (red, green, blue, alpha: u8) { impl_ColorMask(red, green, blue, alpha); } + DepthMask :: #force_inline proc "c" (flag: u8) { impl_DepthMask(flag); } + Disable :: #force_inline proc "c" (cap: u32) { impl_Disable(cap); } + Enable :: #force_inline proc "c" (cap: u32) { impl_Enable(cap); } + Finish :: #force_inline proc "c" () { impl_Finish(); } + Flush :: #force_inline proc "c" () { impl_Flush(); } + BlendFunc :: #force_inline proc "c" (sfactor, dfactor: u32) { impl_BlendFunc(sfactor, dfactor); } + LogicOp :: #force_inline proc "c" (opcode: u32) { impl_LogicOp(opcode); } + StencilFunc :: #force_inline proc "c" (func: u32, ref: i32, mask: u32) { impl_StencilFunc(func, ref, mask); } + StencilOp :: #force_inline proc "c" (fail, zfail, zpass: u32) { impl_StencilOp(fail, zfail, zpass); } + DepthFunc :: #force_inline proc "c" (func: u32) { impl_DepthFunc(func); } + PixelStoref :: #force_inline proc "c" (pname: u32, param: f32) { impl_PixelStoref(pname, param); } + PixelStorei :: #force_inline proc "c" (pname: u32, param: i32) { impl_PixelStorei(pname, param); } + ReadBuffer :: #force_inline proc "c" (src: u32) { impl_ReadBuffer(src); } + ReadPixels :: #force_inline proc "c" (x, y, width, height: i32, format, type: u32, pixels: rawptr) { impl_ReadPixels(x, y, width, height, format, type, pixels); } + GetBooleanv :: #force_inline proc "c" (pname: u32, data: ^bool) { impl_GetBooleanv(pname, data); } + GetDoublev :: #force_inline proc "c" (pname: u32, data: ^f64) { impl_GetDoublev(pname, data); } + GetError :: #force_inline proc "c" () -> u32 { return impl_GetError(); } + GetFloatv :: #force_inline proc "c" (pname: u32, data: ^f32) { impl_GetFloatv(pname, data); } + GetIntegerv :: #force_inline proc "c" (pname: u32, data: ^i32) { impl_GetIntegerv(pname, data); } + GetString :: #force_inline proc "c" (name: u32) -> cstring { return impl_GetString(name); } + GetTexImage :: #force_inline proc "c" (target: u32, level: i32, format, type: u32, pixels: rawptr) { impl_GetTexImage(target, level, format, type, pixels); } + GetTexParameterfv :: #force_inline proc "c" (target, pname: u32, params: [^]f32) { impl_GetTexParameterfv(target, pname, params); } + GetTexParameteriv :: #force_inline proc "c" (target, pname: u32, params: [^]i32) { impl_GetTexParameteriv(target, pname, params); } + GetTexLevelParameterfv :: #force_inline proc "c" (target: u32, level: i32, pname: u32, params: [^]f32) { impl_GetTexLevelParameterfv(target, level, pname, params); } + GetTexLevelParameteriv :: #force_inline proc "c" (target: u32, level: i32, pname: u32, params: [^]i32) { impl_GetTexLevelParameteriv(target, level, pname, params); } + IsEnabled :: #force_inline proc "c" (cap: u32) -> bool { return impl_IsEnabled(cap); } + DepthRange :: #force_inline proc "c" (near, far: f64) { impl_DepthRange(near, far); } + Viewport :: #force_inline proc "c" (x, y, width, height: i32) { impl_Viewport(x, y, width, height); } + + // VERSION_1_1 + DrawArrays :: #force_inline proc "c" (mode: u32, first: i32, count: i32) { impl_DrawArrays(mode, first, count); } + DrawElements :: #force_inline proc "c" (mode: u32, count: i32, type: u32, indices: rawptr) { impl_DrawElements(mode, count, type, indices); } + PolygonOffset :: #force_inline proc "c" (factor: f32, units: f32) { impl_PolygonOffset(factor, units); } + CopyTexImage1D :: #force_inline proc "c" (target: u32, level: i32, internalformat: u32, x: i32, y: i32, width: i32, border: i32) { impl_CopyTexImage1D(target, level, internalformat, x, y, width, border); } + CopyTexImage2D :: #force_inline proc "c" (target: u32, level: i32, internalformat: u32, x: i32, y: i32, width: i32, height: i32, border: i32) { impl_CopyTexImage2D(target, level, internalformat, x, y, width, height, border); } + CopyTexSubImage1D :: #force_inline proc "c" (target: u32, level: i32, xoffset: i32, x: i32, y: i32, width: i32) { impl_CopyTexSubImage1D(target, level, xoffset, x, y, width); } + CopyTexSubImage2D :: #force_inline proc "c" (target: u32, level: i32, xoffset: i32, yoffset: i32, x: i32, y: i32, width: i32, height: i32) { impl_CopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); } + TexSubImage1D :: #force_inline proc "c" (target: u32, level: i32, xoffset: i32, width: i32, format: u32, type: u32, pixels: rawptr) { impl_TexSubImage1D(target, level, xoffset, width, format, type, pixels); } + TexSubImage2D :: #force_inline proc "c" (target: u32, level: i32, xoffset: i32, yoffset: i32, width: i32, height: i32, format: u32, type: u32, pixels: rawptr) { impl_TexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels); } + BindTexture :: #force_inline proc "c" (target: u32, texture: u32) { impl_BindTexture(target, texture); } + DeleteTextures :: #force_inline proc "c" (n: i32, textures: [^]u32) { impl_DeleteTextures(n, textures); } + GenTextures :: #force_inline proc "c" (n: i32, textures: [^]u32) { impl_GenTextures(n, textures); } + IsTexture :: #force_inline proc "c" (texture: u32) -> bool { return impl_IsTexture(texture); } + + // VERSION_1_2 + DrawRangeElements :: #force_inline proc "c" (mode, start, end: u32, count: i32, type: u32, indices: rawptr) { impl_DrawRangeElements(mode, start, end, count, type, indices); } + TexImage3D :: #force_inline proc "c" (target: u32, level, internalformat, width, height, depth, border: i32, format, type: u32, pixels: rawptr) { impl_TexImage3D(target, level, internalformat, width, height, depth, border, format, type, pixels); } + TexSubImage3D :: #force_inline proc "c" (target: u32, level, xoffset, yoffset, zoffset, width, height, depth: i32, format, type: u32, pixels: rawptr) { impl_TexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels); } + CopyTexSubImage3D :: #force_inline proc "c" (target: u32, level, xoffset, yoffset, zoffset, x, y, width, height: i32) { impl_CopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height); } + + // VERSION_1_3 + ActiveTexture :: #force_inline proc "c" (texture: u32) { impl_ActiveTexture(texture); } + SampleCoverage :: #force_inline proc "c" (value: f32, invert: u8) { impl_SampleCoverage(value, invert); } + CompressedTexImage3D :: #force_inline proc "c" (target: u32, level: i32, internalformat: u32, width: i32, height: i32, depth: i32, border: i32, imageSize: i32, data: rawptr) { impl_CompressedTexImage3D(target, level, internalformat, width, height, depth, border, imageSize, data); } + CompressedTexImage2D :: #force_inline proc "c" (target: u32, level: i32, internalformat: u32, width: i32, height: i32, border: i32, imageSize: i32, data: rawptr) { impl_CompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data); } + CompressedTexImage1D :: #force_inline proc "c" (target: u32, level: i32, internalformat: u32, width: i32, border: i32, imageSize: i32, data: rawptr) { impl_CompressedTexImage1D(target, level, internalformat, width, border, imageSize, data); } + CompressedTexSubImage3D :: #force_inline proc "c" (target: u32, level: i32, xoffset: i32, yoffset: i32, zoffset: i32, width: i32, height: i32, depth: i32, format: u32, imageSize: i32, data: rawptr) { impl_CompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data); } + CompressedTexSubImage2D :: #force_inline proc "c" (target: u32, level: i32, xoffset: i32, yoffset: i32, width: i32, height: i32, format: u32, imageSize: i32, data: rawptr) { impl_CompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data); } + CompressedTexSubImage1D :: #force_inline proc "c" (target: u32, level: i32, xoffset: i32, width: i32, format: u32, imageSize: i32, data: rawptr) { impl_CompressedTexSubImage1D(target, level, xoffset, width, format, imageSize, data); } + GetCompressedTexImage :: #force_inline proc "c" (target: u32, level: i32, img: rawptr) { impl_GetCompressedTexImage(target, level, img); } + + // VERSION_1_4 + BlendFuncSeparate :: #force_inline proc "c" (sfactorRGB: u32, dfactorRGB: u32, sfactorAlpha: u32, dfactorAlpha: u32) { impl_BlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha); } + MultiDrawArrays :: #force_inline proc "c" (mode: u32, first: [^]i32, count: [^]i32, drawcount: i32) { impl_MultiDrawArrays(mode, first, count, drawcount); } + MultiDrawElements :: #force_inline proc "c" (mode: u32, count: [^]i32, type: u32, indices: [^]rawptr, drawcount: i32) { impl_MultiDrawElements(mode, count, type, indices, drawcount); } + PointParameterf :: #force_inline proc "c" (pname: u32, param: f32) { impl_PointParameterf(pname, param); } + PointParameterfv :: #force_inline proc "c" (pname: u32, params: [^]f32) { impl_PointParameterfv(pname, params); } + PointParameteri :: #force_inline proc "c" (pname: u32, param: i32) { impl_PointParameteri(pname, param); } + PointParameteriv :: #force_inline proc "c" (pname: u32, params: [^]i32) { impl_PointParameteriv(pname, params); } + BlendColor :: #force_inline proc "c" (red: f32, green: f32, blue: f32, alpha: f32) { impl_BlendColor(red, green, blue, alpha); } + BlendEquation :: #force_inline proc "c" (mode: u32) { impl_BlendEquation(mode); } + + // VERSION_1_5 + GenQueries :: #force_inline proc "c" (n: i32, ids: [^]u32) { impl_GenQueries(n, ids); } + DeleteQueries :: #force_inline proc "c" (n: i32, ids: [^]u32) { impl_DeleteQueries(n, ids); } + IsQuery :: #force_inline proc "c" (id: u32) -> bool { ret := impl_IsQuery(id); return ret; } + BeginQuery :: #force_inline proc "c" (target: u32, id: u32) { impl_BeginQuery(target, id); } + EndQuery :: #force_inline proc "c" (target: u32) { impl_EndQuery(target); } + GetQueryiv :: #force_inline proc "c" (target: u32, pname: u32, params: [^]i32) { impl_GetQueryiv(target, pname, params); } + GetQueryObjectiv :: #force_inline proc "c" (id: u32, pname: u32, params: [^]i32) { impl_GetQueryObjectiv(id, pname, params); } + GetQueryObjectuiv :: #force_inline proc "c" (id: u32, pname: u32, params: [^]u32) { impl_GetQueryObjectuiv(id, pname, params); } + BindBuffer :: #force_inline proc "c" (target: u32, buffer: u32) { impl_BindBuffer(target, buffer); } + DeleteBuffers :: #force_inline proc "c" (n: i32, buffers: [^]u32) { impl_DeleteBuffers(n, buffers); } + GenBuffers :: #force_inline proc "c" (n: i32, buffers: [^]u32) { impl_GenBuffers(n, buffers); } + IsBuffer :: #force_inline proc "c" (buffer: u32) -> bool { ret := impl_IsBuffer(buffer); return ret; } + BufferData :: #force_inline proc "c" (target: u32, size: int, data: rawptr, usage: u32) { impl_BufferData(target, size, data, usage); } + BufferSubData :: #force_inline proc "c" (target: u32, offset: int, size: int, data: rawptr) { impl_BufferSubData(target, offset, size, data); } + GetBufferSubData :: #force_inline proc "c" (target: u32, offset: int, size: int, data: rawptr) { impl_GetBufferSubData(target, offset, size, data); } + MapBuffer :: #force_inline proc "c" (target: u32, access: u32) -> rawptr { ret := impl_MapBuffer(target, access); return ret; } + UnmapBuffer :: #force_inline proc "c" (target: u32) -> bool { ret := impl_UnmapBuffer(target); return ret; } + GetBufferParameteriv :: #force_inline proc "c" (target: u32, pname: u32, params: [^]i32) { impl_GetBufferParameteriv(target, pname, params); } + GetBufferPointerv :: #force_inline proc "c" (target: u32, pname: u32, params: [^]rawptr) { impl_GetBufferPointerv(target, pname, params); } + + // VERSION_2_0 + BlendEquationSeparate :: #force_inline proc "c" (modeRGB: u32, modeAlpha: u32) { impl_BlendEquationSeparate(modeRGB, modeAlpha); } + DrawBuffers :: #force_inline proc "c" (n: i32, bufs: [^]u32) { impl_DrawBuffers(n, bufs); } + StencilOpSeparate :: #force_inline proc "c" (face: u32, sfail: u32, dpfail: u32, dppass: u32) { impl_StencilOpSeparate(face, sfail, dpfail, dppass); } + StencilFuncSeparate :: #force_inline proc "c" (face: u32, func: u32, ref: i32, mask: u32) { impl_StencilFuncSeparate(face, func, ref, mask); } + StencilMaskSeparate :: #force_inline proc "c" (face: u32, mask: u32) { impl_StencilMaskSeparate(face, mask); } + AttachShader :: #force_inline proc "c" (program: u32, shader: u32) { impl_AttachShader(program, shader); } + BindAttribLocation :: #force_inline proc "c" (program: u32, index: u32, name: cstring) { impl_BindAttribLocation(program, index, name); } + CompileShader :: #force_inline proc "c" (shader: u32) { impl_CompileShader(shader); } + CreateProgram :: #force_inline proc "c" () -> u32 { ret := impl_CreateProgram(); return ret; } + CreateShader :: #force_inline proc "c" (type: u32) -> u32 { ret := impl_CreateShader(type); return ret; } + DeleteProgram :: #force_inline proc "c" (program: u32) { impl_DeleteProgram(program); } + DeleteShader :: #force_inline proc "c" (shader: u32) { impl_DeleteShader(shader); } + DetachShader :: #force_inline proc "c" (program: u32, shader: u32) { impl_DetachShader(program, shader); } + DisableVertexAttribArray :: #force_inline proc "c" (index: u32) { impl_DisableVertexAttribArray(index); } + EnableVertexAttribArray :: #force_inline proc "c" (index: u32) { impl_EnableVertexAttribArray(index); } + GetActiveAttrib :: #force_inline proc "c" (program: u32, index: u32, bufSize: i32, length: ^i32, size: ^i32, type: ^u32, name: [^]u8) { impl_GetActiveAttrib(program, index, bufSize, length, size, type, name); } + GetActiveUniform :: #force_inline proc "c" (program: u32, index: u32, bufSize: i32, length: ^i32, size: ^i32, type: ^u32, name: [^]u8) { impl_GetActiveUniform(program, index, bufSize, length, size, type, name); } + GetAttachedShaders :: #force_inline proc "c" (program: u32, maxCount: i32, count: [^]i32, shaders: [^]u32) { impl_GetAttachedShaders(program, maxCount, count, shaders); } + GetAttribLocation :: #force_inline proc "c" (program: u32, name: cstring) -> i32 { ret := impl_GetAttribLocation(program, name); return ret; } + GetProgramiv :: #force_inline proc "c" (program: u32, pname: u32, params: [^]i32) { impl_GetProgramiv(program, pname, params); } + GetProgramInfoLog :: #force_inline proc "c" (program: u32, bufSize: i32, length: ^i32, infoLog: [^]u8) { impl_GetProgramInfoLog(program, bufSize, length, infoLog); } + GetShaderiv :: #force_inline proc "c" (shader: u32, pname: u32, params: [^]i32) { impl_GetShaderiv(shader, pname, params); } + GetShaderInfoLog :: #force_inline proc "c" (shader: u32, bufSize: i32, length: ^i32, infoLog: [^]u8) { impl_GetShaderInfoLog(shader, bufSize, length, infoLog); } + GetShaderSource :: #force_inline proc "c" (shader: u32, bufSize: i32, length: ^i32, source: [^]u8) { impl_GetShaderSource(shader, bufSize, length, source); } + GetUniformLocation :: #force_inline proc "c" (program: u32, name: cstring) -> i32 { ret := impl_GetUniformLocation(program, name); return ret; } + GetUniformfv :: #force_inline proc "c" (program: u32, location: i32, params: [^]f32) { impl_GetUniformfv(program, location, params); } + GetUniformiv :: #force_inline proc "c" (program: u32, location: i32, params: [^]i32) { impl_GetUniformiv(program, location, params); } + GetVertexAttribdv :: #force_inline proc "c" (index: u32, pname: u32, params: [^]f64) { impl_GetVertexAttribdv(index, pname, params); } + GetVertexAttribfv :: #force_inline proc "c" (index: u32, pname: u32, params: [^]f32) { impl_GetVertexAttribfv(index, pname, params); } + GetVertexAttribiv :: #force_inline proc "c" (index: u32, pname: u32, params: [^]i32) { impl_GetVertexAttribiv(index, pname, params); } + GetVertexAttribPointerv :: #force_inline proc "c" (index: u32, pname: u32, pointer: ^rawptr) { impl_GetVertexAttribPointerv(index, pname, pointer); } + IsProgram :: #force_inline proc "c" (program: u32) -> bool { ret := impl_IsProgram(program); return ret; } + IsShader :: #force_inline proc "c" (shader: u32) -> bool { ret := impl_IsShader(shader); return ret; } + LinkProgram :: #force_inline proc "c" (program: u32) { impl_LinkProgram(program); } + ShaderSource :: #force_inline proc "c" (shader: u32, count: i32, string: [^]cstring, length: [^]i32) { impl_ShaderSource(shader, count, string, length); } + UseProgram :: #force_inline proc "c" (program: u32) { impl_UseProgram(program); } + Uniform1f :: #force_inline proc "c" (location: i32, v0: f32) { impl_Uniform1f(location, v0); } + Uniform2f :: #force_inline proc "c" (location: i32, v0: f32, v1: f32) { impl_Uniform2f(location, v0, v1); } + Uniform3f :: #force_inline proc "c" (location: i32, v0: f32, v1: f32, v2: f32) { impl_Uniform3f(location, v0, v1, v2); } + Uniform4f :: #force_inline proc "c" (location: i32, v0: f32, v1: f32, v2: f32, v3: f32) { impl_Uniform4f(location, v0, v1, v2, v3); } + Uniform1i :: #force_inline proc "c" (location: i32, v0: i32) { impl_Uniform1i(location, v0); } + Uniform2i :: #force_inline proc "c" (location: i32, v0: i32, v1: i32) { impl_Uniform2i(location, v0, v1); } + Uniform3i :: #force_inline proc "c" (location: i32, v0: i32, v1: i32, v2: i32) { impl_Uniform3i(location, v0, v1, v2); } + Uniform4i :: #force_inline proc "c" (location: i32, v0: i32, v1: i32, v2: i32, v3: i32) { impl_Uniform4i(location, v0, v1, v2, v3); } + Uniform1fv :: #force_inline proc "c" (location: i32, count: i32, value: [^]f32) { impl_Uniform1fv(location, count, value); } + Uniform2fv :: #force_inline proc "c" (location: i32, count: i32, value: [^]f32) { impl_Uniform2fv(location, count, value); } + Uniform3fv :: #force_inline proc "c" (location: i32, count: i32, value: [^]f32) { impl_Uniform3fv(location, count, value); } + Uniform4fv :: #force_inline proc "c" (location: i32, count: i32, value: [^]f32) { impl_Uniform4fv(location, count, value); } + Uniform1iv :: #force_inline proc "c" (location: i32, count: i32, value: [^]i32) { impl_Uniform1iv(location, count, value); } + Uniform2iv :: #force_inline proc "c" (location: i32, count: i32, value: [^]i32) { impl_Uniform2iv(location, count, value); } + Uniform3iv :: #force_inline proc "c" (location: i32, count: i32, value: [^]i32) { impl_Uniform3iv(location, count, value); } + Uniform4iv :: #force_inline proc "c" (location: i32, count: i32, value: [^]i32) { impl_Uniform4iv(location, count, value); } + UniformMatrix2fv :: #force_inline proc "c" (location: i32, count: i32, transpose: bool, value: [^]f32) { impl_UniformMatrix2fv(location, count, transpose, value); } + UniformMatrix3fv :: #force_inline proc "c" (location: i32, count: i32, transpose: bool, value: [^]f32) { impl_UniformMatrix3fv(location, count, transpose, value); } + UniformMatrix4fv :: #force_inline proc "c" (location: i32, count: i32, transpose: bool, value: [^]f32) { impl_UniformMatrix4fv(location, count, transpose, value); } + ValidateProgram :: #force_inline proc "c" (program: u32) { impl_ValidateProgram(program); } + VertexAttrib1d :: #force_inline proc "c" (index: u32, x: f64) { impl_VertexAttrib1d(index, x); } + VertexAttrib1dv :: #force_inline proc "c" (index: u32, v: ^f64) { impl_VertexAttrib1dv(index, v); } + VertexAttrib1f :: #force_inline proc "c" (index: u32, x: f32) { impl_VertexAttrib1f(index, x); } + VertexAttrib1fv :: #force_inline proc "c" (index: u32, v: ^f32) { impl_VertexAttrib1fv(index, v); } + VertexAttrib1s :: #force_inline proc "c" (index: u32, x: i16) { impl_VertexAttrib1s(index, x); } + VertexAttrib1sv :: #force_inline proc "c" (index: u32, v: ^i16) { impl_VertexAttrib1sv(index, v); } + VertexAttrib2d :: #force_inline proc "c" (index: u32, x: f64, y: f64) { impl_VertexAttrib2d(index, x, y); } + VertexAttrib2dv :: #force_inline proc "c" (index: u32, v: ^f64) { impl_VertexAttrib2dv(index, v); } + VertexAttrib2f :: #force_inline proc "c" (index: u32, x: f32, y: f32) { impl_VertexAttrib2f(index, x, y); } + VertexAttrib2fv :: #force_inline proc "c" (index: u32, v: ^f32) { impl_VertexAttrib2fv(index, v); } + VertexAttrib2s :: #force_inline proc "c" (index: u32, x: i16, y: i16) { impl_VertexAttrib2s(index, x, y); } + VertexAttrib2sv :: #force_inline proc "c" (index: u32, v: ^i16) { impl_VertexAttrib2sv(index, v); } + VertexAttrib3d :: #force_inline proc "c" (index: u32, x: f64, y: f64, z: f64) { impl_VertexAttrib3d(index, x, y, z); } + VertexAttrib3dv :: #force_inline proc "c" (index: u32, v: ^f64) { impl_VertexAttrib3dv(index, v); } + VertexAttrib3f :: #force_inline proc "c" (index: u32, x: f32, y: f32, z: f32) { impl_VertexAttrib3f(index, x, y, z); } + VertexAttrib3fv :: #force_inline proc "c" (index: u32, v: ^f32) { impl_VertexAttrib3fv(index, v); } + VertexAttrib3s :: #force_inline proc "c" (index: u32, x: i16, y: i16, z: i16) { impl_VertexAttrib3s(index, x, y, z); } + VertexAttrib3sv :: #force_inline proc "c" (index: u32, v: ^i16) { impl_VertexAttrib3sv(index, v); } + VertexAttrib4Nbv :: #force_inline proc "c" (index: u32, v: ^i8) { impl_VertexAttrib4Nbv(index, v); } + VertexAttrib4Niv :: #force_inline proc "c" (index: u32, v: ^i32) { impl_VertexAttrib4Niv(index, v); } + VertexAttrib4Nsv :: #force_inline proc "c" (index: u32, v: ^i16) { impl_VertexAttrib4Nsv(index, v); } + VertexAttrib4Nub :: #force_inline proc "c" (index: u32, x: u8, y: u8, z: u8, w: u8) { impl_VertexAttrib4Nub(index, x, y, z, w); } + VertexAttrib4Nubv :: #force_inline proc "c" (index: u32, v: ^u8) { impl_VertexAttrib4Nubv(index, v); } + VertexAttrib4Nuiv :: #force_inline proc "c" (index: u32, v: ^u32) { impl_VertexAttrib4Nuiv(index, v); } + VertexAttrib4Nusv :: #force_inline proc "c" (index: u32, v: ^u16) { impl_VertexAttrib4Nusv(index, v); } + VertexAttrib4bv :: #force_inline proc "c" (index: u32, v: ^i8) { impl_VertexAttrib4bv(index, v); } + VertexAttrib4d :: #force_inline proc "c" (index: u32, x: f64, y: f64, z: f64, w: f64) { impl_VertexAttrib4d(index, x, y, z, w); } + VertexAttrib4dv :: #force_inline proc "c" (index: u32, v: ^f64) { impl_VertexAttrib4dv(index, v); } + VertexAttrib4f :: #force_inline proc "c" (index: u32, x: f32, y: f32, z: f32, w: f32) { impl_VertexAttrib4f(index, x, y, z, w); } + VertexAttrib4fv :: #force_inline proc "c" (index: u32, v: ^f32) { impl_VertexAttrib4fv(index, v); } + VertexAttrib4iv :: #force_inline proc "c" (index: u32, v: ^i32) { impl_VertexAttrib4iv(index, v); } + VertexAttrib4s :: #force_inline proc "c" (index: u32, x: i16, y: i16, z: i16, w: i16) { impl_VertexAttrib4s(index, x, y, z, w); } + VertexAttrib4sv :: #force_inline proc "c" (index: u32, v: ^i16) { impl_VertexAttrib4sv(index, v); } + VertexAttrib4ubv :: #force_inline proc "c" (index: u32, v: ^u8) { impl_VertexAttrib4ubv(index, v); } + VertexAttrib4uiv :: #force_inline proc "c" (index: u32, v: ^u32) { impl_VertexAttrib4uiv(index, v); } + VertexAttrib4usv :: #force_inline proc "c" (index: u32, v: ^u16) { impl_VertexAttrib4usv(index, v); } + VertexAttribPointer :: #force_inline proc "c" (index: u32, size: i32, type: u32, normalized: bool, stride: i32, pointer: rawptr) { impl_VertexAttribPointer(index, size, type, normalized, stride, pointer); } + + // VERSION_2_1 + UniformMatrix2x3fv :: #force_inline proc "c" (location: i32, count: i32, transpose: bool, value: [^]f32) { impl_UniformMatrix2x3fv(location, count, transpose, value); } + UniformMatrix3x2fv :: #force_inline proc "c" (location: i32, count: i32, transpose: bool, value: [^]f32) { impl_UniformMatrix3x2fv(location, count, transpose, value); } + UniformMatrix2x4fv :: #force_inline proc "c" (location: i32, count: i32, transpose: bool, value: [^]f32) { impl_UniformMatrix2x4fv(location, count, transpose, value); } + UniformMatrix4x2fv :: #force_inline proc "c" (location: i32, count: i32, transpose: bool, value: [^]f32) { impl_UniformMatrix4x2fv(location, count, transpose, value); } + UniformMatrix3x4fv :: #force_inline proc "c" (location: i32, count: i32, transpose: bool, value: [^]f32) { impl_UniformMatrix3x4fv(location, count, transpose, value); } + UniformMatrix4x3fv :: #force_inline proc "c" (location: i32, count: i32, transpose: bool, value: [^]f32) { impl_UniformMatrix4x3fv(location, count, transpose, value); } + + + // VERSION_3_0 + ColorMaski :: #force_inline proc "c" (index: u32, r: u8, g: u8, b: u8, a: u8) { impl_ColorMaski(index, r, g, b, a); } + GetBooleani_v :: #force_inline proc "c" (target: u32, index: u32, data: ^bool) { impl_GetBooleani_v(target, index, data); } + GetIntegeri_v :: #force_inline proc "c" (target: u32, index: u32, data: ^i32) { impl_GetIntegeri_v(target, index, data); } + Enablei :: #force_inline proc "c" (target: u32, index: u32) { impl_Enablei(target, index); } + Disablei :: #force_inline proc "c" (target: u32, index: u32) { impl_Disablei(target, index); } + IsEnabledi :: #force_inline proc "c" (target: u32, index: u32) -> bool { ret := impl_IsEnabledi(target, index); return ret; } + BeginTransformFeedback :: #force_inline proc "c" (primitiveMode: u32) { impl_BeginTransformFeedback(primitiveMode); } + EndTransformFeedback :: #force_inline proc "c" () { impl_EndTransformFeedback(); } + BindBufferRange :: #force_inline proc "c" (target: u32, index: u32, buffer: u32, offset: int, size: int) { impl_BindBufferRange(target, index, buffer, offset, size); } + BindBufferBase :: #force_inline proc "c" (target: u32, index: u32, buffer: u32) { impl_BindBufferBase(target, index, buffer); } + TransformFeedbackVaryings :: #force_inline proc "c" (program: u32, count: i32, varyings: [^]cstring, bufferMode: u32) { impl_TransformFeedbackVaryings(program, count, varyings, bufferMode); } + GetTransformFeedbackVarying :: #force_inline proc "c" (program: u32, index: u32, bufSize: i32, length: ^i32, size: ^i32, type: ^u32, name: [^]u8) { impl_GetTransformFeedbackVarying(program, index, bufSize, length, size, type, name); } + ClampColor :: #force_inline proc "c" (target: u32, clamp: u32) { impl_ClampColor(target, clamp); } + BeginConditionalRender :: #force_inline proc "c" (id: u32, mode: u32) { impl_BeginConditionalRender(id, mode); } + EndConditionalRender :: #force_inline proc "c" () { impl_EndConditionalRender(); } + VertexAttribIPointer :: #force_inline proc "c" (index: u32, size: i32, type: u32, stride: i32, pointer: rawptr) { impl_VertexAttribIPointer(index, size, type, stride, pointer); } + GetVertexAttribIiv :: #force_inline proc "c" (index: u32, pname: u32, params: [^]i32) { impl_GetVertexAttribIiv(index, pname, params); } + GetVertexAttribIuiv :: #force_inline proc "c" (index: u32, pname: u32, params: [^]u32) { impl_GetVertexAttribIuiv(index, pname, params); } + VertexAttribI1i :: #force_inline proc "c" (index: u32, x: i32) { impl_VertexAttribI1i(index, x); } + VertexAttribI2i :: #force_inline proc "c" (index: u32, x: i32, y: i32) { impl_VertexAttribI2i(index, x, y); } + VertexAttribI3i :: #force_inline proc "c" (index: u32, x: i32, y: i32, z: i32) { impl_VertexAttribI3i(index, x, y, z); } + VertexAttribI4i :: #force_inline proc "c" (index: u32, x: i32, y: i32, z: i32, w: i32) { impl_VertexAttribI4i(index, x, y, z, w); } + VertexAttribI1ui :: #force_inline proc "c" (index: u32, x: u32) { impl_VertexAttribI1ui(index, x); } + VertexAttribI2ui :: #force_inline proc "c" (index: u32, x: u32, y: u32) { impl_VertexAttribI2ui(index, x, y); } + VertexAttribI3ui :: #force_inline proc "c" (index: u32, x: u32, y: u32, z: u32) { impl_VertexAttribI3ui(index, x, y, z); } + VertexAttribI4ui :: #force_inline proc "c" (index: u32, x: u32, y: u32, z: u32, w: u32) { impl_VertexAttribI4ui(index, x, y, z, w); } + VertexAttribI1iv :: #force_inline proc "c" (index: u32, v: ^i32) { impl_VertexAttribI1iv(index, v); } + VertexAttribI2iv :: #force_inline proc "c" (index: u32, v: ^i32) { impl_VertexAttribI2iv(index, v); } + VertexAttribI3iv :: #force_inline proc "c" (index: u32, v: ^i32) { impl_VertexAttribI3iv(index, v); } + VertexAttribI4iv :: #force_inline proc "c" (index: u32, v: ^i32) { impl_VertexAttribI4iv(index, v); } + VertexAttribI1uiv :: #force_inline proc "c" (index: u32, v: ^u32) { impl_VertexAttribI1uiv(index, v); } + VertexAttribI2uiv :: #force_inline proc "c" (index: u32, v: ^u32) { impl_VertexAttribI2uiv(index, v); } + VertexAttribI3uiv :: #force_inline proc "c" (index: u32, v: ^u32) { impl_VertexAttribI3uiv(index, v); } + VertexAttribI4uiv :: #force_inline proc "c" (index: u32, v: ^u32) { impl_VertexAttribI4uiv(index, v); } + VertexAttribI4bv :: #force_inline proc "c" (index: u32, v: ^i8) { impl_VertexAttribI4bv(index, v); } + VertexAttribI4sv :: #force_inline proc "c" (index: u32, v: ^i16) { impl_VertexAttribI4sv(index, v); } + VertexAttribI4ubv :: #force_inline proc "c" (index: u32, v: ^u8) { impl_VertexAttribI4ubv(index, v); } + VertexAttribI4usv :: #force_inline proc "c" (index: u32, v: ^u16) { impl_VertexAttribI4usv(index, v); } + GetUniformuiv :: #force_inline proc "c" (program: u32, location: i32, params: [^]u32) { impl_GetUniformuiv(program, location, params); } + BindFragDataLocation :: #force_inline proc "c" (program: u32, color: u32, name: cstring) { impl_BindFragDataLocation(program, color, name); } + GetFragDataLocation :: #force_inline proc "c" (program: u32, name: cstring) -> i32 { ret := impl_GetFragDataLocation(program, name); return ret; } + Uniform1ui :: #force_inline proc "c" (location: i32, v0: u32) { impl_Uniform1ui(location, v0); } + Uniform2ui :: #force_inline proc "c" (location: i32, v0: u32, v1: u32) { impl_Uniform2ui(location, v0, v1); } + Uniform3ui :: #force_inline proc "c" (location: i32, v0: u32, v1: u32, v2: u32) { impl_Uniform3ui(location, v0, v1, v2); } + Uniform4ui :: #force_inline proc "c" (location: i32, v0: u32, v1: u32, v2: u32, v3: u32) { impl_Uniform4ui(location, v0, v1, v2, v3); } + Uniform1uiv :: #force_inline proc "c" (location: i32, count: i32, value: [^]u32) { impl_Uniform1uiv(location, count, value); } + Uniform2uiv :: #force_inline proc "c" (location: i32, count: i32, value: [^]u32) { impl_Uniform2uiv(location, count, value); } + Uniform3uiv :: #force_inline proc "c" (location: i32, count: i32, value: [^]u32) { impl_Uniform3uiv(location, count, value); } + Uniform4uiv :: #force_inline proc "c" (location: i32, count: i32, value: [^]u32) { impl_Uniform4uiv(location, count, value); } + TexParameterIiv :: #force_inline proc "c" (target: u32, pname: u32, params: [^]i32) { impl_TexParameterIiv(target, pname, params); } + TexParameterIuiv :: #force_inline proc "c" (target: u32, pname: u32, params: [^]u32) { impl_TexParameterIuiv(target, pname, params); } + GetTexParameterIiv :: #force_inline proc "c" (target: u32, pname: u32, params: [^]i32) { impl_GetTexParameterIiv(target, pname, params); } + GetTexParameterIuiv :: #force_inline proc "c" (target: u32, pname: u32, params: [^]u32) { impl_GetTexParameterIuiv(target, pname, params); } + ClearBufferiv :: #force_inline proc "c" (buffer: u32, drawbuffer: i32, value: ^i32) { impl_ClearBufferiv(buffer, drawbuffer, value); } + ClearBufferuiv :: #force_inline proc "c" (buffer: u32, drawbuffer: i32, value: ^u32) { impl_ClearBufferuiv(buffer, drawbuffer, value); } + ClearBufferfv :: #force_inline proc "c" (buffer: u32, drawbuffer: i32, value: ^f32) { impl_ClearBufferfv(buffer, drawbuffer, value); } + ClearBufferfi :: #force_inline proc "c" (buffer: u32, drawbuffer: i32, depth: f32, stencil: i32) -> rawptr { ret := impl_ClearBufferfi(buffer, drawbuffer, depth, stencil); return ret; } + GetStringi :: #force_inline proc "c" (name: u32, index: u32) -> cstring { ret := impl_GetStringi(name, index); return ret; } + IsRenderbuffer :: #force_inline proc "c" (renderbuffer: u32) -> bool { ret := impl_IsRenderbuffer(renderbuffer); return ret; } + BindRenderbuffer :: #force_inline proc "c" (target: u32, renderbuffer: u32) { impl_BindRenderbuffer(target, renderbuffer); } + DeleteRenderbuffers :: #force_inline proc "c" (n: i32, renderbuffers: [^]u32) { impl_DeleteRenderbuffers(n, renderbuffers); } + GenRenderbuffers :: #force_inline proc "c" (n: i32, renderbuffers: [^]u32) { impl_GenRenderbuffers(n, renderbuffers); } + RenderbufferStorage :: #force_inline proc "c" (target: u32, internalformat: u32, width: i32, height: i32) { impl_RenderbufferStorage(target, internalformat, width, height); } + GetRenderbufferParameteriv :: #force_inline proc "c" (target: u32, pname: u32, params: [^]i32) { impl_GetRenderbufferParameteriv(target, pname, params); } + IsFramebuffer :: #force_inline proc "c" (framebuffer: u32) -> bool { ret := impl_IsFramebuffer(framebuffer); return ret; } + BindFramebuffer :: #force_inline proc "c" (target: u32, framebuffer: u32) { impl_BindFramebuffer(target, framebuffer); } + DeleteFramebuffers :: #force_inline proc "c" (n: i32, framebuffers: [^]u32) { impl_DeleteFramebuffers(n, framebuffers); } + GenFramebuffers :: #force_inline proc "c" (n: i32, framebuffers: [^]u32) { impl_GenFramebuffers(n, framebuffers); } + CheckFramebufferStatus :: #force_inline proc "c" (target: u32) -> u32 { ret := impl_CheckFramebufferStatus(target); return ret; } + FramebufferTexture1D :: #force_inline proc "c" (target: u32, attachment: u32, textarget: u32, texture: u32, level: i32) { impl_FramebufferTexture1D(target, attachment, textarget, texture, level); } + FramebufferTexture2D :: #force_inline proc "c" (target: u32, attachment: u32, textarget: u32, texture: u32, level: i32) { impl_FramebufferTexture2D(target, attachment, textarget, texture, level); } + FramebufferTexture3D :: #force_inline proc "c" (target: u32, attachment: u32, textarget: u32, texture: u32, level: i32, zoffset: i32) { impl_FramebufferTexture3D(target, attachment, textarget, texture, level, zoffset); } + FramebufferRenderbuffer :: #force_inline proc "c" (target: u32, attachment: u32, renderbuffertarget: u32, renderbuffer: u32) { impl_FramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer); } + GetFramebufferAttachmentParameteriv :: #force_inline proc "c" (target: u32, attachment: u32, pname: u32, params: [^]i32) { impl_GetFramebufferAttachmentParameteriv(target, attachment, pname, params); } + GenerateMipmap :: #force_inline proc "c" (target: u32) { impl_GenerateMipmap(target); } + BlitFramebuffer :: #force_inline proc "c" (srcX0: i32, srcY0: i32, srcX1: i32, srcY1: i32, dstX0: i32, dstY0: i32, dstX1: i32, dstY1: i32, mask: u32, filter: u32) { impl_BlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); } + RenderbufferStorageMultisample :: #force_inline proc "c" (target: u32, samples: i32, internalformat: u32, width: i32, height: i32) { impl_RenderbufferStorageMultisample(target, samples, internalformat, width, height); } + FramebufferTextureLayer :: #force_inline proc "c" (target: u32, attachment: u32, texture: u32, level: i32, layer: i32) { impl_FramebufferTextureLayer(target, attachment, texture, level, layer); } + MapBufferRange :: #force_inline proc "c" (target: u32, offset: int, length: int, access: u32) -> rawptr { ret := impl_MapBufferRange(target, offset, length, access); return ret; } + FlushMappedBufferRange :: #force_inline proc "c" (target: u32, offset: int, length: int) { impl_FlushMappedBufferRange(target, offset, length); } + BindVertexArray :: #force_inline proc "c" (array: u32) { impl_BindVertexArray(array); } + DeleteVertexArrays :: #force_inline proc "c" (n: i32, arrays: [^]u32) { impl_DeleteVertexArrays(n, arrays); } + GenVertexArrays :: #force_inline proc "c" (n: i32, arrays: [^]u32) { impl_GenVertexArrays(n, arrays); } + IsVertexArray :: #force_inline proc "c" (array: u32) -> bool { ret := impl_IsVertexArray(array); return ret; } + + // VERSION_3_1 + DrawArraysInstanced :: #force_inline proc "c" (mode: u32, first: i32, count: i32, instancecount: i32) { impl_DrawArraysInstanced(mode, first, count, instancecount); } + DrawElementsInstanced :: #force_inline proc "c" (mode: u32, count: i32, type: u32, indices: rawptr, instancecount: i32) { impl_DrawElementsInstanced(mode, count, type, indices, instancecount); } + TexBuffer :: #force_inline proc "c" (target: u32, internalformat: u32, buffer: u32) { impl_TexBuffer(target, internalformat, buffer); } + PrimitiveRestartIndex :: #force_inline proc "c" (index: u32) { impl_PrimitiveRestartIndex(index); } + CopyBufferSubData :: #force_inline proc "c" (readTarget: u32, writeTarget: u32, readOffset: int, writeOffset: int, size: int) { impl_CopyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size); } + GetUniformIndices :: #force_inline proc "c" (program: u32, uniformCount: i32, uniformNames: [^]cstring, uniformIndices: [^]u32) { impl_GetUniformIndices(program, uniformCount, uniformNames, uniformIndices); } + GetActiveUniformsiv :: #force_inline proc "c" (program: u32, uniformCount: i32, uniformIndices: [^]u32, pname: u32, params: [^]i32) { impl_GetActiveUniformsiv(program, uniformCount, uniformIndices, pname, params); } + GetActiveUniformName :: #force_inline proc "c" (program: u32, uniformIndex: u32, bufSize: i32, length: ^i32, uniformName: [^]u8) { impl_GetActiveUniformName(program, uniformIndex, bufSize, length, uniformName); } + GetUniformBlockIndex :: #force_inline proc "c" (program: u32, uniformBlockName: cstring) -> u32 { ret := impl_GetUniformBlockIndex(program, uniformBlockName); return ret; } + GetActiveUniformBlockiv :: #force_inline proc "c" (program: u32, uniformBlockIndex: u32, pname: u32, params: [^]i32) { impl_GetActiveUniformBlockiv(program, uniformBlockIndex, pname, params); } + GetActiveUniformBlockName :: #force_inline proc "c" (program: u32, uniformBlockIndex: u32, bufSize: i32, length: ^i32, uniformBlockName: [^]u8) { impl_GetActiveUniformBlockName(program, uniformBlockIndex, bufSize, length, uniformBlockName); } + UniformBlockBinding :: #force_inline proc "c" (program: u32, uniformBlockIndex: u32, uniformBlockBinding: u32) { impl_UniformBlockBinding(program, uniformBlockIndex, uniformBlockBinding); } + + // VERSION_3_2 + DrawElementsBaseVertex :: #force_inline proc "c" (mode: u32, count: i32, type: u32, indices: rawptr, basevertex: i32) { impl_DrawElementsBaseVertex(mode, count, type, indices, basevertex); } + DrawRangeElementsBaseVertex :: #force_inline proc "c" (mode: u32, start: u32, end: u32, count: i32, type: u32, indices: rawptr, basevertex: i32) { impl_DrawRangeElementsBaseVertex(mode, start, end, count, type, indices, basevertex); } + DrawElementsInstancedBaseVertex :: #force_inline proc "c" (mode: u32, count: i32, type: u32, indices: rawptr, instancecount: i32, basevertex: i32) { impl_DrawElementsInstancedBaseVertex(mode, count, type, indices, instancecount, basevertex); } + MultiDrawElementsBaseVertex :: #force_inline proc "c" (mode: u32, count: [^]i32, type: u32, indices: [^]rawptr, drawcount: i32, basevertex: [^]i32) { impl_MultiDrawElementsBaseVertex(mode, count, type, indices, drawcount, basevertex); } + ProvokingVertex :: #force_inline proc "c" (mode: u32) { impl_ProvokingVertex(mode); } + FenceSync :: #force_inline proc "c" (condition: u32, flags: u32) -> sync_t { ret := impl_FenceSync(condition, flags); return ret; } + IsSync :: #force_inline proc "c" (sync: sync_t) -> bool { ret := impl_IsSync(sync); return ret; } + DeleteSync :: #force_inline proc "c" (sync: sync_t) { impl_DeleteSync(sync); } + ClientWaitSync :: #force_inline proc "c" (sync: sync_t, flags: u32, timeout: u64) -> u32 { ret := impl_ClientWaitSync(sync, flags, timeout); return ret; } + WaitSync :: #force_inline proc "c" (sync: sync_t, flags: u32, timeout: u64) { impl_WaitSync(sync, flags, timeout); } + GetInteger64v :: #force_inline proc "c" (pname: u32, data: ^i64) { impl_GetInteger64v(pname, data); } + GetSynciv :: #force_inline proc "c" (sync: sync_t, pname: u32, bufSize: i32, length: ^i32, values: [^]i32) { impl_GetSynciv(sync, pname, bufSize, length, values); } + GetInteger64i_v :: #force_inline proc "c" (target: u32, index: u32, data: ^i64) { impl_GetInteger64i_v(target, index, data); } + GetBufferParameteri64v :: #force_inline proc "c" (target: u32, pname: u32, params: [^]i64) { impl_GetBufferParameteri64v(target, pname, params); } + FramebufferTexture :: #force_inline proc "c" (target: u32, attachment: u32, texture: u32, level: i32) { impl_FramebufferTexture(target, attachment, texture, level); } + TexImage2DMultisample :: #force_inline proc "c" (target: u32, samples: i32, internalformat: u32, width: i32, height: i32, fixedsamplelocations: u8) { impl_TexImage2DMultisample(target, samples, internalformat, width, height, fixedsamplelocations); } + TexImage3DMultisample :: #force_inline proc "c" (target: u32, samples: i32, internalformat: u32, width: i32, height: i32, depth: i32, fixedsamplelocations: u8) { impl_TexImage3DMultisample(target, samples, internalformat, width, height, depth, fixedsamplelocations); } + GetMultisamplefv :: #force_inline proc "c" (pname: u32, index: u32, val: ^f32) { impl_GetMultisamplefv(pname, index, val); } + SampleMaski :: #force_inline proc "c" (maskNumber: u32, mask: u32) { impl_SampleMaski(maskNumber, mask); } + + // VERSION_3_3 + BindFragDataLocationIndexed :: #force_inline proc "c" (program: u32, colorNumber: u32, index: u32, name: cstring) { impl_BindFragDataLocationIndexed(program, colorNumber, index, name); } + GetFragDataIndex :: #force_inline proc "c" (program: u32, name: cstring) -> i32 { ret := impl_GetFragDataIndex(program, name); return ret; } + GenSamplers :: #force_inline proc "c" (count: i32, samplers: [^]u32) { impl_GenSamplers(count, samplers); } + DeleteSamplers :: #force_inline proc "c" (count: i32, samplers: [^]u32) { impl_DeleteSamplers(count, samplers); } + IsSampler :: #force_inline proc "c" (sampler: u32) -> bool { ret := impl_IsSampler(sampler); return ret; } + BindSampler :: #force_inline proc "c" (unit: u32, sampler: u32) { impl_BindSampler(unit, sampler); } + SamplerParameteri :: #force_inline proc "c" (sampler: u32, pname: u32, param: i32) { impl_SamplerParameteri(sampler, pname, param); } + SamplerParameteriv :: #force_inline proc "c" (sampler: u32, pname: u32, param: ^i32) { impl_SamplerParameteriv(sampler, pname, param); } + SamplerParameterf :: #force_inline proc "c" (sampler: u32, pname: u32, param: f32) { impl_SamplerParameterf(sampler, pname, param); } + SamplerParameterfv :: #force_inline proc "c" (sampler: u32, pname: u32, param: ^f32) { impl_SamplerParameterfv(sampler, pname, param); } + SamplerParameterIiv :: #force_inline proc "c" (sampler: u32, pname: u32, param: ^i32) { impl_SamplerParameterIiv(sampler, pname, param); } + SamplerParameterIuiv :: #force_inline proc "c" (sampler: u32, pname: u32, param: ^u32) { impl_SamplerParameterIuiv(sampler, pname, param); } + GetSamplerParameteriv :: #force_inline proc "c" (sampler: u32, pname: u32, params: [^]i32) { impl_GetSamplerParameteriv(sampler, pname, params); } + GetSamplerParameterIiv :: #force_inline proc "c" (sampler: u32, pname: u32, params: [^]i32) { impl_GetSamplerParameterIiv(sampler, pname, params); } + GetSamplerParameterfv :: #force_inline proc "c" (sampler: u32, pname: u32, params: [^]f32) { impl_GetSamplerParameterfv(sampler, pname, params); } + GetSamplerParameterIuiv :: #force_inline proc "c" (sampler: u32, pname: u32, params: [^]u32) { impl_GetSamplerParameterIuiv(sampler, pname, params); } + QueryCounter :: #force_inline proc "c" (id: u32, target: u32) { impl_QueryCounter(id, target); } + GetQueryObjecti64v :: #force_inline proc "c" (id: u32, pname: u32, params: [^]i64) { impl_GetQueryObjecti64v(id, pname, params); } + GetQueryObjectui64v :: #force_inline proc "c" (id: u32, pname: u32, params: [^]u64) { impl_GetQueryObjectui64v(id, pname, params); } + VertexAttribDivisor :: #force_inline proc "c" (index: u32, divisor: u32) { impl_VertexAttribDivisor(index, divisor); } + VertexAttribP1ui :: #force_inline proc "c" (index: u32, type: u32, normalized: bool, value: u32) { impl_VertexAttribP1ui(index, type, normalized, value); } + VertexAttribP1uiv :: #force_inline proc "c" (index: u32, type: u32, normalized: bool, value: ^u32) { impl_VertexAttribP1uiv(index, type, normalized, value); } + VertexAttribP2ui :: #force_inline proc "c" (index: u32, type: u32, normalized: bool, value: u32) { impl_VertexAttribP2ui(index, type, normalized, value); } + VertexAttribP2uiv :: #force_inline proc "c" (index: u32, type: u32, normalized: bool, value: ^u32) { impl_VertexAttribP2uiv(index, type, normalized, value); } + VertexAttribP3ui :: #force_inline proc "c" (index: u32, type: u32, normalized: bool, value: u32) { impl_VertexAttribP3ui(index, type, normalized, value); } + VertexAttribP3uiv :: #force_inline proc "c" (index: u32, type: u32, normalized: bool, value: ^u32) { impl_VertexAttribP3uiv(index, type, normalized, value); } + VertexAttribP4ui :: #force_inline proc "c" (index: u32, type: u32, normalized: bool, value: u32) { impl_VertexAttribP4ui(index, type, normalized, value); } + VertexAttribP4uiv :: #force_inline proc "c" (index: u32, type: u32, normalized: bool, value: ^u32) { impl_VertexAttribP4uiv(index, type, normalized, value); } + VertexP2ui :: #force_inline proc "c" (type: u32, value: u32) { impl_VertexP2ui(type, value); } + VertexP2uiv :: #force_inline proc "c" (type: u32, value: ^u32) { impl_VertexP2uiv(type, value); } + VertexP3ui :: #force_inline proc "c" (type: u32, value: u32) { impl_VertexP3ui(type, value); } + VertexP3uiv :: #force_inline proc "c" (type: u32, value: ^u32) { impl_VertexP3uiv(type, value); } + VertexP4ui :: #force_inline proc "c" (type: u32, value: u32) { impl_VertexP4ui(type, value); } + VertexP4uiv :: #force_inline proc "c" (type: u32, value: ^u32) { impl_VertexP4uiv(type, value); } + TexCoordP1ui :: #force_inline proc "c" (type: u32, coords: u32) { impl_TexCoordP1ui(type, coords); } + TexCoordP1uiv :: #force_inline proc "c" (type: u32, coords: [^]u32) { impl_TexCoordP1uiv(type, coords); } + TexCoordP2ui :: #force_inline proc "c" (type: u32, coords: u32) { impl_TexCoordP2ui(type, coords); } + TexCoordP2uiv :: #force_inline proc "c" (type: u32, coords: [^]u32) { impl_TexCoordP2uiv(type, coords); } + TexCoordP3ui :: #force_inline proc "c" (type: u32, coords: u32) { impl_TexCoordP3ui(type, coords); } + TexCoordP3uiv :: #force_inline proc "c" (type: u32, coords: [^]u32) { impl_TexCoordP3uiv(type, coords); } + TexCoordP4ui :: #force_inline proc "c" (type: u32, coords: u32) { impl_TexCoordP4ui(type, coords); } + TexCoordP4uiv :: #force_inline proc "c" (type: u32, coords: [^]u32) { impl_TexCoordP4uiv(type, coords); } + MultiTexCoordP1ui :: #force_inline proc "c" (texture: u32, type: u32, coords: u32) { impl_MultiTexCoordP1ui(texture, type, coords); } + MultiTexCoordP1uiv :: #force_inline proc "c" (texture: u32, type: u32, coords: [^]u32) { impl_MultiTexCoordP1uiv(texture, type, coords); } + MultiTexCoordP2ui :: #force_inline proc "c" (texture: u32, type: u32, coords: u32) { impl_MultiTexCoordP2ui(texture, type, coords); } + MultiTexCoordP2uiv :: #force_inline proc "c" (texture: u32, type: u32, coords: [^]u32) { impl_MultiTexCoordP2uiv(texture, type, coords); } + MultiTexCoordP3ui :: #force_inline proc "c" (texture: u32, type: u32, coords: u32) { impl_MultiTexCoordP3ui(texture, type, coords); } + MultiTexCoordP3uiv :: #force_inline proc "c" (texture: u32, type: u32, coords: [^]u32) { impl_MultiTexCoordP3uiv(texture, type, coords); } + MultiTexCoordP4ui :: #force_inline proc "c" (texture: u32, type: u32, coords: u32) { impl_MultiTexCoordP4ui(texture, type, coords); } + MultiTexCoordP4uiv :: #force_inline proc "c" (texture: u32, type: u32, coords: [^]u32) { impl_MultiTexCoordP4uiv(texture, type, coords); } + NormalP3ui :: #force_inline proc "c" (type: u32, coords: u32) { impl_NormalP3ui(type, coords); } + NormalP3uiv :: #force_inline proc "c" (type: u32, coords: [^]u32) { impl_NormalP3uiv(type, coords); } + ColorP3ui :: #force_inline proc "c" (type: u32, color: u32) { impl_ColorP3ui(type, color); } + ColorP3uiv :: #force_inline proc "c" (type: u32, color: ^u32) { impl_ColorP3uiv(type, color); } + ColorP4ui :: #force_inline proc "c" (type: u32, color: u32) { impl_ColorP4ui(type, color); } + ColorP4uiv :: #force_inline proc "c" (type: u32, color: ^u32) { impl_ColorP4uiv(type, color); } + SecondaryColorP3ui :: #force_inline proc "c" (type: u32, color: u32) { impl_SecondaryColorP3ui(type, color); } + SecondaryColorP3uiv :: #force_inline proc "c" (type: u32, color: ^u32) { impl_SecondaryColorP3uiv(type, color); } + + // VERSION_4_0 + MinSampleShading :: #force_inline proc "c" (value: f32) { impl_MinSampleShading(value); } + BlendEquationi :: #force_inline proc "c" (buf: u32, mode: u32) { impl_BlendEquationi(buf, mode); } + BlendEquationSeparatei :: #force_inline proc "c" (buf: u32, modeRGB: u32, modeAlpha: u32) { impl_BlendEquationSeparatei(buf, modeRGB, modeAlpha); } + BlendFunci :: #force_inline proc "c" (buf: u32, src: u32, dst: u32) { impl_BlendFunci(buf, src, dst); } + BlendFuncSeparatei :: #force_inline proc "c" (buf: u32, srcRGB: u32, dstRGB: u32, srcAlpha: u32, dstAlpha: u32) { impl_BlendFuncSeparatei(buf, srcRGB, dstRGB, srcAlpha, dstAlpha); } + DrawArraysIndirect :: #force_inline proc "c" (mode: u32, indirect: rawptr) { impl_DrawArraysIndirect(mode, indirect); } + DrawElementsIndirect :: #force_inline proc "c" (mode: u32, type: u32, indirect: rawptr) { impl_DrawElementsIndirect(mode, type, indirect); } + Uniform1d :: #force_inline proc "c" (location: i32, x: f64) { impl_Uniform1d(location, x); } + Uniform2d :: #force_inline proc "c" (location: i32, x: f64, y: f64) { impl_Uniform2d(location, x, y); } + Uniform3d :: #force_inline proc "c" (location: i32, x: f64, y: f64, z: f64) { impl_Uniform3d(location, x, y, z); } + Uniform4d :: #force_inline proc "c" (location: i32, x: f64, y: f64, z: f64, w: f64) { impl_Uniform4d(location, x, y, z, w); } + Uniform1dv :: #force_inline proc "c" (location: i32, count: i32, value: [^]f64) { impl_Uniform1dv(location, count, value); } + Uniform2dv :: #force_inline proc "c" (location: i32, count: i32, value: [^]f64) { impl_Uniform2dv(location, count, value); } + Uniform3dv :: #force_inline proc "c" (location: i32, count: i32, value: [^]f64) { impl_Uniform3dv(location, count, value); } + Uniform4dv :: #force_inline proc "c" (location: i32, count: i32, value: [^]f64) { impl_Uniform4dv(location, count, value); } + UniformMatrix2dv :: #force_inline proc "c" (location: i32, count: i32, transpose: bool, value: [^]f64) { impl_UniformMatrix2dv(location, count, transpose, value); } + UniformMatrix3dv :: #force_inline proc "c" (location: i32, count: i32, transpose: bool, value: [^]f64) { impl_UniformMatrix3dv(location, count, transpose, value); } + UniformMatrix4dv :: #force_inline proc "c" (location: i32, count: i32, transpose: bool, value: [^]f64) { impl_UniformMatrix4dv(location, count, transpose, value); } + UniformMatrix2x3dv :: #force_inline proc "c" (location: i32, count: i32, transpose: bool, value: [^]f64) { impl_UniformMatrix2x3dv(location, count, transpose, value); } + UniformMatrix2x4dv :: #force_inline proc "c" (location: i32, count: i32, transpose: bool, value: [^]f64) { impl_UniformMatrix2x4dv(location, count, transpose, value); } + UniformMatrix3x2dv :: #force_inline proc "c" (location: i32, count: i32, transpose: bool, value: [^]f64) { impl_UniformMatrix3x2dv(location, count, transpose, value); } + UniformMatrix3x4dv :: #force_inline proc "c" (location: i32, count: i32, transpose: bool, value: [^]f64) { impl_UniformMatrix3x4dv(location, count, transpose, value); } + UniformMatrix4x2dv :: #force_inline proc "c" (location: i32, count: i32, transpose: bool, value: [^]f64) { impl_UniformMatrix4x2dv(location, count, transpose, value); } + UniformMatrix4x3dv :: #force_inline proc "c" (location: i32, count: i32, transpose: bool, value: [^]f64) { impl_UniformMatrix4x3dv(location, count, transpose, value); } + GetUniformdv :: #force_inline proc "c" (program: u32, location: i32, params: [^]f64) { impl_GetUniformdv(program, location, params); } + GetSubroutineUniformLocation :: #force_inline proc "c" (program: u32, shadertype: u32, name: cstring) -> i32 { ret := impl_GetSubroutineUniformLocation(program, shadertype, name); return ret; } + GetSubroutineIndex :: #force_inline proc "c" (program: u32, shadertype: u32, name: cstring) -> u32 { ret := impl_GetSubroutineIndex(program, shadertype, name); return ret; } + GetActiveSubroutineUniformiv :: #force_inline proc "c" (program: u32, shadertype: u32, index: u32, pname: u32, values: [^]i32) { impl_GetActiveSubroutineUniformiv(program, shadertype, index, pname, values); } + GetActiveSubroutineUniformName :: #force_inline proc "c" (program: u32, shadertype: u32, index: u32, bufsize: i32, length: ^i32, name: [^]u8) { impl_GetActiveSubroutineUniformName(program, shadertype, index, bufsize, length, name); } + GetActiveSubroutineName :: #force_inline proc "c" (program: u32, shadertype: u32, index: u32, bufsize: i32, length: ^i32, name: [^]u8) { impl_GetActiveSubroutineName(program, shadertype, index, bufsize, length, name); } + UniformSubroutinesuiv :: #force_inline proc "c" (shadertype: u32, count: i32, indices: ^u32) { impl_UniformSubroutinesuiv(shadertype, count, indices); } + GetUniformSubroutineuiv :: #force_inline proc "c" (shadertype: u32, location: i32, params: [^]u32) { impl_GetUniformSubroutineuiv(shadertype, location, params); } + GetProgramStageiv :: #force_inline proc "c" (program: u32, shadertype: u32, pname: u32, values: [^]i32) { impl_GetProgramStageiv(program, shadertype, pname, values); } + PatchParameteri :: #force_inline proc "c" (pname: u32, value: i32) { impl_PatchParameteri(pname, value); } + PatchParameterfv :: #force_inline proc "c" (pname: u32, values: [^]f32) { impl_PatchParameterfv(pname, values); } + BindTransformFeedback :: #force_inline proc "c" (target: u32, id: u32) { impl_BindTransformFeedback(target, id); } + DeleteTransformFeedbacks :: #force_inline proc "c" (n: i32, ids: [^]u32) { impl_DeleteTransformFeedbacks(n, ids); } + GenTransformFeedbacks :: #force_inline proc "c" (n: i32, ids: [^]u32) { impl_GenTransformFeedbacks(n, ids); } + IsTransformFeedback :: #force_inline proc "c" (id: u32) -> bool { ret := impl_IsTransformFeedback(id); return ret; } + PauseTransformFeedback :: #force_inline proc "c" () { impl_PauseTransformFeedback(); } + ResumeTransformFeedback :: #force_inline proc "c" () { impl_ResumeTransformFeedback(); } + DrawTransformFeedback :: #force_inline proc "c" (mode: u32, id: u32) { impl_DrawTransformFeedback(mode, id); } + DrawTransformFeedbackStream :: #force_inline proc "c" (mode: u32, id: u32, stream: u32) { impl_DrawTransformFeedbackStream(mode, id, stream); } + BeginQueryIndexed :: #force_inline proc "c" (target: u32, index: u32, id: u32) { impl_BeginQueryIndexed(target, index, id); } + EndQueryIndexed :: #force_inline proc "c" (target: u32, index: u32) { impl_EndQueryIndexed(target, index); } + GetQueryIndexediv :: #force_inline proc "c" (target: u32, index: u32, pname: u32, params: [^]i32) { impl_GetQueryIndexediv(target, index, pname, params); } + + // VERSION_4_1 + ReleaseShaderCompiler :: #force_inline proc "c" () { impl_ReleaseShaderCompiler(); } + ShaderBinary :: #force_inline proc "c" (count: i32, shaders: ^u32, binaryformat: u32, binary: rawptr, length: i32) { impl_ShaderBinary(count, shaders, binaryformat, binary, length); } + GetShaderPrecisionFormat :: #force_inline proc "c" (shadertype: u32, precisiontype: u32, range: ^i32, precision: ^i32) { impl_GetShaderPrecisionFormat(shadertype, precisiontype, range, precision); } + DepthRangef :: #force_inline proc "c" (n: f32, f: f32) { impl_DepthRangef(n, f); } + ClearDepthf :: #force_inline proc "c" (d: f32) { impl_ClearDepthf(d); } + GetProgramBinary :: #force_inline proc "c" (program: u32, bufSize: i32, length: ^i32, binaryFormat: ^u32, binary: rawptr) { impl_GetProgramBinary(program, bufSize, length, binaryFormat, binary); } + ProgramBinary :: #force_inline proc "c" (program: u32, binaryFormat: u32, binary: rawptr, length: i32) { impl_ProgramBinary(program, binaryFormat, binary, length); } + ProgramParameteri :: #force_inline proc "c" (program: u32, pname: u32, value: i32) { impl_ProgramParameteri(program, pname, value); } + UseProgramStages :: #force_inline proc "c" (pipeline: u32, stages: u32, program: u32) { impl_UseProgramStages(pipeline, stages, program); } + ActiveShaderProgram :: #force_inline proc "c" (pipeline: u32, program: u32) { impl_ActiveShaderProgram(pipeline, program); } + CreateShaderProgramv :: #force_inline proc "c" (type: u32, count: i32, strings: [^]cstring) -> u32 { ret := impl_CreateShaderProgramv(type, count, strings); return ret; } + BindProgramPipeline :: #force_inline proc "c" (pipeline: u32) { impl_BindProgramPipeline(pipeline); } + DeleteProgramPipelines :: #force_inline proc "c" (n: i32, pipelines: [^]u32) { impl_DeleteProgramPipelines(n, pipelines); } + GenProgramPipelines :: #force_inline proc "c" (n: i32, pipelines: [^]u32) { impl_GenProgramPipelines(n, pipelines); } + IsProgramPipeline :: #force_inline proc "c" (pipeline: u32) -> bool { ret := impl_IsProgramPipeline(pipeline); return ret; } + GetProgramPipelineiv :: #force_inline proc "c" (pipeline: u32, pname: u32, params: [^]i32) { impl_GetProgramPipelineiv(pipeline, pname, params); } + ProgramUniform1i :: #force_inline proc "c" (program: u32, location: i32, v0: i32) { impl_ProgramUniform1i(program, location, v0); } + ProgramUniform1iv :: #force_inline proc "c" (program: u32, location: i32, count: i32, value: [^]i32) { impl_ProgramUniform1iv(program, location, count, value); } + ProgramUniform1f :: #force_inline proc "c" (program: u32, location: i32, v0: f32) { impl_ProgramUniform1f(program, location, v0); } + ProgramUniform1fv :: #force_inline proc "c" (program: u32, location: i32, count: i32, value: [^]f32) { impl_ProgramUniform1fv(program, location, count, value); } + ProgramUniform1d :: #force_inline proc "c" (program: u32, location: i32, v0: f64) { impl_ProgramUniform1d(program, location, v0); } + ProgramUniform1dv :: #force_inline proc "c" (program: u32, location: i32, count: i32, value: [^]f64) { impl_ProgramUniform1dv(program, location, count, value); } + ProgramUniform1ui :: #force_inline proc "c" (program: u32, location: i32, v0: u32) { impl_ProgramUniform1ui(program, location, v0); } + ProgramUniform1uiv :: #force_inline proc "c" (program: u32, location: i32, count: i32, value: [^]u32) { impl_ProgramUniform1uiv(program, location, count, value); } + ProgramUniform2i :: #force_inline proc "c" (program: u32, location: i32, v0: i32, v1: i32) { impl_ProgramUniform2i(program, location, v0, v1); } + ProgramUniform2iv :: #force_inline proc "c" (program: u32, location: i32, count: i32, value: [^]i32) { impl_ProgramUniform2iv(program, location, count, value); } + ProgramUniform2f :: #force_inline proc "c" (program: u32, location: i32, v0: f32, v1: f32) { impl_ProgramUniform2f(program, location, v0, v1); } + ProgramUniform2fv :: #force_inline proc "c" (program: u32, location: i32, count: i32, value: [^]f32) { impl_ProgramUniform2fv(program, location, count, value); } + ProgramUniform2d :: #force_inline proc "c" (program: u32, location: i32, v0: f64, v1: f64) { impl_ProgramUniform2d(program, location, v0, v1); } + ProgramUniform2dv :: #force_inline proc "c" (program: u32, location: i32, count: i32, value: [^]f64) { impl_ProgramUniform2dv(program, location, count, value); } + ProgramUniform2ui :: #force_inline proc "c" (program: u32, location: i32, v0: u32, v1: u32) { impl_ProgramUniform2ui(program, location, v0, v1); } + ProgramUniform2uiv :: #force_inline proc "c" (program: u32, location: i32, count: i32, value: [^]u32) { impl_ProgramUniform2uiv(program, location, count, value); } + ProgramUniform3i :: #force_inline proc "c" (program: u32, location: i32, v0: i32, v1: i32, v2: i32) { impl_ProgramUniform3i(program, location, v0, v1, v2); } + ProgramUniform3iv :: #force_inline proc "c" (program: u32, location: i32, count: i32, value: [^]i32) { impl_ProgramUniform3iv(program, location, count, value); } + ProgramUniform3f :: #force_inline proc "c" (program: u32, location: i32, v0: f32, v1: f32, v2: f32) { impl_ProgramUniform3f(program, location, v0, v1, v2); } + ProgramUniform3fv :: #force_inline proc "c" (program: u32, location: i32, count: i32, value: [^]f32) { impl_ProgramUniform3fv(program, location, count, value); } + ProgramUniform3d :: #force_inline proc "c" (program: u32, location: i32, v0: f64, v1: f64, v2: f64) { impl_ProgramUniform3d(program, location, v0, v1, v2); } + ProgramUniform3dv :: #force_inline proc "c" (program: u32, location: i32, count: i32, value: [^]f64) { impl_ProgramUniform3dv(program, location, count, value); } + ProgramUniform3ui :: #force_inline proc "c" (program: u32, location: i32, v0: u32, v1: u32, v2: u32) { impl_ProgramUniform3ui(program, location, v0, v1, v2); } + ProgramUniform3uiv :: #force_inline proc "c" (program: u32, location: i32, count: i32, value: [^]u32) { impl_ProgramUniform3uiv(program, location, count, value); } + ProgramUniform4i :: #force_inline proc "c" (program: u32, location: i32, v0: i32, v1: i32, v2: i32, v3: i32) { impl_ProgramUniform4i(program, location, v0, v1, v2, v3); } + ProgramUniform4iv :: #force_inline proc "c" (program: u32, location: i32, count: i32, value: [^]i32) { impl_ProgramUniform4iv(program, location, count, value); } + ProgramUniform4f :: #force_inline proc "c" (program: u32, location: i32, v0: f32, v1: f32, v2: f32, v3: f32) { impl_ProgramUniform4f(program, location, v0, v1, v2, v3); } + ProgramUniform4fv :: #force_inline proc "c" (program: u32, location: i32, count: i32, value: [^]f32) { impl_ProgramUniform4fv(program, location, count, value); } + ProgramUniform4d :: #force_inline proc "c" (program: u32, location: i32, v0: f64, v1: f64, v2: f64, v3: f64) { impl_ProgramUniform4d(program, location, v0, v1, v2, v3); } + ProgramUniform4dv :: #force_inline proc "c" (program: u32, location: i32, count: i32, value: [^]f64) { impl_ProgramUniform4dv(program, location, count, value); } + ProgramUniform4ui :: #force_inline proc "c" (program: u32, location: i32, v0: u32, v1: u32, v2: u32, v3: u32) { impl_ProgramUniform4ui(program, location, v0, v1, v2, v3); } + ProgramUniform4uiv :: #force_inline proc "c" (program: u32, location: i32, count: i32, value: [^]u32) { impl_ProgramUniform4uiv(program, location, count, value); } + ProgramUniformMatrix2fv :: #force_inline proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f32) { impl_ProgramUniformMatrix2fv(program, location, count, transpose, value); } + ProgramUniformMatrix3fv :: #force_inline proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f32) { impl_ProgramUniformMatrix3fv(program, location, count, transpose, value); } + ProgramUniformMatrix4fv :: #force_inline proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f32) { impl_ProgramUniformMatrix4fv(program, location, count, transpose, value); } + ProgramUniformMatrix2dv :: #force_inline proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f64) { impl_ProgramUniformMatrix2dv(program, location, count, transpose, value); } + ProgramUniformMatrix3dv :: #force_inline proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f64) { impl_ProgramUniformMatrix3dv(program, location, count, transpose, value); } + ProgramUniformMatrix4dv :: #force_inline proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f64) { impl_ProgramUniformMatrix4dv(program, location, count, transpose, value); } + ProgramUniformMatrix2x3fv :: #force_inline proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f32) { impl_ProgramUniformMatrix2x3fv(program, location, count, transpose, value); } + ProgramUniformMatrix3x2fv :: #force_inline proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f32) { impl_ProgramUniformMatrix3x2fv(program, location, count, transpose, value); } + ProgramUniformMatrix2x4fv :: #force_inline proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f32) { impl_ProgramUniformMatrix2x4fv(program, location, count, transpose, value); } + ProgramUniformMatrix4x2fv :: #force_inline proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f32) { impl_ProgramUniformMatrix4x2fv(program, location, count, transpose, value); } + ProgramUniformMatrix3x4fv :: #force_inline proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f32) { impl_ProgramUniformMatrix3x4fv(program, location, count, transpose, value); } + ProgramUniformMatrix4x3fv :: #force_inline proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f32) { impl_ProgramUniformMatrix4x3fv(program, location, count, transpose, value); } + ProgramUniformMatrix2x3dv :: #force_inline proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f64) { impl_ProgramUniformMatrix2x3dv(program, location, count, transpose, value); } + ProgramUniformMatrix3x2dv :: #force_inline proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f64) { impl_ProgramUniformMatrix3x2dv(program, location, count, transpose, value); } + ProgramUniformMatrix2x4dv :: #force_inline proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f64) { impl_ProgramUniformMatrix2x4dv(program, location, count, transpose, value); } + ProgramUniformMatrix4x2dv :: #force_inline proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f64) { impl_ProgramUniformMatrix4x2dv(program, location, count, transpose, value); } + ProgramUniformMatrix3x4dv :: #force_inline proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f64) { impl_ProgramUniformMatrix3x4dv(program, location, count, transpose, value); } + ProgramUniformMatrix4x3dv :: #force_inline proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f64) { impl_ProgramUniformMatrix4x3dv(program, location, count, transpose, value); } + ValidateProgramPipeline :: #force_inline proc "c" (pipeline: u32) { impl_ValidateProgramPipeline(pipeline); } + GetProgramPipelineInfoLog :: #force_inline proc "c" (pipeline: u32, bufSize: i32, length: ^i32, infoLog: [^]u8) { impl_GetProgramPipelineInfoLog(pipeline, bufSize, length, infoLog); } + VertexAttribL1d :: #force_inline proc "c" (index: u32, x: f64) { impl_VertexAttribL1d(index, x); } + VertexAttribL2d :: #force_inline proc "c" (index: u32, x: f64, y: f64) { impl_VertexAttribL2d(index, x, y); } + VertexAttribL3d :: #force_inline proc "c" (index: u32, x: f64, y: f64, z: f64) { impl_VertexAttribL3d(index, x, y, z); } + VertexAttribL4d :: #force_inline proc "c" (index: u32, x: f64, y: f64, z: f64, w: f64) { impl_VertexAttribL4d(index, x, y, z, w); } + VertexAttribL1dv :: #force_inline proc "c" (index: u32, v: ^f64) { impl_VertexAttribL1dv(index, v); } + VertexAttribL2dv :: #force_inline proc "c" (index: u32, v: ^f64) { impl_VertexAttribL2dv(index, v); } + VertexAttribL3dv :: #force_inline proc "c" (index: u32, v: ^f64) { impl_VertexAttribL3dv(index, v); } + VertexAttribL4dv :: #force_inline proc "c" (index: u32, v: ^f64) { impl_VertexAttribL4dv(index, v); } + VertexAttribLPointer :: #force_inline proc "c" (index: u32, size: i32, type: u32, stride: i32, pointer: rawptr) { impl_VertexAttribLPointer(index, size, type, stride, pointer); } + GetVertexAttribLdv :: #force_inline proc "c" (index: u32, pname: u32, params: [^]f64) { impl_GetVertexAttribLdv(index, pname, params); } + ViewportArrayv :: #force_inline proc "c" (first: u32, count: i32, v: [^]f32) { impl_ViewportArrayv(first, count, v); } + ViewportIndexedf :: #force_inline proc "c" (index: u32, x: f32, y: f32, w: f32, h: f32) { impl_ViewportIndexedf(index, x, y, w, h); } + ViewportIndexedfv :: #force_inline proc "c" (index: u32, v: ^f32) { impl_ViewportIndexedfv(index, v); } + ScissorArrayv :: #force_inline proc "c" (first: u32, count: i32, v: [^]i32) { impl_ScissorArrayv(first, count, v); } + ScissorIndexed :: #force_inline proc "c" (index: u32, left: i32, bottom: i32, width: i32, height: i32) { impl_ScissorIndexed(index, left, bottom, width, height); } + ScissorIndexedv :: #force_inline proc "c" (index: u32, v: ^i32) { impl_ScissorIndexedv(index, v); } + DepthRangeArrayv :: #force_inline proc "c" (first: u32, count: i32, v: [^]f64) { impl_DepthRangeArrayv(first, count, v); } + DepthRangeIndexed :: #force_inline proc "c" (index: u32, n: f64, f: f64) { impl_DepthRangeIndexed(index, n, f); } + GetFloati_v :: #force_inline proc "c" (target: u32, index: u32, data: ^f32) { impl_GetFloati_v(target, index, data); } + GetDoublei_v :: #force_inline proc "c" (target: u32, index: u32, data: ^f64) { impl_GetDoublei_v(target, index, data); } + + // VERSION_4_2 + DrawArraysInstancedBaseInstance :: #force_inline proc "c" (mode: u32, first: i32, count: i32, instancecount: i32, baseinstance: u32) { impl_DrawArraysInstancedBaseInstance(mode, first, count, instancecount, baseinstance); } + DrawElementsInstancedBaseInstance :: #force_inline proc "c" (mode: u32, count: i32, type: u32, indices: rawptr, instancecount: i32, baseinstance: u32) { impl_DrawElementsInstancedBaseInstance(mode, count, type, indices, instancecount, baseinstance); } + DrawElementsInstancedBaseVertexBaseInstance :: #force_inline proc "c" (mode: u32, count: i32, type: u32, indices: rawptr, instancecount: i32, basevertex: i32, baseinstance: u32) { impl_DrawElementsInstancedBaseVertexBaseInstance(mode, count, type, indices, instancecount, basevertex, baseinstance); } + GetInternalformativ :: #force_inline proc "c" (target: u32, internalformat: u32, pname: u32, bufSize: i32, params: [^]i32) { impl_GetInternalformativ(target, internalformat, pname, bufSize, params); } + GetActiveAtomicCounterBufferiv :: #force_inline proc "c" (program: u32, bufferIndex: u32, pname: u32, params: [^]i32) { impl_GetActiveAtomicCounterBufferiv(program, bufferIndex, pname, params); } + BindImageTexture :: #force_inline proc "c" (unit: u32, texture: u32, level: i32, layered: u8, layer: i32, access: u32, format: u32) { impl_BindImageTexture(unit, texture, level, layered, layer, access, format); } + MemoryBarrier :: #force_inline proc "c" (barriers: u32) { impl_MemoryBarrier(barriers); } + TexStorage1D :: #force_inline proc "c" (target: u32, levels: i32, internalformat: u32, width: i32) { impl_TexStorage1D(target, levels, internalformat, width); } + TexStorage2D :: #force_inline proc "c" (target: u32, levels: i32, internalformat: u32, width: i32, height: i32) { impl_TexStorage2D(target, levels, internalformat, width, height); } + TexStorage3D :: #force_inline proc "c" (target: u32, levels: i32, internalformat: u32, width: i32, height: i32, depth: i32) { impl_TexStorage3D(target, levels, internalformat, width, height, depth); } + DrawTransformFeedbackInstanced :: #force_inline proc "c" (mode: u32, id: u32, instancecount: i32) { impl_DrawTransformFeedbackInstanced(mode, id, instancecount); } + DrawTransformFeedbackStreamInstanced :: #force_inline proc "c" (mode: u32, id: u32, stream: u32, instancecount: i32) { impl_DrawTransformFeedbackStreamInstanced(mode, id, stream, instancecount); } + + // VERSION_4_3 + ClearBufferData :: #force_inline proc "c" (target: u32, internalformat: u32, format: u32, type: u32, data: rawptr) { impl_ClearBufferData(target, internalformat, format, type, data); } + ClearBufferSubData :: #force_inline proc "c" (target: u32, internalformat: u32, offset: int, size: int, format: u32, type: u32, data: rawptr) { impl_ClearBufferSubData(target, internalformat, offset, size, format, type, data); } + DispatchCompute :: #force_inline proc "c" (num_groups_x: u32, num_groups_y: u32, num_groups_z: u32) { impl_DispatchCompute(num_groups_x, num_groups_y, num_groups_z); } + DispatchComputeIndirect :: #force_inline proc "c" (indirect: int) { impl_DispatchComputeIndirect(indirect); } + CopyImageSubData :: #force_inline proc "c" (srcName: u32, srcTarget: u32, srcLevel: i32, srcX: i32, srcY: i32, srcZ: i32, dstName: u32, dstTarget: u32, dstLevel: i32, dstX: i32, dstY: i32, dstZ: i32, srcWidth: i32, srcHeight: i32, srcDepth: i32) { impl_CopyImageSubData(srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, srcWidth, srcHeight, srcDepth); } + FramebufferParameteri :: #force_inline proc "c" (target: u32, pname: u32, param: i32) { impl_FramebufferParameteri(target, pname, param); } + GetFramebufferParameteriv :: #force_inline proc "c" (target: u32, pname: u32, params: [^]i32) { impl_GetFramebufferParameteriv(target, pname, params); } + GetInternalformati64v :: #force_inline proc "c" (target: u32, internalformat: u32, pname: u32, bufSize: i32, params: [^]i64) { impl_GetInternalformati64v(target, internalformat, pname, bufSize, params); } + InvalidateTexSubImage :: #force_inline proc "c" (texture: u32, level: i32, xoffset: i32, yoffset: i32, zoffset: i32, width: i32, height: i32, depth: i32) { impl_InvalidateTexSubImage(texture, level, xoffset, yoffset, zoffset, width, height, depth); } + InvalidateTexImage :: #force_inline proc "c" (texture: u32, level: i32) { impl_InvalidateTexImage(texture, level); } + InvalidateBufferSubData :: #force_inline proc "c" (buffer: u32, offset: int, length: int) { impl_InvalidateBufferSubData(buffer, offset, length); } + InvalidateBufferData :: #force_inline proc "c" (buffer: u32) { impl_InvalidateBufferData(buffer); } + InvalidateFramebuffer :: #force_inline proc "c" (target: u32, numAttachments: i32, attachments: ^u32) { impl_InvalidateFramebuffer(target, numAttachments, attachments); } + InvalidateSubFramebuffer :: #force_inline proc "c" (target: u32, numAttachments: i32, attachments: ^u32, x: i32, y: i32, width: i32, height: i32) { impl_InvalidateSubFramebuffer(target, numAttachments, attachments, x, y, width, height); } + MultiDrawArraysIndirect :: #force_inline proc "c" (mode: u32, indirect: rawptr, drawcount: i32, stride: i32) { impl_MultiDrawArraysIndirect(mode, indirect, drawcount, stride); } + MultiDrawElementsIndirect :: #force_inline proc "c" (mode: u32, type: u32, indirect: rawptr, drawcount: i32, stride: i32) { impl_MultiDrawElementsIndirect(mode, type, indirect, drawcount, stride); } + GetProgramInterfaceiv :: #force_inline proc "c" (program: u32, programInterface: u32, pname: u32, params: [^]i32) { impl_GetProgramInterfaceiv(program, programInterface, pname, params); } + GetProgramResourceIndex :: #force_inline proc "c" (program: u32, programInterface: u32, name: cstring) -> u32 { ret := impl_GetProgramResourceIndex(program, programInterface, name) ; return ret; } + GetProgramResourceName :: #force_inline proc "c" (program: u32, programInterface: u32, index: u32, bufSize: i32, length: ^i32, name: [^]u8) { impl_GetProgramResourceName(program, programInterface, index, bufSize, length, name); } + GetProgramResourceiv :: #force_inline proc "c" (program: u32, programInterface: u32, index: u32, propCount: i32, props: [^]u32, bufSize: i32, length: ^i32, params: [^]i32) { impl_GetProgramResourceiv(program, programInterface, index, propCount, props, bufSize, length, params); } + GetProgramResourceLocation :: #force_inline proc "c" (program: u32, programInterface: u32, name: cstring) -> i32 { ret := impl_GetProgramResourceLocation(program, programInterface, name); return ret; } + GetProgramResourceLocationIndex :: #force_inline proc "c" (program: u32, programInterface: u32, name: cstring) -> i32 { ret := impl_GetProgramResourceLocationIndex(program, programInterface, name); return ret; } + ShaderStorageBlockBinding :: #force_inline proc "c" (program: u32, storageBlockIndex: u32, storageBlockBinding: u32) { impl_ShaderStorageBlockBinding(program, storageBlockIndex, storageBlockBinding); } + TexBufferRange :: #force_inline proc "c" (target: u32, internalformat: u32, buffer: u32, offset: int, size: int) { impl_TexBufferRange(target, internalformat, buffer, offset, size); } + TexStorage2DMultisample :: #force_inline proc "c" (target: u32, samples: i32, internalformat: u32, width: i32, height: i32, fixedsamplelocations: u8) { impl_TexStorage2DMultisample(target, samples, internalformat, width, height, fixedsamplelocations); } + TexStorage3DMultisample :: #force_inline proc "c" (target: u32, samples: i32, internalformat: u32, width: i32, height: i32, depth: i32, fixedsamplelocations: u8) { impl_TexStorage3DMultisample(target, samples, internalformat, width, height, depth, fixedsamplelocations); } + TextureView :: #force_inline proc "c" (texture: u32, target: u32, origtexture: u32, internalformat: u32, minlevel: u32, numlevels: u32, minlayer: u32, numlayers: u32) { impl_TextureView(texture, target, origtexture, internalformat, minlevel, numlevels, minlayer, numlayers); } + BindVertexBuffer :: #force_inline proc "c" (bindingindex: u32, buffer: u32, offset: int, stride: i32) { impl_BindVertexBuffer(bindingindex, buffer, offset, stride); } + VertexAttribFormat :: #force_inline proc "c" (attribindex: u32, size: i32, type: u32, normalized: bool, relativeoffset: u32) { impl_VertexAttribFormat(attribindex, size, type, normalized, relativeoffset); } + VertexAttribIFormat :: #force_inline proc "c" (attribindex: u32, size: i32, type: u32, relativeoffset: u32) { impl_VertexAttribIFormat(attribindex, size, type, relativeoffset); } + VertexAttribLFormat :: #force_inline proc "c" (attribindex: u32, size: i32, type: u32, relativeoffset: u32) { impl_VertexAttribLFormat(attribindex, size, type, relativeoffset); } + VertexAttribBinding :: #force_inline proc "c" (attribindex: u32, bindingindex: u32) { impl_VertexAttribBinding(attribindex, bindingindex); } + VertexBindingDivisor :: #force_inline proc "c" (bindingindex: u32, divisor: u32) { impl_VertexBindingDivisor(bindingindex, divisor); } + DebugMessageControl :: #force_inline proc "c" (source: u32, type: u32, severity: u32, count: i32, ids: [^]u32, enabled: u8) { impl_DebugMessageControl(source, type, severity, count, ids, enabled); } + DebugMessageInsert :: #force_inline proc "c" (source: u32, type: u32, id: u32, severity: u32, length: i32, buf: ^u8) { impl_DebugMessageInsert(source, type, id, severity, length, buf); } + DebugMessageCallback :: #force_inline proc "c" (callback: debug_proc_t, userParam: rawptr) { impl_DebugMessageCallback(callback, userParam); } + GetDebugMessageLog :: #force_inline proc "c" (count: u32, bufSize: i32, sources: [^]u32, types: [^]u32, ids: [^]u32, severities: [^]u32, lengths: [^]i32, messageLog: [^]u8) -> u32 { ret := impl_GetDebugMessageLog(count, bufSize, sources, types, ids, severities, lengths, messageLog); return ret; } + PushDebugGroup :: #force_inline proc "c" (source: u32, id: u32, length: i32, message: cstring) { impl_PushDebugGroup(source, id, length, message); } + PopDebugGroup :: #force_inline proc "c" () { impl_PopDebugGroup(); } + ObjectLabel :: #force_inline proc "c" (identifier: u32, name: u32, length: i32, label: [^]u8) { impl_ObjectLabel(identifier, name, length, label); } + GetObjectLabel :: #force_inline proc "c" (identifier: u32, name: u32, bufSize: i32, length: ^i32, label: [^]u8) { impl_GetObjectLabel(identifier, name, bufSize, length, label); } + ObjectPtrLabel :: #force_inline proc "c" (ptr: rawptr, length: i32, label: [^]u8) { impl_ObjectPtrLabel(ptr, length, label); } + GetObjectPtrLabel :: #force_inline proc "c" (ptr: rawptr, bufSize: i32, length: ^i32, label: [^]u8) { impl_GetObjectPtrLabel(ptr, bufSize, length, label); } + + // VERSION_4_4 + BufferStorage :: #force_inline proc "c" (target: u32, size: int, data: rawptr, flags: u32) { impl_BufferStorage(target, size, data, flags); } + ClearTexImage :: #force_inline proc "c" (texture: u32, level: i32, format: u32, type: u32, data: rawptr) { impl_ClearTexImage(texture, level, format, type, data); } + ClearTexSubImage :: #force_inline proc "c" (texture: u32, level: i32, xoffset: i32, yoffset: i32, zoffset: i32, width: i32, height: i32, depth: i32, format: u32, type: u32, data: rawptr) { impl_ClearTexSubImage(texture, level, xoffset, yoffset, zoffset, width, height, depth, format, type, data); } + BindBuffersBase :: #force_inline proc "c" (target: u32, first: u32, count: i32, buffers: [^]u32) { impl_BindBuffersBase(target, first, count, buffers); } + BindBuffersRange :: #force_inline proc "c" (target: u32, first: u32, count: i32, buffers: [^]u32, offsets: [^]uintptr, sizes: [^]int) { impl_BindBuffersRange(target, first, count, buffers, offsets, sizes); } + BindTextures :: #force_inline proc "c" (first: u32, count: i32, textures: [^]u32) { impl_BindTextures(first, count, textures); } + BindSamplers :: #force_inline proc "c" (first: u32, count: i32, samplers: [^]u32) { impl_BindSamplers(first, count, samplers); } + BindImageTextures :: #force_inline proc "c" (first: u32, count: i32, textures: [^]u32) { impl_BindImageTextures(first, count, textures); } + BindVertexBuffers :: #force_inline proc "c" (first: u32, count: i32, buffers: [^]u32, offsets: [^]uintptr, strides: [^]i32) { impl_BindVertexBuffers(first, count, buffers, offsets, strides); } + + // VERSION_4_5 + ClipControl :: #force_inline proc "c" (origin: u32, depth: u32) { impl_ClipControl(origin, depth); } + CreateTransformFeedbacks :: #force_inline proc "c" (n: i32, ids: [^]u32) { impl_CreateTransformFeedbacks(n, ids); } + TransformFeedbackBufferBase :: #force_inline proc "c" (xfb: u32, index: u32, buffer: u32) { impl_TransformFeedbackBufferBase(xfb, index, buffer); } + TransformFeedbackBufferRange :: #force_inline proc "c" (xfb: u32, index: u32, buffer: u32, offset: int, size: int) { impl_TransformFeedbackBufferRange(xfb, index, buffer, offset, size); } + GetTransformFeedbackiv :: #force_inline proc "c" (xfb: u32, pname: u32, param: ^i32) { impl_GetTransformFeedbackiv(xfb, pname, param); } + GetTransformFeedbacki_v :: #force_inline proc "c" (xfb: u32, pname: u32, index: u32, param: ^i32) { impl_GetTransformFeedbacki_v(xfb, pname, index, param); } + GetTransformFeedbacki64_v :: #force_inline proc "c" (xfb: u32, pname: u32, index: u32, param: ^i64) { impl_GetTransformFeedbacki64_v(xfb, pname, index, param); } + CreateBuffers :: #force_inline proc "c" (n: i32, buffers: [^]u32) { impl_CreateBuffers(n, buffers); } + NamedBufferStorage :: #force_inline proc "c" (buffer: u32, size: int, data: rawptr, flags: u32) { impl_NamedBufferStorage(buffer, size, data, flags); } + NamedBufferData :: #force_inline proc "c" (buffer: u32, size: int, data: rawptr, usage: u32) { impl_NamedBufferData(buffer, size, data, usage); } + NamedBufferSubData :: #force_inline proc "c" (buffer: u32, offset: int, size: int, data: rawptr) { impl_NamedBufferSubData(buffer, offset, size, data); } + CopyNamedBufferSubData :: #force_inline proc "c" (readBuffer: u32, writeBuffer: u32, readOffset: int, writeOffset: int, size: int) { impl_CopyNamedBufferSubData(readBuffer, writeBuffer, readOffset, writeOffset, size); } + ClearNamedBufferData :: #force_inline proc "c" (buffer: u32, internalformat: u32, format: u32, type: u32, data: rawptr) { impl_ClearNamedBufferData(buffer, internalformat, format, type, data); } + ClearNamedBufferSubData :: #force_inline proc "c" (buffer: u32, internalformat: u32, offset: int, size: int, format: u32, type: u32, data: rawptr) { impl_ClearNamedBufferSubData(buffer, internalformat, offset, size, format, type, data); } + MapNamedBuffer :: #force_inline proc "c" (buffer: u32, access: u32) -> rawptr { ret := impl_MapNamedBuffer(buffer, access); return ret; } + MapNamedBufferRange :: #force_inline proc "c" (buffer: u32, offset: int, length: int, access: u32) -> rawptr { ret := impl_MapNamedBufferRange(buffer, offset, length, access); return ret; } + UnmapNamedBuffer :: #force_inline proc "c" (buffer: u32) -> bool { ret := impl_UnmapNamedBuffer(buffer); return ret; } + FlushMappedNamedBufferRange :: #force_inline proc "c" (buffer: u32, offset: int, length: int) { impl_FlushMappedNamedBufferRange(buffer, offset, length); } + GetNamedBufferParameteriv :: #force_inline proc "c" (buffer: u32, pname: u32, params: [^]i32) { impl_GetNamedBufferParameteriv(buffer, pname, params); } + GetNamedBufferParameteri64v :: #force_inline proc "c" (buffer: u32, pname: u32, params: [^]i64) { impl_GetNamedBufferParameteri64v(buffer, pname, params); } + GetNamedBufferPointerv :: #force_inline proc "c" (buffer: u32, pname: u32, params: [^]rawptr) { impl_GetNamedBufferPointerv(buffer, pname, params); } + GetNamedBufferSubData :: #force_inline proc "c" (buffer: u32, offset: int, size: int, data: rawptr) { impl_GetNamedBufferSubData(buffer, offset, size, data); } + CreateFramebuffers :: #force_inline proc "c" (n: i32, framebuffers: [^]u32) { impl_CreateFramebuffers(n, framebuffers); } + NamedFramebufferRenderbuffer :: #force_inline proc "c" (framebuffer: u32, attachment: u32, renderbuffertarget: u32, renderbuffer: u32) { impl_NamedFramebufferRenderbuffer(framebuffer, attachment, renderbuffertarget, renderbuffer); } + NamedFramebufferParameteri :: #force_inline proc "c" (framebuffer: u32, pname: u32, param: i32) { impl_NamedFramebufferParameteri(framebuffer, pname, param); } + NamedFramebufferTexture :: #force_inline proc "c" (framebuffer: u32, attachment: u32, texture: u32, level: i32) { impl_NamedFramebufferTexture(framebuffer, attachment, texture, level); } + NamedFramebufferTextureLayer :: #force_inline proc "c" (framebuffer: u32, attachment: u32, texture: u32, level: i32, layer: i32) { impl_NamedFramebufferTextureLayer(framebuffer, attachment, texture, level, layer); } + NamedFramebufferDrawBuffer :: #force_inline proc "c" (framebuffer: u32, buf: u32) { impl_NamedFramebufferDrawBuffer(framebuffer, buf); } + NamedFramebufferDrawBuffers :: #force_inline proc "c" (framebuffer: u32, n: i32, bufs: [^]u32) { impl_NamedFramebufferDrawBuffers(framebuffer, n, bufs); } + NamedFramebufferReadBuffer :: #force_inline proc "c" (framebuffer: u32, src: u32) { impl_NamedFramebufferReadBuffer(framebuffer, src); } + InvalidateNamedFramebufferData :: #force_inline proc "c" (framebuffer: u32, numAttachments: i32, attachments: ^u32) { impl_InvalidateNamedFramebufferData(framebuffer, numAttachments, attachments); } + InvalidateNamedFramebufferSubData :: #force_inline proc "c" (framebuffer: u32, numAttachments: i32, attachments: ^u32, x: i32, y: i32, width: i32, height: i32) { impl_InvalidateNamedFramebufferSubData(framebuffer, numAttachments, attachments, x, y, width, height); } + ClearNamedFramebufferiv :: #force_inline proc "c" (framebuffer: u32, buffer: u32, drawbuffer: i32, value: ^i32) { impl_ClearNamedFramebufferiv(framebuffer, buffer, drawbuffer, value); } + ClearNamedFramebufferuiv :: #force_inline proc "c" (framebuffer: u32, buffer: u32, drawbuffer: i32, value: ^u32) { impl_ClearNamedFramebufferuiv(framebuffer, buffer, drawbuffer, value); } + ClearNamedFramebufferfv :: #force_inline proc "c" (framebuffer: u32, buffer: u32, drawbuffer: i32, value: ^f32) { impl_ClearNamedFramebufferfv(framebuffer, buffer, drawbuffer, value); } + ClearNamedFramebufferfi :: #force_inline proc "c" (framebuffer: u32, buffer: u32, drawbuffer: i32, depth: f32, stencil: i32) { impl_ClearNamedFramebufferfi(framebuffer, buffer, drawbuffer, depth, stencil); } + BlitNamedFramebuffer :: #force_inline proc "c" (readFramebuffer: u32, drawFramebuffer: u32, srcX0: i32, srcY0: i32, srcX1: i32, srcY1: i32, dstX0: i32, dstY0: i32, dstX1: i32, dstY1: i32, mask: u32, filter: u32) { impl_BlitNamedFramebuffer(readFramebuffer, drawFramebuffer, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); } + CheckNamedFramebufferStatus :: #force_inline proc "c" (framebuffer: u32, target: u32) -> u32 { ret := impl_CheckNamedFramebufferStatus(framebuffer, target); return ret; } + GetNamedFramebufferParameteriv :: #force_inline proc "c" (framebuffer: u32, pname: u32, param: ^i32) { impl_GetNamedFramebufferParameteriv(framebuffer, pname, param); } + GetNamedFramebufferAttachmentParameteriv :: #force_inline proc "c" (framebuffer: u32, attachment: u32, pname: u32, params: [^]i32) { impl_GetNamedFramebufferAttachmentParameteriv(framebuffer, attachment, pname, params); } + CreateRenderbuffers :: #force_inline proc "c" (n: i32, renderbuffers: [^]u32) { impl_CreateRenderbuffers(n, renderbuffers); } + NamedRenderbufferStorage :: #force_inline proc "c" (renderbuffer: u32, internalformat: u32, width: i32, height: i32) { impl_NamedRenderbufferStorage(renderbuffer, internalformat, width, height); } + NamedRenderbufferStorageMultisample :: #force_inline proc "c" (renderbuffer: u32, samples: i32, internalformat: u32, width: i32, height: i32) { impl_NamedRenderbufferStorageMultisample(renderbuffer, samples, internalformat, width, height); } + GetNamedRenderbufferParameteriv :: #force_inline proc "c" (renderbuffer: u32, pname: u32, params: [^]i32) { impl_GetNamedRenderbufferParameteriv(renderbuffer, pname, params); } + CreateTextures :: #force_inline proc "c" (target: u32, n: i32, textures: [^]u32) { impl_CreateTextures(target, n, textures); } + TextureBuffer :: #force_inline proc "c" (texture: u32, internalformat: u32, buffer: u32) { impl_TextureBuffer(texture, internalformat, buffer); } + TextureBufferRange :: #force_inline proc "c" (texture: u32, internalformat: u32, buffer: u32, offset: int, size: int) { impl_TextureBufferRange(texture, internalformat, buffer, offset, size); } + TextureStorage1D :: #force_inline proc "c" (texture: u32, levels: i32, internalformat: u32, width: i32) { impl_TextureStorage1D(texture, levels, internalformat, width); } + TextureStorage2D :: #force_inline proc "c" (texture: u32, levels: i32, internalformat: u32, width: i32, height: i32) { impl_TextureStorage2D(texture, levels, internalformat, width, height); } + TextureStorage3D :: #force_inline proc "c" (texture: u32, levels: i32, internalformat: u32, width: i32, height: i32, depth: i32) { impl_TextureStorage3D(texture, levels, internalformat, width, height, depth); } + TextureStorage2DMultisample :: #force_inline proc "c" (texture: u32, samples: i32, internalformat: u32, width: i32, height: i32, fixedsamplelocations: u8) { impl_TextureStorage2DMultisample(texture, samples, internalformat, width, height, fixedsamplelocations); } + TextureStorage3DMultisample :: #force_inline proc "c" (texture: u32, samples: i32, internalformat: u32, width: i32, height: i32, depth: i32, fixedsamplelocations: u8) { impl_TextureStorage3DMultisample(texture, samples, internalformat, width, height, depth, fixedsamplelocations); } + TextureSubImage1D :: #force_inline proc "c" (texture: u32, level: i32, xoffset: i32, width: i32, format: u32, type: u32, pixels: rawptr) { impl_TextureSubImage1D(texture, level, xoffset, width, format, type, pixels); } + TextureSubImage2D :: #force_inline proc "c" (texture: u32, level: i32, xoffset: i32, yoffset: i32, width: i32, height: i32, format: u32, type: u32, pixels: rawptr) { impl_TextureSubImage2D(texture, level, xoffset, yoffset, width, height, format, type, pixels); } + TextureSubImage3D :: #force_inline proc "c" (texture: u32, level: i32, xoffset: i32, yoffset: i32, zoffset: i32, width: i32, height: i32, depth: i32, format: u32, type: u32, pixels: rawptr) { impl_TextureSubImage3D(texture, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels); } + CompressedTextureSubImage1D :: #force_inline proc "c" (texture: u32, level: i32, xoffset: i32, width: i32, format: u32, imageSize: i32, data: rawptr) { impl_CompressedTextureSubImage1D(texture, level, xoffset, width, format, imageSize, data); } + CompressedTextureSubImage2D :: #force_inline proc "c" (texture: u32, level: i32, xoffset: i32, yoffset: i32, width: i32, height: i32, format: u32, imageSize: i32, data: rawptr) { impl_CompressedTextureSubImage2D(texture, level, xoffset, yoffset, width, height, format, imageSize, data); } + CompressedTextureSubImage3D :: #force_inline proc "c" (texture: u32, level: i32, xoffset: i32, yoffset: i32, zoffset: i32, width: i32, height: i32, depth: i32, format: u32, imageSize: i32, data: rawptr) { impl_CompressedTextureSubImage3D(texture, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data); } + CopyTextureSubImage1D :: #force_inline proc "c" (texture: u32, level: i32, xoffset: i32, x: i32, y: i32, width: i32) { impl_CopyTextureSubImage1D(texture, level, xoffset, x, y, width); } + CopyTextureSubImage2D :: #force_inline proc "c" (texture: u32, level: i32, xoffset: i32, yoffset: i32, x: i32, y: i32, width: i32, height: i32) { impl_CopyTextureSubImage2D(texture, level, xoffset, yoffset, x, y, width, height); } + CopyTextureSubImage3D :: #force_inline proc "c" (texture: u32, level: i32, xoffset: i32, yoffset: i32, zoffset: i32, x: i32, y: i32, width: i32, height: i32) { impl_CopyTextureSubImage3D(texture, level, xoffset, yoffset, zoffset, x, y, width, height); } + TextureParameterf :: #force_inline proc "c" (texture: u32, pname: u32, param: f32) { impl_TextureParameterf(texture, pname, param); } + TextureParameterfv :: #force_inline proc "c" (texture: u32, pname: u32, param: ^f32) { impl_TextureParameterfv(texture, pname, param); } + TextureParameteri :: #force_inline proc "c" (texture: u32, pname: u32, param: i32) { impl_TextureParameteri(texture, pname, param); } + TextureParameterIiv :: #force_inline proc "c" (texture: u32, pname: u32, params: [^]i32) { impl_TextureParameterIiv(texture, pname, params); } + TextureParameterIuiv :: #force_inline proc "c" (texture: u32, pname: u32, params: [^]u32) { impl_TextureParameterIuiv(texture, pname, params); } + TextureParameteriv :: #force_inline proc "c" (texture: u32, pname: u32, param: ^i32) { impl_TextureParameteriv(texture, pname, param); } + GenerateTextureMipmap :: #force_inline proc "c" (texture: u32) { impl_GenerateTextureMipmap(texture); } + BindTextureUnit :: #force_inline proc "c" (unit: u32, texture: u32) { impl_BindTextureUnit(unit, texture); } + GetTextureImage :: #force_inline proc "c" (texture: u32, level: i32, format: u32, type: u32, bufSize: i32, pixels: rawptr) { impl_GetTextureImage(texture, level, format, type, bufSize, pixels); } + GetCompressedTextureImage :: #force_inline proc "c" (texture: u32, level: i32, bufSize: i32, pixels: rawptr) { impl_GetCompressedTextureImage(texture, level, bufSize, pixels); } + GetTextureLevelParameterfv :: #force_inline proc "c" (texture: u32, level: i32, pname: u32, params: [^]f32) { impl_GetTextureLevelParameterfv(texture, level, pname, params); } + GetTextureLevelParameteriv :: #force_inline proc "c" (texture: u32, level: i32, pname: u32, params: [^]i32) { impl_GetTextureLevelParameteriv(texture, level, pname, params); } + GetTextureParameterfv :: #force_inline proc "c" (texture: u32, pname: u32, params: [^]f32) { impl_GetTextureParameterfv(texture, pname, params); } + GetTextureParameterIiv :: #force_inline proc "c" (texture: u32, pname: u32, params: [^]i32) { impl_GetTextureParameterIiv(texture, pname, params); } + GetTextureParameterIuiv :: #force_inline proc "c" (texture: u32, pname: u32, params: [^]u32) { impl_GetTextureParameterIuiv(texture, pname, params); } + GetTextureParameteriv :: #force_inline proc "c" (texture: u32, pname: u32, params: [^]i32) { impl_GetTextureParameteriv(texture, pname, params); } + CreateVertexArrays :: #force_inline proc "c" (n: i32, arrays: [^]u32) { impl_CreateVertexArrays(n, arrays); } + DisableVertexArrayAttrib :: #force_inline proc "c" (vaobj: u32, index: u32) { impl_DisableVertexArrayAttrib(vaobj, index); } + EnableVertexArrayAttrib :: #force_inline proc "c" (vaobj: u32, index: u32) { impl_EnableVertexArrayAttrib(vaobj, index); } + VertexArrayElementBuffer :: #force_inline proc "c" (vaobj: u32, buffer: u32) { impl_VertexArrayElementBuffer(vaobj, buffer); } + VertexArrayVertexBuffer :: #force_inline proc "c" (vaobj: u32, bindingindex: u32, buffer: u32, offset: int, stride: i32) { impl_VertexArrayVertexBuffer(vaobj, bindingindex, buffer, offset, stride); } + VertexArrayVertexBuffers :: #force_inline proc "c" (vaobj: u32, first: u32, count: i32, buffers: [^]u32, offsets: [^]uintptr, strides: [^]i32) { impl_VertexArrayVertexBuffers(vaobj, first, count, buffers, offsets, strides); } + VertexArrayAttribBinding :: #force_inline proc "c" (vaobj: u32, attribindex: u32, bindingindex: u32) { impl_VertexArrayAttribBinding(vaobj, attribindex, bindingindex); } + VertexArrayAttribFormat :: #force_inline proc "c" (vaobj: u32, attribindex: u32, size: i32, type: u32, normalized: bool, relativeoffset: u32) { impl_VertexArrayAttribFormat(vaobj, attribindex, size, type, normalized, relativeoffset); } + VertexArrayAttribIFormat :: #force_inline proc "c" (vaobj: u32, attribindex: u32, size: i32, type: u32, relativeoffset: u32) { impl_VertexArrayAttribIFormat(vaobj, attribindex, size, type, relativeoffset); } + VertexArrayAttribLFormat :: #force_inline proc "c" (vaobj: u32, attribindex: u32, size: i32, type: u32, relativeoffset: u32) { impl_VertexArrayAttribLFormat(vaobj, attribindex, size, type, relativeoffset); } + VertexArrayBindingDivisor :: #force_inline proc "c" (vaobj: u32, bindingindex: u32, divisor: u32) { impl_VertexArrayBindingDivisor(vaobj, bindingindex, divisor); } + GetVertexArrayiv :: #force_inline proc "c" (vaobj: u32, pname: u32, param: ^i32) { impl_GetVertexArrayiv(vaobj, pname, param); } + GetVertexArrayIndexediv :: #force_inline proc "c" (vaobj: u32, index: u32, pname: u32, param: ^i32) { impl_GetVertexArrayIndexediv(vaobj, index, pname, param); } + GetVertexArrayIndexed64iv :: #force_inline proc "c" (vaobj: u32, index: u32, pname: u32, param: ^i64) { impl_GetVertexArrayIndexed64iv(vaobj, index, pname, param); } + CreateSamplers :: #force_inline proc "c" (n: i32, samplers: [^]u32) { impl_CreateSamplers(n, samplers); } + CreateProgramPipelines :: #force_inline proc "c" (n: i32, pipelines: [^]u32) { impl_CreateProgramPipelines(n, pipelines); } + CreateQueries :: #force_inline proc "c" (target: u32, n: i32, ids: [^]u32) { impl_CreateQueries(target, n, ids); } + GetQueryBufferObjecti64v :: #force_inline proc "c" (id: u32, buffer: u32, pname: u32, offset: int) { impl_GetQueryBufferObjecti64v(id, buffer, pname, offset); } + GetQueryBufferObjectiv :: #force_inline proc "c" (id: u32, buffer: u32, pname: u32, offset: int) { impl_GetQueryBufferObjectiv(id, buffer, pname, offset); } + GetQueryBufferObjectui64v :: #force_inline proc "c" (id: u32, buffer: u32, pname: u32, offset: int) { impl_GetQueryBufferObjectui64v(id, buffer, pname, offset); } + GetQueryBufferObjectuiv :: #force_inline proc "c" (id: u32, buffer: u32, pname: u32, offset: int) { impl_GetQueryBufferObjectuiv(id, buffer, pname, offset); } + MemoryBarrierByRegion :: #force_inline proc "c" (barriers: u32) { impl_MemoryBarrierByRegion(barriers); } + GetTextureSubImage :: #force_inline proc "c" (texture: u32, level: i32, xoffset: i32, yoffset: i32, zoffset: i32, width: i32, height: i32, depth: i32, format: u32, type: u32, bufSize: i32, pixels: rawptr) { impl_GetTextureSubImage(texture, level, xoffset, yoffset, zoffset, width, height, depth, format, type, bufSize, pixels); } + GetCompressedTextureSubImage :: #force_inline proc "c" (texture: u32, level: i32, xoffset: i32, yoffset: i32, zoffset: i32, width: i32, height: i32, depth: i32, bufSize: i32, pixels: rawptr) { impl_GetCompressedTextureSubImage(texture, level, xoffset, yoffset, zoffset, width, height, depth, bufSize, pixels); } + GetGraphicsResetStatus :: #force_inline proc "c" () -> u32 { ret := impl_GetGraphicsResetStatus(); return ret; } + GetnCompressedTexImage :: #force_inline proc "c" (target: u32, lod: i32, bufSize: i32, pixels: rawptr) { impl_GetnCompressedTexImage(target, lod, bufSize, pixels); } + GetnTexImage :: #force_inline proc "c" (target: u32, level: i32, format: u32, type: u32, bufSize: i32, pixels: rawptr) { impl_GetnTexImage(target, level, format, type, bufSize, pixels); } + GetnUniformdv :: #force_inline proc "c" (program: u32, location: i32, bufSize: i32, params: [^]f64) { impl_GetnUniformdv(program, location, bufSize, params); } + GetnUniformfv :: #force_inline proc "c" (program: u32, location: i32, bufSize: i32, params: [^]f32) { impl_GetnUniformfv(program, location, bufSize, params); } + GetnUniformiv :: #force_inline proc "c" (program: u32, location: i32, bufSize: i32, params: [^]i32) { impl_GetnUniformiv(program, location, bufSize, params); } + GetnUniformuiv :: #force_inline proc "c" (program: u32, location: i32, bufSize: i32, params: [^]u32) { impl_GetnUniformuiv(program, location, bufSize, params); } + ReadnPixels :: #force_inline proc "c" (x: i32, y: i32, width: i32, height: i32, format: u32, type: u32, bufSize: i32, data: rawptr) { impl_ReadnPixels(x, y, width, height, format, type, bufSize, data); } + GetnMapdv :: #force_inline proc "c" (target: u32, query: u32, bufSize: i32, v: ^f64) { impl_GetnMapdv(target, query, bufSize, v); } + GetnMapfv :: #force_inline proc "c" (target: u32, query: u32, bufSize: i32, v: ^f32) { impl_GetnMapfv(target, query, bufSize, v); } + GetnMapiv :: #force_inline proc "c" (target: u32, query: u32, bufSize: i32, v: ^i32) { impl_GetnMapiv(target, query, bufSize, v); } + GetnPixelMapusv :: #force_inline proc "c" (map_: u32, bufSize: i32, values: [^]u16) { impl_GetnPixelMapusv(map_, bufSize, values); } + GetnPixelMapfv :: #force_inline proc "c" (map_: u32, bufSize: i32, values: [^]f32) { impl_GetnPixelMapfv(map_, bufSize, values); } + GetnPixelMapuiv :: #force_inline proc "c" (map_: u32, bufSize: i32, values: [^]u32) { impl_GetnPixelMapuiv(map_, bufSize, values); } + GetnPolygonStipple :: #force_inline proc "c" (bufSize: i32, pattern: ^u8) { impl_GetnPolygonStipple(bufSize, pattern); } + GetnColorTable :: #force_inline proc "c" (target: u32, format: u32, type: u32, bufSize: i32, table: rawptr) { impl_GetnColorTable(target, format, type, bufSize, table); } + GetnConvolutionFilter :: #force_inline proc "c" (target: u32, format: u32, type: u32, bufSize: i32, image: rawptr) { impl_GetnConvolutionFilter(target, format, type, bufSize, image); } + GetnSeparableFilter :: #force_inline proc "c" (target: u32, format: u32, type: u32, rowBufSize: i32, row: rawptr, columnBufSize: i32, column: rawptr, span: rawptr) { impl_GetnSeparableFilter(target, format, type, rowBufSize, row, columnBufSize, column, span); } + GetnHistogram :: #force_inline proc "c" (target: u32, reset: u8, format: u32, type: u32, bufSize: i32, values: rawptr) { impl_GetnHistogram(target, reset, format, type, bufSize, values); } + GetnMinmax :: #force_inline proc "c" (target: u32, reset: u8, format: u32, type: u32, bufSize: i32, values: rawptr) { impl_GetnMinmax(target, reset, format, type, bufSize, values); } + TextureBarrier :: #force_inline proc "c" () { impl_TextureBarrier(); } + GetUnsignedBytevEXT :: #force_inline proc "c" (pname: u32, data: ^byte) { impl_glGetUnsignedBytevEXT(pname, data); } + TexPageCommitmentARB :: #force_inline proc "c"( + target: u32, + level: i32, + xoffset: i32, + yoffset: i32, + zoffset: i32, + width: i32, + height: i32, + depth: i32, + commit: bool, + ) { + impl_TexPageCommitmentARB(target, level, xoffset, yoffset, zoffset, width, height, depth, commit); + } + + // VERSION_4_6 + SpecializeShader :: #force_inline proc "c" (shader: u32, pEntryPoint: ^u8, numSpecializationConstants: u32, pConstantIndex: ^u32, pConstantValue: ^u32) { impl_SpecializeShader(shader, pEntryPoint, numSpecializationConstants, pConstantIndex, pConstantValue); } + MultiDrawArraysIndirectCount :: #force_inline proc "c" (mode: i32, indirect: rawptr, drawcount: int, maxdrawcount, stride: i32) { impl_MultiDrawArraysIndirectCount(mode, indirect, drawcount, maxdrawcount, stride); } + MultiDrawElementsIndirectCount :: #force_inline proc "c" (mode: i32, type: i32, indirect: rawptr, drawcount: int, maxdrawcount, stride: i32) { impl_MultiDrawElementsIndirectCount(mode, type, indirect, drawcount, maxdrawcount, stride); } + PolygonOffsetClamp :: #force_inline proc "c" (factor, units, clamp: f32) { impl_PolygonOffsetClamp(factor, units, clamp); } +} else { + import "core:runtime" + import "core:fmt" + + debug_helper :: #force_inline proc"c"(from_loc: runtime.Source_Code_Location, num_ret: int, args: ..any, loc := #caller_location) { + context = runtime.default_context(); + + Error_Enum :: enum { + NO_ERROR = NO_ERROR, + INVALID_VALUE = INVALID_VALUE, + INVALID_ENUM = INVALID_ENUM, + INVALID_OPERATION = INVALID_OPERATION, + INVALID_FRAMEBUFFER_OPERATION = INVALID_FRAMEBUFFER_OPERATION, + OUT_OF_MEMORY = OUT_OF_MEMORY, + STACK_UNDERFLOW = STACK_UNDERFLOW, + STACK_OVERFLOW = STACK_OVERFLOW, + // TODO: What if the return enum is invalid? + }; + + // There can be multiple errors, so we're required to continuously call glGetError until there are no more errors + for i := 0; /**/; i += 1 { + err := cast(Error_Enum)impl_GetError(); + if err == .NO_ERROR do break; + + fmt.printf("%d: glGetError() returned GL_%v\n", i, err); + + // add function call + fmt.printf(" call: gl%s(", loc.procedure); + { + // add input arguments + for arg, i in args[num_ret:] { + if i > 0 do fmt.printf(", "); + + if v, ok := arg.(u32); ok { // TODO: Assumes all u32 are GLenum (they're not, GLbitfield and GLuint are also mapped to u32), fix later by better typing + if err == .INVALID_ENUM { + fmt.printf("INVALID_ENUM=%d", v); + } else { + fmt.printf("GL_%v=%d", GL_Enum(v), v); + } + } else { + fmt.printf("%v", arg); + } + } + + // add return arguments + if num_ret == 1 { + fmt.printf(") -> %v \n", args[0]); + } else if num_ret > 1 { + fmt.printf(") -> ("); + for arg, i in args[1:num_ret] { + if i > 0 do fmt.printf(", "); + fmt.printf("%v", arg); + } + fmt.printf(")\n"); + } else { + fmt.printf(")\n"); + } + } + + // add location + fmt.printf(" in: %s(%d:%d)\n", from_loc.file_path, from_loc.line, from_loc.column); + } + } + + CullFace :: #force_inline proc "c" (mode: u32, loc := #caller_location) { impl_CullFace(mode); debug_helper(loc, 0, mode); } + FrontFace :: #force_inline proc "c" (mode: u32, loc := #caller_location) { impl_FrontFace(mode); debug_helper(loc, 0, mode); } + Hint :: #force_inline proc "c" (target, mode: u32, loc := #caller_location) { impl_Hint(target, mode); debug_helper(loc, 0, target, mode); } + LineWidth :: #force_inline proc "c" (width: f32, loc := #caller_location) { impl_LineWidth(width); debug_helper(loc, 0, width); } + PointSize :: #force_inline proc "c" (size: f32, loc := #caller_location) { impl_PointSize(size); debug_helper(loc, 0, size); } + PolygonMode :: #force_inline proc "c" (face, mode: u32, loc := #caller_location) { impl_PolygonMode(face, mode); debug_helper(loc, 0, face, mode); } + Scissor :: #force_inline proc "c" (x, y, width, height: i32, loc := #caller_location) { impl_Scissor(x, y, width, height); debug_helper(loc, 0, x, y, width, height); } + TexParameterf :: #force_inline proc "c" (target, pname: u32, param: f32, loc := #caller_location) { impl_TexParameterf(target, pname, param); debug_helper(loc, 0, target, pname, param); } + TexParameterfv :: #force_inline proc "c" (target, pname: u32, params: [^]f32, loc := #caller_location) { impl_TexParameterfv(target, pname, params); debug_helper(loc, 0, target, pname, params); } + TexParameteri :: #force_inline proc "c" (target, pname: u32, param: i32, loc := #caller_location) { impl_TexParameteri(target, pname, param); debug_helper(loc, 0, target, pname, param); } + TexParameteriv :: #force_inline proc "c" (target, pname: u32, params: [^]i32, loc := #caller_location) { impl_TexParameteriv(target, pname, params); debug_helper(loc, 0, target, pname, params); } + TexImage1D :: #force_inline proc "c" (target: u32, level, internalformat, width, border: i32, format, type: u32, pixels: rawptr, loc := #caller_location) { impl_TexImage1D(target, level, internalformat, width, border, format, type, pixels); debug_helper(loc, 0, target, level, internalformat, width, border, format, type, pixels); } + TexImage2D :: #force_inline proc "c" (target: u32, level, internalformat, width, height, border: i32, format, type: u32, pixels: rawptr, loc := #caller_location) { impl_TexImage2D(target, level, internalformat, width, height, border, format, type, pixels); debug_helper(loc, 0, target, level, internalformat, width, height, border, format, type, pixels); } + DrawBuffer :: #force_inline proc "c" (buf: u32, loc := #caller_location) { impl_DrawBuffer(buf); debug_helper(loc, 0, buf); } + Clear :: #force_inline proc "c" (mask: u32, loc := #caller_location) { impl_Clear(mask); debug_helper(loc, 0, mask); } + ClearColor :: #force_inline proc "c" (red, green, blue, alpha: f32, loc := #caller_location) { impl_ClearColor(red, green, blue, alpha); debug_helper(loc, 0, red, green, blue, alpha); } + ClearStencil :: #force_inline proc "c" (s: i32, loc := #caller_location) { impl_ClearStencil(s); debug_helper(loc, 0, s); } + ClearDepth :: #force_inline proc "c" (depth: f64, loc := #caller_location) { impl_ClearDepth(depth); debug_helper(loc, 0, depth); } + StencilMask :: #force_inline proc "c" (mask: u32, loc := #caller_location) { impl_StencilMask(mask); debug_helper(loc, 0, mask); } + ColorMask :: #force_inline proc "c" (red, green, blue, alpha: u8, loc := #caller_location) { impl_ColorMask(red, green, blue, alpha); debug_helper(loc, 0, red, green, blue, alpha); } + DepthMask :: #force_inline proc "c" (flag: u8, loc := #caller_location) { impl_DepthMask(flag); debug_helper(loc, 0, flag); } + Disable :: #force_inline proc "c" (cap: u32, loc := #caller_location) { impl_Disable(cap); debug_helper(loc, 0, cap); } + Enable :: #force_inline proc "c" (cap: u32, loc := #caller_location) { impl_Enable(cap); debug_helper(loc, 0, cap); } + Finish :: #force_inline proc "c" (loc := #caller_location) { impl_Finish(); debug_helper(loc, 0); } + Flush :: #force_inline proc "c" (loc := #caller_location) { impl_Flush(); debug_helper(loc, 0); } + BlendFunc :: #force_inline proc "c" (sfactor, dfactor: u32, loc := #caller_location) { impl_BlendFunc(sfactor, dfactor); debug_helper(loc, 0, sfactor, dfactor); } + LogicOp :: #force_inline proc "c" (opcode: u32, loc := #caller_location) { impl_LogicOp(opcode); debug_helper(loc, 0, opcode); } + StencilFunc :: #force_inline proc "c" (func: u32, ref: i32, mask: u32, loc := #caller_location) { impl_StencilFunc(func, ref, mask); debug_helper(loc, 0, func, ref, mask); } + StencilOp :: #force_inline proc "c" (fail, zfail, zpass: u32, loc := #caller_location) { impl_StencilOp(fail, zfail, zpass); debug_helper(loc, 0, fail, zfail, zpass); } + DepthFunc :: #force_inline proc "c" (func: u32, loc := #caller_location) { impl_DepthFunc(func); debug_helper(loc, 0, func); } + PixelStoref :: #force_inline proc "c" (pname: u32, param: f32, loc := #caller_location) { impl_PixelStoref(pname, param); debug_helper(loc, 0, pname, param); } + PixelStorei :: #force_inline proc "c" (pname: u32, param: i32, loc := #caller_location) { impl_PixelStorei(pname, param); debug_helper(loc, 0, pname, param); } + ReadBuffer :: #force_inline proc "c" (src: u32, loc := #caller_location) { impl_ReadBuffer(src); debug_helper(loc, 0, src); } + ReadPixels :: #force_inline proc "c" (x, y, width, height: i32, format, type: u32, pixels: rawptr, loc := #caller_location) { impl_ReadPixels(x, y, width, height, format, type, pixels); debug_helper(loc, 0, x, y, width, height, format, type, pixels); } + GetBooleanv :: #force_inline proc "c" (pname: u32, data: ^bool, loc := #caller_location) { impl_GetBooleanv(pname, data); debug_helper(loc, 0, pname, data); } + GetDoublev :: #force_inline proc "c" (pname: u32, data: ^f64, loc := #caller_location) { impl_GetDoublev(pname, data); debug_helper(loc, 0, pname, data); } + GetError :: #force_inline proc "c" (loc := #caller_location) -> u32 { ret := impl_GetError(); debug_helper(loc, 1, ret); return ret; } + GetFloatv :: #force_inline proc "c" (pname: u32, data: ^f32, loc := #caller_location) { impl_GetFloatv(pname, data); debug_helper(loc, 0, pname, data); } + GetIntegerv :: #force_inline proc "c" (pname: u32, data: ^i32, loc := #caller_location) { impl_GetIntegerv(pname, data); debug_helper(loc, 0, pname, data); } + GetString :: #force_inline proc "c" (name: u32, loc := #caller_location) -> cstring { ret := impl_GetString(name); debug_helper(loc, 1, ret, name); return ret; } + GetTexImage :: #force_inline proc "c" (target: u32, level: i32, format, type: u32, pixels: rawptr, loc := #caller_location) { impl_GetTexImage(target, level, format, type, pixels); debug_helper(loc, 0, target, level, format, type, pixels); } + GetTexParameterfv :: #force_inline proc "c" (target, pname: u32, params: [^]f32, loc := #caller_location) { impl_GetTexParameterfv(target, pname, params); debug_helper(loc, 0, target, pname, params); } + GetTexParameteriv :: #force_inline proc "c" (target, pname: u32, params: [^]i32, loc := #caller_location) { impl_GetTexParameteriv(target, pname, params); debug_helper(loc, 0, target, pname, params); } + GetTexLevelParameterfv :: #force_inline proc "c" (target: u32, level: i32, pname: u32, params: [^]f32, loc := #caller_location) { impl_GetTexLevelParameterfv(target, level, pname, params); debug_helper(loc, 0, target, level, pname, params); } + GetTexLevelParameteriv :: #force_inline proc "c" (target: u32, level: i32, pname: u32, params: [^]i32, loc := #caller_location) { impl_GetTexLevelParameteriv(target, level, pname, params); debug_helper(loc, 0, target, level, pname, params); } + IsEnabled :: #force_inline proc "c" (cap: u32, loc := #caller_location) -> bool { ret := impl_IsEnabled(cap); debug_helper(loc, 1, ret, cap); return ret; } + DepthRange :: #force_inline proc "c" (near, far: f64, loc := #caller_location) { impl_DepthRange(near, far); debug_helper(loc, 0, near, far); } + Viewport :: #force_inline proc "c" (x, y, width, height: i32, loc := #caller_location) { impl_Viewport(x, y, width, height); debug_helper(loc, 0, x, y, width, height); } + + // VERSION_1_1 + DrawArrays :: #force_inline proc "c" (mode: u32, first: i32, count: i32, loc := #caller_location) { impl_DrawArrays(mode, first, count); debug_helper(loc, 0, mode, first, count); } + DrawElements :: #force_inline proc "c" (mode: u32, count: i32, type: u32, indices: rawptr, loc := #caller_location) { impl_DrawElements(mode, count, type, indices); debug_helper(loc, 0, mode, count, type, indices); } + PolygonOffset :: #force_inline proc "c" (factor: f32, units: f32, loc := #caller_location) { impl_PolygonOffset(factor, units); debug_helper(loc, 0, factor, units); } + CopyTexImage1D :: #force_inline proc "c" (target: u32, level: i32, internalformat: u32, x: i32, y: i32, width: i32, border: i32, loc := #caller_location) { impl_CopyTexImage1D(target, level, internalformat, x, y, width, border); debug_helper(loc, 0, target, level, internalformat, x, y, width, border); } + CopyTexImage2D :: #force_inline proc "c" (target: u32, level: i32, internalformat: u32, x: i32, y: i32, width: i32, height: i32, border: i32, loc := #caller_location) { impl_CopyTexImage2D(target, level, internalformat, x, y, width, height, border); debug_helper(loc, 0, target, level, internalformat, x, y, width, height, border); } + CopyTexSubImage1D :: #force_inline proc "c" (target: u32, level: i32, xoffset: i32, x: i32, y: i32, width: i32, loc := #caller_location) { impl_CopyTexSubImage1D(target, level, xoffset, x, y, width); debug_helper(loc, 0, target, level, xoffset, x, y, width); } + CopyTexSubImage2D :: #force_inline proc "c" (target: u32, level: i32, xoffset: i32, yoffset: i32, x: i32, y: i32, width: i32, height: i32, loc := #caller_location) { impl_CopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); debug_helper(loc, 0, target, level, xoffset, yoffset, x, y, width, height); } + TexSubImage1D :: #force_inline proc "c" (target: u32, level: i32, xoffset: i32, width: i32, format: u32, type: u32, pixels: rawptr, loc := #caller_location) { impl_TexSubImage1D(target, level, xoffset, width, format, type, pixels); debug_helper(loc, 0, target, level, xoffset, width, format, type, pixels); } + TexSubImage2D :: #force_inline proc "c" (target: u32, level: i32, xoffset: i32, yoffset: i32, width: i32, height: i32, format: u32, type: u32, pixels: rawptr, loc := #caller_location) { impl_TexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels); debug_helper(loc, 0, target, level, xoffset, yoffset, width, height, format, type, pixels); } + BindTexture :: #force_inline proc "c" (target: u32, texture: u32, loc := #caller_location) { impl_BindTexture(target, texture); debug_helper(loc, 0, target, texture); } + DeleteTextures :: #force_inline proc "c" (n: i32, textures: [^]u32, loc := #caller_location) { impl_DeleteTextures(n, textures); debug_helper(loc, 0, n, textures); } + GenTextures :: #force_inline proc "c" (n: i32, textures: [^]u32, loc := #caller_location) { impl_GenTextures(n, textures); debug_helper(loc, 0, n, textures); } + IsTexture :: #force_inline proc "c" (texture: u32, loc := #caller_location) -> bool { ret := impl_IsTexture(texture); debug_helper(loc, 1, ret, texture); return ret; } + + // VERSION_1_2 + DrawRangeElements :: #force_inline proc "c" (mode, start, end: u32, count: i32, type: u32, indices: rawptr, loc := #caller_location) { impl_DrawRangeElements(mode, start, end, count, type, indices); debug_helper(loc, 0, mode, start, end, count, type, indices); } + TexImage3D :: #force_inline proc "c" (target: u32, level, internalformat, width, height, depth, border: i32, format, type: u32, pixels: rawptr, loc := #caller_location) { impl_TexImage3D(target, level, internalformat, width, height, depth, border, format, type, pixels); debug_helper(loc, 0, target, level, internalformat, width, height, depth, border, format, type, pixels); } + TexSubImage3D :: #force_inline proc "c" (target: u32, level, xoffset, yoffset, zoffset, width, height, depth: i32, format, type: u32, pixels: rawptr, loc := #caller_location) { impl_TexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels); debug_helper(loc, 0, target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels); } + CopyTexSubImage3D :: #force_inline proc "c" (target: u32, level, xoffset, yoffset, zoffset, x, y, width, height: i32, loc := #caller_location) { impl_CopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height); debug_helper(loc, 0, target, level, xoffset, yoffset, zoffset, x, y, width, height); } + + // VERSION_1_3 + ActiveTexture :: #force_inline proc "c" (texture: u32, loc := #caller_location) { impl_ActiveTexture(texture); debug_helper(loc, 0, texture); } + SampleCoverage :: #force_inline proc "c" (value: f32, invert: u8, loc := #caller_location) { impl_SampleCoverage(value, invert); debug_helper(loc, 0, value, invert); } + CompressedTexImage3D :: #force_inline proc "c" (target: u32, level: i32, internalformat: u32, width: i32, height: i32, depth: i32, border: i32, imageSize: i32, data: rawptr, loc := #caller_location) { impl_CompressedTexImage3D(target, level, internalformat, width, height, depth, border, imageSize, data); debug_helper(loc, 0, target, level, internalformat, width, height, depth, border, imageSize, data); } + CompressedTexImage2D :: #force_inline proc "c" (target: u32, level: i32, internalformat: u32, width: i32, height: i32, border: i32, imageSize: i32, data: rawptr, loc := #caller_location) { impl_CompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data); debug_helper(loc, 0, target, level, internalformat, width, height, border, imageSize, data); } + CompressedTexImage1D :: #force_inline proc "c" (target: u32, level: i32, internalformat: u32, width: i32, border: i32, imageSize: i32, data: rawptr, loc := #caller_location) { impl_CompressedTexImage1D(target, level, internalformat, width, border, imageSize, data); debug_helper(loc, 0, target, level, internalformat, width, border, imageSize, data); } + CompressedTexSubImage3D :: #force_inline proc "c" (target: u32, level: i32, xoffset: i32, yoffset: i32, zoffset: i32, width: i32, height: i32, depth: i32, format: u32, imageSize: i32, data: rawptr, loc := #caller_location) { impl_CompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data); debug_helper(loc, 0, target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data); } + CompressedTexSubImage2D :: #force_inline proc "c" (target: u32, level: i32, xoffset: i32, yoffset: i32, width: i32, height: i32, format: u32, imageSize: i32, data: rawptr, loc := #caller_location) { impl_CompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data); debug_helper(loc, 0, target, level, xoffset, yoffset, width, height, format, imageSize, data); } + CompressedTexSubImage1D :: #force_inline proc "c" (target: u32, level: i32, xoffset: i32, width: i32, format: u32, imageSize: i32, data: rawptr, loc := #caller_location) { impl_CompressedTexSubImage1D(target, level, xoffset, width, format, imageSize, data); debug_helper(loc, 0, target, level, xoffset, width, format, imageSize, data); } + GetCompressedTexImage :: #force_inline proc "c" (target: u32, level: i32, img: rawptr, loc := #caller_location) { impl_GetCompressedTexImage(target, level, img); debug_helper(loc, 0, target, level, img); } + + // VERSION_1_4 + BlendFuncSeparate :: #force_inline proc "c" (sfactorRGB: u32, dfactorRGB: u32, sfactorAlpha: u32, dfactorAlpha: u32, loc := #caller_location) { impl_BlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha); debug_helper(loc, 0, sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha); } + MultiDrawArrays :: #force_inline proc "c" (mode: u32, first: [^]i32, count: [^]i32, drawcount: i32, loc := #caller_location) { impl_MultiDrawArrays(mode, first, count, drawcount); debug_helper(loc, 0, mode, first, count, drawcount); } + MultiDrawElements :: #force_inline proc "c" (mode: u32, count: [^]i32, type: u32, indices: [^]rawptr, drawcount: i32, loc := #caller_location) { impl_MultiDrawElements(mode, count, type, indices, drawcount); debug_helper(loc, 0, mode, count, type, indices, drawcount); } + PointParameterf :: #force_inline proc "c" (pname: u32, param: f32, loc := #caller_location) { impl_PointParameterf(pname, param); debug_helper(loc, 0, pname, param); } + PointParameterfv :: #force_inline proc "c" (pname: u32, params: [^]f32, loc := #caller_location) { impl_PointParameterfv(pname, params); debug_helper(loc, 0, pname, params); } + PointParameteri :: #force_inline proc "c" (pname: u32, param: i32, loc := #caller_location) { impl_PointParameteri(pname, param); debug_helper(loc, 0, pname, param); } + PointParameteriv :: #force_inline proc "c" (pname: u32, params: [^]i32, loc := #caller_location) { impl_PointParameteriv(pname, params); debug_helper(loc, 0, pname, params); } + BlendColor :: #force_inline proc "c" (red: f32, green: f32, blue: f32, alpha: f32, loc := #caller_location) { impl_BlendColor(red, green, blue, alpha); debug_helper(loc, 0, red, green, blue, alpha); } + BlendEquation :: #force_inline proc "c" (mode: u32, loc := #caller_location) { impl_BlendEquation(mode); debug_helper(loc, 0, mode); } + + // VERSION_1_5 + GenQueries :: #force_inline proc "c" (n: i32, ids: [^]u32, loc := #caller_location) { impl_GenQueries(n, ids); debug_helper(loc, 0, n, ids); } + DeleteQueries :: #force_inline proc "c" (n: i32, ids: [^]u32, loc := #caller_location) { impl_DeleteQueries(n, ids); debug_helper(loc, 0, n, ids); } + IsQuery :: #force_inline proc "c" (id: u32, loc := #caller_location) -> bool { ret := impl_IsQuery(id); debug_helper(loc, 1, ret, id); return ret; } + BeginQuery :: #force_inline proc "c" (target: u32, id: u32, loc := #caller_location) { impl_BeginQuery(target, id); debug_helper(loc, 0, target, id); } + EndQuery :: #force_inline proc "c" (target: u32, loc := #caller_location) { impl_EndQuery(target); debug_helper(loc, 0, target); } + GetQueryiv :: #force_inline proc "c" (target: u32, pname: u32, params: [^]i32, loc := #caller_location) { impl_GetQueryiv(target, pname, params); debug_helper(loc, 0, target, pname, params); } + GetQueryObjectiv :: #force_inline proc "c" (id: u32, pname: u32, params: [^]i32, loc := #caller_location) { impl_GetQueryObjectiv(id, pname, params); debug_helper(loc, 0, id, pname, params); } + GetQueryObjectuiv :: #force_inline proc "c" (id: u32, pname: u32, params: [^]u32, loc := #caller_location) { impl_GetQueryObjectuiv(id, pname, params); debug_helper(loc, 0, id, pname, params); } + BindBuffer :: #force_inline proc "c" (target: u32, buffer: u32, loc := #caller_location) { impl_BindBuffer(target, buffer); debug_helper(loc, 0, target, buffer); } + DeleteBuffers :: #force_inline proc "c" (n: i32, buffers: [^]u32, loc := #caller_location) { impl_DeleteBuffers(n, buffers); debug_helper(loc, 0, n, buffers); } + GenBuffers :: #force_inline proc "c" (n: i32, buffers: [^]u32, loc := #caller_location) { impl_GenBuffers(n, buffers); debug_helper(loc, 0, n, buffers); } + IsBuffer :: #force_inline proc "c" (buffer: u32, loc := #caller_location) -> bool { ret := impl_IsBuffer(buffer); debug_helper(loc, 1, ret, buffer); return ret; } + BufferData :: #force_inline proc "c" (target: u32, size: int, data: rawptr, usage: u32, loc := #caller_location) { impl_BufferData(target, size, data, usage); debug_helper(loc, 0, target, size, data, usage); } + BufferSubData :: #force_inline proc "c" (target: u32, offset: int, size: int, data: rawptr, loc := #caller_location) { impl_BufferSubData(target, offset, size, data); debug_helper(loc, 0, target, offset, size, data); } + GetBufferSubData :: #force_inline proc "c" (target: u32, offset: int, size: int, data: rawptr, loc := #caller_location) { impl_GetBufferSubData(target, offset, size, data); debug_helper(loc, 0, target, offset, size, data); } + MapBuffer :: #force_inline proc "c" (target: u32, access: u32, loc := #caller_location) -> rawptr { ret := impl_MapBuffer(target, access); debug_helper(loc, 1, ret, target, access); return ret; } + UnmapBuffer :: #force_inline proc "c" (target: u32, loc := #caller_location) -> bool { ret := impl_UnmapBuffer(target); debug_helper(loc, 1, ret, target); return ret; } + GetBufferParameteriv :: #force_inline proc "c" (target: u32, pname: u32, params: [^]i32, loc := #caller_location) { impl_GetBufferParameteriv(target, pname, params); debug_helper(loc, 0, target, pname, params); } + GetBufferPointerv :: #force_inline proc "c" (target: u32, pname: u32, params: [^]rawptr, loc := #caller_location) { impl_GetBufferPointerv(target, pname, params); debug_helper(loc, 0, target, pname, params); } + + // VERSION_2_0 + BlendEquationSeparate :: #force_inline proc "c" (modeRGB: u32, modeAlpha: u32, loc := #caller_location) { impl_BlendEquationSeparate(modeRGB, modeAlpha); debug_helper(loc, 0, modeRGB, modeAlpha); } + DrawBuffers :: #force_inline proc "c" (n: i32, bufs: [^]u32, loc := #caller_location) { impl_DrawBuffers(n, bufs); debug_helper(loc, 0, n, bufs); } + StencilOpSeparate :: #force_inline proc "c" (face: u32, sfail: u32, dpfail: u32, dppass: u32, loc := #caller_location) { impl_StencilOpSeparate(face, sfail, dpfail, dppass); debug_helper(loc, 0, face, sfail, dpfail, dppass); } + StencilFuncSeparate :: #force_inline proc "c" (face: u32, func: u32, ref: i32, mask: u32, loc := #caller_location) { impl_StencilFuncSeparate(face, func, ref, mask); debug_helper(loc, 0, face, func, ref, mask); } + StencilMaskSeparate :: #force_inline proc "c" (face: u32, mask: u32, loc := #caller_location) { impl_StencilMaskSeparate(face, mask); debug_helper(loc, 0, face, mask); } + AttachShader :: #force_inline proc "c" (program: u32, shader: u32, loc := #caller_location) { impl_AttachShader(program, shader); debug_helper(loc, 0, program, shader); } + BindAttribLocation :: #force_inline proc "c" (program: u32, index: u32, name: cstring, loc := #caller_location) { impl_BindAttribLocation(program, index, name); debug_helper(loc, 0, program, index, name); } + CompileShader :: #force_inline proc "c" (shader: u32, loc := #caller_location) { impl_CompileShader(shader); debug_helper(loc, 0, shader); } + CreateProgram :: #force_inline proc "c" (loc := #caller_location) -> u32 { ret := impl_CreateProgram(); debug_helper(loc, 1, ret); return ret; } + CreateShader :: #force_inline proc "c" (type: u32, loc := #caller_location) -> u32 { ret := impl_CreateShader(type); debug_helper(loc, 1, ret, type); return ret; } + DeleteProgram :: #force_inline proc "c" (program: u32, loc := #caller_location) { impl_DeleteProgram(program); debug_helper(loc, 0, program); } + DeleteShader :: #force_inline proc "c" (shader: u32, loc := #caller_location) { impl_DeleteShader(shader); debug_helper(loc, 0, shader); } + DetachShader :: #force_inline proc "c" (program: u32, shader: u32, loc := #caller_location) { impl_DetachShader(program, shader); debug_helper(loc, 0, program, shader); } + DisableVertexAttribArray :: #force_inline proc "c" (index: u32, loc := #caller_location) { impl_DisableVertexAttribArray(index); debug_helper(loc, 0, index); } + EnableVertexAttribArray :: #force_inline proc "c" (index: u32, loc := #caller_location) { impl_EnableVertexAttribArray(index); debug_helper(loc, 0, index); } + GetActiveAttrib :: #force_inline proc "c" (program: u32, index: u32, bufSize: i32, length: ^i32, size: ^i32, type: ^u32, name: [^]u8, loc := #caller_location) { impl_GetActiveAttrib(program, index, bufSize, length, size, type, name); debug_helper(loc, 0, program, index, bufSize, length, size, type, name); } + GetActiveUniform :: #force_inline proc "c" (program: u32, index: u32, bufSize: i32, length: ^i32, size: ^i32, type: ^u32, name: [^]u8, loc := #caller_location) { impl_GetActiveUniform(program, index, bufSize, length, size, type, name); debug_helper(loc, 0, program, index, bufSize, length, size, type, name); } + GetAttachedShaders :: #force_inline proc "c" (program: u32, maxCount: i32, count: [^]i32, shaders: [^]u32, loc := #caller_location) { impl_GetAttachedShaders(program, maxCount, count, shaders); debug_helper(loc, 0, program, maxCount, count, shaders); } + GetAttribLocation :: #force_inline proc "c" (program: u32, name: cstring, loc := #caller_location) -> i32 { ret := impl_GetAttribLocation(program, name); debug_helper(loc, 1, ret, program, name); return ret; } + GetProgramiv :: #force_inline proc "c" (program: u32, pname: u32, params: [^]i32, loc := #caller_location) { impl_GetProgramiv(program, pname, params); debug_helper(loc, 0, program, pname, params); } + GetProgramInfoLog :: #force_inline proc "c" (program: u32, bufSize: i32, length: ^i32, infoLog: [^]u8, loc := #caller_location) { impl_GetProgramInfoLog(program, bufSize, length, infoLog); debug_helper(loc, 0, program, bufSize, length, infoLog); } + GetShaderiv :: #force_inline proc "c" (shader: u32, pname: u32, params: [^]i32, loc := #caller_location) { impl_GetShaderiv(shader, pname, params); debug_helper(loc, 0, shader, pname, params); } + GetShaderInfoLog :: #force_inline proc "c" (shader: u32, bufSize: i32, length: ^i32, infoLog: [^]u8, loc := #caller_location) { impl_GetShaderInfoLog(shader, bufSize, length, infoLog); debug_helper(loc, 0, shader, bufSize, length, infoLog); } + GetShaderSource :: #force_inline proc "c" (shader: u32, bufSize: i32, length: ^i32, source: [^]u8, loc := #caller_location) { impl_GetShaderSource(shader, bufSize, length, source); debug_helper(loc, 0, shader, bufSize, length, source); } + GetUniformLocation :: #force_inline proc "c" (program: u32, name: cstring, loc := #caller_location) -> i32 { ret := impl_GetUniformLocation(program, name); debug_helper(loc, 1, ret, program, name); return ret; } + GetUniformfv :: #force_inline proc "c" (program: u32, location: i32, params: [^]f32, loc := #caller_location) { impl_GetUniformfv(program, location, params); debug_helper(loc, 0, program, location, params); } + GetUniformiv :: #force_inline proc "c" (program: u32, location: i32, params: [^]i32, loc := #caller_location) { impl_GetUniformiv(program, location, params); debug_helper(loc, 0, program, location, params); } + GetVertexAttribdv :: #force_inline proc "c" (index: u32, pname: u32, params: [^]f64, loc := #caller_location) { impl_GetVertexAttribdv(index, pname, params); debug_helper(loc, 0, index, pname, params); } + GetVertexAttribfv :: #force_inline proc "c" (index: u32, pname: u32, params: [^]f32, loc := #caller_location) { impl_GetVertexAttribfv(index, pname, params); debug_helper(loc, 0, index, pname, params); } + GetVertexAttribiv :: #force_inline proc "c" (index: u32, pname: u32, params: [^]i32, loc := #caller_location) { impl_GetVertexAttribiv(index, pname, params); debug_helper(loc, 0, index, pname, params); } + GetVertexAttribPointerv :: #force_inline proc "c" (index: u32, pname: u32, pointer: ^rawptr, loc := #caller_location) { impl_GetVertexAttribPointerv(index, pname, pointer); debug_helper(loc, 0, index, pname, pointer); } + IsProgram :: #force_inline proc "c" (program: u32, loc := #caller_location) -> bool { ret := impl_IsProgram(program); debug_helper(loc, 1, ret, program); return ret; } + IsShader :: #force_inline proc "c" (shader: u32, loc := #caller_location) -> bool { ret := impl_IsShader(shader); debug_helper(loc, 1, ret, shader); return ret; } + LinkProgram :: #force_inline proc "c" (program: u32, loc := #caller_location) { impl_LinkProgram(program); debug_helper(loc, 0, program); } + ShaderSource :: #force_inline proc "c" (shader: u32, count: i32, string: [^]cstring, length: [^]i32, loc := #caller_location) { impl_ShaderSource(shader, count, string, length); debug_helper(loc, 0, shader, count, string, length); } + UseProgram :: #force_inline proc "c" (program: u32, loc := #caller_location) { impl_UseProgram(program); debug_helper(loc, 0, program); } + Uniform1f :: #force_inline proc "c" (location: i32, v0: f32, loc := #caller_location) { impl_Uniform1f(location, v0); debug_helper(loc, 0, location, v0); } + Uniform2f :: #force_inline proc "c" (location: i32, v0: f32, v1: f32, loc := #caller_location) { impl_Uniform2f(location, v0, v1); debug_helper(loc, 0, location, v0, v1); } + Uniform3f :: #force_inline proc "c" (location: i32, v0: f32, v1: f32, v2: f32, loc := #caller_location) { impl_Uniform3f(location, v0, v1, v2); debug_helper(loc, 0, location, v0, v1, v2); } + Uniform4f :: #force_inline proc "c" (location: i32, v0: f32, v1: f32, v2: f32, v3: f32, loc := #caller_location) { impl_Uniform4f(location, v0, v1, v2, v3); debug_helper(loc, 0, location, v0, v1, v2, v3); } + Uniform1i :: #force_inline proc "c" (location: i32, v0: i32, loc := #caller_location) { impl_Uniform1i(location, v0); debug_helper(loc, 0, location, v0); } + Uniform2i :: #force_inline proc "c" (location: i32, v0: i32, v1: i32, loc := #caller_location) { impl_Uniform2i(location, v0, v1); debug_helper(loc, 0, location, v0, v1); } + Uniform3i :: #force_inline proc "c" (location: i32, v0: i32, v1: i32, v2: i32, loc := #caller_location) { impl_Uniform3i(location, v0, v1, v2); debug_helper(loc, 0, location, v0, v1, v2); } + Uniform4i :: #force_inline proc "c" (location: i32, v0: i32, v1: i32, v2: i32, v3: i32, loc := #caller_location) { impl_Uniform4i(location, v0, v1, v2, v3); debug_helper(loc, 0, location, v0, v1, v2, v3); } + Uniform1fv :: #force_inline proc "c" (location: i32, count: i32, value: [^]f32, loc := #caller_location) { impl_Uniform1fv(location, count, value); debug_helper(loc, 0, location, count, value); } + Uniform2fv :: #force_inline proc "c" (location: i32, count: i32, value: [^]f32, loc := #caller_location) { impl_Uniform2fv(location, count, value); debug_helper(loc, 0, location, count, value); } + Uniform3fv :: #force_inline proc "c" (location: i32, count: i32, value: [^]f32, loc := #caller_location) { impl_Uniform3fv(location, count, value); debug_helper(loc, 0, location, count, value); } + Uniform4fv :: #force_inline proc "c" (location: i32, count: i32, value: [^]f32, loc := #caller_location) { impl_Uniform4fv(location, count, value); debug_helper(loc, 0, location, count, value); } + Uniform1iv :: #force_inline proc "c" (location: i32, count: i32, value: [^]i32, loc := #caller_location) { impl_Uniform1iv(location, count, value); debug_helper(loc, 0, location, count, value); } + Uniform2iv :: #force_inline proc "c" (location: i32, count: i32, value: [^]i32, loc := #caller_location) { impl_Uniform2iv(location, count, value); debug_helper(loc, 0, location, count, value); } + Uniform3iv :: #force_inline proc "c" (location: i32, count: i32, value: [^]i32, loc := #caller_location) { impl_Uniform3iv(location, count, value); debug_helper(loc, 0, location, count, value); } + Uniform4iv :: #force_inline proc "c" (location: i32, count: i32, value: [^]i32, loc := #caller_location) { impl_Uniform4iv(location, count, value); debug_helper(loc, 0, location, count, value); } + UniformMatrix2fv :: #force_inline proc "c" (location: i32, count: i32, transpose: bool, value: [^]f32, loc := #caller_location) { impl_UniformMatrix2fv(location, count, transpose, value); debug_helper(loc, 0, location, count, transpose, value); } + UniformMatrix3fv :: #force_inline proc "c" (location: i32, count: i32, transpose: bool, value: [^]f32, loc := #caller_location) { impl_UniformMatrix3fv(location, count, transpose, value); debug_helper(loc, 0, location, count, transpose, value); } + UniformMatrix4fv :: #force_inline proc "c" (location: i32, count: i32, transpose: bool, value: [^]f32, loc := #caller_location) { impl_UniformMatrix4fv(location, count, transpose, value); debug_helper(loc, 0, location, count, transpose, value); } + ValidateProgram :: #force_inline proc "c" (program: u32, loc := #caller_location) { impl_ValidateProgram(program); debug_helper(loc, 0, program); } + VertexAttrib1d :: #force_inline proc "c" (index: u32, x: f64, loc := #caller_location) { impl_VertexAttrib1d(index, x); debug_helper(loc, 0, index, x); } + VertexAttrib1dv :: #force_inline proc "c" (index: u32, v: ^f64, loc := #caller_location) { impl_VertexAttrib1dv(index, v); debug_helper(loc, 0, index, v); } + VertexAttrib1f :: #force_inline proc "c" (index: u32, x: f32, loc := #caller_location) { impl_VertexAttrib1f(index, x); debug_helper(loc, 0, index, x); } + VertexAttrib1fv :: #force_inline proc "c" (index: u32, v: ^f32, loc := #caller_location) { impl_VertexAttrib1fv(index, v); debug_helper(loc, 0, index, v); } + VertexAttrib1s :: #force_inline proc "c" (index: u32, x: i16, loc := #caller_location) { impl_VertexAttrib1s(index, x); debug_helper(loc, 0, index, x); } + VertexAttrib1sv :: #force_inline proc "c" (index: u32, v: ^i16, loc := #caller_location) { impl_VertexAttrib1sv(index, v); debug_helper(loc, 0, index, v); } + VertexAttrib2d :: #force_inline proc "c" (index: u32, x: f64, y: f64, loc := #caller_location) { impl_VertexAttrib2d(index, x, y); debug_helper(loc, 0, index, x, y); } + VertexAttrib2dv :: #force_inline proc "c" (index: u32, v: ^f64, loc := #caller_location) { impl_VertexAttrib2dv(index, v); debug_helper(loc, 0, index, v); } + VertexAttrib2f :: #force_inline proc "c" (index: u32, x: f32, y: f32, loc := #caller_location) { impl_VertexAttrib2f(index, x, y); debug_helper(loc, 0, index, x, y); } + VertexAttrib2fv :: #force_inline proc "c" (index: u32, v: ^f32, loc := #caller_location) { impl_VertexAttrib2fv(index, v); debug_helper(loc, 0, index, v); } + VertexAttrib2s :: #force_inline proc "c" (index: u32, x: i16, y: i16, loc := #caller_location) { impl_VertexAttrib2s(index, x, y); debug_helper(loc, 0, index, x, y); } + VertexAttrib2sv :: #force_inline proc "c" (index: u32, v: ^i16, loc := #caller_location) { impl_VertexAttrib2sv(index, v); debug_helper(loc, 0, index, v); } + VertexAttrib3d :: #force_inline proc "c" (index: u32, x: f64, y: f64, z: f64, loc := #caller_location) { impl_VertexAttrib3d(index, x, y, z); debug_helper(loc, 0, index, x, y, z); } + VertexAttrib3dv :: #force_inline proc "c" (index: u32, v: ^f64, loc := #caller_location) { impl_VertexAttrib3dv(index, v); debug_helper(loc, 0, index, v); } + VertexAttrib3f :: #force_inline proc "c" (index: u32, x: f32, y: f32, z: f32, loc := #caller_location) { impl_VertexAttrib3f(index, x, y, z); debug_helper(loc, 0, index, x, y, z); } + VertexAttrib3fv :: #force_inline proc "c" (index: u32, v: ^f32, loc := #caller_location) { impl_VertexAttrib3fv(index, v); debug_helper(loc, 0, index, v); } + VertexAttrib3s :: #force_inline proc "c" (index: u32, x: i16, y: i16, z: i16, loc := #caller_location) { impl_VertexAttrib3s(index, x, y, z); debug_helper(loc, 0, index, x, y, z); } + VertexAttrib3sv :: #force_inline proc "c" (index: u32, v: ^i16, loc := #caller_location) { impl_VertexAttrib3sv(index, v); debug_helper(loc, 0, index, v); } + VertexAttrib4Nbv :: #force_inline proc "c" (index: u32, v: ^i8, loc := #caller_location) { impl_VertexAttrib4Nbv(index, v); debug_helper(loc, 0, index, v); } + VertexAttrib4Niv :: #force_inline proc "c" (index: u32, v: ^i32, loc := #caller_location) { impl_VertexAttrib4Niv(index, v); debug_helper(loc, 0, index, v); } + VertexAttrib4Nsv :: #force_inline proc "c" (index: u32, v: ^i16, loc := #caller_location) { impl_VertexAttrib4Nsv(index, v); debug_helper(loc, 0, index, v); } + VertexAttrib4Nub :: #force_inline proc "c" (index: u32, x: u8, y: u8, z: u8, w: u8, loc := #caller_location) { impl_VertexAttrib4Nub(index, x, y, z, w); debug_helper(loc, 0, index, x, y, z, w); } + VertexAttrib4Nubv :: #force_inline proc "c" (index: u32, v: ^u8, loc := #caller_location) { impl_VertexAttrib4Nubv(index, v); debug_helper(loc, 0, index, v); } + VertexAttrib4Nuiv :: #force_inline proc "c" (index: u32, v: ^u32, loc := #caller_location) { impl_VertexAttrib4Nuiv(index, v); debug_helper(loc, 0, index, v); } + VertexAttrib4Nusv :: #force_inline proc "c" (index: u32, v: ^u16, loc := #caller_location) { impl_VertexAttrib4Nusv(index, v); debug_helper(loc, 0, index, v); } + VertexAttrib4bv :: #force_inline proc "c" (index: u32, v: ^i8, loc := #caller_location) { impl_VertexAttrib4bv(index, v); debug_helper(loc, 0, index, v); } + VertexAttrib4d :: #force_inline proc "c" (index: u32, x: f64, y: f64, z: f64, w: f64, loc := #caller_location) { impl_VertexAttrib4d(index, x, y, z, w); debug_helper(loc, 0, index, x, y, z, w); } + VertexAttrib4dv :: #force_inline proc "c" (index: u32, v: ^f64, loc := #caller_location) { impl_VertexAttrib4dv(index, v); debug_helper(loc, 0, index, v); } + VertexAttrib4f :: #force_inline proc "c" (index: u32, x: f32, y: f32, z: f32, w: f32, loc := #caller_location) { impl_VertexAttrib4f(index, x, y, z, w); debug_helper(loc, 0, index, x, y, z, w); } + VertexAttrib4fv :: #force_inline proc "c" (index: u32, v: ^f32, loc := #caller_location) { impl_VertexAttrib4fv(index, v); debug_helper(loc, 0, index, v); } + VertexAttrib4iv :: #force_inline proc "c" (index: u32, v: ^i32, loc := #caller_location) { impl_VertexAttrib4iv(index, v); debug_helper(loc, 0, index, v); } + VertexAttrib4s :: #force_inline proc "c" (index: u32, x: i16, y: i16, z: i16, w: i16, loc := #caller_location) { impl_VertexAttrib4s(index, x, y, z, w); debug_helper(loc, 0, index, x, y, z, w); } + VertexAttrib4sv :: #force_inline proc "c" (index: u32, v: ^i16, loc := #caller_location) { impl_VertexAttrib4sv(index, v); debug_helper(loc, 0, index, v); } + VertexAttrib4ubv :: #force_inline proc "c" (index: u32, v: ^u8, loc := #caller_location) { impl_VertexAttrib4ubv(index, v); debug_helper(loc, 0, index, v); } + VertexAttrib4uiv :: #force_inline proc "c" (index: u32, v: ^u32, loc := #caller_location) { impl_VertexAttrib4uiv(index, v); debug_helper(loc, 0, index, v); } + VertexAttrib4usv :: #force_inline proc "c" (index: u32, v: ^u16, loc := #caller_location) { impl_VertexAttrib4usv(index, v); debug_helper(loc, 0, index, v); } + VertexAttribPointer :: #force_inline proc "c" (index: u32, size: i32, type: u32, normalized: bool, stride: i32, pointer: rawptr, loc := #caller_location) { impl_VertexAttribPointer(index, size, type, normalized, stride, pointer); debug_helper(loc, 0, index, size, type, normalized, stride, pointer); } + + // VERSION_2_1 + UniformMatrix2x3fv :: #force_inline proc "c" (location: i32, count: i32, transpose: bool, value: [^]f32, loc := #caller_location) { impl_UniformMatrix2x3fv(location, count, transpose, value); debug_helper(loc, 0, location, count, transpose, value); } + UniformMatrix3x2fv :: #force_inline proc "c" (location: i32, count: i32, transpose: bool, value: [^]f32, loc := #caller_location) { impl_UniformMatrix3x2fv(location, count, transpose, value); debug_helper(loc, 0, location, count, transpose, value); } + UniformMatrix2x4fv :: #force_inline proc "c" (location: i32, count: i32, transpose: bool, value: [^]f32, loc := #caller_location) { impl_UniformMatrix2x4fv(location, count, transpose, value); debug_helper(loc, 0, location, count, transpose, value); } + UniformMatrix4x2fv :: #force_inline proc "c" (location: i32, count: i32, transpose: bool, value: [^]f32, loc := #caller_location) { impl_UniformMatrix4x2fv(location, count, transpose, value); debug_helper(loc, 0, location, count, transpose, value); } + UniformMatrix3x4fv :: #force_inline proc "c" (location: i32, count: i32, transpose: bool, value: [^]f32, loc := #caller_location) { impl_UniformMatrix3x4fv(location, count, transpose, value); debug_helper(loc, 0, location, count, transpose, value); } + UniformMatrix4x3fv :: #force_inline proc "c" (location: i32, count: i32, transpose: bool, value: [^]f32, loc := #caller_location) { impl_UniformMatrix4x3fv(location, count, transpose, value); debug_helper(loc, 0, location, count, transpose, value); } + + // VERSION_3_0 + ColorMaski :: #force_inline proc "c" (index: u32, r: u8, g: u8, b: u8, a: u8, loc := #caller_location) { impl_ColorMaski(index, r, g, b, a); debug_helper(loc, 0, index, r, g, b, a); } + GetBooleani_v :: #force_inline proc "c" (target: u32, index: u32, data: ^bool, loc := #caller_location) { impl_GetBooleani_v(target, index, data); debug_helper(loc, 0, target, index, data); } + GetIntegeri_v :: #force_inline proc "c" (target: u32, index: u32, data: ^i32, loc := #caller_location) { impl_GetIntegeri_v(target, index, data); debug_helper(loc, 0, target, index, data); } + Enablei :: #force_inline proc "c" (target: u32, index: u32, loc := #caller_location) { impl_Enablei(target, index); debug_helper(loc, 0, target, index); } + Disablei :: #force_inline proc "c" (target: u32, index: u32, loc := #caller_location) { impl_Disablei(target, index); debug_helper(loc, 0, target, index); } + IsEnabledi :: #force_inline proc "c" (target: u32, index: u32, loc := #caller_location) -> bool { ret := impl_IsEnabledi(target, index); debug_helper(loc, 1, ret, target, index); return ret; } + BeginTransformFeedback :: #force_inline proc "c" (primitiveMode: u32, loc := #caller_location) { impl_BeginTransformFeedback(primitiveMode); debug_helper(loc, 0, primitiveMode); } + EndTransformFeedback :: #force_inline proc "c" (loc := #caller_location) { impl_EndTransformFeedback(); debug_helper(loc, 0); } + BindBufferRange :: #force_inline proc "c" (target: u32, index: u32, buffer: u32, offset: int, size: int, loc := #caller_location) { impl_BindBufferRange(target, index, buffer, offset, size); debug_helper(loc, 0, target, index, buffer, offset, size); } + BindBufferBase :: #force_inline proc "c" (target: u32, index: u32, buffer: u32, loc := #caller_location) { impl_BindBufferBase(target, index, buffer); debug_helper(loc, 0, target, index, buffer); } + TransformFeedbackVaryings :: #force_inline proc "c" (program: u32, count: i32, varyings: [^]cstring, bufferMode: u32, loc := #caller_location) { impl_TransformFeedbackVaryings(program, count, varyings, bufferMode); debug_helper(loc, 0, program, count, varyings, bufferMode); } + GetTransformFeedbackVarying :: #force_inline proc "c" (program: u32, index: u32, bufSize: i32, length: ^i32, size: ^i32, type: ^u32, name: [^]u8, loc := #caller_location) { impl_GetTransformFeedbackVarying(program, index, bufSize, length, size, type, name); debug_helper(loc, 0, program, index, bufSize, length, size, type, name); } + ClampColor :: #force_inline proc "c" (target: u32, clamp: u32, loc := #caller_location) { impl_ClampColor(target, clamp); debug_helper(loc, 0, target, clamp); } + BeginConditionalRender :: #force_inline proc "c" (id: u32, mode: u32, loc := #caller_location) { impl_BeginConditionalRender(id, mode); debug_helper(loc, 0, id, mode); } + EndConditionalRender :: #force_inline proc "c" (loc := #caller_location) { impl_EndConditionalRender(); debug_helper(loc, 0); } + VertexAttribIPointer :: #force_inline proc "c" (index: u32, size: i32, type: u32, stride: i32, pointer: rawptr, loc := #caller_location) { impl_VertexAttribIPointer(index, size, type, stride, pointer); debug_helper(loc, 0, index, size, type, stride, pointer); } + GetVertexAttribIiv :: #force_inline proc "c" (index: u32, pname: u32, params: [^]i32, loc := #caller_location) { impl_GetVertexAttribIiv(index, pname, params); debug_helper(loc, 0, index, pname, params); } + GetVertexAttribIuiv :: #force_inline proc "c" (index: u32, pname: u32, params: [^]u32, loc := #caller_location) { impl_GetVertexAttribIuiv(index, pname, params); debug_helper(loc, 0, index, pname, params); } + VertexAttribI1i :: #force_inline proc "c" (index: u32, x: i32, loc := #caller_location) { impl_VertexAttribI1i(index, x); debug_helper(loc, 0, index, x); } + VertexAttribI2i :: #force_inline proc "c" (index: u32, x: i32, y: i32, loc := #caller_location) { impl_VertexAttribI2i(index, x, y); debug_helper(loc, 0, index, x, y); } + VertexAttribI3i :: #force_inline proc "c" (index: u32, x: i32, y: i32, z: i32, loc := #caller_location) { impl_VertexAttribI3i(index, x, y, z); debug_helper(loc, 0, index, x, y, z); } + VertexAttribI4i :: #force_inline proc "c" (index: u32, x: i32, y: i32, z: i32, w: i32, loc := #caller_location) { impl_VertexAttribI4i(index, x, y, z, w); debug_helper(loc, 0, index, x, y, z, w); } + VertexAttribI1ui :: #force_inline proc "c" (index: u32, x: u32, loc := #caller_location) { impl_VertexAttribI1ui(index, x); debug_helper(loc, 0, index, x); } + VertexAttribI2ui :: #force_inline proc "c" (index: u32, x: u32, y: u32, loc := #caller_location) { impl_VertexAttribI2ui(index, x, y); debug_helper(loc, 0, index, x, y); } + VertexAttribI3ui :: #force_inline proc "c" (index: u32, x: u32, y: u32, z: u32, loc := #caller_location) { impl_VertexAttribI3ui(index, x, y, z); debug_helper(loc, 0, index, x, y, z); } + VertexAttribI4ui :: #force_inline proc "c" (index: u32, x: u32, y: u32, z: u32, w: u32, loc := #caller_location) { impl_VertexAttribI4ui(index, x, y, z, w); debug_helper(loc, 0, index, x, y, z, w); } + VertexAttribI1iv :: #force_inline proc "c" (index: u32, v: ^i32, loc := #caller_location) { impl_VertexAttribI1iv(index, v); debug_helper(loc, 0, index, v); } + VertexAttribI2iv :: #force_inline proc "c" (index: u32, v: ^i32, loc := #caller_location) { impl_VertexAttribI2iv(index, v); debug_helper(loc, 0, index, v); } + VertexAttribI3iv :: #force_inline proc "c" (index: u32, v: ^i32, loc := #caller_location) { impl_VertexAttribI3iv(index, v); debug_helper(loc, 0, index, v); } + VertexAttribI4iv :: #force_inline proc "c" (index: u32, v: ^i32, loc := #caller_location) { impl_VertexAttribI4iv(index, v); debug_helper(loc, 0, index, v); } + VertexAttribI1uiv :: #force_inline proc "c" (index: u32, v: ^u32, loc := #caller_location) { impl_VertexAttribI1uiv(index, v); debug_helper(loc, 0, index, v); } + VertexAttribI2uiv :: #force_inline proc "c" (index: u32, v: ^u32, loc := #caller_location) { impl_VertexAttribI2uiv(index, v); debug_helper(loc, 0, index, v); } + VertexAttribI3uiv :: #force_inline proc "c" (index: u32, v: ^u32, loc := #caller_location) { impl_VertexAttribI3uiv(index, v); debug_helper(loc, 0, index, v); } + VertexAttribI4uiv :: #force_inline proc "c" (index: u32, v: ^u32, loc := #caller_location) { impl_VertexAttribI4uiv(index, v); debug_helper(loc, 0, index, v); } + VertexAttribI4bv :: #force_inline proc "c" (index: u32, v: ^i8, loc := #caller_location) { impl_VertexAttribI4bv(index, v); debug_helper(loc, 0, index, v); } + VertexAttribI4sv :: #force_inline proc "c" (index: u32, v: ^i16, loc := #caller_location) { impl_VertexAttribI4sv(index, v); debug_helper(loc, 0, index, v); } + VertexAttribI4ubv :: #force_inline proc "c" (index: u32, v: ^u8, loc := #caller_location) { impl_VertexAttribI4ubv(index, v); debug_helper(loc, 0, index, v); } + VertexAttribI4usv :: #force_inline proc "c" (index: u32, v: ^u16, loc := #caller_location) { impl_VertexAttribI4usv(index, v); debug_helper(loc, 0, index, v); } + GetUniformuiv :: #force_inline proc "c" (program: u32, location: i32, params: [^]u32, loc := #caller_location) { impl_GetUniformuiv(program, location, params); debug_helper(loc, 0, program, location, params); } + BindFragDataLocation :: #force_inline proc "c" (program: u32, color: u32, name: cstring, loc := #caller_location) { impl_BindFragDataLocation(program, color, name); debug_helper(loc, 0, program, color, name); } + GetFragDataLocation :: #force_inline proc "c" (program: u32, name: cstring, loc := #caller_location) -> i32 { ret := impl_GetFragDataLocation(program, name); debug_helper(loc, 1, ret, program, name); return ret; } + Uniform1ui :: #force_inline proc "c" (location: i32, v0: u32, loc := #caller_location) { impl_Uniform1ui(location, v0); debug_helper(loc, 0, location, v0); } + Uniform2ui :: #force_inline proc "c" (location: i32, v0: u32, v1: u32, loc := #caller_location) { impl_Uniform2ui(location, v0, v1); debug_helper(loc, 0, location, v0, v1); } + Uniform3ui :: #force_inline proc "c" (location: i32, v0: u32, v1: u32, v2: u32, loc := #caller_location) { impl_Uniform3ui(location, v0, v1, v2); debug_helper(loc, 0, location, v0, v1, v2); } + Uniform4ui :: #force_inline proc "c" (location: i32, v0: u32, v1: u32, v2: u32, v3: u32, loc := #caller_location) { impl_Uniform4ui(location, v0, v1, v2, v3); debug_helper(loc, 0, location, v0, v1, v2, v3); } + Uniform1uiv :: #force_inline proc "c" (location: i32, count: i32, value: [^]u32, loc := #caller_location) { impl_Uniform1uiv(location, count, value); debug_helper(loc, 0, location, count, value); } + Uniform2uiv :: #force_inline proc "c" (location: i32, count: i32, value: [^]u32, loc := #caller_location) { impl_Uniform2uiv(location, count, value); debug_helper(loc, 0, location, count, value); } + Uniform3uiv :: #force_inline proc "c" (location: i32, count: i32, value: [^]u32, loc := #caller_location) { impl_Uniform3uiv(location, count, value); debug_helper(loc, 0, location, count, value); } + Uniform4uiv :: #force_inline proc "c" (location: i32, count: i32, value: [^]u32, loc := #caller_location) { impl_Uniform4uiv(location, count, value); debug_helper(loc, 0, location, count, value); } + TexParameterIiv :: #force_inline proc "c" (target: u32, pname: u32, params: [^]i32, loc := #caller_location) { impl_TexParameterIiv(target, pname, params); debug_helper(loc, 0, target, pname, params); } + TexParameterIuiv :: #force_inline proc "c" (target: u32, pname: u32, params: [^]u32, loc := #caller_location) { impl_TexParameterIuiv(target, pname, params); debug_helper(loc, 0, target, pname, params); } + GetTexParameterIiv :: #force_inline proc "c" (target: u32, pname: u32, params: [^]i32, loc := #caller_location) { impl_GetTexParameterIiv(target, pname, params); debug_helper(loc, 0, target, pname, params); } + GetTexParameterIuiv :: #force_inline proc "c" (target: u32, pname: u32, params: [^]u32, loc := #caller_location) { impl_GetTexParameterIuiv(target, pname, params); debug_helper(loc, 0, target, pname, params); } + ClearBufferiv :: #force_inline proc "c" (buffer: u32, drawbuffer: i32, value: ^i32, loc := #caller_location) { impl_ClearBufferiv(buffer, drawbuffer, value); debug_helper(loc, 0, buffer, drawbuffer, value); } + ClearBufferuiv :: #force_inline proc "c" (buffer: u32, drawbuffer: i32, value: ^u32, loc := #caller_location) { impl_ClearBufferuiv(buffer, drawbuffer, value); debug_helper(loc, 0, buffer, drawbuffer, value); } + ClearBufferfv :: #force_inline proc "c" (buffer: u32, drawbuffer: i32, value: ^f32, loc := #caller_location) { impl_ClearBufferfv(buffer, drawbuffer, value); debug_helper(loc, 0, buffer, drawbuffer, value); } + ClearBufferfi :: #force_inline proc "c" (buffer: u32, drawbuffer: i32, depth: f32, stencil: i32, loc := #caller_location) -> rawptr { ret := impl_ClearBufferfi(buffer, drawbuffer, depth, stencil); debug_helper(loc, 1, ret, buffer, drawbuffer, depth, stencil); return ret; } + GetStringi :: #force_inline proc "c" (name: u32, index: u32, loc := #caller_location) -> cstring { ret := impl_GetStringi(name, index); debug_helper(loc, 1, ret, name, index); return ret; } + IsRenderbuffer :: #force_inline proc "c" (renderbuffer: u32, loc := #caller_location) -> bool { ret := impl_IsRenderbuffer(renderbuffer); debug_helper(loc, 1, ret, renderbuffer); return ret; } + BindRenderbuffer :: #force_inline proc "c" (target: u32, renderbuffer: u32, loc := #caller_location) { impl_BindRenderbuffer(target, renderbuffer); debug_helper(loc, 0, target, renderbuffer); } + DeleteRenderbuffers :: #force_inline proc "c" (n: i32, renderbuffers: [^]u32, loc := #caller_location) { impl_DeleteRenderbuffers(n, renderbuffers); debug_helper(loc, 0, n, renderbuffers); } + GenRenderbuffers :: #force_inline proc "c" (n: i32, renderbuffers: [^]u32, loc := #caller_location) { impl_GenRenderbuffers(n, renderbuffers); debug_helper(loc, 0, n, renderbuffers); } + RenderbufferStorage :: #force_inline proc "c" (target: u32, internalformat: u32, width: i32, height: i32, loc := #caller_location) { impl_RenderbufferStorage(target, internalformat, width, height); debug_helper(loc, 0, target, internalformat, width, height); } + GetRenderbufferParameteriv :: #force_inline proc "c" (target: u32, pname: u32, params: [^]i32, loc := #caller_location) { impl_GetRenderbufferParameteriv(target, pname, params); debug_helper(loc, 0, target, pname, params); } + IsFramebuffer :: #force_inline proc "c" (framebuffer: u32, loc := #caller_location) -> bool { ret := impl_IsFramebuffer(framebuffer); debug_helper(loc, 1, ret, framebuffer); return ret; } + BindFramebuffer :: #force_inline proc "c" (target: u32, framebuffer: u32, loc := #caller_location) { impl_BindFramebuffer(target, framebuffer); debug_helper(loc, 0, target, framebuffer); } + DeleteFramebuffers :: #force_inline proc "c" (n: i32, framebuffers: [^]u32, loc := #caller_location) { impl_DeleteFramebuffers(n, framebuffers); debug_helper(loc, 0, n, framebuffers); } + GenFramebuffers :: #force_inline proc "c" (n: i32, framebuffers: [^]u32, loc := #caller_location) { impl_GenFramebuffers(n, framebuffers); debug_helper(loc, 0, n, framebuffers); } + CheckFramebufferStatus :: #force_inline proc "c" (target: u32, loc := #caller_location) -> u32 { ret := impl_CheckFramebufferStatus(target); debug_helper(loc, 1, ret, target); return ret; } + FramebufferTexture1D :: #force_inline proc "c" (target: u32, attachment: u32, textarget: u32, texture: u32, level: i32, loc := #caller_location) { impl_FramebufferTexture1D(target, attachment, textarget, texture, level); debug_helper(loc, 0, target, attachment, textarget, texture, level); } + FramebufferTexture2D :: #force_inline proc "c" (target: u32, attachment: u32, textarget: u32, texture: u32, level: i32, loc := #caller_location) { impl_FramebufferTexture2D(target, attachment, textarget, texture, level); debug_helper(loc, 0, target, attachment, textarget, texture, level); } + FramebufferTexture3D :: #force_inline proc "c" (target: u32, attachment: u32, textarget: u32, texture: u32, level: i32, zoffset: i32, loc := #caller_location) { impl_FramebufferTexture3D(target, attachment, textarget, texture, level, zoffset); debug_helper(loc, 0, target, attachment, textarget, texture, level, zoffset); } + FramebufferRenderbuffer :: #force_inline proc "c" (target: u32, attachment: u32, renderbuffertarget: u32, renderbuffer: u32, loc := #caller_location) { impl_FramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer); debug_helper(loc, 0, target, attachment, renderbuffertarget, renderbuffer); } + GetFramebufferAttachmentParameteriv :: #force_inline proc "c" (target: u32, attachment: u32, pname: u32, params: [^]i32, loc := #caller_location) { impl_GetFramebufferAttachmentParameteriv(target, attachment, pname, params); debug_helper(loc, 0, target, attachment, pname, params); } + GenerateMipmap :: #force_inline proc "c" (target: u32, loc := #caller_location) { impl_GenerateMipmap(target); debug_helper(loc, 0, target); } + BlitFramebuffer :: #force_inline proc "c" (srcX0: i32, srcY0: i32, srcX1: i32, srcY1: i32, dstX0: i32, dstY0: i32, dstX1: i32, dstY1: i32, mask: u32, filter: u32, loc := #caller_location) { impl_BlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); debug_helper(loc, 0, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); } + RenderbufferStorageMultisample :: #force_inline proc "c" (target: u32, samples: i32, internalformat: u32, width: i32, height: i32, loc := #caller_location) { impl_RenderbufferStorageMultisample(target, samples, internalformat, width, height); debug_helper(loc, 0, target, samples, internalformat, width, height); } + FramebufferTextureLayer :: #force_inline proc "c" (target: u32, attachment: u32, texture: u32, level: i32, layer: i32, loc := #caller_location) { impl_FramebufferTextureLayer(target, attachment, texture, level, layer); debug_helper(loc, 0, target, attachment, texture, level, layer); } + MapBufferRange :: #force_inline proc "c" (target: u32, offset: int, length: int, access: u32, loc := #caller_location) -> rawptr { ret := impl_MapBufferRange(target, offset, length, access); debug_helper(loc, 1, ret, target, offset, length, access); return ret; } + FlushMappedBufferRange :: #force_inline proc "c" (target: u32, offset: int, length: int, loc := #caller_location) { impl_FlushMappedBufferRange(target, offset, length); debug_helper(loc, 0, target, offset, length); } + BindVertexArray :: #force_inline proc "c" (array: u32, loc := #caller_location) { impl_BindVertexArray(array); debug_helper(loc, 0, array); } + DeleteVertexArrays :: #force_inline proc "c" (n: i32, arrays: [^]u32, loc := #caller_location) { impl_DeleteVertexArrays(n, arrays); debug_helper(loc, 0, n, arrays); } + GenVertexArrays :: #force_inline proc "c" (n: i32, arrays: [^]u32, loc := #caller_location) { impl_GenVertexArrays(n, arrays); debug_helper(loc, 0, n, arrays); } + IsVertexArray :: #force_inline proc "c" (array: u32, loc := #caller_location) -> bool { ret := impl_IsVertexArray(array); debug_helper(loc, 1, ret, array); return ret; } + + // VERSION_3_1 + DrawArraysInstanced :: #force_inline proc "c" (mode: u32, first: i32, count: i32, instancecount: i32, loc := #caller_location) { impl_DrawArraysInstanced(mode, first, count, instancecount); debug_helper(loc, 0, mode, first, count, instancecount); } + DrawElementsInstanced :: #force_inline proc "c" (mode: u32, count: i32, type: u32, indices: rawptr, instancecount: i32, loc := #caller_location) { impl_DrawElementsInstanced(mode, count, type, indices, instancecount); debug_helper(loc, 0, mode, count, type, indices, instancecount); } + TexBuffer :: #force_inline proc "c" (target: u32, internalformat: u32, buffer: u32, loc := #caller_location) { impl_TexBuffer(target, internalformat, buffer); debug_helper(loc, 0, target, internalformat, buffer); } + PrimitiveRestartIndex :: #force_inline proc "c" (index: u32, loc := #caller_location) { impl_PrimitiveRestartIndex(index); debug_helper(loc, 0, index); } + CopyBufferSubData :: #force_inline proc "c" (readTarget: u32, writeTarget: u32, readOffset: int, writeOffset: int, size: int, loc := #caller_location) { impl_CopyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size); debug_helper(loc, 0, readTarget, writeTarget, readOffset, writeOffset, size); } + GetUniformIndices :: #force_inline proc "c" (program: u32, uniformCount: i32, uniformNames: [^]cstring, uniformIndices: [^]u32, loc := #caller_location) { impl_GetUniformIndices(program, uniformCount, uniformNames, uniformIndices); debug_helper(loc, 0, program, uniformCount, uniformNames, uniformIndices); } + GetActiveUniformsiv :: #force_inline proc "c" (program: u32, uniformCount: i32, uniformIndices: [^]u32, pname: u32, params: [^]i32, loc := #caller_location) { impl_GetActiveUniformsiv(program, uniformCount, uniformIndices, pname, params); debug_helper(loc, 0, program, uniformCount, uniformIndices, pname, params); } + GetActiveUniformName :: #force_inline proc "c" (program: u32, uniformIndex: u32, bufSize: i32, length: ^i32, uniformName: [^]u8, loc := #caller_location) { impl_GetActiveUniformName(program, uniformIndex, bufSize, length, uniformName); debug_helper(loc, 0, program, uniformIndex, bufSize, length, uniformName); } + GetUniformBlockIndex :: #force_inline proc "c" (program: u32, uniformBlockName: cstring, loc := #caller_location) -> u32 { ret := impl_GetUniformBlockIndex(program, uniformBlockName); debug_helper(loc, 1, ret, program, uniformBlockName); return ret; } + GetActiveUniformBlockiv :: #force_inline proc "c" (program: u32, uniformBlockIndex: u32, pname: u32, params: [^]i32, loc := #caller_location) { impl_GetActiveUniformBlockiv(program, uniformBlockIndex, pname, params); debug_helper(loc, 0, program, uniformBlockIndex, pname, params); } + GetActiveUniformBlockName :: #force_inline proc "c" (program: u32, uniformBlockIndex: u32, bufSize: i32, length: ^i32, uniformBlockName: [^]u8, loc := #caller_location) { impl_GetActiveUniformBlockName(program, uniformBlockIndex, bufSize, length, uniformBlockName); debug_helper(loc, 0, program, uniformBlockIndex, bufSize, length, uniformBlockName); } + UniformBlockBinding :: #force_inline proc "c" (program: u32, uniformBlockIndex: u32, uniformBlockBinding: u32, loc := #caller_location) { impl_UniformBlockBinding(program, uniformBlockIndex, uniformBlockBinding); debug_helper(loc, 0, program, uniformBlockIndex, uniformBlockBinding); } + + // VERSION_3_2 + DrawElementsBaseVertex :: #force_inline proc "c" (mode: u32, count: i32, type: u32, indices: rawptr, basevertex: i32, loc := #caller_location) { impl_DrawElementsBaseVertex(mode, count, type, indices, basevertex); debug_helper(loc, 0, mode, count, type, indices, basevertex); } + DrawRangeElementsBaseVertex :: #force_inline proc "c" (mode: u32, start: u32, end: u32, count: i32, type: u32, indices: rawptr, basevertex: i32, loc := #caller_location) { impl_DrawRangeElementsBaseVertex(mode, start, end, count, type, indices, basevertex); debug_helper(loc, 0, mode, start, end, count, type, indices, basevertex); } + DrawElementsInstancedBaseVertex :: #force_inline proc "c" (mode: u32, count: i32, type: u32, indices: rawptr, instancecount: i32, basevertex: i32, loc := #caller_location) { impl_DrawElementsInstancedBaseVertex(mode, count, type, indices, instancecount, basevertex); debug_helper(loc, 0, mode, count, type, indices, instancecount, basevertex); } + MultiDrawElementsBaseVertex :: #force_inline proc "c" (mode: u32, count: [^]i32, type: u32, indices: [^]rawptr, drawcount: i32, basevertex: [^]i32, loc := #caller_location) { impl_MultiDrawElementsBaseVertex(mode, count, type, indices, drawcount, basevertex); debug_helper(loc, 0, mode, count, type, indices, drawcount, basevertex); } + ProvokingVertex :: #force_inline proc "c" (mode: u32, loc := #caller_location) { impl_ProvokingVertex(mode); debug_helper(loc, 0, mode); } + FenceSync :: #force_inline proc "c" (condition: u32, flags: u32, loc := #caller_location) -> sync_t { ret := impl_FenceSync(condition, flags); debug_helper(loc, 1, ret, condition, flags); return ret; } + IsSync :: #force_inline proc "c" (sync: sync_t, loc := #caller_location) -> bool { ret := impl_IsSync(sync); debug_helper(loc, 1, ret, sync); return ret; } + DeleteSync :: #force_inline proc "c" (sync: sync_t, loc := #caller_location) { impl_DeleteSync(sync); debug_helper(loc, 0, sync); } + ClientWaitSync :: #force_inline proc "c" (sync: sync_t, flags: u32, timeout: u64, loc := #caller_location) -> u32 { ret := impl_ClientWaitSync(sync, flags, timeout); debug_helper(loc, 1, ret, sync, flags, timeout); return ret; } + WaitSync :: #force_inline proc "c" (sync: sync_t, flags: u32, timeout: u64, loc := #caller_location) { impl_WaitSync(sync, flags, timeout); debug_helper(loc, 0, sync, flags, timeout); } + GetInteger64v :: #force_inline proc "c" (pname: u32, data: ^i64, loc := #caller_location) { impl_GetInteger64v(pname, data); debug_helper(loc, 0, pname, data); } + GetSynciv :: #force_inline proc "c" (sync: sync_t, pname: u32, bufSize: i32, length: ^i32, values: [^]i32, loc := #caller_location) { impl_GetSynciv(sync, pname, bufSize, length, values); debug_helper(loc, 0, sync, pname, bufSize, length, values); } + GetInteger64i_v :: #force_inline proc "c" (target: u32, index: u32, data: ^i64, loc := #caller_location) { impl_GetInteger64i_v(target, index, data); debug_helper(loc, 0, target, index, data); } + GetBufferParameteri64v :: #force_inline proc "c" (target: u32, pname: u32, params: [^]i64, loc := #caller_location) { impl_GetBufferParameteri64v(target, pname, params); debug_helper(loc, 0, target, pname, params); } + FramebufferTexture :: #force_inline proc "c" (target: u32, attachment: u32, texture: u32, level: i32, loc := #caller_location) { impl_FramebufferTexture(target, attachment, texture, level); debug_helper(loc, 0, target, attachment, texture, level); } + TexImage2DMultisample :: #force_inline proc "c" (target: u32, samples: i32, internalformat: u32, width: i32, height: i32, fixedsamplelocations: u8, loc := #caller_location) { impl_TexImage2DMultisample(target, samples, internalformat, width, height, fixedsamplelocations); debug_helper(loc, 0, target, samples, internalformat, width, height, fixedsamplelocations); } + TexImage3DMultisample :: #force_inline proc "c" (target: u32, samples: i32, internalformat: u32, width: i32, height: i32, depth: i32, fixedsamplelocations: u8, loc := #caller_location) { impl_TexImage3DMultisample(target, samples, internalformat, width, height, depth, fixedsamplelocations); debug_helper(loc, 0, target, samples, internalformat, width, height, depth, fixedsamplelocations); } + GetMultisamplefv :: #force_inline proc "c" (pname: u32, index: u32, val: ^f32, loc := #caller_location) { impl_GetMultisamplefv(pname, index, val); debug_helper(loc, 0, pname, index, val); } + SampleMaski :: #force_inline proc "c" (maskNumber: u32, mask: u32, loc := #caller_location) { impl_SampleMaski(maskNumber, mask); debug_helper(loc, 0, maskNumber, mask); } + + // VERSION_3_3 + BindFragDataLocationIndexed :: #force_inline proc "c" (program: u32, colorNumber: u32, index: u32, name: cstring, loc := #caller_location) { impl_BindFragDataLocationIndexed(program, colorNumber, index, name); debug_helper(loc, 0, program, colorNumber, index, name); } + GetFragDataIndex :: #force_inline proc "c" (program: u32, name: cstring, loc := #caller_location) -> i32 { ret := impl_GetFragDataIndex(program, name); debug_helper(loc, 1, ret, program, name); return ret; } + GenSamplers :: #force_inline proc "c" (count: i32, samplers: [^]u32, loc := #caller_location) { impl_GenSamplers(count, samplers); debug_helper(loc, 0, count, samplers); } + DeleteSamplers :: #force_inline proc "c" (count: i32, samplers: [^]u32, loc := #caller_location) { impl_DeleteSamplers(count, samplers); debug_helper(loc, 0, count, samplers); } + IsSampler :: #force_inline proc "c" (sampler: u32, loc := #caller_location) -> bool { ret := impl_IsSampler(sampler); debug_helper(loc, 1, ret, sampler); return ret; } + BindSampler :: #force_inline proc "c" (unit: u32, sampler: u32, loc := #caller_location) { impl_BindSampler(unit, sampler); debug_helper(loc, 0, unit, sampler); } + SamplerParameteri :: #force_inline proc "c" (sampler: u32, pname: u32, param: i32, loc := #caller_location) { impl_SamplerParameteri(sampler, pname, param); debug_helper(loc, 0, sampler, pname, param); } + SamplerParameteriv :: #force_inline proc "c" (sampler: u32, pname: u32, param: ^i32, loc := #caller_location) { impl_SamplerParameteriv(sampler, pname, param); debug_helper(loc, 0, sampler, pname, param); } + SamplerParameterf :: #force_inline proc "c" (sampler: u32, pname: u32, param: f32, loc := #caller_location) { impl_SamplerParameterf(sampler, pname, param); debug_helper(loc, 0, sampler, pname, param); } + SamplerParameterfv :: #force_inline proc "c" (sampler: u32, pname: u32, param: ^f32, loc := #caller_location) { impl_SamplerParameterfv(sampler, pname, param); debug_helper(loc, 0, sampler, pname, param); } + SamplerParameterIiv :: #force_inline proc "c" (sampler: u32, pname: u32, param: ^i32, loc := #caller_location) { impl_SamplerParameterIiv(sampler, pname, param); debug_helper(loc, 0, sampler, pname, param); } + SamplerParameterIuiv :: #force_inline proc "c" (sampler: u32, pname: u32, param: ^u32, loc := #caller_location) { impl_SamplerParameterIuiv(sampler, pname, param); debug_helper(loc, 0, sampler, pname, param); } + GetSamplerParameteriv :: #force_inline proc "c" (sampler: u32, pname: u32, params: [^]i32, loc := #caller_location) { impl_GetSamplerParameteriv(sampler, pname, params); debug_helper(loc, 0, sampler, pname, params); } + GetSamplerParameterIiv :: #force_inline proc "c" (sampler: u32, pname: u32, params: [^]i32, loc := #caller_location) { impl_GetSamplerParameterIiv(sampler, pname, params); debug_helper(loc, 0, sampler, pname, params); } + GetSamplerParameterfv :: #force_inline proc "c" (sampler: u32, pname: u32, params: [^]f32, loc := #caller_location) { impl_GetSamplerParameterfv(sampler, pname, params); debug_helper(loc, 0, sampler, pname, params); } + GetSamplerParameterIuiv :: #force_inline proc "c" (sampler: u32, pname: u32, params: [^]u32, loc := #caller_location) { impl_GetSamplerParameterIuiv(sampler, pname, params); debug_helper(loc, 0, sampler, pname, params); } + QueryCounter :: #force_inline proc "c" (id: u32, target: u32, loc := #caller_location) { impl_QueryCounter(id, target); debug_helper(loc, 0, id, target); } + GetQueryObjecti64v :: #force_inline proc "c" (id: u32, pname: u32, params: [^]i64, loc := #caller_location) { impl_GetQueryObjecti64v(id, pname, params); debug_helper(loc, 0, id, pname, params); } + GetQueryObjectui64v :: #force_inline proc "c" (id: u32, pname: u32, params: [^]u64, loc := #caller_location) { impl_GetQueryObjectui64v(id, pname, params); debug_helper(loc, 0, id, pname, params); } + VertexAttribDivisor :: #force_inline proc "c" (index: u32, divisor: u32, loc := #caller_location) { impl_VertexAttribDivisor(index, divisor); debug_helper(loc, 0, index, divisor); } + VertexAttribP1ui :: #force_inline proc "c" (index: u32, type: u32, normalized: bool, value: u32, loc := #caller_location) { impl_VertexAttribP1ui(index, type, normalized, value); debug_helper(loc, 0, index, type, normalized, value); } + VertexAttribP1uiv :: #force_inline proc "c" (index: u32, type: u32, normalized: bool, value: ^u32, loc := #caller_location) { impl_VertexAttribP1uiv(index, type, normalized, value); debug_helper(loc, 0, index, type, normalized, value); } + VertexAttribP2ui :: #force_inline proc "c" (index: u32, type: u32, normalized: bool, value: u32, loc := #caller_location) { impl_VertexAttribP2ui(index, type, normalized, value); debug_helper(loc, 0, index, type, normalized, value); } + VertexAttribP2uiv :: #force_inline proc "c" (index: u32, type: u32, normalized: bool, value: ^u32, loc := #caller_location) { impl_VertexAttribP2uiv(index, type, normalized, value); debug_helper(loc, 0, index, type, normalized, value); } + VertexAttribP3ui :: #force_inline proc "c" (index: u32, type: u32, normalized: bool, value: u32, loc := #caller_location) { impl_VertexAttribP3ui(index, type, normalized, value); debug_helper(loc, 0, index, type, normalized, value); } + VertexAttribP3uiv :: #force_inline proc "c" (index: u32, type: u32, normalized: bool, value: ^u32, loc := #caller_location) { impl_VertexAttribP3uiv(index, type, normalized, value); debug_helper(loc, 0, index, type, normalized, value); } + VertexAttribP4ui :: #force_inline proc "c" (index: u32, type: u32, normalized: bool, value: u32, loc := #caller_location) { impl_VertexAttribP4ui(index, type, normalized, value); debug_helper(loc, 0, index, type, normalized, value); } + VertexAttribP4uiv :: #force_inline proc "c" (index: u32, type: u32, normalized: bool, value: ^u32, loc := #caller_location) { impl_VertexAttribP4uiv(index, type, normalized, value); debug_helper(loc, 0, index, type, normalized, value); } + VertexP2ui :: #force_inline proc "c" (type: u32, value: u32, loc := #caller_location) { impl_VertexP2ui(type, value); debug_helper(loc, 0, type, value); } + VertexP2uiv :: #force_inline proc "c" (type: u32, value: ^u32, loc := #caller_location) { impl_VertexP2uiv(type, value); debug_helper(loc, 0, type, value); } + VertexP3ui :: #force_inline proc "c" (type: u32, value: u32, loc := #caller_location) { impl_VertexP3ui(type, value); debug_helper(loc, 0, type, value); } + VertexP3uiv :: #force_inline proc "c" (type: u32, value: ^u32, loc := #caller_location) { impl_VertexP3uiv(type, value); debug_helper(loc, 0, type, value); } + VertexP4ui :: #force_inline proc "c" (type: u32, value: u32, loc := #caller_location) { impl_VertexP4ui(type, value); debug_helper(loc, 0, type, value); } + VertexP4uiv :: #force_inline proc "c" (type: u32, value: ^u32, loc := #caller_location) { impl_VertexP4uiv(type, value); debug_helper(loc, 0, type, value); } + TexCoordP1ui :: #force_inline proc "c" (type: u32, coords: u32, loc := #caller_location) { impl_TexCoordP1ui(type, coords); debug_helper(loc, 0, type, coords); } + TexCoordP1uiv :: #force_inline proc "c" (type: u32, coords: [^]u32, loc := #caller_location) { impl_TexCoordP1uiv(type, coords); debug_helper(loc, 0, type, coords); } + TexCoordP2ui :: #force_inline proc "c" (type: u32, coords: u32, loc := #caller_location) { impl_TexCoordP2ui(type, coords); debug_helper(loc, 0, type, coords); } + TexCoordP2uiv :: #force_inline proc "c" (type: u32, coords: [^]u32, loc := #caller_location) { impl_TexCoordP2uiv(type, coords); debug_helper(loc, 0, type, coords); } + TexCoordP3ui :: #force_inline proc "c" (type: u32, coords: u32, loc := #caller_location) { impl_TexCoordP3ui(type, coords); debug_helper(loc, 0, type, coords); } + TexCoordP3uiv :: #force_inline proc "c" (type: u32, coords: [^]u32, loc := #caller_location) { impl_TexCoordP3uiv(type, coords); debug_helper(loc, 0, type, coords); } + TexCoordP4ui :: #force_inline proc "c" (type: u32, coords: u32, loc := #caller_location) { impl_TexCoordP4ui(type, coords); debug_helper(loc, 0, type, coords); } + TexCoordP4uiv :: #force_inline proc "c" (type: u32, coords: [^]u32, loc := #caller_location) { impl_TexCoordP4uiv(type, coords); debug_helper(loc, 0, type, coords); } + MultiTexCoordP1ui :: #force_inline proc "c" (texture: u32, type: u32, coords: u32, loc := #caller_location) { impl_MultiTexCoordP1ui(texture, type, coords); debug_helper(loc, 0, texture, type, coords); } + MultiTexCoordP1uiv :: #force_inline proc "c" (texture: u32, type: u32, coords: [^]u32, loc := #caller_location) { impl_MultiTexCoordP1uiv(texture, type, coords); debug_helper(loc, 0, texture, type, coords); } + MultiTexCoordP2ui :: #force_inline proc "c" (texture: u32, type: u32, coords: u32, loc := #caller_location) { impl_MultiTexCoordP2ui(texture, type, coords); debug_helper(loc, 0, texture, type, coords); } + MultiTexCoordP2uiv :: #force_inline proc "c" (texture: u32, type: u32, coords: [^]u32, loc := #caller_location) { impl_MultiTexCoordP2uiv(texture, type, coords); debug_helper(loc, 0, texture, type, coords); } + MultiTexCoordP3ui :: #force_inline proc "c" (texture: u32, type: u32, coords: u32, loc := #caller_location) { impl_MultiTexCoordP3ui(texture, type, coords); debug_helper(loc, 0, texture, type, coords); } + MultiTexCoordP3uiv :: #force_inline proc "c" (texture: u32, type: u32, coords: [^]u32, loc := #caller_location) { impl_MultiTexCoordP3uiv(texture, type, coords); debug_helper(loc, 0, texture, type, coords); } + MultiTexCoordP4ui :: #force_inline proc "c" (texture: u32, type: u32, coords: u32, loc := #caller_location) { impl_MultiTexCoordP4ui(texture, type, coords); debug_helper(loc, 0, texture, type, coords); } + MultiTexCoordP4uiv :: #force_inline proc "c" (texture: u32, type: u32, coords: [^]u32, loc := #caller_location) { impl_MultiTexCoordP4uiv(texture, type, coords); debug_helper(loc, 0, texture, type, coords); } + NormalP3ui :: #force_inline proc "c" (type: u32, coords: u32, loc := #caller_location) { impl_NormalP3ui(type, coords); debug_helper(loc, 0, type, coords); } + NormalP3uiv :: #force_inline proc "c" (type: u32, coords: [^]u32, loc := #caller_location) { impl_NormalP3uiv(type, coords); debug_helper(loc, 0, type, coords); } + ColorP3ui :: #force_inline proc "c" (type: u32, color: u32, loc := #caller_location) { impl_ColorP3ui(type, color); debug_helper(loc, 0, type, color); } + ColorP3uiv :: #force_inline proc "c" (type: u32, color: ^u32, loc := #caller_location) { impl_ColorP3uiv(type, color); debug_helper(loc, 0, type, color); } + ColorP4ui :: #force_inline proc "c" (type: u32, color: u32, loc := #caller_location) { impl_ColorP4ui(type, color); debug_helper(loc, 0, type, color); } + ColorP4uiv :: #force_inline proc "c" (type: u32, color: ^u32, loc := #caller_location) { impl_ColorP4uiv(type, color); debug_helper(loc, 0, type, color); } + SecondaryColorP3ui :: #force_inline proc "c" (type: u32, color: u32, loc := #caller_location) { impl_SecondaryColorP3ui(type, color); debug_helper(loc, 0, type, color); } + SecondaryColorP3uiv :: #force_inline proc "c" (type: u32, color: ^u32, loc := #caller_location) { impl_SecondaryColorP3uiv(type, color); debug_helper(loc, 0, type, color); } + + // VERSION_4_0 + MinSampleShading :: #force_inline proc "c" (value: f32, loc := #caller_location) { impl_MinSampleShading(value); debug_helper(loc, 0, value); } + BlendEquationi :: #force_inline proc "c" (buf: u32, mode: u32, loc := #caller_location) { impl_BlendEquationi(buf, mode); debug_helper(loc, 0, buf, mode); } + BlendEquationSeparatei :: #force_inline proc "c" (buf: u32, modeRGB: u32, modeAlpha: u32, loc := #caller_location) { impl_BlendEquationSeparatei(buf, modeRGB, modeAlpha); debug_helper(loc, 0, buf, modeRGB, modeAlpha); } + BlendFunci :: #force_inline proc "c" (buf: u32, src: u32, dst: u32, loc := #caller_location) { impl_BlendFunci(buf, src, dst); debug_helper(loc, 0, buf, src, dst); } + BlendFuncSeparatei :: #force_inline proc "c" (buf: u32, srcRGB: u32, dstRGB: u32, srcAlpha: u32, dstAlpha: u32, loc := #caller_location) { impl_BlendFuncSeparatei(buf, srcRGB, dstRGB, srcAlpha, dstAlpha); debug_helper(loc, 0, buf, srcRGB, dstRGB, srcAlpha, dstAlpha); } + DrawArraysIndirect :: #force_inline proc "c" (mode: u32, indirect: rawptr, loc := #caller_location) { impl_DrawArraysIndirect(mode, indirect); debug_helper(loc, 0, mode, indirect); } + DrawElementsIndirect :: #force_inline proc "c" (mode: u32, type: u32, indirect: rawptr, loc := #caller_location) { impl_DrawElementsIndirect(mode, type, indirect); debug_helper(loc, 0, mode, type, indirect); } + Uniform1d :: #force_inline proc "c" (location: i32, x: f64, loc := #caller_location) { impl_Uniform1d(location, x); debug_helper(loc, 0, location, x); } + Uniform2d :: #force_inline proc "c" (location: i32, x: f64, y: f64, loc := #caller_location) { impl_Uniform2d(location, x, y); debug_helper(loc, 0, location, x, y); } + Uniform3d :: #force_inline proc "c" (location: i32, x: f64, y: f64, z: f64, loc := #caller_location) { impl_Uniform3d(location, x, y, z); debug_helper(loc, 0, location, x, y, z); } + Uniform4d :: #force_inline proc "c" (location: i32, x: f64, y: f64, z: f64, w: f64, loc := #caller_location) { impl_Uniform4d(location, x, y, z, w); debug_helper(loc, 0, location, x, y, z, w); } + Uniform1dv :: #force_inline proc "c" (location: i32, count: i32, value: [^]f64, loc := #caller_location) { impl_Uniform1dv(location, count, value); debug_helper(loc, 0, location, count, value); } + Uniform2dv :: #force_inline proc "c" (location: i32, count: i32, value: [^]f64, loc := #caller_location) { impl_Uniform2dv(location, count, value); debug_helper(loc, 0, location, count, value); } + Uniform3dv :: #force_inline proc "c" (location: i32, count: i32, value: [^]f64, loc := #caller_location) { impl_Uniform3dv(location, count, value); debug_helper(loc, 0, location, count, value); } + Uniform4dv :: #force_inline proc "c" (location: i32, count: i32, value: [^]f64, loc := #caller_location) { impl_Uniform4dv(location, count, value); debug_helper(loc, 0, location, count, value); } + UniformMatrix2dv :: #force_inline proc "c" (location: i32, count: i32, transpose: bool, value: [^]f64, loc := #caller_location) { impl_UniformMatrix2dv(location, count, transpose, value); debug_helper(loc, 0, location, count, transpose, value); } + UniformMatrix3dv :: #force_inline proc "c" (location: i32, count: i32, transpose: bool, value: [^]f64, loc := #caller_location) { impl_UniformMatrix3dv(location, count, transpose, value); debug_helper(loc, 0, location, count, transpose, value); } + UniformMatrix4dv :: #force_inline proc "c" (location: i32, count: i32, transpose: bool, value: [^]f64, loc := #caller_location) { impl_UniformMatrix4dv(location, count, transpose, value); debug_helper(loc, 0, location, count, transpose, value); } + UniformMatrix2x3dv :: #force_inline proc "c" (location: i32, count: i32, transpose: bool, value: [^]f64, loc := #caller_location) { impl_UniformMatrix2x3dv(location, count, transpose, value); debug_helper(loc, 0, location, count, transpose, value); } + UniformMatrix2x4dv :: #force_inline proc "c" (location: i32, count: i32, transpose: bool, value: [^]f64, loc := #caller_location) { impl_UniformMatrix2x4dv(location, count, transpose, value); debug_helper(loc, 0, location, count, transpose, value); } + UniformMatrix3x2dv :: #force_inline proc "c" (location: i32, count: i32, transpose: bool, value: [^]f64, loc := #caller_location) { impl_UniformMatrix3x2dv(location, count, transpose, value); debug_helper(loc, 0, location, count, transpose, value); } + UniformMatrix3x4dv :: #force_inline proc "c" (location: i32, count: i32, transpose: bool, value: [^]f64, loc := #caller_location) { impl_UniformMatrix3x4dv(location, count, transpose, value); debug_helper(loc, 0, location, count, transpose, value); } + UniformMatrix4x2dv :: #force_inline proc "c" (location: i32, count: i32, transpose: bool, value: [^]f64, loc := #caller_location) { impl_UniformMatrix4x2dv(location, count, transpose, value); debug_helper(loc, 0, location, count, transpose, value); } + UniformMatrix4x3dv :: #force_inline proc "c" (location: i32, count: i32, transpose: bool, value: [^]f64, loc := #caller_location) { impl_UniformMatrix4x3dv(location, count, transpose, value); debug_helper(loc, 0, location, count, transpose, value); } + GetUniformdv :: #force_inline proc "c" (program: u32, location: i32, params: [^]f64, loc := #caller_location) { impl_GetUniformdv(program, location, params); debug_helper(loc, 0, program, location, params); } + GetSubroutineUniformLocation :: #force_inline proc "c" (program: u32, shadertype: u32, name: cstring, loc := #caller_location) -> i32 { ret := impl_GetSubroutineUniformLocation(program, shadertype, name); debug_helper(loc, 1, ret, program, shadertype, name); return ret; } + GetSubroutineIndex :: #force_inline proc "c" (program: u32, shadertype: u32, name: cstring, loc := #caller_location) -> u32 { ret := impl_GetSubroutineIndex(program, shadertype, name); debug_helper(loc, 1, ret, program, shadertype, name); return ret; } + GetActiveSubroutineUniformiv :: #force_inline proc "c" (program: u32, shadertype: u32, index: u32, pname: u32, values: [^]i32, loc := #caller_location) { impl_GetActiveSubroutineUniformiv(program, shadertype, index, pname, values); debug_helper(loc, 0, program, shadertype, index, pname, values); } + GetActiveSubroutineUniformName :: #force_inline proc "c" (program: u32, shadertype: u32, index: u32, bufsize: i32, length: ^i32, name: [^]u8, loc := #caller_location) { impl_GetActiveSubroutineUniformName(program, shadertype, index, bufsize, length, name); debug_helper(loc, 0, program, shadertype, index, bufsize, length, name); } + GetActiveSubroutineName :: #force_inline proc "c" (program: u32, shadertype: u32, index: u32, bufsize: i32, length: ^i32, name: [^]u8, loc := #caller_location) { impl_GetActiveSubroutineName(program, shadertype, index, bufsize, length, name); debug_helper(loc, 0, program, shadertype, index, bufsize, length, name); } + UniformSubroutinesuiv :: #force_inline proc "c" (shadertype: u32, count: i32, indices: ^u32, loc := #caller_location) { impl_UniformSubroutinesuiv(shadertype, count, indices); debug_helper(loc, 0, shadertype, count, indices); } + GetUniformSubroutineuiv :: #force_inline proc "c" (shadertype: u32, location: i32, params: [^]u32, loc := #caller_location) { impl_GetUniformSubroutineuiv(shadertype, location, params); debug_helper(loc, 0, shadertype, location, params); } + GetProgramStageiv :: #force_inline proc "c" (program: u32, shadertype: u32, pname: u32, values: [^]i32, loc := #caller_location) { impl_GetProgramStageiv(program, shadertype, pname, values); debug_helper(loc, 0, program, shadertype, pname, values); } + PatchParameteri :: #force_inline proc "c" (pname: u32, value: i32, loc := #caller_location) { impl_PatchParameteri(pname, value); debug_helper(loc, 0, pname, value); } + PatchParameterfv :: #force_inline proc "c" (pname: u32, values: [^]f32, loc := #caller_location) { impl_PatchParameterfv(pname, values); debug_helper(loc, 0, pname, values); } + BindTransformFeedback :: #force_inline proc "c" (target: u32, id: u32, loc := #caller_location) { impl_BindTransformFeedback(target, id); debug_helper(loc, 0, target, id); } + DeleteTransformFeedbacks :: #force_inline proc "c" (n: i32, ids: [^]u32, loc := #caller_location) { impl_DeleteTransformFeedbacks(n, ids); debug_helper(loc, 0, n, ids); } + GenTransformFeedbacks :: #force_inline proc "c" (n: i32, ids: [^]u32, loc := #caller_location) { impl_GenTransformFeedbacks(n, ids); debug_helper(loc, 0, n, ids); } + IsTransformFeedback :: #force_inline proc "c" (id: u32, loc := #caller_location) -> bool { ret := impl_IsTransformFeedback(id); debug_helper(loc, 1, ret, id); return ret; } + PauseTransformFeedback :: #force_inline proc "c" (loc := #caller_location) { impl_PauseTransformFeedback(); debug_helper(loc, 0); } + ResumeTransformFeedback :: #force_inline proc "c" (loc := #caller_location) { impl_ResumeTransformFeedback(); debug_helper(loc, 0); } + DrawTransformFeedback :: #force_inline proc "c" (mode: u32, id: u32, loc := #caller_location) { impl_DrawTransformFeedback(mode, id); debug_helper(loc, 0, mode, id); } + DrawTransformFeedbackStream :: #force_inline proc "c" (mode: u32, id: u32, stream: u32, loc := #caller_location) { impl_DrawTransformFeedbackStream(mode, id, stream); debug_helper(loc, 0, mode, id, stream); } + BeginQueryIndexed :: #force_inline proc "c" (target: u32, index: u32, id: u32, loc := #caller_location) { impl_BeginQueryIndexed(target, index, id); debug_helper(loc, 0, target, index, id); } + EndQueryIndexed :: #force_inline proc "c" (target: u32, index: u32, loc := #caller_location) { impl_EndQueryIndexed(target, index); debug_helper(loc, 0, target, index); } + GetQueryIndexediv :: #force_inline proc "c" (target: u32, index: u32, pname: u32, params: [^]i32, loc := #caller_location) { impl_GetQueryIndexediv(target, index, pname, params); debug_helper(loc, 0, target, index, pname, params); } + + // VERSION_4_1 + ReleaseShaderCompiler :: #force_inline proc "c" (loc := #caller_location) { impl_ReleaseShaderCompiler(); debug_helper(loc, 0); } + ShaderBinary :: #force_inline proc "c" (count: i32, shaders: ^u32, binaryformat: u32, binary: rawptr, length: i32, loc := #caller_location) { impl_ShaderBinary(count, shaders, binaryformat, binary, length); debug_helper(loc, 0, count, shaders, binaryformat, binary, length); } + GetShaderPrecisionFormat :: #force_inline proc "c" (shadertype: u32, precisiontype: u32, range: ^i32, precision: ^i32, loc := #caller_location) { impl_GetShaderPrecisionFormat(shadertype, precisiontype, range, precision); debug_helper(loc, 0, shadertype, precisiontype, range, precision); } + DepthRangef :: #force_inline proc "c" (n: f32, f: f32, loc := #caller_location) { impl_DepthRangef(n, f); debug_helper(loc, 0, n, f); } + ClearDepthf :: #force_inline proc "c" (d: f32, loc := #caller_location) { impl_ClearDepthf(d); debug_helper(loc, 0, d); } + GetProgramBinary :: #force_inline proc "c" (program: u32, bufSize: i32, length: ^i32, binaryFormat: ^u32, binary: rawptr, loc := #caller_location) { impl_GetProgramBinary(program, bufSize, length, binaryFormat, binary); debug_helper(loc, 0, program, bufSize, length, binaryFormat, binary); } + ProgramBinary :: #force_inline proc "c" (program: u32, binaryFormat: u32, binary: rawptr, length: i32, loc := #caller_location) { impl_ProgramBinary(program, binaryFormat, binary, length); debug_helper(loc, 0, program, binaryFormat, binary, length); } + ProgramParameteri :: #force_inline proc "c" (program: u32, pname: u32, value: i32, loc := #caller_location) { impl_ProgramParameteri(program, pname, value); debug_helper(loc, 0, program, pname, value); } + UseProgramStages :: #force_inline proc "c" (pipeline: u32, stages: u32, program: u32, loc := #caller_location) { impl_UseProgramStages(pipeline, stages, program); debug_helper(loc, 0, pipeline, stages, program); } + ActiveShaderProgram :: #force_inline proc "c" (pipeline: u32, program: u32, loc := #caller_location) { impl_ActiveShaderProgram(pipeline, program); debug_helper(loc, 0, pipeline, program); } + CreateShaderProgramv :: #force_inline proc "c" (type: u32, count: i32, strings: [^]cstring, loc := #caller_location) -> u32 { ret := impl_CreateShaderProgramv(type, count, strings); debug_helper(loc, 1, ret, type, count, strings); return ret;; } + BindProgramPipeline :: #force_inline proc "c" (pipeline: u32, loc := #caller_location) { impl_BindProgramPipeline(pipeline); debug_helper(loc, 0, pipeline); } + DeleteProgramPipelines :: #force_inline proc "c" (n: i32, pipelines: [^]u32, loc := #caller_location) { impl_DeleteProgramPipelines(n, pipelines); debug_helper(loc, 0, n, pipelines); } + GenProgramPipelines :: #force_inline proc "c" (n: i32, pipelines: [^]u32, loc := #caller_location) { impl_GenProgramPipelines(n, pipelines); debug_helper(loc, 0, n, pipelines); } + IsProgramPipeline :: #force_inline proc "c" (pipeline: u32, loc := #caller_location) -> bool { ret := impl_IsProgramPipeline(pipeline); debug_helper(loc, 1, ret, pipeline); return ret;; } + GetProgramPipelineiv :: #force_inline proc "c" (pipeline: u32, pname: u32, params: [^]i32, loc := #caller_location) { impl_GetProgramPipelineiv(pipeline, pname, params); debug_helper(loc, 0, pipeline, pname, params); } + ProgramUniform1i :: #force_inline proc "c" (program: u32, location: i32, v0: i32, loc := #caller_location) { impl_ProgramUniform1i(program, location, v0); debug_helper(loc, 0, program, location, v0); } + ProgramUniform1iv :: #force_inline proc "c" (program: u32, location: i32, count: i32, value: [^]i32, loc := #caller_location) { impl_ProgramUniform1iv(program, location, count, value); debug_helper(loc, 0, program, location, count, value); } + ProgramUniform1f :: #force_inline proc "c" (program: u32, location: i32, v0: f32, loc := #caller_location) { impl_ProgramUniform1f(program, location, v0); debug_helper(loc, 0, program, location, v0); } + ProgramUniform1fv :: #force_inline proc "c" (program: u32, location: i32, count: i32, value: [^]f32, loc := #caller_location) { impl_ProgramUniform1fv(program, location, count, value); debug_helper(loc, 0, program, location, count, value); } + ProgramUniform1d :: #force_inline proc "c" (program: u32, location: i32, v0: f64, loc := #caller_location) { impl_ProgramUniform1d(program, location, v0); debug_helper(loc, 0, program, location, v0); } + ProgramUniform1dv :: #force_inline proc "c" (program: u32, location: i32, count: i32, value: [^]f64, loc := #caller_location) { impl_ProgramUniform1dv(program, location, count, value); debug_helper(loc, 0, program, location, count, value); } + ProgramUniform1ui :: #force_inline proc "c" (program: u32, location: i32, v0: u32, loc := #caller_location) { impl_ProgramUniform1ui(program, location, v0); debug_helper(loc, 0, program, location, v0); } + ProgramUniform1uiv :: #force_inline proc "c" (program: u32, location: i32, count: i32, value: [^]u32, loc := #caller_location) { impl_ProgramUniform1uiv(program, location, count, value); debug_helper(loc, 0, program, location, count, value); } + ProgramUniform2i :: #force_inline proc "c" (program: u32, location: i32, v0: i32, v1: i32, loc := #caller_location) { impl_ProgramUniform2i(program, location, v0, v1); debug_helper(loc, 0, program, location, v0, v1); } + ProgramUniform2iv :: #force_inline proc "c" (program: u32, location: i32, count: i32, value: [^]i32, loc := #caller_location) { impl_ProgramUniform2iv(program, location, count, value); debug_helper(loc, 0, program, location, count, value); } + ProgramUniform2f :: #force_inline proc "c" (program: u32, location: i32, v0: f32, v1: f32, loc := #caller_location) { impl_ProgramUniform2f(program, location, v0, v1); debug_helper(loc, 0, program, location, v0, v1); } + ProgramUniform2fv :: #force_inline proc "c" (program: u32, location: i32, count: i32, value: [^]f32, loc := #caller_location) { impl_ProgramUniform2fv(program, location, count, value); debug_helper(loc, 0, program, location, count, value); } + ProgramUniform2d :: #force_inline proc "c" (program: u32, location: i32, v0: f64, v1: f64, loc := #caller_location) { impl_ProgramUniform2d(program, location, v0, v1); debug_helper(loc, 0, program, location, v0, v1); } + ProgramUniform2dv :: #force_inline proc "c" (program: u32, location: i32, count: i32, value: [^]f64, loc := #caller_location) { impl_ProgramUniform2dv(program, location, count, value); debug_helper(loc, 0, program, location, count, value); } + ProgramUniform2ui :: #force_inline proc "c" (program: u32, location: i32, v0: u32, v1: u32, loc := #caller_location) { impl_ProgramUniform2ui(program, location, v0, v1); debug_helper(loc, 0, program, location, v0, v1); } + ProgramUniform2uiv :: #force_inline proc "c" (program: u32, location: i32, count: i32, value: [^]u32, loc := #caller_location) { impl_ProgramUniform2uiv(program, location, count, value); debug_helper(loc, 0, program, location, count, value); } + ProgramUniform3i :: #force_inline proc "c" (program: u32, location: i32, v0: i32, v1: i32, v2: i32, loc := #caller_location) { impl_ProgramUniform3i(program, location, v0, v1, v2); debug_helper(loc, 0, program, location, v0, v1, v2); } + ProgramUniform3iv :: #force_inline proc "c" (program: u32, location: i32, count: i32, value: [^]i32, loc := #caller_location) { impl_ProgramUniform3iv(program, location, count, value); debug_helper(loc, 0, program, location, count, value); } + ProgramUniform3f :: #force_inline proc "c" (program: u32, location: i32, v0: f32, v1: f32, v2: f32, loc := #caller_location) { impl_ProgramUniform3f(program, location, v0, v1, v2); debug_helper(loc, 0, program, location, v0, v1, v2); } + ProgramUniform3fv :: #force_inline proc "c" (program: u32, location: i32, count: i32, value: [^]f32, loc := #caller_location) { impl_ProgramUniform3fv(program, location, count, value); debug_helper(loc, 0, program, location, count, value); } + ProgramUniform3d :: #force_inline proc "c" (program: u32, location: i32, v0: f64, v1: f64, v2: f64, loc := #caller_location) { impl_ProgramUniform3d(program, location, v0, v1, v2); debug_helper(loc, 0, program, location, v0, v1, v2); } + ProgramUniform3dv :: #force_inline proc "c" (program: u32, location: i32, count: i32, value: [^]f64, loc := #caller_location) { impl_ProgramUniform3dv(program, location, count, value); debug_helper(loc, 0, program, location, count, value); } + ProgramUniform3ui :: #force_inline proc "c" (program: u32, location: i32, v0: u32, v1: u32, v2: u32, loc := #caller_location) { impl_ProgramUniform3ui(program, location, v0, v1, v2); debug_helper(loc, 0, program, location, v0, v1, v2); } + ProgramUniform3uiv :: #force_inline proc "c" (program: u32, location: i32, count: i32, value: [^]u32, loc := #caller_location) { impl_ProgramUniform3uiv(program, location, count, value); debug_helper(loc, 0, program, location, count, value); } + ProgramUniform4i :: #force_inline proc "c" (program: u32, location: i32, v0: i32, v1: i32, v2: i32, v3: i32, loc := #caller_location) { impl_ProgramUniform4i(program, location, v0, v1, v2, v3); debug_helper(loc, 0, program, location, v0, v1, v2, v3); } + ProgramUniform4iv :: #force_inline proc "c" (program: u32, location: i32, count: i32, value: [^]i32, loc := #caller_location) { impl_ProgramUniform4iv(program, location, count, value); debug_helper(loc, 0, program, location, count, value); } + ProgramUniform4f :: #force_inline proc "c" (program: u32, location: i32, v0: f32, v1: f32, v2: f32, v3: f32, loc := #caller_location) { impl_ProgramUniform4f(program, location, v0, v1, v2, v3); debug_helper(loc, 0, program, location, v0, v1, v2, v3); } + ProgramUniform4fv :: #force_inline proc "c" (program: u32, location: i32, count: i32, value: [^]f32, loc := #caller_location) { impl_ProgramUniform4fv(program, location, count, value); debug_helper(loc, 0, program, location, count, value); } + ProgramUniform4d :: #force_inline proc "c" (program: u32, location: i32, v0: f64, v1: f64, v2: f64, v3: f64, loc := #caller_location) { impl_ProgramUniform4d(program, location, v0, v1, v2, v3); debug_helper(loc, 0, program, location, v0, v1, v2, v3); } + ProgramUniform4dv :: #force_inline proc "c" (program: u32, location: i32, count: i32, value: [^]f64, loc := #caller_location) { impl_ProgramUniform4dv(program, location, count, value); debug_helper(loc, 0, program, location, count, value); } + ProgramUniform4ui :: #force_inline proc "c" (program: u32, location: i32, v0: u32, v1: u32, v2: u32, v3: u32, loc := #caller_location) { impl_ProgramUniform4ui(program, location, v0, v1, v2, v3); debug_helper(loc, 0, program, location, v0, v1, v2, v3); } + ProgramUniform4uiv :: #force_inline proc "c" (program: u32, location: i32, count: i32, value: [^]u32, loc := #caller_location) { impl_ProgramUniform4uiv(program, location, count, value); debug_helper(loc, 0, program, location, count, value); } + ProgramUniformMatrix2fv :: #force_inline proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f32, loc := #caller_location) { impl_ProgramUniformMatrix2fv(program, location, count, transpose, value); debug_helper(loc, 0, program, location, count, transpose, value); } + ProgramUniformMatrix3fv :: #force_inline proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f32, loc := #caller_location) { impl_ProgramUniformMatrix3fv(program, location, count, transpose, value); debug_helper(loc, 0, program, location, count, transpose, value); } + ProgramUniformMatrix4fv :: #force_inline proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f32, loc := #caller_location) { impl_ProgramUniformMatrix4fv(program, location, count, transpose, value); debug_helper(loc, 0, program, location, count, transpose, value); } + ProgramUniformMatrix2dv :: #force_inline proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f64, loc := #caller_location) { impl_ProgramUniformMatrix2dv(program, location, count, transpose, value); debug_helper(loc, 0, program, location, count, transpose, value); } + ProgramUniformMatrix3dv :: #force_inline proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f64, loc := #caller_location) { impl_ProgramUniformMatrix3dv(program, location, count, transpose, value); debug_helper(loc, 0, program, location, count, transpose, value); } + ProgramUniformMatrix4dv :: #force_inline proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f64, loc := #caller_location) { impl_ProgramUniformMatrix4dv(program, location, count, transpose, value); debug_helper(loc, 0, program, location, count, transpose, value); } + ProgramUniformMatrix2x3fv :: #force_inline proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f32, loc := #caller_location) { impl_ProgramUniformMatrix2x3fv(program, location, count, transpose, value); debug_helper(loc, 0, program, location, count, transpose, value); } + ProgramUniformMatrix3x2fv :: #force_inline proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f32, loc := #caller_location) { impl_ProgramUniformMatrix3x2fv(program, location, count, transpose, value); debug_helper(loc, 0, program, location, count, transpose, value); } + ProgramUniformMatrix2x4fv :: #force_inline proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f32, loc := #caller_location) { impl_ProgramUniformMatrix2x4fv(program, location, count, transpose, value); debug_helper(loc, 0, program, location, count, transpose, value); } + ProgramUniformMatrix4x2fv :: #force_inline proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f32, loc := #caller_location) { impl_ProgramUniformMatrix4x2fv(program, location, count, transpose, value); debug_helper(loc, 0, program, location, count, transpose, value); } + ProgramUniformMatrix3x4fv :: #force_inline proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f32, loc := #caller_location) { impl_ProgramUniformMatrix3x4fv(program, location, count, transpose, value); debug_helper(loc, 0, program, location, count, transpose, value); } + ProgramUniformMatrix4x3fv :: #force_inline proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f32, loc := #caller_location) { impl_ProgramUniformMatrix4x3fv(program, location, count, transpose, value); debug_helper(loc, 0, program, location, count, transpose, value); } + ProgramUniformMatrix2x3dv :: #force_inline proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f64, loc := #caller_location) { impl_ProgramUniformMatrix2x3dv(program, location, count, transpose, value); debug_helper(loc, 0, program, location, count, transpose, value); } + ProgramUniformMatrix3x2dv :: #force_inline proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f64, loc := #caller_location) { impl_ProgramUniformMatrix3x2dv(program, location, count, transpose, value); debug_helper(loc, 0, program, location, count, transpose, value); } + ProgramUniformMatrix2x4dv :: #force_inline proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f64, loc := #caller_location) { impl_ProgramUniformMatrix2x4dv(program, location, count, transpose, value); debug_helper(loc, 0, program, location, count, transpose, value); } + ProgramUniformMatrix4x2dv :: #force_inline proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f64, loc := #caller_location) { impl_ProgramUniformMatrix4x2dv(program, location, count, transpose, value); debug_helper(loc, 0, program, location, count, transpose, value); } + ProgramUniformMatrix3x4dv :: #force_inline proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f64, loc := #caller_location) { impl_ProgramUniformMatrix3x4dv(program, location, count, transpose, value); debug_helper(loc, 0, program, location, count, transpose, value); } + ProgramUniformMatrix4x3dv :: #force_inline proc "c" (program: u32, location: i32, count: i32, transpose: bool, value: [^]f64, loc := #caller_location) { impl_ProgramUniformMatrix4x3dv(program, location, count, transpose, value); debug_helper(loc, 0, program, location, count, transpose, value); } + ValidateProgramPipeline :: #force_inline proc "c" (pipeline: u32, loc := #caller_location) { impl_ValidateProgramPipeline(pipeline); debug_helper(loc, 0, pipeline); } + GetProgramPipelineInfoLog :: #force_inline proc "c" (pipeline: u32, bufSize: i32, length: ^i32, infoLog: [^]u8, loc := #caller_location) { impl_GetProgramPipelineInfoLog(pipeline, bufSize, length, infoLog); debug_helper(loc, 0, pipeline, bufSize, length, infoLog); } + VertexAttribL1d :: #force_inline proc "c" (index: u32, x: f64, loc := #caller_location) { impl_VertexAttribL1d(index, x); debug_helper(loc, 0, index, x); } + VertexAttribL2d :: #force_inline proc "c" (index: u32, x: f64, y: f64, loc := #caller_location) { impl_VertexAttribL2d(index, x, y); debug_helper(loc, 0, index, x, y); } + VertexAttribL3d :: #force_inline proc "c" (index: u32, x: f64, y: f64, z: f64, loc := #caller_location) { impl_VertexAttribL3d(index, x, y, z); debug_helper(loc, 0, index, x, y, z); } + VertexAttribL4d :: #force_inline proc "c" (index: u32, x: f64, y: f64, z: f64, w: f64, loc := #caller_location) { impl_VertexAttribL4d(index, x, y, z, w); debug_helper(loc, 0, index, x, y, z, w); } + VertexAttribL1dv :: #force_inline proc "c" (index: u32, v: ^f64, loc := #caller_location) { impl_VertexAttribL1dv(index, v); debug_helper(loc, 0, index, v); } + VertexAttribL2dv :: #force_inline proc "c" (index: u32, v: ^f64, loc := #caller_location) { impl_VertexAttribL2dv(index, v); debug_helper(loc, 0, index, v); } + VertexAttribL3dv :: #force_inline proc "c" (index: u32, v: ^f64, loc := #caller_location) { impl_VertexAttribL3dv(index, v); debug_helper(loc, 0, index, v); } + VertexAttribL4dv :: #force_inline proc "c" (index: u32, v: ^f64, loc := #caller_location) { impl_VertexAttribL4dv(index, v); debug_helper(loc, 0, index, v); } + VertexAttribLPointer :: #force_inline proc "c" (index: u32, size: i32, type: u32, stride: i32, pointer: rawptr, loc := #caller_location) { impl_VertexAttribLPointer(index, size, type, stride, pointer); debug_helper(loc, 0, index, size, type, stride, pointer); } + GetVertexAttribLdv :: #force_inline proc "c" (index: u32, pname: u32, params: [^]f64, loc := #caller_location) { impl_GetVertexAttribLdv(index, pname, params); debug_helper(loc, 0, index, pname, params); } + ViewportArrayv :: #force_inline proc "c" (first: u32, count: i32, v: [^]f32, loc := #caller_location) { impl_ViewportArrayv(first, count, v); debug_helper(loc, 0, first, count, v); } + ViewportIndexedf :: #force_inline proc "c" (index: u32, x: f32, y: f32, w: f32, h: f32, loc := #caller_location) { impl_ViewportIndexedf(index, x, y, w, h); debug_helper(loc, 0, index, x, y, w, h); } + ViewportIndexedfv :: #force_inline proc "c" (index: u32, v: ^f32, loc := #caller_location) { impl_ViewportIndexedfv(index, v); debug_helper(loc, 0, index, v); } + ScissorArrayv :: #force_inline proc "c" (first: u32, count: i32, v: [^]i32, loc := #caller_location) { impl_ScissorArrayv(first, count, v); debug_helper(loc, 0, first, count, v); } + ScissorIndexed :: #force_inline proc "c" (index: u32, left: i32, bottom: i32, width: i32, height: i32, loc := #caller_location) { impl_ScissorIndexed(index, left, bottom, width, height); debug_helper(loc, 0, index, left, bottom, width, height); } + ScissorIndexedv :: #force_inline proc "c" (index: u32, v: ^i32, loc := #caller_location) { impl_ScissorIndexedv(index, v); debug_helper(loc, 0, index, v); } + DepthRangeArrayv :: #force_inline proc "c" (first: u32, count: i32, v: [^]f64, loc := #caller_location) { impl_DepthRangeArrayv(first, count, v); debug_helper(loc, 0, first, count, v); } + DepthRangeIndexed :: #force_inline proc "c" (index: u32, n: f64, f: f64, loc := #caller_location) { impl_DepthRangeIndexed(index, n, f); debug_helper(loc, 0, index, n, f); } + GetFloati_v :: #force_inline proc "c" (target: u32, index: u32, data: ^f32, loc := #caller_location) { impl_GetFloati_v(target, index, data); debug_helper(loc, 0, target, index, data); } + GetDoublei_v :: #force_inline proc "c" (target: u32, index: u32, data: ^f64, loc := #caller_location) { impl_GetDoublei_v(target, index, data); debug_helper(loc, 0, target, index, data); } + + // VERSION_4_2 + DrawArraysInstancedBaseInstance :: #force_inline proc "c" (mode: u32, first: i32, count: i32, instancecount: i32, baseinstance: u32, loc := #caller_location) { impl_DrawArraysInstancedBaseInstance(mode, first, count, instancecount, baseinstance); debug_helper(loc, 0, mode, first, count, instancecount, baseinstance); } + DrawElementsInstancedBaseInstance :: #force_inline proc "c" (mode: u32, count: i32, type: u32, indices: rawptr, instancecount: i32, baseinstance: u32, loc := #caller_location) { impl_DrawElementsInstancedBaseInstance(mode, count, type, indices, instancecount, baseinstance); debug_helper(loc, 0, mode, count, type, indices, instancecount, baseinstance); } + DrawElementsInstancedBaseVertexBaseInstance :: #force_inline proc "c" (mode: u32, count: i32, type: u32, indices: rawptr, instancecount: i32, basevertex: i32, baseinstance: u32, loc := #caller_location) { impl_DrawElementsInstancedBaseVertexBaseInstance(mode, count, type, indices, instancecount, basevertex, baseinstance); debug_helper(loc, 0, mode, count, type, indices, instancecount, basevertex, baseinstance); } + GetInternalformativ :: #force_inline proc "c" (target: u32, internalformat: u32, pname: u32, bufSize: i32, params: [^]i32, loc := #caller_location) { impl_GetInternalformativ(target, internalformat, pname, bufSize, params); debug_helper(loc, 0, target, internalformat, pname, bufSize, params); } + GetActiveAtomicCounterBufferiv :: #force_inline proc "c" (program: u32, bufferIndex: u32, pname: u32, params: [^]i32, loc := #caller_location) { impl_GetActiveAtomicCounterBufferiv(program, bufferIndex, pname, params); debug_helper(loc, 0, program, bufferIndex, pname, params); } + BindImageTexture :: #force_inline proc "c" (unit: u32, texture: u32, level: i32, layered: u8, layer: i32, access: u32, format: u32, loc := #caller_location) { impl_BindImageTexture(unit, texture, level, layered, layer, access, format); debug_helper(loc, 0, unit, texture, level, layered, layer, access, format); } + MemoryBarrier :: #force_inline proc "c" (barriers: u32, loc := #caller_location) { impl_MemoryBarrier(barriers); debug_helper(loc, 0, barriers); } + TexStorage1D :: #force_inline proc "c" (target: u32, levels: i32, internalformat: u32, width: i32, loc := #caller_location) { impl_TexStorage1D(target, levels, internalformat, width); debug_helper(loc, 0, target, levels, internalformat, width); } + TexStorage2D :: #force_inline proc "c" (target: u32, levels: i32, internalformat: u32, width: i32, height: i32, loc := #caller_location) { impl_TexStorage2D(target, levels, internalformat, width, height); debug_helper(loc, 0, target, levels, internalformat, width, height); } + TexStorage3D :: #force_inline proc "c" (target: u32, levels: i32, internalformat: u32, width: i32, height: i32, depth: i32, loc := #caller_location) { impl_TexStorage3D(target, levels, internalformat, width, height, depth); debug_helper(loc, 0, target, levels, internalformat, width, height, depth); } + DrawTransformFeedbackInstanced :: #force_inline proc "c" (mode: u32, id: u32, instancecount: i32, loc := #caller_location) { impl_DrawTransformFeedbackInstanced(mode, id, instancecount); debug_helper(loc, 0, mode, id, instancecount); } + DrawTransformFeedbackStreamInstanced :: #force_inline proc "c" (mode: u32, id: u32, stream: u32, instancecount: i32, loc := #caller_location) { impl_DrawTransformFeedbackStreamInstanced(mode, id, stream, instancecount); debug_helper(loc, 0, mode, id, stream, instancecount); } + + // VERSION_4_3 + ClearBufferData :: #force_inline proc "c" (target: u32, internalformat: u32, format: u32, type: u32, data: rawptr, loc := #caller_location) { impl_ClearBufferData(target, internalformat, format, type, data); debug_helper(loc, 0, target, internalformat, format, type, data); } + ClearBufferSubData :: #force_inline proc "c" (target: u32, internalformat: u32, offset: int, size: int, format: u32, type: u32, data: rawptr, loc := #caller_location) { impl_ClearBufferSubData(target, internalformat, offset, size, format, type, data); debug_helper(loc, 0, target, internalformat, offset, size, format, type, data); } + DispatchCompute :: #force_inline proc "c" (num_groups_x: u32, num_groups_y: u32, num_groups_z: u32, loc := #caller_location) { impl_DispatchCompute(num_groups_x, num_groups_y, num_groups_z); debug_helper(loc, 0, num_groups_x, num_groups_y, num_groups_z); } + DispatchComputeIndirect :: #force_inline proc "c" (indirect: int, loc := #caller_location) { impl_DispatchComputeIndirect(indirect); debug_helper(loc, 0, indirect); } + CopyImageSubData :: #force_inline proc "c" (srcName: u32, srcTarget: u32, srcLevel: i32, srcX: i32, srcY: i32, srcZ: i32, dstName: u32, dstTarget: u32, dstLevel: i32, dstX: i32, dstY: i32, dstZ: i32, srcWidth: i32, srcHeight: i32, srcDepth: i32, loc := #caller_location) { impl_CopyImageSubData(srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, srcWidth, srcHeight, srcDepth); debug_helper(loc, 0, srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, srcWidth, srcHeight, srcDepth); } + FramebufferParameteri :: #force_inline proc "c" (target: u32, pname: u32, param: i32, loc := #caller_location) { impl_FramebufferParameteri(target, pname, param); debug_helper(loc, 0, target, pname, param); } + GetFramebufferParameteriv :: #force_inline proc "c" (target: u32, pname: u32, params: [^]i32, loc := #caller_location) { impl_GetFramebufferParameteriv(target, pname, params); debug_helper(loc, 0, target, pname, params); } + GetInternalformati64v :: #force_inline proc "c" (target: u32, internalformat: u32, pname: u32, bufSize: i32, params: [^]i64, loc := #caller_location) { impl_GetInternalformati64v(target, internalformat, pname, bufSize, params); debug_helper(loc, 0, target, internalformat, pname, bufSize, params); } + InvalidateTexSubImage :: #force_inline proc "c" (texture: u32, level: i32, xoffset: i32, yoffset: i32, zoffset: i32, width: i32, height: i32, depth: i32, loc := #caller_location) { impl_InvalidateTexSubImage(texture, level, xoffset, yoffset, zoffset, width, height, depth); debug_helper(loc, 0, texture, level, xoffset, yoffset, zoffset, width, height, depth); } + InvalidateTexImage :: #force_inline proc "c" (texture: u32, level: i32, loc := #caller_location) { impl_InvalidateTexImage(texture, level); debug_helper(loc, 0, texture, level); } + InvalidateBufferSubData :: #force_inline proc "c" (buffer: u32, offset: int, length: int, loc := #caller_location) { impl_InvalidateBufferSubData(buffer, offset, length); debug_helper(loc, 0, buffer, offset, length); } + InvalidateBufferData :: #force_inline proc "c" (buffer: u32, loc := #caller_location) { impl_InvalidateBufferData(buffer); debug_helper(loc, 0, buffer); } + InvalidateFramebuffer :: #force_inline proc "c" (target: u32, numAttachments: i32, attachments: ^u32, loc := #caller_location) { impl_InvalidateFramebuffer(target, numAttachments, attachments); debug_helper(loc, 0, target, numAttachments, attachments); } + InvalidateSubFramebuffer :: #force_inline proc "c" (target: u32, numAttachments: i32, attachments: ^u32, x: i32, y: i32, width: i32, height: i32, loc := #caller_location) { impl_InvalidateSubFramebuffer(target, numAttachments, attachments, x, y, width, height); debug_helper(loc, 0, target, numAttachments, attachments, x, y, width, height); } + MultiDrawArraysIndirect :: #force_inline proc "c" (mode: u32, indirect: rawptr, drawcount: i32, stride: i32, loc := #caller_location) { impl_MultiDrawArraysIndirect(mode, indirect, drawcount, stride); debug_helper(loc, 0, mode, indirect, drawcount, stride); } + MultiDrawElementsIndirect :: #force_inline proc "c" (mode: u32, type: u32, indirect: rawptr, drawcount: i32, stride: i32, loc := #caller_location) { impl_MultiDrawElementsIndirect(mode, type, indirect, drawcount, stride); debug_helper(loc, 0, mode, type, indirect, drawcount, stride); } + GetProgramInterfaceiv :: #force_inline proc "c" (program: u32, programInterface: u32, pname: u32, params: [^]i32, loc := #caller_location) { impl_GetProgramInterfaceiv(program, programInterface, pname, params); debug_helper(loc, 0, program, programInterface, pname, params); } + GetProgramResourceIndex :: #force_inline proc "c" (program: u32, programInterface: u32, name: cstring, loc := #caller_location) -> u32 { ret := impl_GetProgramResourceIndex(program, programInterface, name); debug_helper(loc, 1, ret, program, programInterface, name); return ret; } + GetProgramResourceName :: #force_inline proc "c" (program: u32, programInterface: u32, index: u32, bufSize: i32, length: ^i32, name: [^]u8, loc := #caller_location) { impl_GetProgramResourceName(program, programInterface, index, bufSize, length, name); debug_helper(loc, 0, program, programInterface, index, bufSize, length, name); } + GetProgramResourceiv :: #force_inline proc "c" (program: u32, programInterface: u32, index: u32, propCount: i32, props: [^]u32, bufSize: i32, length: ^i32, params: [^]i32, loc := #caller_location) { impl_GetProgramResourceiv(program, programInterface, index, propCount, props, bufSize, length, params); debug_helper(loc, 0, program, programInterface, index, propCount, props, bufSize, length, params); } + GetProgramResourceLocation :: #force_inline proc "c" (program: u32, programInterface: u32, name: cstring, loc := #caller_location) -> i32 { ret := impl_GetProgramResourceLocation(program, programInterface, name); debug_helper(loc, 1, ret, program, programInterface, name); return ret; } + GetProgramResourceLocationIndex :: #force_inline proc "c" (program: u32, programInterface: u32, name: cstring, loc := #caller_location) -> i32 { ret := impl_GetProgramResourceLocationIndex(program, programInterface, name); debug_helper(loc, 1, ret, program, programInterface, name); return ret; } + ShaderStorageBlockBinding :: #force_inline proc "c" (program: u32, storageBlockIndex: u32, storageBlockBinding: u32, loc := #caller_location) { impl_ShaderStorageBlockBinding(program, storageBlockIndex, storageBlockBinding); debug_helper(loc, 0, program, storageBlockIndex, storageBlockBinding); } + TexBufferRange :: #force_inline proc "c" (target: u32, internalformat: u32, buffer: u32, offset: int, size: int, loc := #caller_location) { impl_TexBufferRange(target, internalformat, buffer, offset, size); debug_helper(loc, 0, target, internalformat, buffer, offset, size); } + TexStorage2DMultisample :: #force_inline proc "c" (target: u32, samples: i32, internalformat: u32, width: i32, height: i32, fixedsamplelocations: u8, loc := #caller_location) { impl_TexStorage2DMultisample(target, samples, internalformat, width, height, fixedsamplelocations); debug_helper(loc, 0, target, samples, internalformat, width, height, fixedsamplelocations); } + TexStorage3DMultisample :: #force_inline proc "c" (target: u32, samples: i32, internalformat: u32, width: i32, height: i32, depth: i32, fixedsamplelocations: u8, loc := #caller_location) { impl_TexStorage3DMultisample(target, samples, internalformat, width, height, depth, fixedsamplelocations); debug_helper(loc, 0, target, samples, internalformat, width, height, depth, fixedsamplelocations); } + TextureView :: #force_inline proc "c" (texture: u32, target: u32, origtexture: u32, internalformat: u32, minlevel: u32, numlevels: u32, minlayer: u32, numlayers: u32, loc := #caller_location) { impl_TextureView(texture, target, origtexture, internalformat, minlevel, numlevels, minlayer, numlayers); debug_helper(loc, 0, texture, target, origtexture, internalformat, minlevel, numlevels, minlayer, numlayers); } + BindVertexBuffer :: #force_inline proc "c" (bindingindex: u32, buffer: u32, offset: int, stride: i32, loc := #caller_location) { impl_BindVertexBuffer(bindingindex, buffer, offset, stride); debug_helper(loc, 0, bindingindex, buffer, offset, stride); } + VertexAttribFormat :: #force_inline proc "c" (attribindex: u32, size: i32, type: u32, normalized: bool, relativeoffset: u32, loc := #caller_location) { impl_VertexAttribFormat(attribindex, size, type, normalized, relativeoffset); debug_helper(loc, 0, attribindex, size, type, normalized, relativeoffset); } + VertexAttribIFormat :: #force_inline proc "c" (attribindex: u32, size: i32, type: u32, relativeoffset: u32, loc := #caller_location) { impl_VertexAttribIFormat(attribindex, size, type, relativeoffset); debug_helper(loc, 0, attribindex, size, type, relativeoffset); } + VertexAttribLFormat :: #force_inline proc "c" (attribindex: u32, size: i32, type: u32, relativeoffset: u32, loc := #caller_location) { impl_VertexAttribLFormat(attribindex, size, type, relativeoffset); debug_helper(loc, 0, attribindex, size, type, relativeoffset); } + VertexAttribBinding :: #force_inline proc "c" (attribindex: u32, bindingindex: u32, loc := #caller_location) { impl_VertexAttribBinding(attribindex, bindingindex); debug_helper(loc, 0, attribindex, bindingindex); } + VertexBindingDivisor :: #force_inline proc "c" (bindingindex: u32, divisor: u32, loc := #caller_location) { impl_VertexBindingDivisor(bindingindex, divisor); debug_helper(loc, 0, bindingindex, divisor); } + DebugMessageControl :: #force_inline proc "c" (source: u32, type: u32, severity: u32, count: i32, ids: [^]u32, enabled: u8, loc := #caller_location) { impl_DebugMessageControl(source, type, severity, count, ids, enabled); debug_helper(loc, 0, source, type, severity, count, ids, enabled); } + DebugMessageInsert :: #force_inline proc "c" (source: u32, type: u32, id: u32, severity: u32, length: i32, buf: ^u8, loc := #caller_location) { impl_DebugMessageInsert(source, type, id, severity, length, buf); debug_helper(loc, 0, source, type, id, severity, length, buf); } + DebugMessageCallback :: #force_inline proc "c" (callback: debug_proc_t, userParam: rawptr, loc := #caller_location) { impl_DebugMessageCallback(callback, userParam); debug_helper(loc, 0, callback, userParam); } + GetDebugMessageLog :: #force_inline proc "c" (count: u32, bufSize: i32, sources: [^]u32, types: [^]u32, ids: [^]u32, severities: [^]u32, lengths: [^]i32, messageLog: [^]u8, loc := #caller_location) -> u32 { ret := impl_GetDebugMessageLog(count, bufSize, sources, types, ids, severities, lengths, messageLog); debug_helper(loc, 1, ret, count, bufSize, sources, types, ids, severities, lengths, messageLog); return ret; } + PushDebugGroup :: #force_inline proc "c" (source: u32, id: u32, length: i32, message: cstring, loc := #caller_location) { impl_PushDebugGroup(source, id, length, message); debug_helper(loc, 0, source, id, length, message); } + PopDebugGroup :: #force_inline proc "c" (loc := #caller_location) { impl_PopDebugGroup(); debug_helper(loc, 0); } + ObjectLabel :: #force_inline proc "c" (identifier: u32, name: u32, length: i32, label: [^]u8, loc := #caller_location) { impl_ObjectLabel(identifier, name, length, label); debug_helper(loc, 0, identifier, name, length, label); } + GetObjectLabel :: #force_inline proc "c" (identifier: u32, name: u32, bufSize: i32, length: ^i32, label: [^]u8, loc := #caller_location) { impl_GetObjectLabel(identifier, name, bufSize, length, label); debug_helper(loc, 0, identifier, name, bufSize, length, label); } + ObjectPtrLabel :: #force_inline proc "c" (ptr: rawptr, length: i32, label: [^]u8, loc := #caller_location) { impl_ObjectPtrLabel(ptr, length, label); debug_helper(loc, 0, ptr, length, label); } + GetObjectPtrLabel :: #force_inline proc "c" (ptr: rawptr, bufSize: i32, length: ^i32, label: [^]u8, loc := #caller_location) { impl_GetObjectPtrLabel(ptr, bufSize, length, label); debug_helper(loc, 0, ptr, bufSize, length, label); } + + // VERSION_4_4 + BufferStorage :: #force_inline proc "c" (target: u32, size: int, data: rawptr, flags: u32, loc := #caller_location) { impl_BufferStorage(target, size, data, flags); debug_helper(loc, 0, target, size, data, flags); } + ClearTexImage :: #force_inline proc "c" (texture: u32, level: i32, format: u32, type: u32, data: rawptr, loc := #caller_location) { impl_ClearTexImage(texture, level, format, type, data); debug_helper(loc, 0, texture, level, format, type, data); } + ClearTexSubImage :: #force_inline proc "c" (texture: u32, level: i32, xoffset: i32, yoffset: i32, zoffset: i32, width: i32, height: i32, depth: i32, format: u32, type: u32, data: rawptr, loc := #caller_location) { impl_ClearTexSubImage(texture, level, xoffset, yoffset, zoffset, width, height, depth, format, type, data); debug_helper(loc, 0, texture, level, xoffset, yoffset, zoffset, width, height, depth, format, type, data); } + BindBuffersBase :: #force_inline proc "c" (target: u32, first: u32, count: i32, buffers: [^]u32, loc := #caller_location) { impl_BindBuffersBase(target, first, count, buffers); debug_helper(loc, 0, target, first, count, buffers); } + BindBuffersRange :: #force_inline proc "c" (target: u32, first: u32, count: i32, buffers: [^]u32, offsets: [^]uintptr, sizes: [^]int, loc := #caller_location) { impl_BindBuffersRange(target, first, count, buffers, offsets, sizes); debug_helper(loc, 0, target, first, count, buffers, offsets, sizes); } + BindTextures :: #force_inline proc "c" (first: u32, count: i32, textures: [^]u32, loc := #caller_location) { impl_BindTextures(first, count, textures); debug_helper(loc, 0, first, count, textures); } + BindSamplers :: #force_inline proc "c" (first: u32, count: i32, samplers: [^]u32, loc := #caller_location) { impl_BindSamplers(first, count, samplers); debug_helper(loc, 0, first, count, samplers); } + BindImageTextures :: #force_inline proc "c" (first: u32, count: i32, textures: [^]u32, loc := #caller_location) { impl_BindImageTextures(first, count, textures); debug_helper(loc, 0, first, count, textures); } + BindVertexBuffers :: #force_inline proc "c" (first: u32, count: i32, buffers: [^]u32, offsets: [^]uintptr, strides: [^]i32, loc := #caller_location) { impl_BindVertexBuffers(first, count, buffers, offsets, strides); debug_helper(loc, 0, first, count, buffers, offsets, strides); } + + // VERSION_4_5 + ClipControl :: #force_inline proc "c" (origin: u32, depth: u32, loc := #caller_location) { impl_ClipControl(origin, depth); debug_helper(loc, 0, origin, depth); } + CreateTransformFeedbacks :: #force_inline proc "c" (n: i32, ids: [^]u32, loc := #caller_location) { impl_CreateTransformFeedbacks(n, ids); debug_helper(loc, 0, n, ids); } + TransformFeedbackBufferBase :: #force_inline proc "c" (xfb: u32, index: u32, buffer: u32, loc := #caller_location) { impl_TransformFeedbackBufferBase(xfb, index, buffer); debug_helper(loc, 0, xfb, index, buffer); } + TransformFeedbackBufferRange :: #force_inline proc "c" (xfb: u32, index: u32, buffer: u32, offset: int, size: int, loc := #caller_location) { impl_TransformFeedbackBufferRange(xfb, index, buffer, offset, size); debug_helper(loc, 0, xfb, index, buffer, offset, size); } + GetTransformFeedbackiv :: #force_inline proc "c" (xfb: u32, pname: u32, param: ^i32, loc := #caller_location) { impl_GetTransformFeedbackiv(xfb, pname, param); debug_helper(loc, 0, xfb, pname, param); } + GetTransformFeedbacki_v :: #force_inline proc "c" (xfb: u32, pname: u32, index: u32, param: ^i32, loc := #caller_location) { impl_GetTransformFeedbacki_v(xfb, pname, index, param); debug_helper(loc, 0, xfb, pname, index, param); } + GetTransformFeedbacki64_v :: #force_inline proc "c" (xfb: u32, pname: u32, index: u32, param: ^i64, loc := #caller_location) { impl_GetTransformFeedbacki64_v(xfb, pname, index, param); debug_helper(loc, 0, xfb, pname, index, param); } + CreateBuffers :: #force_inline proc "c" (n: i32, buffers: [^]u32, loc := #caller_location) { impl_CreateBuffers(n, buffers); debug_helper(loc, 0, n, buffers); } + NamedBufferStorage :: #force_inline proc "c" (buffer: u32, size: int, data: rawptr, flags: u32, loc := #caller_location) { impl_NamedBufferStorage(buffer, size, data, flags); debug_helper(loc, 0, buffer, size, data, flags); } + NamedBufferData :: #force_inline proc "c" (buffer: u32, size: int, data: rawptr, usage: u32, loc := #caller_location) { impl_NamedBufferData(buffer, size, data, usage); debug_helper(loc, 0, buffer, size, data, usage); } + NamedBufferSubData :: #force_inline proc "c" (buffer: u32, offset: int, size: int, data: rawptr, loc := #caller_location) { impl_NamedBufferSubData(buffer, offset, size, data); debug_helper(loc, 0, buffer, offset, size, data); } + CopyNamedBufferSubData :: #force_inline proc "c" (readBuffer: u32, writeBuffer: u32, readOffset: int, writeOffset: int, size: int, loc := #caller_location) { impl_CopyNamedBufferSubData(readBuffer, writeBuffer, readOffset, writeOffset, size); debug_helper(loc, 0, readBuffer, writeBuffer, readOffset, writeOffset, size); } + ClearNamedBufferData :: #force_inline proc "c" (buffer: u32, internalformat: u32, format: u32, type: u32, data: rawptr, loc := #caller_location) { impl_ClearNamedBufferData(buffer, internalformat, format, type, data); debug_helper(loc, 0, buffer, internalformat, format, type, data); } + ClearNamedBufferSubData :: #force_inline proc "c" (buffer: u32, internalformat: u32, offset: int, size: int, format: u32, type: u32, data: rawptr, loc := #caller_location) { impl_ClearNamedBufferSubData(buffer, internalformat, offset, size, format, type, data); debug_helper(loc, 0, buffer, internalformat, offset, size, format, type, data); } + MapNamedBuffer :: #force_inline proc "c" (buffer: u32, access: u32, loc := #caller_location) -> rawptr { ret := impl_MapNamedBuffer(buffer, access); debug_helper(loc, 1, ret, buffer, access); return ret; } + MapNamedBufferRange :: #force_inline proc "c" (buffer: u32, offset: int, length: int, access: u32, loc := #caller_location) -> rawptr { ret := impl_MapNamedBufferRange(buffer, offset, length, access); debug_helper(loc, 1, ret, buffer, offset, length, access); return ret; } + UnmapNamedBuffer :: #force_inline proc "c" (buffer: u32, loc := #caller_location) -> bool { ret := impl_UnmapNamedBuffer(buffer); debug_helper(loc, 1, ret, buffer); return ret; } + FlushMappedNamedBufferRange :: #force_inline proc "c" (buffer: u32, offset: int, length: int, loc := #caller_location) { impl_FlushMappedNamedBufferRange(buffer, offset, length); debug_helper(loc, 0, buffer, offset, length); } + GetNamedBufferParameteriv :: #force_inline proc "c" (buffer: u32, pname: u32, params: [^]i32, loc := #caller_location) { impl_GetNamedBufferParameteriv(buffer, pname, params); debug_helper(loc, 0, buffer, pname, params); } + GetNamedBufferParameteri64v :: #force_inline proc "c" (buffer: u32, pname: u32, params: [^]i64, loc := #caller_location) { impl_GetNamedBufferParameteri64v(buffer, pname, params); debug_helper(loc, 0, buffer, pname, params); } + GetNamedBufferPointerv :: #force_inline proc "c" (buffer: u32, pname: u32, params: [^]rawptr, loc := #caller_location) { impl_GetNamedBufferPointerv(buffer, pname, params); debug_helper(loc, 0, buffer, pname, params); } + GetNamedBufferSubData :: #force_inline proc "c" (buffer: u32, offset: int, size: int, data: rawptr, loc := #caller_location) { impl_GetNamedBufferSubData(buffer, offset, size, data); debug_helper(loc, 0, buffer, offset, size, data); } + CreateFramebuffers :: #force_inline proc "c" (n: i32, framebuffers: [^]u32, loc := #caller_location) { impl_CreateFramebuffers(n, framebuffers); debug_helper(loc, 0, n, framebuffers); } + NamedFramebufferRenderbuffer :: #force_inline proc "c" (framebuffer: u32, attachment: u32, renderbuffertarget: u32, renderbuffer: u32, loc := #caller_location) { impl_NamedFramebufferRenderbuffer(framebuffer, attachment, renderbuffertarget, renderbuffer); debug_helper(loc, 0, framebuffer, attachment, renderbuffertarget, renderbuffer); } + NamedFramebufferParameteri :: #force_inline proc "c" (framebuffer: u32, pname: u32, param: i32, loc := #caller_location) { impl_NamedFramebufferParameteri(framebuffer, pname, param); debug_helper(loc, 0, framebuffer, pname, param); } + NamedFramebufferTexture :: #force_inline proc "c" (framebuffer: u32, attachment: u32, texture: u32, level: i32, loc := #caller_location) { impl_NamedFramebufferTexture(framebuffer, attachment, texture, level); debug_helper(loc, 0, framebuffer, attachment, texture, level); } + NamedFramebufferTextureLayer :: #force_inline proc "c" (framebuffer: u32, attachment: u32, texture: u32, level: i32, layer: i32, loc := #caller_location) { impl_NamedFramebufferTextureLayer(framebuffer, attachment, texture, level, layer); debug_helper(loc, 0, framebuffer, attachment, texture, level, layer); } + NamedFramebufferDrawBuffer :: #force_inline proc "c" (framebuffer: u32, buf: u32, loc := #caller_location) { impl_NamedFramebufferDrawBuffer(framebuffer, buf); debug_helper(loc, 0, framebuffer, buf); } + NamedFramebufferDrawBuffers :: #force_inline proc "c" (framebuffer: u32, n: i32, bufs: [^]u32, loc := #caller_location) { impl_NamedFramebufferDrawBuffers(framebuffer, n, bufs); debug_helper(loc, 0, framebuffer, n, bufs); } + NamedFramebufferReadBuffer :: #force_inline proc "c" (framebuffer: u32, src: u32, loc := #caller_location) { impl_NamedFramebufferReadBuffer(framebuffer, src); debug_helper(loc, 0, framebuffer, src); } + InvalidateNamedFramebufferData :: #force_inline proc "c" (framebuffer: u32, numAttachments: i32, attachments: ^u32, loc := #caller_location) { impl_InvalidateNamedFramebufferData(framebuffer, numAttachments, attachments); debug_helper(loc, 0, framebuffer, numAttachments, attachments); } + InvalidateNamedFramebufferSubData :: #force_inline proc "c" (framebuffer: u32, numAttachments: i32, attachments: ^u32, x: i32, y: i32, width: i32, height: i32, loc := #caller_location) { impl_InvalidateNamedFramebufferSubData(framebuffer, numAttachments, attachments, x, y, width, height); debug_helper(loc, 0, framebuffer, numAttachments, attachments, x, y, width, height); } + ClearNamedFramebufferiv :: #force_inline proc "c" (framebuffer: u32, buffer: u32, drawbuffer: i32, value: ^i32, loc := #caller_location) { impl_ClearNamedFramebufferiv(framebuffer, buffer, drawbuffer, value); debug_helper(loc, 0, framebuffer, buffer, drawbuffer, value); } + ClearNamedFramebufferuiv :: #force_inline proc "c" (framebuffer: u32, buffer: u32, drawbuffer: i32, value: ^u32, loc := #caller_location) { impl_ClearNamedFramebufferuiv(framebuffer, buffer, drawbuffer, value); debug_helper(loc, 0, framebuffer, buffer, drawbuffer, value); } + ClearNamedFramebufferfv :: #force_inline proc "c" (framebuffer: u32, buffer: u32, drawbuffer: i32, value: ^f32, loc := #caller_location) { impl_ClearNamedFramebufferfv(framebuffer, buffer, drawbuffer, value); debug_helper(loc, 0, framebuffer, buffer, drawbuffer, value); } + ClearNamedFramebufferfi :: #force_inline proc "c" (framebuffer: u32, buffer: u32, drawbuffer: i32, depth: f32, stencil: i32, loc := #caller_location) { impl_ClearNamedFramebufferfi(framebuffer, buffer, drawbuffer, depth, stencil); debug_helper(loc, 0, framebuffer, buffer, drawbuffer, depth, stencil); } + BlitNamedFramebuffer :: #force_inline proc "c" (readFramebuffer: u32, drawFramebuffer: u32, srcX0: i32, srcY0: i32, srcX1: i32, srcY1: i32, dstX0: i32, dstY0: i32, dstX1: i32, dstY1: i32, mask: u32, filter: u32, loc := #caller_location) { impl_BlitNamedFramebuffer(readFramebuffer, drawFramebuffer, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); debug_helper(loc, 0, readFramebuffer, drawFramebuffer, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); } + CheckNamedFramebufferStatus :: #force_inline proc "c" (framebuffer: u32, target: u32, loc := #caller_location) -> u32 { ret := impl_CheckNamedFramebufferStatus(framebuffer, target); debug_helper(loc, 1, ret, framebuffer, target); return ret; } + GetNamedFramebufferParameteriv :: #force_inline proc "c" (framebuffer: u32, pname: u32, param: ^i32, loc := #caller_location) { impl_GetNamedFramebufferParameteriv(framebuffer, pname, param); debug_helper(loc, 0, framebuffer, pname, param); } + GetNamedFramebufferAttachmentParameteriv :: #force_inline proc "c" (framebuffer: u32, attachment: u32, pname: u32, params: [^]i32, loc := #caller_location) { impl_GetNamedFramebufferAttachmentParameteriv(framebuffer, attachment, pname, params); debug_helper(loc, 0, framebuffer, attachment, pname, params); } + CreateRenderbuffers :: #force_inline proc "c" (n: i32, renderbuffers: [^]u32, loc := #caller_location) { impl_CreateRenderbuffers(n, renderbuffers); debug_helper(loc, 0, n, renderbuffers); } + NamedRenderbufferStorage :: #force_inline proc "c" (renderbuffer: u32, internalformat: u32, width: i32, height: i32, loc := #caller_location) { impl_NamedRenderbufferStorage(renderbuffer, internalformat, width, height); debug_helper(loc, 0, renderbuffer, internalformat, width, height); } + NamedRenderbufferStorageMultisample :: #force_inline proc "c" (renderbuffer: u32, samples: i32, internalformat: u32, width: i32, height: i32, loc := #caller_location) { impl_NamedRenderbufferStorageMultisample(renderbuffer, samples, internalformat, width, height); debug_helper(loc, 0, renderbuffer, samples, internalformat, width, height); } + GetNamedRenderbufferParameteriv :: #force_inline proc "c" (renderbuffer: u32, pname: u32, params: [^]i32, loc := #caller_location) { impl_GetNamedRenderbufferParameteriv(renderbuffer, pname, params); debug_helper(loc, 0, renderbuffer, pname, params); } + CreateTextures :: #force_inline proc "c" (target: u32, n: i32, textures: [^]u32, loc := #caller_location) { impl_CreateTextures(target, n, textures); debug_helper(loc, 0, target, n, textures); } + TextureBuffer :: #force_inline proc "c" (texture: u32, internalformat: u32, buffer: u32, loc := #caller_location) { impl_TextureBuffer(texture, internalformat, buffer); debug_helper(loc, 0, texture, internalformat, buffer); } + TextureBufferRange :: #force_inline proc "c" (texture: u32, internalformat: u32, buffer: u32, offset: int, size: int, loc := #caller_location) { impl_TextureBufferRange(texture, internalformat, buffer, offset, size); debug_helper(loc, 0, texture, internalformat, buffer, offset, size); } + TextureStorage1D :: #force_inline proc "c" (texture: u32, levels: i32, internalformat: u32, width: i32, loc := #caller_location) { impl_TextureStorage1D(texture, levels, internalformat, width); debug_helper(loc, 0, texture, levels, internalformat, width); } + TextureStorage2D :: #force_inline proc "c" (texture: u32, levels: i32, internalformat: u32, width: i32, height: i32, loc := #caller_location) { impl_TextureStorage2D(texture, levels, internalformat, width, height); debug_helper(loc, 0, texture, levels, internalformat, width, height); } + TextureStorage3D :: #force_inline proc "c" (texture: u32, levels: i32, internalformat: u32, width: i32, height: i32, depth: i32, loc := #caller_location) { impl_TextureStorage3D(texture, levels, internalformat, width, height, depth); debug_helper(loc, 0, texture, levels, internalformat, width, height, depth); } + TextureStorage2DMultisample :: #force_inline proc "c" (texture: u32, samples: i32, internalformat: u32, width: i32, height: i32, fixedsamplelocations: u8, loc := #caller_location) { impl_TextureStorage2DMultisample(texture, samples, internalformat, width, height, fixedsamplelocations); debug_helper(loc, 0, texture, samples, internalformat, width, height, fixedsamplelocations); } + TextureStorage3DMultisample :: #force_inline proc "c" (texture: u32, samples: i32, internalformat: u32, width: i32, height: i32, depth: i32, fixedsamplelocations: u8, loc := #caller_location) { impl_TextureStorage3DMultisample(texture, samples, internalformat, width, height, depth, fixedsamplelocations); debug_helper(loc, 0, texture, samples, internalformat, width, height, depth, fixedsamplelocations); } + TextureSubImage1D :: #force_inline proc "c" (texture: u32, level: i32, xoffset: i32, width: i32, format: u32, type: u32, pixels: rawptr, loc := #caller_location) { impl_TextureSubImage1D(texture, level, xoffset, width, format, type, pixels); debug_helper(loc, 0, texture, level, xoffset, width, format, type, pixels); } + TextureSubImage2D :: #force_inline proc "c" (texture: u32, level: i32, xoffset: i32, yoffset: i32, width: i32, height: i32, format: u32, type: u32, pixels: rawptr, loc := #caller_location) { impl_TextureSubImage2D(texture, level, xoffset, yoffset, width, height, format, type, pixels); debug_helper(loc, 0, texture, level, xoffset, yoffset, width, height, format, type, pixels); } + TextureSubImage3D :: #force_inline proc "c" (texture: u32, level: i32, xoffset: i32, yoffset: i32, zoffset: i32, width: i32, height: i32, depth: i32, format: u32, type: u32, pixels: rawptr, loc := #caller_location) { impl_TextureSubImage3D(texture, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels); debug_helper(loc, 0, texture, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels); } + CompressedTextureSubImage1D :: #force_inline proc "c" (texture: u32, level: i32, xoffset: i32, width: i32, format: u32, imageSize: i32, data: rawptr, loc := #caller_location) { impl_CompressedTextureSubImage1D(texture, level, xoffset, width, format, imageSize, data); debug_helper(loc, 0, texture, level, xoffset, width, format, imageSize, data); } + CompressedTextureSubImage2D :: #force_inline proc "c" (texture: u32, level: i32, xoffset: i32, yoffset: i32, width: i32, height: i32, format: u32, imageSize: i32, data: rawptr, loc := #caller_location) { impl_CompressedTextureSubImage2D(texture, level, xoffset, yoffset, width, height, format, imageSize, data); debug_helper(loc, 0, texture, level, xoffset, yoffset, width, height, format, imageSize, data); } + CompressedTextureSubImage3D :: #force_inline proc "c" (texture: u32, level: i32, xoffset: i32, yoffset: i32, zoffset: i32, width: i32, height: i32, depth: i32, format: u32, imageSize: i32, data: rawptr, loc := #caller_location) { impl_CompressedTextureSubImage3D(texture, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data); debug_helper(loc, 0, texture, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data); } + CopyTextureSubImage1D :: #force_inline proc "c" (texture: u32, level: i32, xoffset: i32, x: i32, y: i32, width: i32, loc := #caller_location) { impl_CopyTextureSubImage1D(texture, level, xoffset, x, y, width); debug_helper(loc, 0, texture, level, xoffset, x, y, width); } + CopyTextureSubImage2D :: #force_inline proc "c" (texture: u32, level: i32, xoffset: i32, yoffset: i32, x: i32, y: i32, width: i32, height: i32, loc := #caller_location) { impl_CopyTextureSubImage2D(texture, level, xoffset, yoffset, x, y, width, height); debug_helper(loc, 0, texture, level, xoffset, yoffset, x, y, width, height); } + CopyTextureSubImage3D :: #force_inline proc "c" (texture: u32, level: i32, xoffset: i32, yoffset: i32, zoffset: i32, x: i32, y: i32, width: i32, height: i32, loc := #caller_location) { impl_CopyTextureSubImage3D(texture, level, xoffset, yoffset, zoffset, x, y, width, height); debug_helper(loc, 0, texture, level, xoffset, yoffset, zoffset, x, y, width, height); } + TextureParameterf :: #force_inline proc "c" (texture: u32, pname: u32, param: f32, loc := #caller_location) { impl_TextureParameterf(texture, pname, param); debug_helper(loc, 0, texture, pname, param); } + TextureParameterfv :: #force_inline proc "c" (texture: u32, pname: u32, param: ^f32, loc := #caller_location) { impl_TextureParameterfv(texture, pname, param); debug_helper(loc, 0, texture, pname, param); } + TextureParameteri :: #force_inline proc "c" (texture: u32, pname: u32, param: i32, loc := #caller_location) { impl_TextureParameteri(texture, pname, param); debug_helper(loc, 0, texture, pname, param); } + TextureParameterIiv :: #force_inline proc "c" (texture: u32, pname: u32, params: [^]i32, loc := #caller_location) { impl_TextureParameterIiv(texture, pname, params); debug_helper(loc, 0, texture, pname, params); } + TextureParameterIuiv :: #force_inline proc "c" (texture: u32, pname: u32, params: [^]u32, loc := #caller_location) { impl_TextureParameterIuiv(texture, pname, params); debug_helper(loc, 0, texture, pname, params); } + TextureParameteriv :: #force_inline proc "c" (texture: u32, pname: u32, param: ^i32, loc := #caller_location) { impl_TextureParameteriv(texture, pname, param); debug_helper(loc, 0, texture, pname, param); } + GenerateTextureMipmap :: #force_inline proc "c" (texture: u32, loc := #caller_location) { impl_GenerateTextureMipmap(texture); debug_helper(loc, 0, texture); } + BindTextureUnit :: #force_inline proc "c" (unit: u32, texture: u32, loc := #caller_location) { impl_BindTextureUnit(unit, texture); debug_helper(loc, 0, unit, texture); } + GetTextureImage :: #force_inline proc "c" (texture: u32, level: i32, format: u32, type: u32, bufSize: i32, pixels: rawptr, loc := #caller_location) { impl_GetTextureImage(texture, level, format, type, bufSize, pixels); debug_helper(loc, 0, texture, level, format, type, bufSize, pixels); } + GetCompressedTextureImage :: #force_inline proc "c" (texture: u32, level: i32, bufSize: i32, pixels: rawptr, loc := #caller_location) { impl_GetCompressedTextureImage(texture, level, bufSize, pixels); debug_helper(loc, 0, texture, level, bufSize, pixels); } + GetTextureLevelParameterfv :: #force_inline proc "c" (texture: u32, level: i32, pname: u32, params: [^]f32, loc := #caller_location) { impl_GetTextureLevelParameterfv(texture, level, pname, params); debug_helper(loc, 0, texture, level, pname, params); } + GetTextureLevelParameteriv :: #force_inline proc "c" (texture: u32, level: i32, pname: u32, params: [^]i32, loc := #caller_location) { impl_GetTextureLevelParameteriv(texture, level, pname, params); debug_helper(loc, 0, texture, level, pname, params); } + GetTextureParameterfv :: #force_inline proc "c" (texture: u32, pname: u32, params: [^]f32, loc := #caller_location) { impl_GetTextureParameterfv(texture, pname, params); debug_helper(loc, 0, texture, pname, params); } + GetTextureParameterIiv :: #force_inline proc "c" (texture: u32, pname: u32, params: [^]i32, loc := #caller_location) { impl_GetTextureParameterIiv(texture, pname, params); debug_helper(loc, 0, texture, pname, params); } + GetTextureParameterIuiv :: #force_inline proc "c" (texture: u32, pname: u32, params: [^]u32, loc := #caller_location) { impl_GetTextureParameterIuiv(texture, pname, params); debug_helper(loc, 0, texture, pname, params); } + GetTextureParameteriv :: #force_inline proc "c" (texture: u32, pname: u32, params: [^]i32, loc := #caller_location) { impl_GetTextureParameteriv(texture, pname, params); debug_helper(loc, 0, texture, pname, params); } + CreateVertexArrays :: #force_inline proc "c" (n: i32, arrays: [^]u32, loc := #caller_location) { impl_CreateVertexArrays(n, arrays); debug_helper(loc, 0, n, arrays); } + DisableVertexArrayAttrib :: #force_inline proc "c" (vaobj: u32, index: u32, loc := #caller_location) { impl_DisableVertexArrayAttrib(vaobj, index); debug_helper(loc, 0, vaobj, index); } + EnableVertexArrayAttrib :: #force_inline proc "c" (vaobj: u32, index: u32, loc := #caller_location) { impl_EnableVertexArrayAttrib(vaobj, index); debug_helper(loc, 0, vaobj, index); } + VertexArrayElementBuffer :: #force_inline proc "c" (vaobj: u32, buffer: u32, loc := #caller_location) { impl_VertexArrayElementBuffer(vaobj, buffer); debug_helper(loc, 0, vaobj, buffer); } + VertexArrayVertexBuffer :: #force_inline proc "c" (vaobj: u32, bindingindex: u32, buffer: u32, offset: int, stride: i32, loc := #caller_location) { impl_VertexArrayVertexBuffer(vaobj, bindingindex, buffer, offset, stride); debug_helper(loc, 0, vaobj, bindingindex, buffer, offset, stride); } + VertexArrayVertexBuffers :: #force_inline proc "c" (vaobj: u32, first: u32, count: i32, buffers: [^]u32, offsets: [^]uintptr, strides: [^]i32, loc := #caller_location) { impl_VertexArrayVertexBuffers(vaobj, first, count, buffers, offsets, strides); debug_helper(loc, 0, vaobj, first, count, buffers, offsets, strides); } + VertexArrayAttribBinding :: #force_inline proc "c" (vaobj: u32, attribindex: u32, bindingindex: u32, loc := #caller_location) { impl_VertexArrayAttribBinding(vaobj, attribindex, bindingindex); debug_helper(loc, 0, vaobj, attribindex, bindingindex); } + VertexArrayAttribFormat :: #force_inline proc "c" (vaobj: u32, attribindex: u32, size: i32, type: u32, normalized: bool, relativeoffset: u32, loc := #caller_location) { impl_VertexArrayAttribFormat(vaobj, attribindex, size, type, normalized, relativeoffset); debug_helper(loc, 0, vaobj, attribindex, size, type, normalized, relativeoffset); } + VertexArrayAttribIFormat :: #force_inline proc "c" (vaobj: u32, attribindex: u32, size: i32, type: u32, relativeoffset: u32, loc := #caller_location) { impl_VertexArrayAttribIFormat(vaobj, attribindex, size, type, relativeoffset); debug_helper(loc, 0, vaobj, attribindex, size, type, relativeoffset); } + VertexArrayAttribLFormat :: #force_inline proc "c" (vaobj: u32, attribindex: u32, size: i32, type: u32, relativeoffset: u32, loc := #caller_location) { impl_VertexArrayAttribLFormat(vaobj, attribindex, size, type, relativeoffset); debug_helper(loc, 0, vaobj, attribindex, size, type, relativeoffset); } + VertexArrayBindingDivisor :: #force_inline proc "c" (vaobj: u32, bindingindex: u32, divisor: u32, loc := #caller_location) { impl_VertexArrayBindingDivisor(vaobj, bindingindex, divisor); debug_helper(loc, 0, vaobj, bindingindex, divisor); } + GetVertexArrayiv :: #force_inline proc "c" (vaobj: u32, pname: u32, param: ^i32, loc := #caller_location) { impl_GetVertexArrayiv(vaobj, pname, param); debug_helper(loc, 0, vaobj, pname, param); } + GetVertexArrayIndexediv :: #force_inline proc "c" (vaobj: u32, index: u32, pname: u32, param: ^i32, loc := #caller_location) { impl_GetVertexArrayIndexediv(vaobj, index, pname, param); debug_helper(loc, 0, vaobj, index, pname, param); } + GetVertexArrayIndexed64iv :: #force_inline proc "c" (vaobj: u32, index: u32, pname: u32, param: ^i64, loc := #caller_location) { impl_GetVertexArrayIndexed64iv(vaobj, index, pname, param); debug_helper(loc, 0, vaobj, index, pname, param); } + CreateSamplers :: #force_inline proc "c" (n: i32, samplers: [^]u32, loc := #caller_location) { impl_CreateSamplers(n, samplers); debug_helper(loc, 0, n, samplers); } + CreateProgramPipelines :: #force_inline proc "c" (n: i32, pipelines: [^]u32, loc := #caller_location) { impl_CreateProgramPipelines(n, pipelines); debug_helper(loc, 0, n, pipelines); } + CreateQueries :: #force_inline proc "c" (target: u32, n: i32, ids: [^]u32, loc := #caller_location) { impl_CreateQueries(target, n, ids); debug_helper(loc, 0, target, n, ids); } + GetQueryBufferObjecti64v :: #force_inline proc "c" (id: u32, buffer: u32, pname: u32, offset: int, loc := #caller_location) { impl_GetQueryBufferObjecti64v(id, buffer, pname, offset); debug_helper(loc, 0, id, buffer, pname, offset); } + GetQueryBufferObjectiv :: #force_inline proc "c" (id: u32, buffer: u32, pname: u32, offset: int, loc := #caller_location) { impl_GetQueryBufferObjectiv(id, buffer, pname, offset); debug_helper(loc, 0, id, buffer, pname, offset); } + GetQueryBufferObjectui64v :: #force_inline proc "c" (id: u32, buffer: u32, pname: u32, offset: int, loc := #caller_location) { impl_GetQueryBufferObjectui64v(id, buffer, pname, offset); debug_helper(loc, 0, id, buffer, pname, offset); } + GetQueryBufferObjectuiv :: #force_inline proc "c" (id: u32, buffer: u32, pname: u32, offset: int, loc := #caller_location) { impl_GetQueryBufferObjectuiv(id, buffer, pname, offset); debug_helper(loc, 0, id, buffer, pname, offset); } + MemoryBarrierByRegion :: #force_inline proc "c" (barriers: u32, loc := #caller_location) { impl_MemoryBarrierByRegion(barriers); debug_helper(loc, 0, barriers); } + GetTextureSubImage :: #force_inline proc "c" (texture: u32, level: i32, xoffset: i32, yoffset: i32, zoffset: i32, width: i32, height: i32, depth: i32, format: u32, type: u32, bufSize: i32, pixels: rawptr, loc := #caller_location) { impl_GetTextureSubImage(texture, level, xoffset, yoffset, zoffset, width, height, depth, format, type, bufSize, pixels); debug_helper(loc, 0, texture, level, xoffset, yoffset, zoffset, width, height, depth, format, type, bufSize, pixels); } + GetCompressedTextureSubImage :: #force_inline proc "c" (texture: u32, level: i32, xoffset: i32, yoffset: i32, zoffset: i32, width: i32, height: i32, depth: i32, bufSize: i32, pixels: rawptr, loc := #caller_location) { impl_GetCompressedTextureSubImage(texture, level, xoffset, yoffset, zoffset, width, height, depth, bufSize, pixels); debug_helper(loc, 0, texture, level, xoffset, yoffset, zoffset, width, height, depth, bufSize, pixels); } + GetGraphicsResetStatus :: #force_inline proc "c" (loc := #caller_location) -> u32 { ret := impl_GetGraphicsResetStatus(); debug_helper(loc, 1, ret); return ret; } + GetnCompressedTexImage :: #force_inline proc "c" (target: u32, lod: i32, bufSize: i32, pixels: rawptr, loc := #caller_location) { impl_GetnCompressedTexImage(target, lod, bufSize, pixels); debug_helper(loc, 0, target, lod, bufSize, pixels); } + GetnTexImage :: #force_inline proc "c" (target: u32, level: i32, format: u32, type: u32, bufSize: i32, pixels: rawptr, loc := #caller_location) { impl_GetnTexImage(target, level, format, type, bufSize, pixels); debug_helper(loc, 0, target, level, format, type, bufSize, pixels); } + GetnUniformdv :: #force_inline proc "c" (program: u32, location: i32, bufSize: i32, params: [^]f64, loc := #caller_location) { impl_GetnUniformdv(program, location, bufSize, params); debug_helper(loc, 0, program, location, bufSize, params); } + GetnUniformfv :: #force_inline proc "c" (program: u32, location: i32, bufSize: i32, params: [^]f32, loc := #caller_location) { impl_GetnUniformfv(program, location, bufSize, params); debug_helper(loc, 0, program, location, bufSize, params); } + GetnUniformiv :: #force_inline proc "c" (program: u32, location: i32, bufSize: i32, params: [^]i32, loc := #caller_location) { impl_GetnUniformiv(program, location, bufSize, params); debug_helper(loc, 0, program, location, bufSize, params); } + GetnUniformuiv :: #force_inline proc "c" (program: u32, location: i32, bufSize: i32, params: [^]u32, loc := #caller_location) { impl_GetnUniformuiv(program, location, bufSize, params); debug_helper(loc, 0, program, location, bufSize, params); } + ReadnPixels :: #force_inline proc "c" (x: i32, y: i32, width: i32, height: i32, format: u32, type: u32, bufSize: i32, data: rawptr, loc := #caller_location) { impl_ReadnPixels(x, y, width, height, format, type, bufSize, data); debug_helper(loc, 0, x, y, width, height, format, type, bufSize, data); } + GetnMapdv :: #force_inline proc "c" (target: u32, query: u32, bufSize: i32, v: ^f64, loc := #caller_location) { impl_GetnMapdv(target, query, bufSize, v); debug_helper(loc, 0, target, query, bufSize, v); } + GetnMapfv :: #force_inline proc "c" (target: u32, query: u32, bufSize: i32, v: ^f32, loc := #caller_location) { impl_GetnMapfv(target, query, bufSize, v); debug_helper(loc, 0, target, query, bufSize, v); } + GetnMapiv :: #force_inline proc "c" (target: u32, query: u32, bufSize: i32, v: ^i32, loc := #caller_location) { impl_GetnMapiv(target, query, bufSize, v); debug_helper(loc, 0, target, query, bufSize, v); } + GetnPixelMapusv :: #force_inline proc "c" (map_: u32, bufSize: i32, values: [^]u16, loc := #caller_location) { impl_GetnPixelMapusv(map_, bufSize, values); debug_helper(loc, 0, map_, bufSize, values); } + GetnPixelMapfv :: #force_inline proc "c" (map_: u32, bufSize: i32, values: [^]f32, loc := #caller_location) { impl_GetnPixelMapfv(map_, bufSize, values); debug_helper(loc, 0, map_, bufSize, values); } + GetnPixelMapuiv :: #force_inline proc "c" (map_: u32, bufSize: i32, values: [^]u32, loc := #caller_location) { impl_GetnPixelMapuiv(map_, bufSize, values); debug_helper(loc, 0, map_, bufSize, values); } + GetnPolygonStipple :: #force_inline proc "c" (bufSize: i32, pattern: ^u8, loc := #caller_location) { impl_GetnPolygonStipple(bufSize, pattern); debug_helper(loc, 0, bufSize, pattern); } + GetnColorTable :: #force_inline proc "c" (target: u32, format: u32, type: u32, bufSize: i32, table: rawptr, loc := #caller_location) { impl_GetnColorTable(target, format, type, bufSize, table); debug_helper(loc, 0, target, format, type, bufSize, table); } + GetnConvolutionFilter :: #force_inline proc "c" (target: u32, format: u32, type: u32, bufSize: i32, image: rawptr, loc := #caller_location) { impl_GetnConvolutionFilter(target, format, type, bufSize, image); debug_helper(loc, 0, target, format, type, bufSize, image); } + GetnSeparableFilter :: #force_inline proc "c" (target: u32, format: u32, type: u32, rowBufSize: i32, row: rawptr, columnBufSize: i32, column: rawptr, span: rawptr, loc := #caller_location) { impl_GetnSeparableFilter(target, format, type, rowBufSize, row, columnBufSize, column, span); debug_helper(loc, 0, target, format, type, rowBufSize, row, columnBufSize, column, span); } + GetnHistogram :: #force_inline proc "c" (target: u32, reset: u8, format: u32, type: u32, bufSize: i32, values: rawptr, loc := #caller_location) { impl_GetnHistogram(target, reset, format, type, bufSize, values); debug_helper(loc, 0, target, reset, format, type, bufSize, values); } + GetnMinmax :: #force_inline proc "c" (target: u32, reset: u8, format: u32, type: u32, bufSize: i32, values: rawptr, loc := #caller_location) { impl_GetnMinmax(target, reset, format, type, bufSize, values); debug_helper(loc, 0, target, reset, format, type, bufSize, values); } + TextureBarrier :: #force_inline proc "c" (loc := #caller_location) { impl_TextureBarrier(); debug_helper(loc, 0); } + GetUnsignedBytevEXT :: #force_inline proc "c" (pname: u32, data: ^byte, loc := #caller_location) { impl_glGetUnsignedBytevEXT(pname, data); debug_helper(loc, 0, pname, data); } + TexPageCommitmentARB :: #force_inline proc "c"( + target: u32, + level: i32, + xoffset: i32, + yoffset: i32, + zoffset: i32, + width: i32, + height: i32, + depth: i32, + commit: bool, + loc := #caller_location, + ) { + impl_TexPageCommitmentARB(target, level, xoffset, yoffset, zoffset, width, height, depth, commit); + debug_helper(loc, 0, target, level, xoffset, yoffset, zoffset, width, height, depth, commit); + } + // VERSION_4_6 + SpecializeShader :: #force_inline proc "c" (shader: u32, pEntryPoint: ^u8, numSpecializationConstants: u32, pConstantIndex: ^u32, pConstantValue: ^u32, loc := #caller_location) { impl_SpecializeShader(shader, pEntryPoint, numSpecializationConstants, pConstantIndex, pConstantValue); debug_helper(loc, 0, shader, pEntryPoint, numSpecializationConstants, pConstantIndex, pConstantValue); } + MultiDrawArraysIndirectCount :: #force_inline proc "c" (mode: i32, indirect: rawptr, drawcount: int, maxdrawcount, stride: i32, loc := #caller_location) { impl_MultiDrawArraysIndirectCount(mode, indirect, drawcount, maxdrawcount, stride); debug_helper(loc, 0, mode, indirect, drawcount, maxdrawcount, stride); } + MultiDrawElementsIndirectCount :: #force_inline proc "c" (mode: i32, type: i32, indirect: rawptr, drawcount: int, maxdrawcount, stride: i32, loc := #caller_location) { impl_MultiDrawElementsIndirectCount(mode, type, indirect, drawcount, maxdrawcount, stride); debug_helper(loc, 0, mode, type, indirect, drawcount, maxdrawcount, stride); } + PolygonOffsetClamp :: #force_inline proc "c" (factor, units, clamp: f32, loc := #caller_location) { impl_PolygonOffsetClamp(factor, units, clamp); debug_helper(loc, 0, factor, units, clamp); } +}