From 311d8b92f5f757c3edfd3676d3dc4a4dad505fed Mon Sep 17 00:00:00 2001 From: Ray Date: Thu, 5 Jul 2018 21:56:52 +0200 Subject: [PATCH] Upload IQM loader project -WIP- --- examples/others/iqm_loader/glad.h | 5466 +++++++++++++++++ .../others/iqm_loader/models_iqm_animation.c | 98 + examples/others/iqm_loader/raymath.h | 1334 ++++ .../others/iqm_loader/resources/guy.blend | Bin 0 -> 665304 bytes examples/others/iqm_loader/resources/guy.iqm | Bin 0 -> 39408 bytes .../others/iqm_loader/resources/guyanim.iqm | Bin 0 -> 18244 bytes .../others/iqm_loader/resources/guytex.png | Bin 0 -> 302388 bytes examples/others/iqm_loader/riqm.h | 1242 ++++ examples/others/iqm_loader/rlgl.h | 500 ++ 9 files changed, 8640 insertions(+) create mode 100644 examples/others/iqm_loader/glad.h create mode 100644 examples/others/iqm_loader/models_iqm_animation.c create mode 100644 examples/others/iqm_loader/raymath.h create mode 100644 examples/others/iqm_loader/resources/guy.blend create mode 100644 examples/others/iqm_loader/resources/guy.iqm create mode 100644 examples/others/iqm_loader/resources/guyanim.iqm create mode 100644 examples/others/iqm_loader/resources/guytex.png create mode 100644 examples/others/iqm_loader/riqm.h create mode 100644 examples/others/iqm_loader/rlgl.h diff --git a/examples/others/iqm_loader/glad.h b/examples/others/iqm_loader/glad.h new file mode 100644 index 000000000..70dbc7394 --- /dev/null +++ b/examples/others/iqm_loader/glad.h @@ -0,0 +1,5466 @@ +/* + + OpenGL loader generated by glad 0.1.10a0 on Fri Jun 10 12:54:12 2016. + + Language/Generator: C/C++ + Specification: gl + APIs: gl=3.3 + Profile: core + Extensions: + GL_AMD_debug_output, GL_AMD_query_buffer_object, GL_ARB_ES2_compatibility, GL_ARB_ES3_compatibility, GL_ARB_buffer_storage, GL_ARB_compatibility, GL_ARB_compressed_texture_pixel_storage, GL_ARB_debug_output, GL_ARB_depth_buffer_float, GL_ARB_depth_clamp, GL_ARB_depth_texture, GL_ARB_draw_buffers, GL_ARB_draw_buffers_blend, GL_ARB_explicit_attrib_location, GL_ARB_explicit_uniform_location, GL_ARB_fragment_program, GL_ARB_fragment_shader, GL_ARB_framebuffer_object, GL_ARB_framebuffer_sRGB, GL_ARB_multisample, GL_ARB_sample_locations, GL_ARB_texture_compression, GL_ARB_texture_float, GL_ARB_texture_multisample, GL_ARB_texture_non_power_of_two, GL_ARB_texture_rg, GL_ARB_texture_swizzle, GL_ARB_uniform_buffer_object, GL_ARB_vertex_array_object, GL_ARB_vertex_attrib_binding, GL_ARB_vertex_buffer_object, GL_ARB_vertex_program, GL_ARB_vertex_shader, GL_ATI_element_array, GL_ATI_fragment_shader, GL_ATI_vertex_array_object, GL_EXT_blend_color, GL_EXT_blend_equation_separate, GL_EXT_blend_func_separate, GL_EXT_framebuffer_blit, GL_EXT_framebuffer_multisample, GL_EXT_framebuffer_multisample_blit_scaled, GL_EXT_framebuffer_object, GL_EXT_framebuffer_sRGB, GL_EXT_index_array_formats, GL_EXT_texture, GL_EXT_texture_compression_s3tc, GL_EXT_texture_sRGB, GL_EXT_texture_swizzle, GL_EXT_vertex_array, GL_EXT_vertex_shader + Loader: No + + Commandline: + --profile="core" --api="gl=3.3" --generator="c" --spec="gl" --no-loader --extensions="GL_AMD_debug_output,GL_AMD_query_buffer_object,GL_ARB_ES2_compatibility,GL_ARB_ES3_compatibility,GL_ARB_buffer_storage,GL_ARB_compatibility,GL_ARB_compressed_texture_pixel_storage,GL_ARB_debug_output,GL_ARB_depth_buffer_float,GL_ARB_depth_clamp,GL_ARB_depth_texture,GL_ARB_draw_buffers,GL_ARB_draw_buffers_blend,GL_ARB_explicit_attrib_location,GL_ARB_explicit_uniform_location,GL_ARB_fragment_program,GL_ARB_fragment_shader,GL_ARB_framebuffer_object,GL_ARB_framebuffer_sRGB,GL_ARB_multisample,GL_ARB_sample_locations,GL_ARB_texture_compression,GL_ARB_texture_float,GL_ARB_texture_multisample,GL_ARB_texture_non_power_of_two,GL_ARB_texture_rg,GL_ARB_texture_swizzle,GL_ARB_uniform_buffer_object,GL_ARB_vertex_array_object,GL_ARB_vertex_attrib_binding,GL_ARB_vertex_buffer_object,GL_ARB_vertex_program,GL_ARB_vertex_shader,GL_ATI_element_array,GL_ATI_fragment_shader,GL_ATI_vertex_array_object,GL_EXT_blend_color,GL_EXT_blend_equation_separate,GL_EXT_blend_func_separate,GL_EXT_framebuffer_blit,GL_EXT_framebuffer_multisample,GL_EXT_framebuffer_multisample_blit_scaled,GL_EXT_framebuffer_object,GL_EXT_framebuffer_sRGB,GL_EXT_index_array_formats,GL_EXT_texture,GL_EXT_texture_compression_s3tc,GL_EXT_texture_sRGB,GL_EXT_texture_swizzle,GL_EXT_vertex_array,GL_EXT_vertex_shader" + Online: + http://glad.dav1d.de/#profile=core&language=c&specification=gl&api=gl%3D3.3&extensions=GL_AMD_debug_output&extensions=GL_AMD_query_buffer_object&extensions=GL_ARB_ES2_compatibility&extensions=GL_ARB_ES3_compatibility&extensions=GL_ARB_buffer_storage&extensions=GL_ARB_compatibility&extensions=GL_ARB_compressed_texture_pixel_storage&extensions=GL_ARB_debug_output&extensions=GL_ARB_depth_buffer_float&extensions=GL_ARB_depth_clamp&extensions=GL_ARB_depth_texture&extensions=GL_ARB_draw_buffers&extensions=GL_ARB_draw_buffers_blend&extensions=GL_ARB_explicit_attrib_location&extensions=GL_ARB_explicit_uniform_location&extensions=GL_ARB_fragment_program&extensions=GL_ARB_fragment_shader&extensions=GL_ARB_framebuffer_object&extensions=GL_ARB_framebuffer_sRGB&extensions=GL_ARB_multisample&extensions=GL_ARB_sample_locations&extensions=GL_ARB_texture_compression&extensions=GL_ARB_texture_float&extensions=GL_ARB_texture_multisample&extensions=GL_ARB_texture_non_power_of_two&extensions=GL_ARB_texture_rg&extensions=GL_ARB_texture_swizzle&extensions=GL_ARB_uniform_buffer_object&extensions=GL_ARB_vertex_array_object&extensions=GL_ARB_vertex_attrib_binding&extensions=GL_ARB_vertex_buffer_object&extensions=GL_ARB_vertex_program&extensions=GL_ARB_vertex_shader&extensions=GL_ATI_element_array&extensions=GL_ATI_fragment_shader&extensions=GL_ATI_vertex_array_object&extensions=GL_EXT_blend_color&extensions=GL_EXT_blend_equation_separate&extensions=GL_EXT_blend_func_separate&extensions=GL_EXT_framebuffer_blit&extensions=GL_EXT_framebuffer_multisample&extensions=GL_EXT_framebuffer_multisample_blit_scaled&extensions=GL_EXT_framebuffer_object&extensions=GL_EXT_framebuffer_sRGB&extensions=GL_EXT_index_array_formats&extensions=GL_EXT_texture&extensions=GL_EXT_texture_compression_s3tc&extensions=GL_EXT_texture_sRGB&extensions=GL_EXT_texture_swizzle&extensions=GL_EXT_vertex_array&extensions=GL_EXT_vertex_shader +*/ + + +#ifndef __glad_h_ +#define __glad_h_ + +#ifdef __gl_h_ +#error OpenGL header already included, remove this include, glad already provides it +#endif +#define __gl_h_ + +#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN 1 +#endif +//#include +#define APIENTRY __stdcall // RAY: Added +#endif + +#ifndef APIENTRY +#define APIENTRY +#endif +#ifndef APIENTRYP +#define APIENTRYP APIENTRY * +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +struct gladGLversionStruct { + int major; + int minor; +}; + +typedef void* (* GLADloadproc)(const char *name); + +#ifndef GLAPI +# if defined(GLAD_GLAPI_EXPORT) +# if defined(WIN32) || defined(__CYGWIN__) +# if defined(GLAD_GLAPI_EXPORT_BUILD) +# if defined(__GNUC__) +# define GLAPI __attribute__ ((dllexport)) extern +# else +# define GLAPI __declspec(dllexport) extern +# endif +# else +# if defined(__GNUC__) +# define GLAPI __attribute__ ((dllimport)) extern +# else +# define GLAPI __declspec(dllimport) extern +# endif +# endif +# elif defined(__GNUC__) && defined(GLAD_GLAPI_EXPORT_BUILD) +# define GLAPI __attribute__ ((visibility ("default"))) extern +# else +# define GLAPI extern +# endif +# else +# define GLAPI extern +# endif +#endif + +GLAPI struct gladGLversionStruct GLVersion; +GLAPI int gladLoadGLLoader(GLADloadproc); + +#include +//#include // RAY: Not required +#ifndef GLEXT_64_TYPES_DEFINED +/* This code block is duplicated in glxext.h, so must be protected */ +#define GLEXT_64_TYPES_DEFINED +/* Define int32_t, int64_t, and uint64_t types for UST/MSC */ +/* (as used in the GL_EXT_timer_query extension). */ +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +#include +#elif defined(__sun__) || defined(__digital__) +#include +#if defined(__STDC__) +#if defined(__arch64__) || defined(_LP64) +typedef long int int64_t; +typedef unsigned long int uint64_t; +#else +typedef long long int int64_t; +typedef unsigned long long int uint64_t; +#endif /* __arch64__ */ +#endif /* __STDC__ */ +#elif defined( __VMS ) || defined(__sgi) +#include +#elif defined(__SCO__) || defined(__USLC__) +#include +#elif defined(__UNIXOS2__) || defined(__SOL64__) +typedef long int int32_t; +typedef long long int int64_t; +typedef unsigned long long int uint64_t; +#elif defined(_WIN32) && defined(__GNUC__) +#include +#elif defined(_WIN32) +typedef __int32 int32_t; +typedef __int64 int64_t; +typedef unsigned __int64 uint64_t; +#else +/* Fallback if nothing above works */ +#include +#endif +#endif +typedef unsigned int GLenum; +typedef unsigned char GLboolean; +typedef unsigned int GLbitfield; +typedef void GLvoid; +typedef signed char GLbyte; +typedef short GLshort; +typedef int GLint; +typedef int GLclampx; +typedef unsigned char GLubyte; +typedef unsigned short GLushort; +typedef unsigned int GLuint; +typedef int GLsizei; +typedef float GLfloat; +typedef float GLclampf; +typedef double GLdouble; +typedef double GLclampd; +typedef void *GLeglImageOES; +typedef char GLchar; +typedef char GLcharARB; +#ifdef __APPLE__ +typedef void *GLhandleARB; +#else +typedef unsigned int GLhandleARB; +#endif +typedef unsigned short GLhalfARB; +typedef unsigned short GLhalf; +typedef GLint GLfixed; +typedef ptrdiff_t GLintptr; +typedef ptrdiff_t GLsizeiptr; +typedef int64_t GLint64; +typedef uint64_t GLuint64; +typedef ptrdiff_t GLintptrARB; +typedef ptrdiff_t GLsizeiptrARB; +typedef int64_t GLint64EXT; +typedef uint64_t GLuint64EXT; +typedef struct __GLsync *GLsync; +struct _cl_context; +struct _cl_event; +typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +typedef void (APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,void *userParam); +typedef unsigned short GLhalfNV; +typedef GLintptr GLvdpauSurfaceNV; +#define GL_DEPTH_BUFFER_BIT 0x00000100 +#define GL_STENCIL_BUFFER_BIT 0x00000400 +#define GL_COLOR_BUFFER_BIT 0x00004000 +#define GL_FALSE 0 +#define GL_TRUE 1 +#define GL_POINTS 0x0000 +#define GL_LINES 0x0001 +#define GL_LINE_LOOP 0x0002 +#define GL_LINE_STRIP 0x0003 +#define GL_TRIANGLES 0x0004 +#define GL_TRIANGLE_STRIP 0x0005 +#define GL_TRIANGLE_FAN 0x0006 +#define GL_NEVER 0x0200 +#define GL_LESS 0x0201 +#define GL_EQUAL 0x0202 +#define GL_LEQUAL 0x0203 +#define GL_GREATER 0x0204 +#define GL_NOTEQUAL 0x0205 +#define GL_GEQUAL 0x0206 +#define GL_ALWAYS 0x0207 +#define GL_ZERO 0 +#define GL_ONE 1 +#define GL_SRC_COLOR 0x0300 +#define GL_ONE_MINUS_SRC_COLOR 0x0301 +#define GL_SRC_ALPHA 0x0302 +#define GL_ONE_MINUS_SRC_ALPHA 0x0303 +#define GL_DST_ALPHA 0x0304 +#define GL_ONE_MINUS_DST_ALPHA 0x0305 +#define GL_DST_COLOR 0x0306 +#define GL_ONE_MINUS_DST_COLOR 0x0307 +#define GL_SRC_ALPHA_SATURATE 0x0308 +#define GL_NONE 0 +#define GL_FRONT_LEFT 0x0400 +#define GL_FRONT_RIGHT 0x0401 +#define GL_BACK_LEFT 0x0402 +#define GL_BACK_RIGHT 0x0403 +#define GL_FRONT 0x0404 +#define GL_BACK 0x0405 +#define GL_LEFT 0x0406 +#define GL_RIGHT 0x0407 +#define GL_FRONT_AND_BACK 0x0408 +#define GL_NO_ERROR 0 +#define GL_INVALID_ENUM 0x0500 +#define GL_INVALID_VALUE 0x0501 +#define GL_INVALID_OPERATION 0x0502 +#define GL_OUT_OF_MEMORY 0x0505 +#define GL_CW 0x0900 +#define GL_CCW 0x0901 +#define GL_POINT_SIZE 0x0B11 +#define GL_POINT_SIZE_RANGE 0x0B12 +#define GL_POINT_SIZE_GRANULARITY 0x0B13 +#define GL_LINE_SMOOTH 0x0B20 +#define GL_LINE_WIDTH 0x0B21 +#define GL_LINE_WIDTH_RANGE 0x0B22 +#define GL_LINE_WIDTH_GRANULARITY 0x0B23 +#define GL_POLYGON_MODE 0x0B40 +#define GL_POLYGON_SMOOTH 0x0B41 +#define GL_CULL_FACE 0x0B44 +#define GL_CULL_FACE_MODE 0x0B45 +#define GL_FRONT_FACE 0x0B46 +#define GL_DEPTH_RANGE 0x0B70 +#define GL_DEPTH_TEST 0x0B71 +#define GL_DEPTH_WRITEMASK 0x0B72 +#define GL_DEPTH_CLEAR_VALUE 0x0B73 +#define GL_DEPTH_FUNC 0x0B74 +#define GL_STENCIL_TEST 0x0B90 +#define GL_STENCIL_CLEAR_VALUE 0x0B91 +#define GL_STENCIL_FUNC 0x0B92 +#define GL_STENCIL_VALUE_MASK 0x0B93 +#define GL_STENCIL_FAIL 0x0B94 +#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 +#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 +#define GL_STENCIL_REF 0x0B97 +#define GL_STENCIL_WRITEMASK 0x0B98 +#define GL_VIEWPORT 0x0BA2 +#define GL_DITHER 0x0BD0 +#define GL_BLEND_DST 0x0BE0 +#define GL_BLEND_SRC 0x0BE1 +#define GL_BLEND 0x0BE2 +#define GL_LOGIC_OP_MODE 0x0BF0 +#define GL_COLOR_LOGIC_OP 0x0BF2 +#define GL_DRAW_BUFFER 0x0C01 +#define GL_READ_BUFFER 0x0C02 +#define GL_SCISSOR_BOX 0x0C10 +#define GL_SCISSOR_TEST 0x0C11 +#define GL_COLOR_CLEAR_VALUE 0x0C22 +#define GL_COLOR_WRITEMASK 0x0C23 +#define GL_DOUBLEBUFFER 0x0C32 +#define GL_STEREO 0x0C33 +#define GL_LINE_SMOOTH_HINT 0x0C52 +#define GL_POLYGON_SMOOTH_HINT 0x0C53 +#define GL_UNPACK_SWAP_BYTES 0x0CF0 +#define GL_UNPACK_LSB_FIRST 0x0CF1 +#define GL_UNPACK_ROW_LENGTH 0x0CF2 +#define GL_UNPACK_SKIP_ROWS 0x0CF3 +#define GL_UNPACK_SKIP_PIXELS 0x0CF4 +#define GL_UNPACK_ALIGNMENT 0x0CF5 +#define GL_PACK_SWAP_BYTES 0x0D00 +#define GL_PACK_LSB_FIRST 0x0D01 +#define GL_PACK_ROW_LENGTH 0x0D02 +#define GL_PACK_SKIP_ROWS 0x0D03 +#define GL_PACK_SKIP_PIXELS 0x0D04 +#define GL_PACK_ALIGNMENT 0x0D05 +#define GL_MAX_TEXTURE_SIZE 0x0D33 +#define GL_MAX_VIEWPORT_DIMS 0x0D3A +#define GL_SUBPIXEL_BITS 0x0D50 +#define GL_TEXTURE_1D 0x0DE0 +#define GL_TEXTURE_2D 0x0DE1 +#define GL_POLYGON_OFFSET_UNITS 0x2A00 +#define GL_POLYGON_OFFSET_POINT 0x2A01 +#define GL_POLYGON_OFFSET_LINE 0x2A02 +#define GL_POLYGON_OFFSET_FILL 0x8037 +#define GL_POLYGON_OFFSET_FACTOR 0x8038 +#define GL_TEXTURE_BINDING_1D 0x8068 +#define GL_TEXTURE_BINDING_2D 0x8069 +#define GL_TEXTURE_WIDTH 0x1000 +#define GL_TEXTURE_HEIGHT 0x1001 +#define GL_TEXTURE_INTERNAL_FORMAT 0x1003 +#define GL_TEXTURE_BORDER_COLOR 0x1004 +#define GL_TEXTURE_RED_SIZE 0x805C +#define GL_TEXTURE_GREEN_SIZE 0x805D +#define GL_TEXTURE_BLUE_SIZE 0x805E +#define GL_TEXTURE_ALPHA_SIZE 0x805F +#define GL_DONT_CARE 0x1100 +#define GL_FASTEST 0x1101 +#define GL_NICEST 0x1102 +#define GL_BYTE 0x1400 +#define GL_UNSIGNED_BYTE 0x1401 +#define GL_SHORT 0x1402 +#define GL_UNSIGNED_SHORT 0x1403 +#define GL_INT 0x1404 +#define GL_UNSIGNED_INT 0x1405 +#define GL_FLOAT 0x1406 +#define GL_DOUBLE 0x140A +#define GL_CLEAR 0x1500 +#define GL_AND 0x1501 +#define GL_AND_REVERSE 0x1502 +#define GL_COPY 0x1503 +#define GL_AND_INVERTED 0x1504 +#define GL_NOOP 0x1505 +#define GL_XOR 0x1506 +#define GL_OR 0x1507 +#define GL_NOR 0x1508 +#define GL_EQUIV 0x1509 +#define GL_INVERT 0x150A +#define GL_OR_REVERSE 0x150B +#define GL_COPY_INVERTED 0x150C +#define GL_OR_INVERTED 0x150D +#define GL_NAND 0x150E +#define GL_SET 0x150F +#define GL_TEXTURE 0x1702 +#define GL_COLOR 0x1800 +#define GL_DEPTH 0x1801 +#define GL_STENCIL 0x1802 +#define GL_STENCIL_INDEX 0x1901 +#define GL_DEPTH_COMPONENT 0x1902 +#define GL_RED 0x1903 +#define GL_GREEN 0x1904 +#define GL_BLUE 0x1905 +#define GL_ALPHA 0x1906 +#define GL_RGB 0x1907 +#define GL_RGBA 0x1908 +#define GL_POINT 0x1B00 +#define GL_LINE 0x1B01 +#define GL_FILL 0x1B02 +#define GL_KEEP 0x1E00 +#define GL_REPLACE 0x1E01 +#define GL_INCR 0x1E02 +#define GL_DECR 0x1E03 +#define GL_VENDOR 0x1F00 +#define GL_RENDERER 0x1F01 +#define GL_VERSION 0x1F02 +#define GL_EXTENSIONS 0x1F03 +#define GL_NEAREST 0x2600 +#define GL_LINEAR 0x2601 +#define GL_NEAREST_MIPMAP_NEAREST 0x2700 +#define GL_LINEAR_MIPMAP_NEAREST 0x2701 +#define GL_NEAREST_MIPMAP_LINEAR 0x2702 +#define GL_LINEAR_MIPMAP_LINEAR 0x2703 +#define GL_TEXTURE_MAG_FILTER 0x2800 +#define GL_TEXTURE_MIN_FILTER 0x2801 +#define GL_TEXTURE_WRAP_S 0x2802 +#define GL_TEXTURE_WRAP_T 0x2803 +#define GL_PROXY_TEXTURE_1D 0x8063 +#define GL_PROXY_TEXTURE_2D 0x8064 +#define GL_REPEAT 0x2901 +#define GL_R3_G3_B2 0x2A10 +#define GL_RGB4 0x804F +#define GL_RGB5 0x8050 +#define GL_RGB8 0x8051 +#define GL_RGB10 0x8052 +#define GL_RGB12 0x8053 +#define GL_RGB16 0x8054 +#define GL_RGBA2 0x8055 +#define GL_RGBA4 0x8056 +#define GL_RGB5_A1 0x8057 +#define GL_RGBA8 0x8058 +#define GL_RGB10_A2 0x8059 +#define GL_RGBA12 0x805A +#define GL_RGBA16 0x805B +#define GL_UNSIGNED_BYTE_3_3_2 0x8032 +#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 +#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 +#define GL_UNSIGNED_INT_8_8_8_8 0x8035 +#define GL_UNSIGNED_INT_10_10_10_2 0x8036 +#define GL_TEXTURE_BINDING_3D 0x806A +#define GL_PACK_SKIP_IMAGES 0x806B +#define GL_PACK_IMAGE_HEIGHT 0x806C +#define GL_UNPACK_SKIP_IMAGES 0x806D +#define GL_UNPACK_IMAGE_HEIGHT 0x806E +#define GL_TEXTURE_3D 0x806F +#define GL_PROXY_TEXTURE_3D 0x8070 +#define GL_TEXTURE_DEPTH 0x8071 +#define GL_TEXTURE_WRAP_R 0x8072 +#define GL_MAX_3D_TEXTURE_SIZE 0x8073 +#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 +#define GL_UNSIGNED_SHORT_5_6_5 0x8363 +#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 +#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 +#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 +#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 +#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 +#define GL_BGR 0x80E0 +#define GL_BGRA 0x80E1 +#define GL_MAX_ELEMENTS_VERTICES 0x80E8 +#define GL_MAX_ELEMENTS_INDICES 0x80E9 +#define GL_CLAMP_TO_EDGE 0x812F +#define GL_TEXTURE_MIN_LOD 0x813A +#define GL_TEXTURE_MAX_LOD 0x813B +#define GL_TEXTURE_BASE_LEVEL 0x813C +#define GL_TEXTURE_MAX_LEVEL 0x813D +#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 +#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 +#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 +#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 +#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E +#define GL_TEXTURE0 0x84C0 +#define GL_TEXTURE1 0x84C1 +#define GL_TEXTURE2 0x84C2 +#define GL_TEXTURE3 0x84C3 +#define GL_TEXTURE4 0x84C4 +#define GL_TEXTURE5 0x84C5 +#define GL_TEXTURE6 0x84C6 +#define GL_TEXTURE7 0x84C7 +#define GL_TEXTURE8 0x84C8 +#define GL_TEXTURE9 0x84C9 +#define GL_TEXTURE10 0x84CA +#define GL_TEXTURE11 0x84CB +#define GL_TEXTURE12 0x84CC +#define GL_TEXTURE13 0x84CD +#define GL_TEXTURE14 0x84CE +#define GL_TEXTURE15 0x84CF +#define GL_TEXTURE16 0x84D0 +#define GL_TEXTURE17 0x84D1 +#define GL_TEXTURE18 0x84D2 +#define GL_TEXTURE19 0x84D3 +#define GL_TEXTURE20 0x84D4 +#define GL_TEXTURE21 0x84D5 +#define GL_TEXTURE22 0x84D6 +#define GL_TEXTURE23 0x84D7 +#define GL_TEXTURE24 0x84D8 +#define GL_TEXTURE25 0x84D9 +#define GL_TEXTURE26 0x84DA +#define GL_TEXTURE27 0x84DB +#define GL_TEXTURE28 0x84DC +#define GL_TEXTURE29 0x84DD +#define GL_TEXTURE30 0x84DE +#define GL_TEXTURE31 0x84DF +#define GL_ACTIVE_TEXTURE 0x84E0 +#define GL_MULTISAMPLE 0x809D +#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE 0x809F +#define GL_SAMPLE_COVERAGE 0x80A0 +#define GL_SAMPLE_BUFFERS 0x80A8 +#define GL_SAMPLES 0x80A9 +#define GL_SAMPLE_COVERAGE_VALUE 0x80AA +#define GL_SAMPLE_COVERAGE_INVERT 0x80AB +#define GL_TEXTURE_CUBE_MAP 0x8513 +#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A +#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C +#define GL_COMPRESSED_RGB 0x84ED +#define GL_COMPRESSED_RGBA 0x84EE +#define GL_TEXTURE_COMPRESSION_HINT 0x84EF +#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 +#define GL_TEXTURE_COMPRESSED 0x86A1 +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 +#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 +#define GL_CLAMP_TO_BORDER 0x812D +#define GL_BLEND_DST_RGB 0x80C8 +#define GL_BLEND_SRC_RGB 0x80C9 +#define GL_BLEND_DST_ALPHA 0x80CA +#define GL_BLEND_SRC_ALPHA 0x80CB +#define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 +#define GL_DEPTH_COMPONENT16 0x81A5 +#define GL_DEPTH_COMPONENT24 0x81A6 +#define GL_DEPTH_COMPONENT32 0x81A7 +#define GL_MIRRORED_REPEAT 0x8370 +#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD +#define GL_TEXTURE_LOD_BIAS 0x8501 +#define GL_INCR_WRAP 0x8507 +#define GL_DECR_WRAP 0x8508 +#define GL_TEXTURE_DEPTH_SIZE 0x884A +#define GL_TEXTURE_COMPARE_MODE 0x884C +#define GL_TEXTURE_COMPARE_FUNC 0x884D +#define GL_FUNC_ADD 0x8006 +#define GL_FUNC_SUBTRACT 0x800A +#define GL_FUNC_REVERSE_SUBTRACT 0x800B +#define GL_MIN 0x8007 +#define GL_MAX 0x8008 +#define GL_CONSTANT_COLOR 0x8001 +#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 +#define GL_CONSTANT_ALPHA 0x8003 +#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 +#define GL_BUFFER_SIZE 0x8764 +#define GL_BUFFER_USAGE 0x8765 +#define GL_QUERY_COUNTER_BITS 0x8864 +#define GL_CURRENT_QUERY 0x8865 +#define GL_QUERY_RESULT 0x8866 +#define GL_QUERY_RESULT_AVAILABLE 0x8867 +#define GL_ARRAY_BUFFER 0x8892 +#define GL_ELEMENT_ARRAY_BUFFER 0x8893 +#define GL_ARRAY_BUFFER_BINDING 0x8894 +#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 +#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F +#define GL_READ_ONLY 0x88B8 +#define GL_WRITE_ONLY 0x88B9 +#define GL_READ_WRITE 0x88BA +#define GL_BUFFER_ACCESS 0x88BB +#define GL_BUFFER_MAPPED 0x88BC +#define GL_BUFFER_MAP_POINTER 0x88BD +#define GL_STREAM_DRAW 0x88E0 +#define GL_STREAM_READ 0x88E1 +#define GL_STREAM_COPY 0x88E2 +#define GL_STATIC_DRAW 0x88E4 +#define GL_STATIC_READ 0x88E5 +#define GL_STATIC_COPY 0x88E6 +#define GL_DYNAMIC_DRAW 0x88E8 +#define GL_DYNAMIC_READ 0x88E9 +#define GL_DYNAMIC_COPY 0x88EA +#define GL_SAMPLES_PASSED 0x8914 +#define GL_SRC1_ALPHA 0x8589 +#define GL_BLEND_EQUATION_RGB 0x8009 +#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 +#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 +#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 +#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 +#define GL_CURRENT_VERTEX_ATTRIB 0x8626 +#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 +#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 +#define GL_STENCIL_BACK_FUNC 0x8800 +#define GL_STENCIL_BACK_FAIL 0x8801 +#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 +#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 +#define GL_MAX_DRAW_BUFFERS 0x8824 +#define GL_DRAW_BUFFER0 0x8825 +#define GL_DRAW_BUFFER1 0x8826 +#define GL_DRAW_BUFFER2 0x8827 +#define GL_DRAW_BUFFER3 0x8828 +#define GL_DRAW_BUFFER4 0x8829 +#define GL_DRAW_BUFFER5 0x882A +#define GL_DRAW_BUFFER6 0x882B +#define GL_DRAW_BUFFER7 0x882C +#define GL_DRAW_BUFFER8 0x882D +#define GL_DRAW_BUFFER9 0x882E +#define GL_DRAW_BUFFER10 0x882F +#define GL_DRAW_BUFFER11 0x8830 +#define GL_DRAW_BUFFER12 0x8831 +#define GL_DRAW_BUFFER13 0x8832 +#define GL_DRAW_BUFFER14 0x8833 +#define GL_DRAW_BUFFER15 0x8834 +#define GL_BLEND_EQUATION_ALPHA 0x883D +#define GL_MAX_VERTEX_ATTRIBS 0x8869 +#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A +#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 +#define GL_FRAGMENT_SHADER 0x8B30 +#define GL_VERTEX_SHADER 0x8B31 +#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 +#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A +#define GL_MAX_VARYING_FLOATS 0x8B4B +#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C +#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D +#define GL_SHADER_TYPE 0x8B4F +#define GL_FLOAT_VEC2 0x8B50 +#define GL_FLOAT_VEC3 0x8B51 +#define GL_FLOAT_VEC4 0x8B52 +#define GL_INT_VEC2 0x8B53 +#define GL_INT_VEC3 0x8B54 +#define GL_INT_VEC4 0x8B55 +#define GL_BOOL 0x8B56 +#define GL_BOOL_VEC2 0x8B57 +#define GL_BOOL_VEC3 0x8B58 +#define GL_BOOL_VEC4 0x8B59 +#define GL_FLOAT_MAT2 0x8B5A +#define GL_FLOAT_MAT3 0x8B5B +#define GL_FLOAT_MAT4 0x8B5C +#define GL_SAMPLER_1D 0x8B5D +#define GL_SAMPLER_2D 0x8B5E +#define GL_SAMPLER_3D 0x8B5F +#define GL_SAMPLER_CUBE 0x8B60 +#define GL_SAMPLER_1D_SHADOW 0x8B61 +#define GL_SAMPLER_2D_SHADOW 0x8B62 +#define GL_DELETE_STATUS 0x8B80 +#define GL_COMPILE_STATUS 0x8B81 +#define GL_LINK_STATUS 0x8B82 +#define GL_VALIDATE_STATUS 0x8B83 +#define GL_INFO_LOG_LENGTH 0x8B84 +#define GL_ATTACHED_SHADERS 0x8B85 +#define GL_ACTIVE_UNIFORMS 0x8B86 +#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 +#define GL_SHADER_SOURCE_LENGTH 0x8B88 +#define GL_ACTIVE_ATTRIBUTES 0x8B89 +#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B +#define GL_SHADING_LANGUAGE_VERSION 0x8B8C +#define GL_CURRENT_PROGRAM 0x8B8D +#define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 +#define GL_LOWER_LEFT 0x8CA1 +#define GL_UPPER_LEFT 0x8CA2 +#define GL_STENCIL_BACK_REF 0x8CA3 +#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 +#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 +#define GL_PIXEL_PACK_BUFFER 0x88EB +#define GL_PIXEL_UNPACK_BUFFER 0x88EC +#define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED +#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF +#define GL_FLOAT_MAT2x3 0x8B65 +#define GL_FLOAT_MAT2x4 0x8B66 +#define GL_FLOAT_MAT3x2 0x8B67 +#define GL_FLOAT_MAT3x4 0x8B68 +#define GL_FLOAT_MAT4x2 0x8B69 +#define GL_FLOAT_MAT4x3 0x8B6A +#define GL_SRGB 0x8C40 +#define GL_SRGB8 0x8C41 +#define GL_SRGB_ALPHA 0x8C42 +#define GL_SRGB8_ALPHA8 0x8C43 +#define GL_COMPRESSED_SRGB 0x8C48 +#define GL_COMPRESSED_SRGB_ALPHA 0x8C49 +#define GL_COMPARE_REF_TO_TEXTURE 0x884E +#define GL_CLIP_DISTANCE0 0x3000 +#define GL_CLIP_DISTANCE1 0x3001 +#define GL_CLIP_DISTANCE2 0x3002 +#define GL_CLIP_DISTANCE3 0x3003 +#define GL_CLIP_DISTANCE4 0x3004 +#define GL_CLIP_DISTANCE5 0x3005 +#define GL_CLIP_DISTANCE6 0x3006 +#define GL_CLIP_DISTANCE7 0x3007 +#define GL_MAX_CLIP_DISTANCES 0x0D32 +#define GL_MAJOR_VERSION 0x821B +#define GL_MINOR_VERSION 0x821C +#define GL_NUM_EXTENSIONS 0x821D +#define GL_CONTEXT_FLAGS 0x821E +#define GL_COMPRESSED_RED 0x8225 +#define GL_COMPRESSED_RG 0x8226 +#define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x00000001 +#define GL_RGBA32F 0x8814 +#define GL_RGB32F 0x8815 +#define GL_RGBA16F 0x881A +#define GL_RGB16F 0x881B +#define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD +#define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF +#define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904 +#define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905 +#define GL_CLAMP_READ_COLOR 0x891C +#define GL_FIXED_ONLY 0x891D +#define GL_MAX_VARYING_COMPONENTS 0x8B4B +#define GL_TEXTURE_1D_ARRAY 0x8C18 +#define GL_PROXY_TEXTURE_1D_ARRAY 0x8C19 +#define GL_TEXTURE_2D_ARRAY 0x8C1A +#define GL_PROXY_TEXTURE_2D_ARRAY 0x8C1B +#define GL_TEXTURE_BINDING_1D_ARRAY 0x8C1C +#define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D +#define GL_R11F_G11F_B10F 0x8C3A +#define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B +#define GL_RGB9_E5 0x8C3D +#define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E +#define GL_TEXTURE_SHARED_SIZE 0x8C3F +#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76 +#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80 +#define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83 +#define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84 +#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85 +#define GL_PRIMITIVES_GENERATED 0x8C87 +#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88 +#define GL_RASTERIZER_DISCARD 0x8C89 +#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B +#define GL_INTERLEAVED_ATTRIBS 0x8C8C +#define GL_SEPARATE_ATTRIBS 0x8C8D +#define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E +#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F +#define GL_RGBA32UI 0x8D70 +#define GL_RGB32UI 0x8D71 +#define GL_RGBA16UI 0x8D76 +#define GL_RGB16UI 0x8D77 +#define GL_RGBA8UI 0x8D7C +#define GL_RGB8UI 0x8D7D +#define GL_RGBA32I 0x8D82 +#define GL_RGB32I 0x8D83 +#define GL_RGBA16I 0x8D88 +#define GL_RGB16I 0x8D89 +#define GL_RGBA8I 0x8D8E +#define GL_RGB8I 0x8D8F +#define GL_RED_INTEGER 0x8D94 +#define GL_GREEN_INTEGER 0x8D95 +#define GL_BLUE_INTEGER 0x8D96 +#define GL_RGB_INTEGER 0x8D98 +#define GL_RGBA_INTEGER 0x8D99 +#define GL_BGR_INTEGER 0x8D9A +#define GL_BGRA_INTEGER 0x8D9B +#define GL_SAMPLER_1D_ARRAY 0x8DC0 +#define GL_SAMPLER_2D_ARRAY 0x8DC1 +#define GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3 +#define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4 +#define GL_SAMPLER_CUBE_SHADOW 0x8DC5 +#define GL_UNSIGNED_INT_VEC2 0x8DC6 +#define GL_UNSIGNED_INT_VEC3 0x8DC7 +#define GL_UNSIGNED_INT_VEC4 0x8DC8 +#define GL_INT_SAMPLER_1D 0x8DC9 +#define GL_INT_SAMPLER_2D 0x8DCA +#define GL_INT_SAMPLER_3D 0x8DCB +#define GL_INT_SAMPLER_CUBE 0x8DCC +#define GL_INT_SAMPLER_1D_ARRAY 0x8DCE +#define GL_INT_SAMPLER_2D_ARRAY 0x8DCF +#define GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1 +#define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2 +#define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3 +#define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4 +#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6 +#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7 +#define GL_QUERY_WAIT 0x8E13 +#define GL_QUERY_NO_WAIT 0x8E14 +#define GL_QUERY_BY_REGION_WAIT 0x8E15 +#define GL_QUERY_BY_REGION_NO_WAIT 0x8E16 +#define GL_BUFFER_ACCESS_FLAGS 0x911F +#define GL_BUFFER_MAP_LENGTH 0x9120 +#define GL_BUFFER_MAP_OFFSET 0x9121 +#define GL_DEPTH_COMPONENT32F 0x8CAC +#define GL_DEPTH32F_STENCIL8 0x8CAD +#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD +#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 +#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210 +#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211 +#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212 +#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213 +#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214 +#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215 +#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216 +#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217 +#define GL_FRAMEBUFFER_DEFAULT 0x8218 +#define GL_FRAMEBUFFER_UNDEFINED 0x8219 +#define GL_DEPTH_STENCIL_ATTACHMENT 0x821A +#define GL_MAX_RENDERBUFFER_SIZE 0x84E8 +#define GL_DEPTH_STENCIL 0x84F9 +#define GL_UNSIGNED_INT_24_8 0x84FA +#define GL_DEPTH24_STENCIL8 0x88F0 +#define GL_TEXTURE_STENCIL_SIZE 0x88F1 +#define GL_TEXTURE_RED_TYPE 0x8C10 +#define GL_TEXTURE_GREEN_TYPE 0x8C11 +#define GL_TEXTURE_BLUE_TYPE 0x8C12 +#define GL_TEXTURE_ALPHA_TYPE 0x8C13 +#define GL_TEXTURE_DEPTH_TYPE 0x8C16 +#define GL_UNSIGNED_NORMALIZED 0x8C17 +#define GL_FRAMEBUFFER_BINDING 0x8CA6 +#define GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6 +#define GL_RENDERBUFFER_BINDING 0x8CA7 +#define GL_READ_FRAMEBUFFER 0x8CA8 +#define GL_DRAW_FRAMEBUFFER 0x8CA9 +#define GL_READ_FRAMEBUFFER_BINDING 0x8CAA +#define GL_RENDERBUFFER_SAMPLES 0x8CAB +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 +#define GL_FRAMEBUFFER_COMPLETE 0x8CD5 +#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 +#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 +#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB +#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC +#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD +#define GL_MAX_COLOR_ATTACHMENTS 0x8CDF +#define GL_COLOR_ATTACHMENT0 0x8CE0 +#define GL_COLOR_ATTACHMENT1 0x8CE1 +#define GL_COLOR_ATTACHMENT2 0x8CE2 +#define GL_COLOR_ATTACHMENT3 0x8CE3 +#define GL_COLOR_ATTACHMENT4 0x8CE4 +#define GL_COLOR_ATTACHMENT5 0x8CE5 +#define GL_COLOR_ATTACHMENT6 0x8CE6 +#define GL_COLOR_ATTACHMENT7 0x8CE7 +#define GL_COLOR_ATTACHMENT8 0x8CE8 +#define GL_COLOR_ATTACHMENT9 0x8CE9 +#define GL_COLOR_ATTACHMENT10 0x8CEA +#define GL_COLOR_ATTACHMENT11 0x8CEB +#define GL_COLOR_ATTACHMENT12 0x8CEC +#define GL_COLOR_ATTACHMENT13 0x8CED +#define GL_COLOR_ATTACHMENT14 0x8CEE +#define GL_COLOR_ATTACHMENT15 0x8CEF +#define GL_COLOR_ATTACHMENT16 0x8CF0 +#define GL_COLOR_ATTACHMENT17 0x8CF1 +#define GL_COLOR_ATTACHMENT18 0x8CF2 +#define GL_COLOR_ATTACHMENT19 0x8CF3 +#define GL_COLOR_ATTACHMENT20 0x8CF4 +#define GL_COLOR_ATTACHMENT21 0x8CF5 +#define GL_COLOR_ATTACHMENT22 0x8CF6 +#define GL_COLOR_ATTACHMENT23 0x8CF7 +#define GL_COLOR_ATTACHMENT24 0x8CF8 +#define GL_COLOR_ATTACHMENT25 0x8CF9 +#define GL_COLOR_ATTACHMENT26 0x8CFA +#define GL_COLOR_ATTACHMENT27 0x8CFB +#define GL_COLOR_ATTACHMENT28 0x8CFC +#define GL_COLOR_ATTACHMENT29 0x8CFD +#define GL_COLOR_ATTACHMENT30 0x8CFE +#define GL_COLOR_ATTACHMENT31 0x8CFF +#define GL_DEPTH_ATTACHMENT 0x8D00 +#define GL_STENCIL_ATTACHMENT 0x8D20 +#define GL_FRAMEBUFFER 0x8D40 +#define GL_RENDERBUFFER 0x8D41 +#define GL_RENDERBUFFER_WIDTH 0x8D42 +#define GL_RENDERBUFFER_HEIGHT 0x8D43 +#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 +#define GL_STENCIL_INDEX1 0x8D46 +#define GL_STENCIL_INDEX4 0x8D47 +#define GL_STENCIL_INDEX8 0x8D48 +#define GL_STENCIL_INDEX16 0x8D49 +#define GL_RENDERBUFFER_RED_SIZE 0x8D50 +#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 +#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 +#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 +#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 +#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56 +#define GL_MAX_SAMPLES 0x8D57 +#define GL_INDEX 0x8222 +#define GL_FRAMEBUFFER_SRGB 0x8DB9 +#define GL_HALF_FLOAT 0x140B +#define GL_MAP_READ_BIT 0x0001 +#define GL_MAP_WRITE_BIT 0x0002 +#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004 +#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008 +#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010 +#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020 +#define GL_COMPRESSED_RED_RGTC1 0x8DBB +#define GL_COMPRESSED_SIGNED_RED_RGTC1 0x8DBC +#define GL_COMPRESSED_RG_RGTC2 0x8DBD +#define GL_COMPRESSED_SIGNED_RG_RGTC2 0x8DBE +#define GL_RG 0x8227 +#define GL_RG_INTEGER 0x8228 +#define GL_R8 0x8229 +#define GL_R16 0x822A +#define GL_RG8 0x822B +#define GL_RG16 0x822C +#define GL_R16F 0x822D +#define GL_R32F 0x822E +#define GL_RG16F 0x822F +#define GL_RG32F 0x8230 +#define GL_R8I 0x8231 +#define GL_R8UI 0x8232 +#define GL_R16I 0x8233 +#define GL_R16UI 0x8234 +#define GL_R32I 0x8235 +#define GL_R32UI 0x8236 +#define GL_RG8I 0x8237 +#define GL_RG8UI 0x8238 +#define GL_RG16I 0x8239 +#define GL_RG16UI 0x823A +#define GL_RG32I 0x823B +#define GL_RG32UI 0x823C +#define GL_VERTEX_ARRAY_BINDING 0x85B5 +#define GL_SAMPLER_2D_RECT 0x8B63 +#define GL_SAMPLER_2D_RECT_SHADOW 0x8B64 +#define GL_SAMPLER_BUFFER 0x8DC2 +#define GL_INT_SAMPLER_2D_RECT 0x8DCD +#define GL_INT_SAMPLER_BUFFER 0x8DD0 +#define GL_UNSIGNED_INT_SAMPLER_2D_RECT 0x8DD5 +#define GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8 +#define GL_TEXTURE_BUFFER 0x8C2A +#define GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B +#define GL_TEXTURE_BINDING_BUFFER 0x8C2C +#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D +#define GL_TEXTURE_RECTANGLE 0x84F5 +#define GL_TEXTURE_BINDING_RECTANGLE 0x84F6 +#define GL_PROXY_TEXTURE_RECTANGLE 0x84F7 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8 +#define GL_R8_SNORM 0x8F94 +#define GL_RG8_SNORM 0x8F95 +#define GL_RGB8_SNORM 0x8F96 +#define GL_RGBA8_SNORM 0x8F97 +#define GL_R16_SNORM 0x8F98 +#define GL_RG16_SNORM 0x8F99 +#define GL_RGB16_SNORM 0x8F9A +#define GL_RGBA16_SNORM 0x8F9B +#define GL_SIGNED_NORMALIZED 0x8F9C +#define GL_PRIMITIVE_RESTART 0x8F9D +#define GL_PRIMITIVE_RESTART_INDEX 0x8F9E +#define GL_COPY_READ_BUFFER 0x8F36 +#define GL_COPY_WRITE_BUFFER 0x8F37 +#define GL_UNIFORM_BUFFER 0x8A11 +#define GL_UNIFORM_BUFFER_BINDING 0x8A28 +#define GL_UNIFORM_BUFFER_START 0x8A29 +#define GL_UNIFORM_BUFFER_SIZE 0x8A2A +#define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B +#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C +#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D +#define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E +#define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F +#define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30 +#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31 +#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32 +#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33 +#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34 +#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35 +#define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36 +#define GL_UNIFORM_TYPE 0x8A37 +#define GL_UNIFORM_SIZE 0x8A38 +#define GL_UNIFORM_NAME_LENGTH 0x8A39 +#define GL_UNIFORM_BLOCK_INDEX 0x8A3A +#define GL_UNIFORM_OFFSET 0x8A3B +#define GL_UNIFORM_ARRAY_STRIDE 0x8A3C +#define GL_UNIFORM_MATRIX_STRIDE 0x8A3D +#define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E +#define GL_UNIFORM_BLOCK_BINDING 0x8A3F +#define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40 +#define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41 +#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42 +#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46 +#define GL_INVALID_INDEX 0xFFFFFFFF +#define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001 +#define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002 +#define GL_LINES_ADJACENCY 0x000A +#define GL_LINE_STRIP_ADJACENCY 0x000B +#define GL_TRIANGLES_ADJACENCY 0x000C +#define GL_TRIANGLE_STRIP_ADJACENCY 0x000D +#define GL_PROGRAM_POINT_SIZE 0x8642 +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8 +#define GL_GEOMETRY_SHADER 0x8DD9 +#define GL_GEOMETRY_VERTICES_OUT 0x8916 +#define GL_GEOMETRY_INPUT_TYPE 0x8917 +#define GL_GEOMETRY_OUTPUT_TYPE 0x8918 +#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF +#define GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0 +#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1 +#define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122 +#define GL_MAX_GEOMETRY_INPUT_COMPONENTS 0x9123 +#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124 +#define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125 +#define GL_CONTEXT_PROFILE_MASK 0x9126 +#define GL_DEPTH_CLAMP 0x864F +#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8E4C +#define GL_FIRST_VERTEX_CONVENTION 0x8E4D +#define GL_LAST_VERTEX_CONVENTION 0x8E4E +#define GL_PROVOKING_VERTEX 0x8E4F +#define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F +#define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111 +#define GL_OBJECT_TYPE 0x9112 +#define GL_SYNC_CONDITION 0x9113 +#define GL_SYNC_STATUS 0x9114 +#define GL_SYNC_FLAGS 0x9115 +#define GL_SYNC_FENCE 0x9116 +#define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117 +#define GL_UNSIGNALED 0x9118 +#define GL_SIGNALED 0x9119 +#define GL_ALREADY_SIGNALED 0x911A +#define GL_TIMEOUT_EXPIRED 0x911B +#define GL_CONDITION_SATISFIED 0x911C +#define GL_WAIT_FAILED 0x911D +#define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFF +#define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001 +#define GL_SAMPLE_POSITION 0x8E50 +#define GL_SAMPLE_MASK 0x8E51 +#define GL_SAMPLE_MASK_VALUE 0x8E52 +#define GL_MAX_SAMPLE_MASK_WORDS 0x8E59 +#define GL_TEXTURE_2D_MULTISAMPLE 0x9100 +#define GL_PROXY_TEXTURE_2D_MULTISAMPLE 0x9101 +#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102 +#define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103 +#define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104 +#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105 +#define GL_TEXTURE_SAMPLES 0x9106 +#define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107 +#define GL_SAMPLER_2D_MULTISAMPLE 0x9108 +#define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109 +#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A +#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B +#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C +#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D +#define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E +#define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F +#define GL_MAX_INTEGER_SAMPLES 0x9110 +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE +#define GL_SRC1_COLOR 0x88F9 +#define GL_ONE_MINUS_SRC1_COLOR 0x88FA +#define GL_ONE_MINUS_SRC1_ALPHA 0x88FB +#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS 0x88FC +#define GL_ANY_SAMPLES_PASSED 0x8C2F +#define GL_SAMPLER_BINDING 0x8919 +#define GL_RGB10_A2UI 0x906F +#define GL_TEXTURE_SWIZZLE_R 0x8E42 +#define GL_TEXTURE_SWIZZLE_G 0x8E43 +#define GL_TEXTURE_SWIZZLE_B 0x8E44 +#define GL_TEXTURE_SWIZZLE_A 0x8E45 +#define GL_TEXTURE_SWIZZLE_RGBA 0x8E46 +#define GL_TIME_ELAPSED 0x88BF +#define GL_TIMESTAMP 0x8E28 +#define GL_INT_2_10_10_10_REV 0x8D9F +#ifndef GL_VERSION_1_0 +#define GL_VERSION_1_0 1 +GLAPI int GLAD_GL_VERSION_1_0; +typedef void (APIENTRYP PFNGLCULLFACEPROC)(GLenum mode); +GLAPI PFNGLCULLFACEPROC glad_glCullFace; +#define glCullFace glad_glCullFace +typedef void (APIENTRYP PFNGLFRONTFACEPROC)(GLenum mode); +GLAPI PFNGLFRONTFACEPROC glad_glFrontFace; +#define glFrontFace glad_glFrontFace +typedef void (APIENTRYP PFNGLHINTPROC)(GLenum target, GLenum mode); +GLAPI PFNGLHINTPROC glad_glHint; +#define glHint glad_glHint +typedef void (APIENTRYP PFNGLLINEWIDTHPROC)(GLfloat width); +GLAPI PFNGLLINEWIDTHPROC glad_glLineWidth; +#define glLineWidth glad_glLineWidth +typedef void (APIENTRYP PFNGLPOINTSIZEPROC)(GLfloat size); +GLAPI PFNGLPOINTSIZEPROC glad_glPointSize; +#define glPointSize glad_glPointSize +typedef void (APIENTRYP PFNGLPOLYGONMODEPROC)(GLenum face, GLenum mode); +GLAPI PFNGLPOLYGONMODEPROC glad_glPolygonMode; +#define glPolygonMode glad_glPolygonMode +typedef void (APIENTRYP PFNGLSCISSORPROC)(GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI PFNGLSCISSORPROC glad_glScissor; +#define glScissor glad_glScissor +typedef void (APIENTRYP PFNGLTEXPARAMETERFPROC)(GLenum target, GLenum pname, GLfloat param); +GLAPI PFNGLTEXPARAMETERFPROC glad_glTexParameterf; +#define glTexParameterf glad_glTexParameterf +typedef void (APIENTRYP PFNGLTEXPARAMETERFVPROC)(GLenum target, GLenum pname, const GLfloat* params); +GLAPI PFNGLTEXPARAMETERFVPROC glad_glTexParameterfv; +#define glTexParameterfv glad_glTexParameterfv +typedef void (APIENTRYP PFNGLTEXPARAMETERIPROC)(GLenum target, GLenum pname, GLint param); +GLAPI PFNGLTEXPARAMETERIPROC glad_glTexParameteri; +#define glTexParameteri glad_glTexParameteri +typedef void (APIENTRYP PFNGLTEXPARAMETERIVPROC)(GLenum target, GLenum pname, const GLint* params); +GLAPI PFNGLTEXPARAMETERIVPROC glad_glTexParameteriv; +#define glTexParameteriv glad_glTexParameteriv +typedef void (APIENTRYP PFNGLTEXIMAGE1DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void* pixels); +GLAPI PFNGLTEXIMAGE1DPROC glad_glTexImage1D; +#define glTexImage1D glad_glTexImage1D +typedef void (APIENTRYP PFNGLTEXIMAGE2DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void* pixels); +GLAPI PFNGLTEXIMAGE2DPROC glad_glTexImage2D; +#define glTexImage2D glad_glTexImage2D +typedef void (APIENTRYP PFNGLDRAWBUFFERPROC)(GLenum buf); +GLAPI PFNGLDRAWBUFFERPROC glad_glDrawBuffer; +#define glDrawBuffer glad_glDrawBuffer +typedef void (APIENTRYP PFNGLCLEARPROC)(GLbitfield mask); +GLAPI PFNGLCLEARPROC glad_glClear; +#define glClear glad_glClear +typedef void (APIENTRYP PFNGLCLEARCOLORPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +GLAPI PFNGLCLEARCOLORPROC glad_glClearColor; +#define glClearColor glad_glClearColor +typedef void (APIENTRYP PFNGLCLEARSTENCILPROC)(GLint s); +GLAPI PFNGLCLEARSTENCILPROC glad_glClearStencil; +#define glClearStencil glad_glClearStencil +typedef void (APIENTRYP PFNGLCLEARDEPTHPROC)(GLdouble depth); +GLAPI PFNGLCLEARDEPTHPROC glad_glClearDepth; +#define glClearDepth glad_glClearDepth +typedef void (APIENTRYP PFNGLSTENCILMASKPROC)(GLuint mask); +GLAPI PFNGLSTENCILMASKPROC glad_glStencilMask; +#define glStencilMask glad_glStencilMask +typedef void (APIENTRYP PFNGLCOLORMASKPROC)(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); +GLAPI PFNGLCOLORMASKPROC glad_glColorMask; +#define glColorMask glad_glColorMask +typedef void (APIENTRYP PFNGLDEPTHMASKPROC)(GLboolean flag); +GLAPI PFNGLDEPTHMASKPROC glad_glDepthMask; +#define glDepthMask glad_glDepthMask +typedef void (APIENTRYP PFNGLDISABLEPROC)(GLenum cap); +GLAPI PFNGLDISABLEPROC glad_glDisable; +#define glDisable glad_glDisable +typedef void (APIENTRYP PFNGLENABLEPROC)(GLenum cap); +GLAPI PFNGLENABLEPROC glad_glEnable; +#define glEnable glad_glEnable +typedef void (APIENTRYP PFNGLFINISHPROC)(); +GLAPI PFNGLFINISHPROC glad_glFinish; +#define glFinish glad_glFinish +typedef void (APIENTRYP PFNGLFLUSHPROC)(); +GLAPI PFNGLFLUSHPROC glad_glFlush; +#define glFlush glad_glFlush +typedef void (APIENTRYP PFNGLBLENDFUNCPROC)(GLenum sfactor, GLenum dfactor); +GLAPI PFNGLBLENDFUNCPROC glad_glBlendFunc; +#define glBlendFunc glad_glBlendFunc +typedef void (APIENTRYP PFNGLLOGICOPPROC)(GLenum opcode); +GLAPI PFNGLLOGICOPPROC glad_glLogicOp; +#define glLogicOp glad_glLogicOp +typedef void (APIENTRYP PFNGLSTENCILFUNCPROC)(GLenum func, GLint ref, GLuint mask); +GLAPI PFNGLSTENCILFUNCPROC glad_glStencilFunc; +#define glStencilFunc glad_glStencilFunc +typedef void (APIENTRYP PFNGLSTENCILOPPROC)(GLenum fail, GLenum zfail, GLenum zpass); +GLAPI PFNGLSTENCILOPPROC glad_glStencilOp; +#define glStencilOp glad_glStencilOp +typedef void (APIENTRYP PFNGLDEPTHFUNCPROC)(GLenum func); +GLAPI PFNGLDEPTHFUNCPROC glad_glDepthFunc; +#define glDepthFunc glad_glDepthFunc +typedef void (APIENTRYP PFNGLPIXELSTOREFPROC)(GLenum pname, GLfloat param); +GLAPI PFNGLPIXELSTOREFPROC glad_glPixelStoref; +#define glPixelStoref glad_glPixelStoref +typedef void (APIENTRYP PFNGLPIXELSTOREIPROC)(GLenum pname, GLint param); +GLAPI PFNGLPIXELSTOREIPROC glad_glPixelStorei; +#define glPixelStorei glad_glPixelStorei +typedef void (APIENTRYP PFNGLREADBUFFERPROC)(GLenum src); +GLAPI PFNGLREADBUFFERPROC glad_glReadBuffer; +#define glReadBuffer glad_glReadBuffer +typedef void (APIENTRYP PFNGLREADPIXELSPROC)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void* pixels); +GLAPI PFNGLREADPIXELSPROC glad_glReadPixels; +#define glReadPixels glad_glReadPixels +typedef void (APIENTRYP PFNGLGETBOOLEANVPROC)(GLenum pname, GLboolean* data); +GLAPI PFNGLGETBOOLEANVPROC glad_glGetBooleanv; +#define glGetBooleanv glad_glGetBooleanv +typedef void (APIENTRYP PFNGLGETDOUBLEVPROC)(GLenum pname, GLdouble* data); +GLAPI PFNGLGETDOUBLEVPROC glad_glGetDoublev; +#define glGetDoublev glad_glGetDoublev +typedef GLenum (APIENTRYP PFNGLGETERRORPROC)(); +GLAPI PFNGLGETERRORPROC glad_glGetError; +#define glGetError glad_glGetError +typedef void (APIENTRYP PFNGLGETFLOATVPROC)(GLenum pname, GLfloat* data); +GLAPI PFNGLGETFLOATVPROC glad_glGetFloatv; +#define glGetFloatv glad_glGetFloatv +typedef void (APIENTRYP PFNGLGETINTEGERVPROC)(GLenum pname, GLint* data); +GLAPI PFNGLGETINTEGERVPROC glad_glGetIntegerv; +#define glGetIntegerv glad_glGetIntegerv +typedef const GLubyte* (APIENTRYP PFNGLGETSTRINGPROC)(GLenum name); +GLAPI PFNGLGETSTRINGPROC glad_glGetString; +#define glGetString glad_glGetString +typedef void (APIENTRYP PFNGLGETTEXIMAGEPROC)(GLenum target, GLint level, GLenum format, GLenum type, void* pixels); +GLAPI PFNGLGETTEXIMAGEPROC glad_glGetTexImage; +#define glGetTexImage glad_glGetTexImage +typedef void (APIENTRYP PFNGLGETTEXPARAMETERFVPROC)(GLenum target, GLenum pname, GLfloat* params); +GLAPI PFNGLGETTEXPARAMETERFVPROC glad_glGetTexParameterfv; +#define glGetTexParameterfv glad_glGetTexParameterfv +typedef void (APIENTRYP PFNGLGETTEXPARAMETERIVPROC)(GLenum target, GLenum pname, GLint* params); +GLAPI PFNGLGETTEXPARAMETERIVPROC glad_glGetTexParameteriv; +#define glGetTexParameteriv glad_glGetTexParameteriv +typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERFVPROC)(GLenum target, GLint level, GLenum pname, GLfloat* params); +GLAPI PFNGLGETTEXLEVELPARAMETERFVPROC glad_glGetTexLevelParameterfv; +#define glGetTexLevelParameterfv glad_glGetTexLevelParameterfv +typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERIVPROC)(GLenum target, GLint level, GLenum pname, GLint* params); +GLAPI PFNGLGETTEXLEVELPARAMETERIVPROC glad_glGetTexLevelParameteriv; +#define glGetTexLevelParameteriv glad_glGetTexLevelParameteriv +typedef GLboolean (APIENTRYP PFNGLISENABLEDPROC)(GLenum cap); +GLAPI PFNGLISENABLEDPROC glad_glIsEnabled; +#define glIsEnabled glad_glIsEnabled +typedef void (APIENTRYP PFNGLDEPTHRANGEPROC)(GLdouble near, GLdouble far); +GLAPI PFNGLDEPTHRANGEPROC glad_glDepthRange; +#define glDepthRange glad_glDepthRange +typedef void (APIENTRYP PFNGLVIEWPORTPROC)(GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI PFNGLVIEWPORTPROC glad_glViewport; +#define glViewport glad_glViewport +#endif +#ifndef GL_VERSION_1_1 +#define GL_VERSION_1_1 1 +GLAPI int GLAD_GL_VERSION_1_1; +typedef void (APIENTRYP PFNGLDRAWARRAYSPROC)(GLenum mode, GLint first, GLsizei count); +GLAPI PFNGLDRAWARRAYSPROC glad_glDrawArrays; +#define glDrawArrays glad_glDrawArrays +typedef void (APIENTRYP PFNGLDRAWELEMENTSPROC)(GLenum mode, GLsizei count, GLenum type, const void* indices); +GLAPI PFNGLDRAWELEMENTSPROC glad_glDrawElements; +#define glDrawElements glad_glDrawElements +typedef void (APIENTRYP PFNGLPOLYGONOFFSETPROC)(GLfloat factor, GLfloat units); +GLAPI PFNGLPOLYGONOFFSETPROC glad_glPolygonOffset; +#define glPolygonOffset glad_glPolygonOffset +typedef void (APIENTRYP PFNGLCOPYTEXIMAGE1DPROC)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +GLAPI PFNGLCOPYTEXIMAGE1DPROC glad_glCopyTexImage1D; +#define glCopyTexImage1D glad_glCopyTexImage1D +typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DPROC)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +GLAPI PFNGLCOPYTEXIMAGE2DPROC glad_glCopyTexImage2D; +#define glCopyTexImage2D glad_glCopyTexImage2D +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +GLAPI PFNGLCOPYTEXSUBIMAGE1DPROC glad_glCopyTexSubImage1D; +#define glCopyTexSubImage1D glad_glCopyTexSubImage1D +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI PFNGLCOPYTEXSUBIMAGE2DPROC glad_glCopyTexSubImage2D; +#define glCopyTexSubImage2D glad_glCopyTexSubImage2D +typedef void (APIENTRYP PFNGLTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void* pixels); +GLAPI PFNGLTEXSUBIMAGE1DPROC glad_glTexSubImage1D; +#define glTexSubImage1D glad_glTexSubImage1D +typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels); +GLAPI PFNGLTEXSUBIMAGE2DPROC glad_glTexSubImage2D; +#define glTexSubImage2D glad_glTexSubImage2D +typedef void (APIENTRYP PFNGLBINDTEXTUREPROC)(GLenum target, GLuint texture); +GLAPI PFNGLBINDTEXTUREPROC glad_glBindTexture; +#define glBindTexture glad_glBindTexture +typedef void (APIENTRYP PFNGLDELETETEXTURESPROC)(GLsizei n, const GLuint* textures); +GLAPI PFNGLDELETETEXTURESPROC glad_glDeleteTextures; +#define glDeleteTextures glad_glDeleteTextures +typedef void (APIENTRYP PFNGLGENTEXTURESPROC)(GLsizei n, GLuint* textures); +GLAPI PFNGLGENTEXTURESPROC glad_glGenTextures; +#define glGenTextures glad_glGenTextures +typedef GLboolean (APIENTRYP PFNGLISTEXTUREPROC)(GLuint texture); +GLAPI PFNGLISTEXTUREPROC glad_glIsTexture; +#define glIsTexture glad_glIsTexture +#endif +#ifndef GL_VERSION_1_2 +#define GL_VERSION_1_2 1 +GLAPI int GLAD_GL_VERSION_1_2; +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void* indices); +GLAPI PFNGLDRAWRANGEELEMENTSPROC glad_glDrawRangeElements; +#define glDrawRangeElements glad_glDrawRangeElements +typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void* pixels); +GLAPI PFNGLTEXIMAGE3DPROC glad_glTexImage3D; +#define glTexImage3D glad_glTexImage3D +typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void* pixels); +GLAPI PFNGLTEXSUBIMAGE3DPROC glad_glTexSubImage3D; +#define glTexSubImage3D glad_glTexSubImage3D +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI PFNGLCOPYTEXSUBIMAGE3DPROC glad_glCopyTexSubImage3D; +#define glCopyTexSubImage3D glad_glCopyTexSubImage3D +#endif +#ifndef GL_VERSION_1_3 +#define GL_VERSION_1_3 1 +GLAPI int GLAD_GL_VERSION_1_3; +typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC)(GLenum texture); +GLAPI PFNGLACTIVETEXTUREPROC glad_glActiveTexture; +#define glActiveTexture glad_glActiveTexture +typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC)(GLfloat value, GLboolean invert); +GLAPI PFNGLSAMPLECOVERAGEPROC glad_glSampleCoverage; +#define glSampleCoverage glad_glSampleCoverage +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void* data); +GLAPI PFNGLCOMPRESSEDTEXIMAGE3DPROC glad_glCompressedTexImage3D; +#define glCompressedTexImage3D glad_glCompressedTexImage3D +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data); +GLAPI PFNGLCOMPRESSEDTEXIMAGE2DPROC glad_glCompressedTexImage2D; +#define glCompressedTexImage2D glad_glCompressedTexImage2D +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void* data); +GLAPI PFNGLCOMPRESSEDTEXIMAGE1DPROC glad_glCompressedTexImage1D; +#define glCompressedTexImage1D glad_glCompressedTexImage1D +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void* data); +GLAPI PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glad_glCompressedTexSubImage3D; +#define glCompressedTexSubImage3D glad_glCompressedTexSubImage3D +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data); +GLAPI PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glad_glCompressedTexSubImage2D; +#define glCompressedTexSubImage2D glad_glCompressedTexSubImage2D +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void* data); +GLAPI PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glad_glCompressedTexSubImage1D; +#define glCompressedTexSubImage1D glad_glCompressedTexSubImage1D +typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC)(GLenum target, GLint level, void* img); +GLAPI PFNGLGETCOMPRESSEDTEXIMAGEPROC glad_glGetCompressedTexImage; +#define glGetCompressedTexImage glad_glGetCompressedTexImage +#endif +#ifndef GL_VERSION_1_4 +#define GL_VERSION_1_4 1 +GLAPI int GLAD_GL_VERSION_1_4; +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +GLAPI PFNGLBLENDFUNCSEPARATEPROC glad_glBlendFuncSeparate; +#define glBlendFuncSeparate glad_glBlendFuncSeparate +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC)(GLenum mode, const GLint* first, const GLsizei* count, GLsizei drawcount); +GLAPI PFNGLMULTIDRAWARRAYSPROC glad_glMultiDrawArrays; +#define glMultiDrawArrays glad_glMultiDrawArrays +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC)(GLenum mode, const GLsizei* count, GLenum type, const void** indices, GLsizei drawcount); +GLAPI PFNGLMULTIDRAWELEMENTSPROC glad_glMultiDrawElements; +#define glMultiDrawElements glad_glMultiDrawElements +typedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC)(GLenum pname, GLfloat param); +GLAPI PFNGLPOINTPARAMETERFPROC glad_glPointParameterf; +#define glPointParameterf glad_glPointParameterf +typedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC)(GLenum pname, const GLfloat* params); +GLAPI PFNGLPOINTPARAMETERFVPROC glad_glPointParameterfv; +#define glPointParameterfv glad_glPointParameterfv +typedef void (APIENTRYP PFNGLPOINTPARAMETERIPROC)(GLenum pname, GLint param); +GLAPI PFNGLPOINTPARAMETERIPROC glad_glPointParameteri; +#define glPointParameteri glad_glPointParameteri +typedef void (APIENTRYP PFNGLPOINTPARAMETERIVPROC)(GLenum pname, const GLint* params); +GLAPI PFNGLPOINTPARAMETERIVPROC glad_glPointParameteriv; +#define glPointParameteriv glad_glPointParameteriv +typedef void (APIENTRYP PFNGLBLENDCOLORPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +GLAPI PFNGLBLENDCOLORPROC glad_glBlendColor; +#define glBlendColor glad_glBlendColor +typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC)(GLenum mode); +GLAPI PFNGLBLENDEQUATIONPROC glad_glBlendEquation; +#define glBlendEquation glad_glBlendEquation +#endif +#ifndef GL_VERSION_1_5 +#define GL_VERSION_1_5 1 +GLAPI int GLAD_GL_VERSION_1_5; +typedef void (APIENTRYP PFNGLGENQUERIESPROC)(GLsizei n, GLuint* ids); +GLAPI PFNGLGENQUERIESPROC glad_glGenQueries; +#define glGenQueries glad_glGenQueries +typedef void (APIENTRYP PFNGLDELETEQUERIESPROC)(GLsizei n, const GLuint* ids); +GLAPI PFNGLDELETEQUERIESPROC glad_glDeleteQueries; +#define glDeleteQueries glad_glDeleteQueries +typedef GLboolean (APIENTRYP PFNGLISQUERYPROC)(GLuint id); +GLAPI PFNGLISQUERYPROC glad_glIsQuery; +#define glIsQuery glad_glIsQuery +typedef void (APIENTRYP PFNGLBEGINQUERYPROC)(GLenum target, GLuint id); +GLAPI PFNGLBEGINQUERYPROC glad_glBeginQuery; +#define glBeginQuery glad_glBeginQuery +typedef void (APIENTRYP PFNGLENDQUERYPROC)(GLenum target); +GLAPI PFNGLENDQUERYPROC glad_glEndQuery; +#define glEndQuery glad_glEndQuery +typedef void (APIENTRYP PFNGLGETQUERYIVPROC)(GLenum target, GLenum pname, GLint* params); +GLAPI PFNGLGETQUERYIVPROC glad_glGetQueryiv; +#define glGetQueryiv glad_glGetQueryiv +typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVPROC)(GLuint id, GLenum pname, GLint* params); +GLAPI PFNGLGETQUERYOBJECTIVPROC glad_glGetQueryObjectiv; +#define glGetQueryObjectiv glad_glGetQueryObjectiv +typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVPROC)(GLuint id, GLenum pname, GLuint* params); +GLAPI PFNGLGETQUERYOBJECTUIVPROC glad_glGetQueryObjectuiv; +#define glGetQueryObjectuiv glad_glGetQueryObjectuiv +typedef void (APIENTRYP PFNGLBINDBUFFERPROC)(GLenum target, GLuint buffer); +GLAPI PFNGLBINDBUFFERPROC glad_glBindBuffer; +#define glBindBuffer glad_glBindBuffer +typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC)(GLsizei n, const GLuint* buffers); +GLAPI PFNGLDELETEBUFFERSPROC glad_glDeleteBuffers; +#define glDeleteBuffers glad_glDeleteBuffers +typedef void (APIENTRYP PFNGLGENBUFFERSPROC)(GLsizei n, GLuint* buffers); +GLAPI PFNGLGENBUFFERSPROC glad_glGenBuffers; +#define glGenBuffers glad_glGenBuffers +typedef GLboolean (APIENTRYP PFNGLISBUFFERPROC)(GLuint buffer); +GLAPI PFNGLISBUFFERPROC glad_glIsBuffer; +#define glIsBuffer glad_glIsBuffer +typedef void (APIENTRYP PFNGLBUFFERDATAPROC)(GLenum target, GLsizeiptr size, const void* data, GLenum usage); +GLAPI PFNGLBUFFERDATAPROC glad_glBufferData; +#define glBufferData glad_glBufferData +typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC)(GLenum target, GLintptr offset, GLsizeiptr size, const void* data); +GLAPI PFNGLBUFFERSUBDATAPROC glad_glBufferSubData; +#define glBufferSubData glad_glBufferSubData +typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAPROC)(GLenum target, GLintptr offset, GLsizeiptr size, void* data); +GLAPI PFNGLGETBUFFERSUBDATAPROC glad_glGetBufferSubData; +#define glGetBufferSubData glad_glGetBufferSubData +typedef void* (APIENTRYP PFNGLMAPBUFFERPROC)(GLenum target, GLenum access); +GLAPI PFNGLMAPBUFFERPROC glad_glMapBuffer; +#define glMapBuffer glad_glMapBuffer +typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERPROC)(GLenum target); +GLAPI PFNGLUNMAPBUFFERPROC glad_glUnmapBuffer; +#define glUnmapBuffer glad_glUnmapBuffer +typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint* params); +GLAPI PFNGLGETBUFFERPARAMETERIVPROC glad_glGetBufferParameteriv; +#define glGetBufferParameteriv glad_glGetBufferParameteriv +typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC)(GLenum target, GLenum pname, void** params); +GLAPI PFNGLGETBUFFERPOINTERVPROC glad_glGetBufferPointerv; +#define glGetBufferPointerv glad_glGetBufferPointerv +#endif +#ifndef GL_VERSION_2_0 +#define GL_VERSION_2_0 1 +GLAPI int GLAD_GL_VERSION_2_0; +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC)(GLenum modeRGB, GLenum modeAlpha); +GLAPI PFNGLBLENDEQUATIONSEPARATEPROC glad_glBlendEquationSeparate; +#define glBlendEquationSeparate glad_glBlendEquationSeparate +typedef void (APIENTRYP PFNGLDRAWBUFFERSPROC)(GLsizei n, const GLenum* bufs); +GLAPI PFNGLDRAWBUFFERSPROC glad_glDrawBuffers; +#define glDrawBuffers glad_glDrawBuffers +typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC)(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +GLAPI PFNGLSTENCILOPSEPARATEPROC glad_glStencilOpSeparate; +#define glStencilOpSeparate glad_glStencilOpSeparate +typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC)(GLenum face, GLenum func, GLint ref, GLuint mask); +GLAPI PFNGLSTENCILFUNCSEPARATEPROC glad_glStencilFuncSeparate; +#define glStencilFuncSeparate glad_glStencilFuncSeparate +typedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC)(GLenum face, GLuint mask); +GLAPI PFNGLSTENCILMASKSEPARATEPROC glad_glStencilMaskSeparate; +#define glStencilMaskSeparate glad_glStencilMaskSeparate +typedef void (APIENTRYP PFNGLATTACHSHADERPROC)(GLuint program, GLuint shader); +GLAPI PFNGLATTACHSHADERPROC glad_glAttachShader; +#define glAttachShader glad_glAttachShader +typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC)(GLuint program, GLuint index, const GLchar* name); +GLAPI PFNGLBINDATTRIBLOCATIONPROC glad_glBindAttribLocation; +#define glBindAttribLocation glad_glBindAttribLocation +typedef void (APIENTRYP PFNGLCOMPILESHADERPROC)(GLuint shader); +GLAPI PFNGLCOMPILESHADERPROC glad_glCompileShader; +#define glCompileShader glad_glCompileShader +typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC)(); +GLAPI PFNGLCREATEPROGRAMPROC glad_glCreateProgram; +#define glCreateProgram glad_glCreateProgram +typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC)(GLenum type); +GLAPI PFNGLCREATESHADERPROC glad_glCreateShader; +#define glCreateShader glad_glCreateShader +typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC)(GLuint program); +GLAPI PFNGLDELETEPROGRAMPROC glad_glDeleteProgram; +#define glDeleteProgram glad_glDeleteProgram +typedef void (APIENTRYP PFNGLDELETESHADERPROC)(GLuint shader); +GLAPI PFNGLDELETESHADERPROC glad_glDeleteShader; +#define glDeleteShader glad_glDeleteShader +typedef void (APIENTRYP PFNGLDETACHSHADERPROC)(GLuint program, GLuint shader); +GLAPI PFNGLDETACHSHADERPROC glad_glDetachShader; +#define glDetachShader glad_glDetachShader +typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC)(GLuint index); +GLAPI PFNGLDISABLEVERTEXATTRIBARRAYPROC glad_glDisableVertexAttribArray; +#define glDisableVertexAttribArray glad_glDisableVertexAttribArray +typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC)(GLuint index); +GLAPI PFNGLENABLEVERTEXATTRIBARRAYPROC glad_glEnableVertexAttribArray; +#define glEnableVertexAttribArray glad_glEnableVertexAttribArray +typedef void (APIENTRYP PFNGLGETACTIVEATTRIBPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* type, GLchar* name); +GLAPI PFNGLGETACTIVEATTRIBPROC glad_glGetActiveAttrib; +#define glGetActiveAttrib glad_glGetActiveAttrib +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* type, GLchar* name); +GLAPI PFNGLGETACTIVEUNIFORMPROC glad_glGetActiveUniform; +#define glGetActiveUniform glad_glGetActiveUniform +typedef void (APIENTRYP PFNGLGETATTACHEDSHADERSPROC)(GLuint program, GLsizei maxCount, GLsizei* count, GLuint* shaders); +GLAPI PFNGLGETATTACHEDSHADERSPROC glad_glGetAttachedShaders; +#define glGetAttachedShaders glad_glGetAttachedShaders +typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC)(GLuint program, const GLchar* name); +GLAPI PFNGLGETATTRIBLOCATIONPROC glad_glGetAttribLocation; +#define glGetAttribLocation glad_glGetAttribLocation +typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC)(GLuint program, GLenum pname, GLint* params); +GLAPI PFNGLGETPROGRAMIVPROC glad_glGetProgramiv; +#define glGetProgramiv glad_glGetProgramiv +typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC)(GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog); +GLAPI PFNGLGETPROGRAMINFOLOGPROC glad_glGetProgramInfoLog; +#define glGetProgramInfoLog glad_glGetProgramInfoLog +typedef void (APIENTRYP PFNGLGETSHADERIVPROC)(GLuint shader, GLenum pname, GLint* params); +GLAPI PFNGLGETSHADERIVPROC glad_glGetShaderiv; +#define glGetShaderiv glad_glGetShaderiv +typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC)(GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog); +GLAPI PFNGLGETSHADERINFOLOGPROC glad_glGetShaderInfoLog; +#define glGetShaderInfoLog glad_glGetShaderInfoLog +typedef void (APIENTRYP PFNGLGETSHADERSOURCEPROC)(GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* source); +GLAPI PFNGLGETSHADERSOURCEPROC glad_glGetShaderSource; +#define glGetShaderSource glad_glGetShaderSource +typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC)(GLuint program, const GLchar* name); +GLAPI PFNGLGETUNIFORMLOCATIONPROC glad_glGetUniformLocation; +#define glGetUniformLocation glad_glGetUniformLocation +typedef void (APIENTRYP PFNGLGETUNIFORMFVPROC)(GLuint program, GLint location, GLfloat* params); +GLAPI PFNGLGETUNIFORMFVPROC glad_glGetUniformfv; +#define glGetUniformfv glad_glGetUniformfv +typedef void (APIENTRYP PFNGLGETUNIFORMIVPROC)(GLuint program, GLint location, GLint* params); +GLAPI PFNGLGETUNIFORMIVPROC glad_glGetUniformiv; +#define glGetUniformiv glad_glGetUniformiv +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVPROC)(GLuint index, GLenum pname, GLdouble* params); +GLAPI PFNGLGETVERTEXATTRIBDVPROC glad_glGetVertexAttribdv; +#define glGetVertexAttribdv glad_glGetVertexAttribdv +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVPROC)(GLuint index, GLenum pname, GLfloat* params); +GLAPI PFNGLGETVERTEXATTRIBFVPROC glad_glGetVertexAttribfv; +#define glGetVertexAttribfv glad_glGetVertexAttribfv +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC)(GLuint index, GLenum pname, GLint* params); +GLAPI PFNGLGETVERTEXATTRIBIVPROC glad_glGetVertexAttribiv; +#define glGetVertexAttribiv glad_glGetVertexAttribiv +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC)(GLuint index, GLenum pname, void** pointer); +GLAPI PFNGLGETVERTEXATTRIBPOINTERVPROC glad_glGetVertexAttribPointerv; +#define glGetVertexAttribPointerv glad_glGetVertexAttribPointerv +typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC)(GLuint program); +GLAPI PFNGLISPROGRAMPROC glad_glIsProgram; +#define glIsProgram glad_glIsProgram +typedef GLboolean (APIENTRYP PFNGLISSHADERPROC)(GLuint shader); +GLAPI PFNGLISSHADERPROC glad_glIsShader; +#define glIsShader glad_glIsShader +typedef void (APIENTRYP PFNGLLINKPROGRAMPROC)(GLuint program); +GLAPI PFNGLLINKPROGRAMPROC glad_glLinkProgram; +#define glLinkProgram glad_glLinkProgram +typedef void (APIENTRYP PFNGLSHADERSOURCEPROC)(GLuint shader, GLsizei count, const GLchar** string, const GLint* length); +GLAPI PFNGLSHADERSOURCEPROC glad_glShaderSource; +#define glShaderSource glad_glShaderSource +typedef void (APIENTRYP PFNGLUSEPROGRAMPROC)(GLuint program); +GLAPI PFNGLUSEPROGRAMPROC glad_glUseProgram; +#define glUseProgram glad_glUseProgram +typedef void (APIENTRYP PFNGLUNIFORM1FPROC)(GLint location, GLfloat v0); +GLAPI PFNGLUNIFORM1FPROC glad_glUniform1f; +#define glUniform1f glad_glUniform1f +typedef void (APIENTRYP PFNGLUNIFORM2FPROC)(GLint location, GLfloat v0, GLfloat v1); +GLAPI PFNGLUNIFORM2FPROC glad_glUniform2f; +#define glUniform2f glad_glUniform2f +typedef void (APIENTRYP PFNGLUNIFORM3FPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +GLAPI PFNGLUNIFORM3FPROC glad_glUniform3f; +#define glUniform3f glad_glUniform3f +typedef void (APIENTRYP PFNGLUNIFORM4FPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +GLAPI PFNGLUNIFORM4FPROC glad_glUniform4f; +#define glUniform4f glad_glUniform4f +typedef void (APIENTRYP PFNGLUNIFORM1IPROC)(GLint location, GLint v0); +GLAPI PFNGLUNIFORM1IPROC glad_glUniform1i; +#define glUniform1i glad_glUniform1i +typedef void (APIENTRYP PFNGLUNIFORM2IPROC)(GLint location, GLint v0, GLint v1); +GLAPI PFNGLUNIFORM2IPROC glad_glUniform2i; +#define glUniform2i glad_glUniform2i +typedef void (APIENTRYP PFNGLUNIFORM3IPROC)(GLint location, GLint v0, GLint v1, GLint v2); +GLAPI PFNGLUNIFORM3IPROC glad_glUniform3i; +#define glUniform3i glad_glUniform3i +typedef void (APIENTRYP PFNGLUNIFORM4IPROC)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +GLAPI PFNGLUNIFORM4IPROC glad_glUniform4i; +#define glUniform4i glad_glUniform4i +typedef void (APIENTRYP PFNGLUNIFORM1FVPROC)(GLint location, GLsizei count, const GLfloat* value); +GLAPI PFNGLUNIFORM1FVPROC glad_glUniform1fv; +#define glUniform1fv glad_glUniform1fv +typedef void (APIENTRYP PFNGLUNIFORM2FVPROC)(GLint location, GLsizei count, const GLfloat* value); +GLAPI PFNGLUNIFORM2FVPROC glad_glUniform2fv; +#define glUniform2fv glad_glUniform2fv +typedef void (APIENTRYP PFNGLUNIFORM3FVPROC)(GLint location, GLsizei count, const GLfloat* value); +GLAPI PFNGLUNIFORM3FVPROC glad_glUniform3fv; +#define glUniform3fv glad_glUniform3fv +typedef void (APIENTRYP PFNGLUNIFORM4FVPROC)(GLint location, GLsizei count, const GLfloat* value); +GLAPI PFNGLUNIFORM4FVPROC glad_glUniform4fv; +#define glUniform4fv glad_glUniform4fv +typedef void (APIENTRYP PFNGLUNIFORM1IVPROC)(GLint location, GLsizei count, const GLint* value); +GLAPI PFNGLUNIFORM1IVPROC glad_glUniform1iv; +#define glUniform1iv glad_glUniform1iv +typedef void (APIENTRYP PFNGLUNIFORM2IVPROC)(GLint location, GLsizei count, const GLint* value); +GLAPI PFNGLUNIFORM2IVPROC glad_glUniform2iv; +#define glUniform2iv glad_glUniform2iv +typedef void (APIENTRYP PFNGLUNIFORM3IVPROC)(GLint location, GLsizei count, const GLint* value); +GLAPI PFNGLUNIFORM3IVPROC glad_glUniform3iv; +#define glUniform3iv glad_glUniform3iv +typedef void (APIENTRYP PFNGLUNIFORM4IVPROC)(GLint location, GLsizei count, const GLint* value); +GLAPI PFNGLUNIFORM4IVPROC glad_glUniform4iv; +#define glUniform4iv glad_glUniform4iv +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +GLAPI PFNGLUNIFORMMATRIX2FVPROC glad_glUniformMatrix2fv; +#define glUniformMatrix2fv glad_glUniformMatrix2fv +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +GLAPI PFNGLUNIFORMMATRIX3FVPROC glad_glUniformMatrix3fv; +#define glUniformMatrix3fv glad_glUniformMatrix3fv +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +GLAPI PFNGLUNIFORMMATRIX4FVPROC glad_glUniformMatrix4fv; +#define glUniformMatrix4fv glad_glUniformMatrix4fv +typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPROC)(GLuint program); +GLAPI PFNGLVALIDATEPROGRAMPROC glad_glValidateProgram; +#define glValidateProgram glad_glValidateProgram +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DPROC)(GLuint index, GLdouble x); +GLAPI PFNGLVERTEXATTRIB1DPROC glad_glVertexAttrib1d; +#define glVertexAttrib1d glad_glVertexAttrib1d +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVPROC)(GLuint index, const GLdouble* v); +GLAPI PFNGLVERTEXATTRIB1DVPROC glad_glVertexAttrib1dv; +#define glVertexAttrib1dv glad_glVertexAttrib1dv +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FPROC)(GLuint index, GLfloat x); +GLAPI PFNGLVERTEXATTRIB1FPROC glad_glVertexAttrib1f; +#define glVertexAttrib1f glad_glVertexAttrib1f +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVPROC)(GLuint index, const GLfloat* v); +GLAPI PFNGLVERTEXATTRIB1FVPROC glad_glVertexAttrib1fv; +#define glVertexAttrib1fv glad_glVertexAttrib1fv +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SPROC)(GLuint index, GLshort x); +GLAPI PFNGLVERTEXATTRIB1SPROC glad_glVertexAttrib1s; +#define glVertexAttrib1s glad_glVertexAttrib1s +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVPROC)(GLuint index, const GLshort* v); +GLAPI PFNGLVERTEXATTRIB1SVPROC glad_glVertexAttrib1sv; +#define glVertexAttrib1sv glad_glVertexAttrib1sv +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DPROC)(GLuint index, GLdouble x, GLdouble y); +GLAPI PFNGLVERTEXATTRIB2DPROC glad_glVertexAttrib2d; +#define glVertexAttrib2d glad_glVertexAttrib2d +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVPROC)(GLuint index, const GLdouble* v); +GLAPI PFNGLVERTEXATTRIB2DVPROC glad_glVertexAttrib2dv; +#define glVertexAttrib2dv glad_glVertexAttrib2dv +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FPROC)(GLuint index, GLfloat x, GLfloat y); +GLAPI PFNGLVERTEXATTRIB2FPROC glad_glVertexAttrib2f; +#define glVertexAttrib2f glad_glVertexAttrib2f +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVPROC)(GLuint index, const GLfloat* v); +GLAPI PFNGLVERTEXATTRIB2FVPROC glad_glVertexAttrib2fv; +#define glVertexAttrib2fv glad_glVertexAttrib2fv +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SPROC)(GLuint index, GLshort x, GLshort y); +GLAPI PFNGLVERTEXATTRIB2SPROC glad_glVertexAttrib2s; +#define glVertexAttrib2s glad_glVertexAttrib2s +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVPROC)(GLuint index, const GLshort* v); +GLAPI PFNGLVERTEXATTRIB2SVPROC glad_glVertexAttrib2sv; +#define glVertexAttrib2sv glad_glVertexAttrib2sv +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z); +GLAPI PFNGLVERTEXATTRIB3DPROC glad_glVertexAttrib3d; +#define glVertexAttrib3d glad_glVertexAttrib3d +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVPROC)(GLuint index, const GLdouble* v); +GLAPI PFNGLVERTEXATTRIB3DVPROC glad_glVertexAttrib3dv; +#define glVertexAttrib3dv glad_glVertexAttrib3dv +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z); +GLAPI PFNGLVERTEXATTRIB3FPROC glad_glVertexAttrib3f; +#define glVertexAttrib3f glad_glVertexAttrib3f +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVPROC)(GLuint index, const GLfloat* v); +GLAPI PFNGLVERTEXATTRIB3FVPROC glad_glVertexAttrib3fv; +#define glVertexAttrib3fv glad_glVertexAttrib3fv +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SPROC)(GLuint index, GLshort x, GLshort y, GLshort z); +GLAPI PFNGLVERTEXATTRIB3SPROC glad_glVertexAttrib3s; +#define glVertexAttrib3s glad_glVertexAttrib3s +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVPROC)(GLuint index, const GLshort* v); +GLAPI PFNGLVERTEXATTRIB3SVPROC glad_glVertexAttrib3sv; +#define glVertexAttrib3sv glad_glVertexAttrib3sv +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVPROC)(GLuint index, const GLbyte* v); +GLAPI PFNGLVERTEXATTRIB4NBVPROC glad_glVertexAttrib4Nbv; +#define glVertexAttrib4Nbv glad_glVertexAttrib4Nbv +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVPROC)(GLuint index, const GLint* v); +GLAPI PFNGLVERTEXATTRIB4NIVPROC glad_glVertexAttrib4Niv; +#define glVertexAttrib4Niv glad_glVertexAttrib4Niv +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVPROC)(GLuint index, const GLshort* v); +GLAPI PFNGLVERTEXATTRIB4NSVPROC glad_glVertexAttrib4Nsv; +#define glVertexAttrib4Nsv glad_glVertexAttrib4Nsv +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBPROC)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +GLAPI PFNGLVERTEXATTRIB4NUBPROC glad_glVertexAttrib4Nub; +#define glVertexAttrib4Nub glad_glVertexAttrib4Nub +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVPROC)(GLuint index, const GLubyte* v); +GLAPI PFNGLVERTEXATTRIB4NUBVPROC glad_glVertexAttrib4Nubv; +#define glVertexAttrib4Nubv glad_glVertexAttrib4Nubv +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVPROC)(GLuint index, const GLuint* v); +GLAPI PFNGLVERTEXATTRIB4NUIVPROC glad_glVertexAttrib4Nuiv; +#define glVertexAttrib4Nuiv glad_glVertexAttrib4Nuiv +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVPROC)(GLuint index, const GLushort* v); +GLAPI PFNGLVERTEXATTRIB4NUSVPROC glad_glVertexAttrib4Nusv; +#define glVertexAttrib4Nusv glad_glVertexAttrib4Nusv +typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVPROC)(GLuint index, const GLbyte* v); +GLAPI PFNGLVERTEXATTRIB4BVPROC glad_glVertexAttrib4bv; +#define glVertexAttrib4bv glad_glVertexAttrib4bv +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI PFNGLVERTEXATTRIB4DPROC glad_glVertexAttrib4d; +#define glVertexAttrib4d glad_glVertexAttrib4d +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVPROC)(GLuint index, const GLdouble* v); +GLAPI PFNGLVERTEXATTRIB4DVPROC glad_glVertexAttrib4dv; +#define glVertexAttrib4dv glad_glVertexAttrib4dv +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI PFNGLVERTEXATTRIB4FPROC glad_glVertexAttrib4f; +#define glVertexAttrib4f glad_glVertexAttrib4f +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVPROC)(GLuint index, const GLfloat* v); +GLAPI PFNGLVERTEXATTRIB4FVPROC glad_glVertexAttrib4fv; +#define glVertexAttrib4fv glad_glVertexAttrib4fv +typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVPROC)(GLuint index, const GLint* v); +GLAPI PFNGLVERTEXATTRIB4IVPROC glad_glVertexAttrib4iv; +#define glVertexAttrib4iv glad_glVertexAttrib4iv +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SPROC)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI PFNGLVERTEXATTRIB4SPROC glad_glVertexAttrib4s; +#define glVertexAttrib4s glad_glVertexAttrib4s +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVPROC)(GLuint index, const GLshort* v); +GLAPI PFNGLVERTEXATTRIB4SVPROC glad_glVertexAttrib4sv; +#define glVertexAttrib4sv glad_glVertexAttrib4sv +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVPROC)(GLuint index, const GLubyte* v); +GLAPI PFNGLVERTEXATTRIB4UBVPROC glad_glVertexAttrib4ubv; +#define glVertexAttrib4ubv glad_glVertexAttrib4ubv +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVPROC)(GLuint index, const GLuint* v); +GLAPI PFNGLVERTEXATTRIB4UIVPROC glad_glVertexAttrib4uiv; +#define glVertexAttrib4uiv glad_glVertexAttrib4uiv +typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVPROC)(GLuint index, const GLushort* v); +GLAPI PFNGLVERTEXATTRIB4USVPROC glad_glVertexAttrib4usv; +#define glVertexAttrib4usv glad_glVertexAttrib4usv +typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* pointer); +GLAPI PFNGLVERTEXATTRIBPOINTERPROC glad_glVertexAttribPointer; +#define glVertexAttribPointer glad_glVertexAttribPointer +#endif +#ifndef GL_VERSION_2_1 +#define GL_VERSION_2_1 1 +GLAPI int GLAD_GL_VERSION_2_1; +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +GLAPI PFNGLUNIFORMMATRIX2X3FVPROC glad_glUniformMatrix2x3fv; +#define glUniformMatrix2x3fv glad_glUniformMatrix2x3fv +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +GLAPI PFNGLUNIFORMMATRIX3X2FVPROC glad_glUniformMatrix3x2fv; +#define glUniformMatrix3x2fv glad_glUniformMatrix3x2fv +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +GLAPI PFNGLUNIFORMMATRIX2X4FVPROC glad_glUniformMatrix2x4fv; +#define glUniformMatrix2x4fv glad_glUniformMatrix2x4fv +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +GLAPI PFNGLUNIFORMMATRIX4X2FVPROC glad_glUniformMatrix4x2fv; +#define glUniformMatrix4x2fv glad_glUniformMatrix4x2fv +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +GLAPI PFNGLUNIFORMMATRIX3X4FVPROC glad_glUniformMatrix3x4fv; +#define glUniformMatrix3x4fv glad_glUniformMatrix3x4fv +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +GLAPI PFNGLUNIFORMMATRIX4X3FVPROC glad_glUniformMatrix4x3fv; +#define glUniformMatrix4x3fv glad_glUniformMatrix4x3fv +#endif +#ifndef GL_VERSION_3_0 +#define GL_VERSION_3_0 1 +GLAPI int GLAD_GL_VERSION_3_0; +typedef void (APIENTRYP PFNGLCOLORMASKIPROC)(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +GLAPI PFNGLCOLORMASKIPROC glad_glColorMaski; +#define glColorMaski glad_glColorMaski +typedef void (APIENTRYP PFNGLGETBOOLEANI_VPROC)(GLenum target, GLuint index, GLboolean* data); +GLAPI PFNGLGETBOOLEANI_VPROC glad_glGetBooleani_v; +#define glGetBooleani_v glad_glGetBooleani_v +typedef void (APIENTRYP PFNGLGETINTEGERI_VPROC)(GLenum target, GLuint index, GLint* data); +GLAPI PFNGLGETINTEGERI_VPROC glad_glGetIntegeri_v; +#define glGetIntegeri_v glad_glGetIntegeri_v +typedef void (APIENTRYP PFNGLENABLEIPROC)(GLenum target, GLuint index); +GLAPI PFNGLENABLEIPROC glad_glEnablei; +#define glEnablei glad_glEnablei +typedef void (APIENTRYP PFNGLDISABLEIPROC)(GLenum target, GLuint index); +GLAPI PFNGLDISABLEIPROC glad_glDisablei; +#define glDisablei glad_glDisablei +typedef GLboolean (APIENTRYP PFNGLISENABLEDIPROC)(GLenum target, GLuint index); +GLAPI PFNGLISENABLEDIPROC glad_glIsEnabledi; +#define glIsEnabledi glad_glIsEnabledi +typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKPROC)(GLenum primitiveMode); +GLAPI PFNGLBEGINTRANSFORMFEEDBACKPROC glad_glBeginTransformFeedback; +#define glBeginTransformFeedback glad_glBeginTransformFeedback +typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKPROC)(); +GLAPI PFNGLENDTRANSFORMFEEDBACKPROC glad_glEndTransformFeedback; +#define glEndTransformFeedback glad_glEndTransformFeedback +typedef void (APIENTRYP PFNGLBINDBUFFERRANGEPROC)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI PFNGLBINDBUFFERRANGEPROC glad_glBindBufferRange; +#define glBindBufferRange glad_glBindBufferRange +typedef void (APIENTRYP PFNGLBINDBUFFERBASEPROC)(GLenum target, GLuint index, GLuint buffer); +GLAPI PFNGLBINDBUFFERBASEPROC glad_glBindBufferBase; +#define glBindBufferBase glad_glBindBufferBase +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSPROC)(GLuint program, GLsizei count, const GLchar** varyings, GLenum bufferMode); +GLAPI PFNGLTRANSFORMFEEDBACKVARYINGSPROC glad_glTransformFeedbackVaryings; +#define glTransformFeedbackVaryings glad_glTransformFeedbackVaryings +typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* type, GLchar* name); +GLAPI PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glad_glGetTransformFeedbackVarying; +#define glGetTransformFeedbackVarying glad_glGetTransformFeedbackVarying +typedef void (APIENTRYP PFNGLCLAMPCOLORPROC)(GLenum target, GLenum clamp); +GLAPI PFNGLCLAMPCOLORPROC glad_glClampColor; +#define glClampColor glad_glClampColor +typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERPROC)(GLuint id, GLenum mode); +GLAPI PFNGLBEGINCONDITIONALRENDERPROC glad_glBeginConditionalRender; +#define glBeginConditionalRender glad_glBeginConditionalRender +typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERPROC)(); +GLAPI PFNGLENDCONDITIONALRENDERPROC glad_glEndConditionalRender; +#define glEndConditionalRender glad_glEndConditionalRender +typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC)(GLuint index, GLint size, GLenum type, GLsizei stride, const void* pointer); +GLAPI PFNGLVERTEXATTRIBIPOINTERPROC glad_glVertexAttribIPointer; +#define glVertexAttribIPointer glad_glVertexAttribIPointer +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVPROC)(GLuint index, GLenum pname, GLint* params); +GLAPI PFNGLGETVERTEXATTRIBIIVPROC glad_glGetVertexAttribIiv; +#define glGetVertexAttribIiv glad_glGetVertexAttribIiv +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVPROC)(GLuint index, GLenum pname, GLuint* params); +GLAPI PFNGLGETVERTEXATTRIBIUIVPROC glad_glGetVertexAttribIuiv; +#define glGetVertexAttribIuiv glad_glGetVertexAttribIuiv +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IPROC)(GLuint index, GLint x); +GLAPI PFNGLVERTEXATTRIBI1IPROC glad_glVertexAttribI1i; +#define glVertexAttribI1i glad_glVertexAttribI1i +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IPROC)(GLuint index, GLint x, GLint y); +GLAPI PFNGLVERTEXATTRIBI2IPROC glad_glVertexAttribI2i; +#define glVertexAttribI2i glad_glVertexAttribI2i +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IPROC)(GLuint index, GLint x, GLint y, GLint z); +GLAPI PFNGLVERTEXATTRIBI3IPROC glad_glVertexAttribI3i; +#define glVertexAttribI3i glad_glVertexAttribI3i +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IPROC)(GLuint index, GLint x, GLint y, GLint z, GLint w); +GLAPI PFNGLVERTEXATTRIBI4IPROC glad_glVertexAttribI4i; +#define glVertexAttribI4i glad_glVertexAttribI4i +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIPROC)(GLuint index, GLuint x); +GLAPI PFNGLVERTEXATTRIBI1UIPROC glad_glVertexAttribI1ui; +#define glVertexAttribI1ui glad_glVertexAttribI1ui +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIPROC)(GLuint index, GLuint x, GLuint y); +GLAPI PFNGLVERTEXATTRIBI2UIPROC glad_glVertexAttribI2ui; +#define glVertexAttribI2ui glad_glVertexAttribI2ui +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIPROC)(GLuint index, GLuint x, GLuint y, GLuint z); +GLAPI PFNGLVERTEXATTRIBI3UIPROC glad_glVertexAttribI3ui; +#define glVertexAttribI3ui glad_glVertexAttribI3ui +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIPROC)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +GLAPI PFNGLVERTEXATTRIBI4UIPROC glad_glVertexAttribI4ui; +#define glVertexAttribI4ui glad_glVertexAttribI4ui +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVPROC)(GLuint index, const GLint* v); +GLAPI PFNGLVERTEXATTRIBI1IVPROC glad_glVertexAttribI1iv; +#define glVertexAttribI1iv glad_glVertexAttribI1iv +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVPROC)(GLuint index, const GLint* v); +GLAPI PFNGLVERTEXATTRIBI2IVPROC glad_glVertexAttribI2iv; +#define glVertexAttribI2iv glad_glVertexAttribI2iv +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVPROC)(GLuint index, const GLint* v); +GLAPI PFNGLVERTEXATTRIBI3IVPROC glad_glVertexAttribI3iv; +#define glVertexAttribI3iv glad_glVertexAttribI3iv +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVPROC)(GLuint index, const GLint* v); +GLAPI PFNGLVERTEXATTRIBI4IVPROC glad_glVertexAttribI4iv; +#define glVertexAttribI4iv glad_glVertexAttribI4iv +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVPROC)(GLuint index, const GLuint* v); +GLAPI PFNGLVERTEXATTRIBI1UIVPROC glad_glVertexAttribI1uiv; +#define glVertexAttribI1uiv glad_glVertexAttribI1uiv +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVPROC)(GLuint index, const GLuint* v); +GLAPI PFNGLVERTEXATTRIBI2UIVPROC glad_glVertexAttribI2uiv; +#define glVertexAttribI2uiv glad_glVertexAttribI2uiv +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVPROC)(GLuint index, const GLuint* v); +GLAPI PFNGLVERTEXATTRIBI3UIVPROC glad_glVertexAttribI3uiv; +#define glVertexAttribI3uiv glad_glVertexAttribI3uiv +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVPROC)(GLuint index, const GLuint* v); +GLAPI PFNGLVERTEXATTRIBI4UIVPROC glad_glVertexAttribI4uiv; +#define glVertexAttribI4uiv glad_glVertexAttribI4uiv +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVPROC)(GLuint index, const GLbyte* v); +GLAPI PFNGLVERTEXATTRIBI4BVPROC glad_glVertexAttribI4bv; +#define glVertexAttribI4bv glad_glVertexAttribI4bv +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVPROC)(GLuint index, const GLshort* v); +GLAPI PFNGLVERTEXATTRIBI4SVPROC glad_glVertexAttribI4sv; +#define glVertexAttribI4sv glad_glVertexAttribI4sv +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVPROC)(GLuint index, const GLubyte* v); +GLAPI PFNGLVERTEXATTRIBI4UBVPROC glad_glVertexAttribI4ubv; +#define glVertexAttribI4ubv glad_glVertexAttribI4ubv +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVPROC)(GLuint index, const GLushort* v); +GLAPI PFNGLVERTEXATTRIBI4USVPROC glad_glVertexAttribI4usv; +#define glVertexAttribI4usv glad_glVertexAttribI4usv +typedef void (APIENTRYP PFNGLGETUNIFORMUIVPROC)(GLuint program, GLint location, GLuint* params); +GLAPI PFNGLGETUNIFORMUIVPROC glad_glGetUniformuiv; +#define glGetUniformuiv glad_glGetUniformuiv +typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONPROC)(GLuint program, GLuint color, const GLchar* name); +GLAPI PFNGLBINDFRAGDATALOCATIONPROC glad_glBindFragDataLocation; +#define glBindFragDataLocation glad_glBindFragDataLocation +typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONPROC)(GLuint program, const GLchar* name); +GLAPI PFNGLGETFRAGDATALOCATIONPROC glad_glGetFragDataLocation; +#define glGetFragDataLocation glad_glGetFragDataLocation +typedef void (APIENTRYP PFNGLUNIFORM1UIPROC)(GLint location, GLuint v0); +GLAPI PFNGLUNIFORM1UIPROC glad_glUniform1ui; +#define glUniform1ui glad_glUniform1ui +typedef void (APIENTRYP PFNGLUNIFORM2UIPROC)(GLint location, GLuint v0, GLuint v1); +GLAPI PFNGLUNIFORM2UIPROC glad_glUniform2ui; +#define glUniform2ui glad_glUniform2ui +typedef void (APIENTRYP PFNGLUNIFORM3UIPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2); +GLAPI PFNGLUNIFORM3UIPROC glad_glUniform3ui; +#define glUniform3ui glad_glUniform3ui +typedef void (APIENTRYP PFNGLUNIFORM4UIPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +GLAPI PFNGLUNIFORM4UIPROC glad_glUniform4ui; +#define glUniform4ui glad_glUniform4ui +typedef void (APIENTRYP PFNGLUNIFORM1UIVPROC)(GLint location, GLsizei count, const GLuint* value); +GLAPI PFNGLUNIFORM1UIVPROC glad_glUniform1uiv; +#define glUniform1uiv glad_glUniform1uiv +typedef void (APIENTRYP PFNGLUNIFORM2UIVPROC)(GLint location, GLsizei count, const GLuint* value); +GLAPI PFNGLUNIFORM2UIVPROC glad_glUniform2uiv; +#define glUniform2uiv glad_glUniform2uiv +typedef void (APIENTRYP PFNGLUNIFORM3UIVPROC)(GLint location, GLsizei count, const GLuint* value); +GLAPI PFNGLUNIFORM3UIVPROC glad_glUniform3uiv; +#define glUniform3uiv glad_glUniform3uiv +typedef void (APIENTRYP PFNGLUNIFORM4UIVPROC)(GLint location, GLsizei count, const GLuint* value); +GLAPI PFNGLUNIFORM4UIVPROC glad_glUniform4uiv; +#define glUniform4uiv glad_glUniform4uiv +typedef void (APIENTRYP PFNGLTEXPARAMETERIIVPROC)(GLenum target, GLenum pname, const GLint* params); +GLAPI PFNGLTEXPARAMETERIIVPROC glad_glTexParameterIiv; +#define glTexParameterIiv glad_glTexParameterIiv +typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVPROC)(GLenum target, GLenum pname, const GLuint* params); +GLAPI PFNGLTEXPARAMETERIUIVPROC glad_glTexParameterIuiv; +#define glTexParameterIuiv glad_glTexParameterIuiv +typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVPROC)(GLenum target, GLenum pname, GLint* params); +GLAPI PFNGLGETTEXPARAMETERIIVPROC glad_glGetTexParameterIiv; +#define glGetTexParameterIiv glad_glGetTexParameterIiv +typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVPROC)(GLenum target, GLenum pname, GLuint* params); +GLAPI PFNGLGETTEXPARAMETERIUIVPROC glad_glGetTexParameterIuiv; +#define glGetTexParameterIuiv glad_glGetTexParameterIuiv +typedef void (APIENTRYP PFNGLCLEARBUFFERIVPROC)(GLenum buffer, GLint drawbuffer, const GLint* value); +GLAPI PFNGLCLEARBUFFERIVPROC glad_glClearBufferiv; +#define glClearBufferiv glad_glClearBufferiv +typedef void (APIENTRYP PFNGLCLEARBUFFERUIVPROC)(GLenum buffer, GLint drawbuffer, const GLuint* value); +GLAPI PFNGLCLEARBUFFERUIVPROC glad_glClearBufferuiv; +#define glClearBufferuiv glad_glClearBufferuiv +typedef void (APIENTRYP PFNGLCLEARBUFFERFVPROC)(GLenum buffer, GLint drawbuffer, const GLfloat* value); +GLAPI PFNGLCLEARBUFFERFVPROC glad_glClearBufferfv; +#define glClearBufferfv glad_glClearBufferfv +typedef void (APIENTRYP PFNGLCLEARBUFFERFIPROC)(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); +GLAPI PFNGLCLEARBUFFERFIPROC glad_glClearBufferfi; +#define glClearBufferfi glad_glClearBufferfi +typedef const GLubyte* (APIENTRYP PFNGLGETSTRINGIPROC)(GLenum name, GLuint index); +GLAPI PFNGLGETSTRINGIPROC glad_glGetStringi; +#define glGetStringi glad_glGetStringi +typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFERPROC)(GLuint renderbuffer); +GLAPI PFNGLISRENDERBUFFERPROC glad_glIsRenderbuffer; +#define glIsRenderbuffer glad_glIsRenderbuffer +typedef void (APIENTRYP PFNGLBINDRENDERBUFFERPROC)(GLenum target, GLuint renderbuffer); +GLAPI PFNGLBINDRENDERBUFFERPROC glad_glBindRenderbuffer; +#define glBindRenderbuffer glad_glBindRenderbuffer +typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSPROC)(GLsizei n, const GLuint* renderbuffers); +GLAPI PFNGLDELETERENDERBUFFERSPROC glad_glDeleteRenderbuffers; +#define glDeleteRenderbuffers glad_glDeleteRenderbuffers +typedef void (APIENTRYP PFNGLGENRENDERBUFFERSPROC)(GLsizei n, GLuint* renderbuffers); +GLAPI PFNGLGENRENDERBUFFERSPROC glad_glGenRenderbuffers; +#define glGenRenderbuffers glad_glGenRenderbuffers +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI PFNGLRENDERBUFFERSTORAGEPROC glad_glRenderbufferStorage; +#define glRenderbufferStorage glad_glRenderbufferStorage +typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint* params); +GLAPI PFNGLGETRENDERBUFFERPARAMETERIVPROC glad_glGetRenderbufferParameteriv; +#define glGetRenderbufferParameteriv glad_glGetRenderbufferParameteriv +typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFERPROC)(GLuint framebuffer); +GLAPI PFNGLISFRAMEBUFFERPROC glad_glIsFramebuffer; +#define glIsFramebuffer glad_glIsFramebuffer +typedef void (APIENTRYP PFNGLBINDFRAMEBUFFERPROC)(GLenum target, GLuint framebuffer); +GLAPI PFNGLBINDFRAMEBUFFERPROC glad_glBindFramebuffer; +#define glBindFramebuffer glad_glBindFramebuffer +typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC)(GLsizei n, const GLuint* framebuffers); +GLAPI PFNGLDELETEFRAMEBUFFERSPROC glad_glDeleteFramebuffers; +#define glDeleteFramebuffers glad_glDeleteFramebuffers +typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSPROC)(GLsizei n, GLuint* framebuffers); +GLAPI PFNGLGENFRAMEBUFFERSPROC glad_glGenFramebuffers; +#define glGenFramebuffers glad_glGenFramebuffers +typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC)(GLenum target); +GLAPI PFNGLCHECKFRAMEBUFFERSTATUSPROC glad_glCheckFramebufferStatus; +#define glCheckFramebufferStatus glad_glCheckFramebufferStatus +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI PFNGLFRAMEBUFFERTEXTURE1DPROC glad_glFramebufferTexture1D; +#define glFramebufferTexture1D glad_glFramebufferTexture1D +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI PFNGLFRAMEBUFFERTEXTURE2DPROC glad_glFramebufferTexture2D; +#define glFramebufferTexture2D glad_glFramebufferTexture2D +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +GLAPI PFNGLFRAMEBUFFERTEXTURE3DPROC glad_glFramebufferTexture3D; +#define glFramebufferTexture3D glad_glFramebufferTexture3D +typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +GLAPI PFNGLFRAMEBUFFERRENDERBUFFERPROC glad_glFramebufferRenderbuffer; +#define glFramebufferRenderbuffer glad_glFramebufferRenderbuffer +typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)(GLenum target, GLenum attachment, GLenum pname, GLint* params); +GLAPI PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetFramebufferAttachmentParameteriv; +#define glGetFramebufferAttachmentParameteriv glad_glGetFramebufferAttachmentParameteriv +typedef void (APIENTRYP PFNGLGENERATEMIPMAPPROC)(GLenum target); +GLAPI PFNGLGENERATEMIPMAPPROC glad_glGenerateMipmap; +#define glGenerateMipmap glad_glGenerateMipmap +typedef void (APIENTRYP PFNGLBLITFRAMEBUFFERPROC)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +GLAPI PFNGLBLITFRAMEBUFFERPROC glad_glBlitFramebuffer; +#define glBlitFramebuffer glad_glBlitFramebuffer +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glRenderbufferStorageMultisample; +#define glRenderbufferStorageMultisample glad_glRenderbufferStorageMultisample +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +GLAPI PFNGLFRAMEBUFFERTEXTURELAYERPROC glad_glFramebufferTextureLayer; +#define glFramebufferTextureLayer glad_glFramebufferTextureLayer +typedef void* (APIENTRYP PFNGLMAPBUFFERRANGEPROC)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); +GLAPI PFNGLMAPBUFFERRANGEPROC glad_glMapBufferRange; +#define glMapBufferRange glad_glMapBufferRange +typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEPROC)(GLenum target, GLintptr offset, GLsizeiptr length); +GLAPI PFNGLFLUSHMAPPEDBUFFERRANGEPROC glad_glFlushMappedBufferRange; +#define glFlushMappedBufferRange glad_glFlushMappedBufferRange +typedef void (APIENTRYP PFNGLBINDVERTEXARRAYPROC)(GLuint array); +GLAPI PFNGLBINDVERTEXARRAYPROC glad_glBindVertexArray; +#define glBindVertexArray glad_glBindVertexArray +typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSPROC)(GLsizei n, const GLuint* arrays); +GLAPI PFNGLDELETEVERTEXARRAYSPROC glad_glDeleteVertexArrays; +#define glDeleteVertexArrays glad_glDeleteVertexArrays +typedef void (APIENTRYP PFNGLGENVERTEXARRAYSPROC)(GLsizei n, GLuint* arrays); +GLAPI PFNGLGENVERTEXARRAYSPROC glad_glGenVertexArrays; +#define glGenVertexArrays glad_glGenVertexArrays +typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYPROC)(GLuint array); +GLAPI PFNGLISVERTEXARRAYPROC glad_glIsVertexArray; +#define glIsVertexArray glad_glIsVertexArray +#endif +#ifndef GL_VERSION_3_1 +#define GL_VERSION_3_1 1 +GLAPI int GLAD_GL_VERSION_3_1; +typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDPROC)(GLenum mode, GLint first, GLsizei count, GLsizei instancecount); +GLAPI PFNGLDRAWARRAYSINSTANCEDPROC glad_glDrawArraysInstanced; +#define glDrawArraysInstanced glad_glDrawArraysInstanced +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDPROC)(GLenum mode, GLsizei count, GLenum type, const void* indices, GLsizei instancecount); +GLAPI PFNGLDRAWELEMENTSINSTANCEDPROC glad_glDrawElementsInstanced; +#define glDrawElementsInstanced glad_glDrawElementsInstanced +typedef void (APIENTRYP PFNGLTEXBUFFERPROC)(GLenum target, GLenum internalformat, GLuint buffer); +GLAPI PFNGLTEXBUFFERPROC glad_glTexBuffer; +#define glTexBuffer glad_glTexBuffer +typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXPROC)(GLuint index); +GLAPI PFNGLPRIMITIVERESTARTINDEXPROC glad_glPrimitiveRestartIndex; +#define glPrimitiveRestartIndex glad_glPrimitiveRestartIndex +typedef void (APIENTRYP PFNGLCOPYBUFFERSUBDATAPROC)(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +GLAPI PFNGLCOPYBUFFERSUBDATAPROC glad_glCopyBufferSubData; +#define glCopyBufferSubData glad_glCopyBufferSubData +typedef void (APIENTRYP PFNGLGETUNIFORMINDICESPROC)(GLuint program, GLsizei uniformCount, const GLchar** uniformNames, GLuint* uniformIndices); +GLAPI PFNGLGETUNIFORMINDICESPROC glad_glGetUniformIndices; +#define glGetUniformIndices glad_glGetUniformIndices +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMSIVPROC)(GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params); +GLAPI PFNGLGETACTIVEUNIFORMSIVPROC glad_glGetActiveUniformsiv; +#define glGetActiveUniformsiv glad_glGetActiveUniformsiv +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMNAMEPROC)(GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformName); +GLAPI PFNGLGETACTIVEUNIFORMNAMEPROC glad_glGetActiveUniformName; +#define glGetActiveUniformName glad_glGetActiveUniformName +typedef GLuint (APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC)(GLuint program, const GLchar* uniformBlockName); +GLAPI PFNGLGETUNIFORMBLOCKINDEXPROC glad_glGetUniformBlockIndex; +#define glGetUniformBlockIndex glad_glGetUniformBlockIndex +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVPROC)(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params); +GLAPI PFNGLGETACTIVEUNIFORMBLOCKIVPROC glad_glGetActiveUniformBlockiv; +#define glGetActiveUniformBlockiv glad_glGetActiveUniformBlockiv +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC)(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName); +GLAPI PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glad_glGetActiveUniformBlockName; +#define glGetActiveUniformBlockName glad_glGetActiveUniformBlockName +typedef void (APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC)(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); +GLAPI PFNGLUNIFORMBLOCKBINDINGPROC glad_glUniformBlockBinding; +#define glUniformBlockBinding glad_glUniformBlockBinding +#endif +#ifndef GL_VERSION_3_2 +#define GL_VERSION_3_2 1 +GLAPI int GLAD_GL_VERSION_3_2; +typedef void (APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXPROC)(GLenum mode, GLsizei count, GLenum type, const void* indices, GLint basevertex); +GLAPI PFNGLDRAWELEMENTSBASEVERTEXPROC glad_glDrawElementsBaseVertex; +#define glDrawElementsBaseVertex glad_glDrawElementsBaseVertex +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void* indices, GLint basevertex); +GLAPI PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glad_glDrawRangeElementsBaseVertex; +#define glDrawRangeElementsBaseVertex glad_glDrawRangeElementsBaseVertex +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC)(GLenum mode, GLsizei count, GLenum type, const void* indices, GLsizei instancecount, GLint basevertex); +GLAPI PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glad_glDrawElementsInstancedBaseVertex; +#define glDrawElementsInstancedBaseVertex glad_glDrawElementsInstancedBaseVertex +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC)(GLenum mode, const GLsizei* count, GLenum type, const void** indices, GLsizei drawcount, const GLint* basevertex); +GLAPI PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glad_glMultiDrawElementsBaseVertex; +#define glMultiDrawElementsBaseVertex glad_glMultiDrawElementsBaseVertex +typedef void (APIENTRYP PFNGLPROVOKINGVERTEXPROC)(GLenum mode); +GLAPI PFNGLPROVOKINGVERTEXPROC glad_glProvokingVertex; +#define glProvokingVertex glad_glProvokingVertex +typedef GLsync (APIENTRYP PFNGLFENCESYNCPROC)(GLenum condition, GLbitfield flags); +GLAPI PFNGLFENCESYNCPROC glad_glFenceSync; +#define glFenceSync glad_glFenceSync +typedef GLboolean (APIENTRYP PFNGLISSYNCPROC)(GLsync sync); +GLAPI PFNGLISSYNCPROC glad_glIsSync; +#define glIsSync glad_glIsSync +typedef void (APIENTRYP PFNGLDELETESYNCPROC)(GLsync sync); +GLAPI PFNGLDELETESYNCPROC glad_glDeleteSync; +#define glDeleteSync glad_glDeleteSync +typedef GLenum (APIENTRYP PFNGLCLIENTWAITSYNCPROC)(GLsync sync, GLbitfield flags, GLuint64 timeout); +GLAPI PFNGLCLIENTWAITSYNCPROC glad_glClientWaitSync; +#define glClientWaitSync glad_glClientWaitSync +typedef void (APIENTRYP PFNGLWAITSYNCPROC)(GLsync sync, GLbitfield flags, GLuint64 timeout); +GLAPI PFNGLWAITSYNCPROC glad_glWaitSync; +#define glWaitSync glad_glWaitSync +typedef void (APIENTRYP PFNGLGETINTEGER64VPROC)(GLenum pname, GLint64* data); +GLAPI PFNGLGETINTEGER64VPROC glad_glGetInteger64v; +#define glGetInteger64v glad_glGetInteger64v +typedef void (APIENTRYP PFNGLGETSYNCIVPROC)(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values); +GLAPI PFNGLGETSYNCIVPROC glad_glGetSynciv; +#define glGetSynciv glad_glGetSynciv +typedef void (APIENTRYP PFNGLGETINTEGER64I_VPROC)(GLenum target, GLuint index, GLint64* data); +GLAPI PFNGLGETINTEGER64I_VPROC glad_glGetInteger64i_v; +#define glGetInteger64i_v glad_glGetInteger64i_v +typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERI64VPROC)(GLenum target, GLenum pname, GLint64* params); +GLAPI PFNGLGETBUFFERPARAMETERI64VPROC glad_glGetBufferParameteri64v; +#define glGetBufferParameteri64v glad_glGetBufferParameteri64v +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level); +GLAPI PFNGLFRAMEBUFFERTEXTUREPROC glad_glFramebufferTexture; +#define glFramebufferTexture glad_glFramebufferTexture +typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +GLAPI PFNGLTEXIMAGE2DMULTISAMPLEPROC glad_glTexImage2DMultisample; +#define glTexImage2DMultisample glad_glTexImage2DMultisample +typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +GLAPI PFNGLTEXIMAGE3DMULTISAMPLEPROC glad_glTexImage3DMultisample; +#define glTexImage3DMultisample glad_glTexImage3DMultisample +typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVPROC)(GLenum pname, GLuint index, GLfloat* val); +GLAPI PFNGLGETMULTISAMPLEFVPROC glad_glGetMultisamplefv; +#define glGetMultisamplefv glad_glGetMultisamplefv +typedef void (APIENTRYP PFNGLSAMPLEMASKIPROC)(GLuint maskNumber, GLbitfield mask); +GLAPI PFNGLSAMPLEMASKIPROC glad_glSampleMaski; +#define glSampleMaski glad_glSampleMaski +#endif +#ifndef GL_VERSION_3_3 +#define GL_VERSION_3_3 1 +GLAPI int GLAD_GL_VERSION_3_3; +typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONINDEXEDPROC)(GLuint program, GLuint colorNumber, GLuint index, const GLchar* name); +GLAPI PFNGLBINDFRAGDATALOCATIONINDEXEDPROC glad_glBindFragDataLocationIndexed; +#define glBindFragDataLocationIndexed glad_glBindFragDataLocationIndexed +typedef GLint (APIENTRYP PFNGLGETFRAGDATAINDEXPROC)(GLuint program, const GLchar* name); +GLAPI PFNGLGETFRAGDATAINDEXPROC glad_glGetFragDataIndex; +#define glGetFragDataIndex glad_glGetFragDataIndex +typedef void (APIENTRYP PFNGLGENSAMPLERSPROC)(GLsizei count, GLuint* samplers); +GLAPI PFNGLGENSAMPLERSPROC glad_glGenSamplers; +#define glGenSamplers glad_glGenSamplers +typedef void (APIENTRYP PFNGLDELETESAMPLERSPROC)(GLsizei count, const GLuint* samplers); +GLAPI PFNGLDELETESAMPLERSPROC glad_glDeleteSamplers; +#define glDeleteSamplers glad_glDeleteSamplers +typedef GLboolean (APIENTRYP PFNGLISSAMPLERPROC)(GLuint sampler); +GLAPI PFNGLISSAMPLERPROC glad_glIsSampler; +#define glIsSampler glad_glIsSampler +typedef void (APIENTRYP PFNGLBINDSAMPLERPROC)(GLuint unit, GLuint sampler); +GLAPI PFNGLBINDSAMPLERPROC glad_glBindSampler; +#define glBindSampler glad_glBindSampler +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIPROC)(GLuint sampler, GLenum pname, GLint param); +GLAPI PFNGLSAMPLERPARAMETERIPROC glad_glSamplerParameteri; +#define glSamplerParameteri glad_glSamplerParameteri +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIVPROC)(GLuint sampler, GLenum pname, const GLint* param); +GLAPI PFNGLSAMPLERPARAMETERIVPROC glad_glSamplerParameteriv; +#define glSamplerParameteriv glad_glSamplerParameteriv +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFPROC)(GLuint sampler, GLenum pname, GLfloat param); +GLAPI PFNGLSAMPLERPARAMETERFPROC glad_glSamplerParameterf; +#define glSamplerParameterf glad_glSamplerParameterf +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFVPROC)(GLuint sampler, GLenum pname, const GLfloat* param); +GLAPI PFNGLSAMPLERPARAMETERFVPROC glad_glSamplerParameterfv; +#define glSamplerParameterfv glad_glSamplerParameterfv +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIIVPROC)(GLuint sampler, GLenum pname, const GLint* param); +GLAPI PFNGLSAMPLERPARAMETERIIVPROC glad_glSamplerParameterIiv; +#define glSamplerParameterIiv glad_glSamplerParameterIiv +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIUIVPROC)(GLuint sampler, GLenum pname, const GLuint* param); +GLAPI PFNGLSAMPLERPARAMETERIUIVPROC glad_glSamplerParameterIuiv; +#define glSamplerParameterIuiv glad_glSamplerParameterIuiv +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIVPROC)(GLuint sampler, GLenum pname, GLint* params); +GLAPI PFNGLGETSAMPLERPARAMETERIVPROC glad_glGetSamplerParameteriv; +#define glGetSamplerParameteriv glad_glGetSamplerParameteriv +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIIVPROC)(GLuint sampler, GLenum pname, GLint* params); +GLAPI PFNGLGETSAMPLERPARAMETERIIVPROC glad_glGetSamplerParameterIiv; +#define glGetSamplerParameterIiv glad_glGetSamplerParameterIiv +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERFVPROC)(GLuint sampler, GLenum pname, GLfloat* params); +GLAPI PFNGLGETSAMPLERPARAMETERFVPROC glad_glGetSamplerParameterfv; +#define glGetSamplerParameterfv glad_glGetSamplerParameterfv +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVPROC)(GLuint sampler, GLenum pname, GLuint* params); +GLAPI PFNGLGETSAMPLERPARAMETERIUIVPROC glad_glGetSamplerParameterIuiv; +#define glGetSamplerParameterIuiv glad_glGetSamplerParameterIuiv +typedef void (APIENTRYP PFNGLQUERYCOUNTERPROC)(GLuint id, GLenum target); +GLAPI PFNGLQUERYCOUNTERPROC glad_glQueryCounter; +#define glQueryCounter glad_glQueryCounter +typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VPROC)(GLuint id, GLenum pname, GLint64* params); +GLAPI PFNGLGETQUERYOBJECTI64VPROC glad_glGetQueryObjecti64v; +#define glGetQueryObjecti64v glad_glGetQueryObjecti64v +typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VPROC)(GLuint id, GLenum pname, GLuint64* params); +GLAPI PFNGLGETQUERYOBJECTUI64VPROC glad_glGetQueryObjectui64v; +#define glGetQueryObjectui64v glad_glGetQueryObjectui64v +typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORPROC)(GLuint index, GLuint divisor); +GLAPI PFNGLVERTEXATTRIBDIVISORPROC glad_glVertexAttribDivisor; +#define glVertexAttribDivisor glad_glVertexAttribDivisor +typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); +GLAPI PFNGLVERTEXATTRIBP1UIPROC glad_glVertexAttribP1ui; +#define glVertexAttribP1ui glad_glVertexAttribP1ui +typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint* value); +GLAPI PFNGLVERTEXATTRIBP1UIVPROC glad_glVertexAttribP1uiv; +#define glVertexAttribP1uiv glad_glVertexAttribP1uiv +typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); +GLAPI PFNGLVERTEXATTRIBP2UIPROC glad_glVertexAttribP2ui; +#define glVertexAttribP2ui glad_glVertexAttribP2ui +typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint* value); +GLAPI PFNGLVERTEXATTRIBP2UIVPROC glad_glVertexAttribP2uiv; +#define glVertexAttribP2uiv glad_glVertexAttribP2uiv +typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); +GLAPI PFNGLVERTEXATTRIBP3UIPROC glad_glVertexAttribP3ui; +#define glVertexAttribP3ui glad_glVertexAttribP3ui +typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint* value); +GLAPI PFNGLVERTEXATTRIBP3UIVPROC glad_glVertexAttribP3uiv; +#define glVertexAttribP3uiv glad_glVertexAttribP3uiv +typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); +GLAPI PFNGLVERTEXATTRIBP4UIPROC glad_glVertexAttribP4ui; +#define glVertexAttribP4ui glad_glVertexAttribP4ui +typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint* value); +GLAPI PFNGLVERTEXATTRIBP4UIVPROC glad_glVertexAttribP4uiv; +#define glVertexAttribP4uiv glad_glVertexAttribP4uiv +typedef void (APIENTRYP PFNGLVERTEXP2UIPROC)(GLenum type, GLuint value); +GLAPI PFNGLVERTEXP2UIPROC glad_glVertexP2ui; +#define glVertexP2ui glad_glVertexP2ui +typedef void (APIENTRYP PFNGLVERTEXP2UIVPROC)(GLenum type, const GLuint* value); +GLAPI PFNGLVERTEXP2UIVPROC glad_glVertexP2uiv; +#define glVertexP2uiv glad_glVertexP2uiv +typedef void (APIENTRYP PFNGLVERTEXP3UIPROC)(GLenum type, GLuint value); +GLAPI PFNGLVERTEXP3UIPROC glad_glVertexP3ui; +#define glVertexP3ui glad_glVertexP3ui +typedef void (APIENTRYP PFNGLVERTEXP3UIVPROC)(GLenum type, const GLuint* value); +GLAPI PFNGLVERTEXP3UIVPROC glad_glVertexP3uiv; +#define glVertexP3uiv glad_glVertexP3uiv +typedef void (APIENTRYP PFNGLVERTEXP4UIPROC)(GLenum type, GLuint value); +GLAPI PFNGLVERTEXP4UIPROC glad_glVertexP4ui; +#define glVertexP4ui glad_glVertexP4ui +typedef void (APIENTRYP PFNGLVERTEXP4UIVPROC)(GLenum type, const GLuint* value); +GLAPI PFNGLVERTEXP4UIVPROC glad_glVertexP4uiv; +#define glVertexP4uiv glad_glVertexP4uiv +typedef void (APIENTRYP PFNGLTEXCOORDP1UIPROC)(GLenum type, GLuint coords); +GLAPI PFNGLTEXCOORDP1UIPROC glad_glTexCoordP1ui; +#define glTexCoordP1ui glad_glTexCoordP1ui +typedef void (APIENTRYP PFNGLTEXCOORDP1UIVPROC)(GLenum type, const GLuint* coords); +GLAPI PFNGLTEXCOORDP1UIVPROC glad_glTexCoordP1uiv; +#define glTexCoordP1uiv glad_glTexCoordP1uiv +typedef void (APIENTRYP PFNGLTEXCOORDP2UIPROC)(GLenum type, GLuint coords); +GLAPI PFNGLTEXCOORDP2UIPROC glad_glTexCoordP2ui; +#define glTexCoordP2ui glad_glTexCoordP2ui +typedef void (APIENTRYP PFNGLTEXCOORDP2UIVPROC)(GLenum type, const GLuint* coords); +GLAPI PFNGLTEXCOORDP2UIVPROC glad_glTexCoordP2uiv; +#define glTexCoordP2uiv glad_glTexCoordP2uiv +typedef void (APIENTRYP PFNGLTEXCOORDP3UIPROC)(GLenum type, GLuint coords); +GLAPI PFNGLTEXCOORDP3UIPROC glad_glTexCoordP3ui; +#define glTexCoordP3ui glad_glTexCoordP3ui +typedef void (APIENTRYP PFNGLTEXCOORDP3UIVPROC)(GLenum type, const GLuint* coords); +GLAPI PFNGLTEXCOORDP3UIVPROC glad_glTexCoordP3uiv; +#define glTexCoordP3uiv glad_glTexCoordP3uiv +typedef void (APIENTRYP PFNGLTEXCOORDP4UIPROC)(GLenum type, GLuint coords); +GLAPI PFNGLTEXCOORDP4UIPROC glad_glTexCoordP4ui; +#define glTexCoordP4ui glad_glTexCoordP4ui +typedef void (APIENTRYP PFNGLTEXCOORDP4UIVPROC)(GLenum type, const GLuint* coords); +GLAPI PFNGLTEXCOORDP4UIVPROC glad_glTexCoordP4uiv; +#define glTexCoordP4uiv glad_glTexCoordP4uiv +typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIPROC)(GLenum texture, GLenum type, GLuint coords); +GLAPI PFNGLMULTITEXCOORDP1UIPROC glad_glMultiTexCoordP1ui; +#define glMultiTexCoordP1ui glad_glMultiTexCoordP1ui +typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIVPROC)(GLenum texture, GLenum type, const GLuint* coords); +GLAPI PFNGLMULTITEXCOORDP1UIVPROC glad_glMultiTexCoordP1uiv; +#define glMultiTexCoordP1uiv glad_glMultiTexCoordP1uiv +typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIPROC)(GLenum texture, GLenum type, GLuint coords); +GLAPI PFNGLMULTITEXCOORDP2UIPROC glad_glMultiTexCoordP2ui; +#define glMultiTexCoordP2ui glad_glMultiTexCoordP2ui +typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIVPROC)(GLenum texture, GLenum type, const GLuint* coords); +GLAPI PFNGLMULTITEXCOORDP2UIVPROC glad_glMultiTexCoordP2uiv; +#define glMultiTexCoordP2uiv glad_glMultiTexCoordP2uiv +typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIPROC)(GLenum texture, GLenum type, GLuint coords); +GLAPI PFNGLMULTITEXCOORDP3UIPROC glad_glMultiTexCoordP3ui; +#define glMultiTexCoordP3ui glad_glMultiTexCoordP3ui +typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIVPROC)(GLenum texture, GLenum type, const GLuint* coords); +GLAPI PFNGLMULTITEXCOORDP3UIVPROC glad_glMultiTexCoordP3uiv; +#define glMultiTexCoordP3uiv glad_glMultiTexCoordP3uiv +typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIPROC)(GLenum texture, GLenum type, GLuint coords); +GLAPI PFNGLMULTITEXCOORDP4UIPROC glad_glMultiTexCoordP4ui; +#define glMultiTexCoordP4ui glad_glMultiTexCoordP4ui +typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIVPROC)(GLenum texture, GLenum type, const GLuint* coords); +GLAPI PFNGLMULTITEXCOORDP4UIVPROC glad_glMultiTexCoordP4uiv; +#define glMultiTexCoordP4uiv glad_glMultiTexCoordP4uiv +typedef void (APIENTRYP PFNGLNORMALP3UIPROC)(GLenum type, GLuint coords); +GLAPI PFNGLNORMALP3UIPROC glad_glNormalP3ui; +#define glNormalP3ui glad_glNormalP3ui +typedef void (APIENTRYP PFNGLNORMALP3UIVPROC)(GLenum type, const GLuint* coords); +GLAPI PFNGLNORMALP3UIVPROC glad_glNormalP3uiv; +#define glNormalP3uiv glad_glNormalP3uiv +typedef void (APIENTRYP PFNGLCOLORP3UIPROC)(GLenum type, GLuint color); +GLAPI PFNGLCOLORP3UIPROC glad_glColorP3ui; +#define glColorP3ui glad_glColorP3ui +typedef void (APIENTRYP PFNGLCOLORP3UIVPROC)(GLenum type, const GLuint* color); +GLAPI PFNGLCOLORP3UIVPROC glad_glColorP3uiv; +#define glColorP3uiv glad_glColorP3uiv +typedef void (APIENTRYP PFNGLCOLORP4UIPROC)(GLenum type, GLuint color); +GLAPI PFNGLCOLORP4UIPROC glad_glColorP4ui; +#define glColorP4ui glad_glColorP4ui +typedef void (APIENTRYP PFNGLCOLORP4UIVPROC)(GLenum type, const GLuint* color); +GLAPI PFNGLCOLORP4UIVPROC glad_glColorP4uiv; +#define glColorP4uiv glad_glColorP4uiv +typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIPROC)(GLenum type, GLuint color); +GLAPI PFNGLSECONDARYCOLORP3UIPROC glad_glSecondaryColorP3ui; +#define glSecondaryColorP3ui glad_glSecondaryColorP3ui +typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIVPROC)(GLenum type, const GLuint* color); +GLAPI PFNGLSECONDARYCOLORP3UIVPROC glad_glSecondaryColorP3uiv; +#define glSecondaryColorP3uiv glad_glSecondaryColorP3uiv +#endif +#define GL_MAX_DEBUG_MESSAGE_LENGTH_AMD 0x9143 +#define GL_MAX_DEBUG_LOGGED_MESSAGES_AMD 0x9144 +#define GL_DEBUG_LOGGED_MESSAGES_AMD 0x9145 +#define GL_DEBUG_SEVERITY_HIGH_AMD 0x9146 +#define GL_DEBUG_SEVERITY_MEDIUM_AMD 0x9147 +#define GL_DEBUG_SEVERITY_LOW_AMD 0x9148 +#define GL_DEBUG_CATEGORY_API_ERROR_AMD 0x9149 +#define GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD 0x914A +#define GL_DEBUG_CATEGORY_DEPRECATION_AMD 0x914B +#define GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD 0x914C +#define GL_DEBUG_CATEGORY_PERFORMANCE_AMD 0x914D +#define GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD 0x914E +#define GL_DEBUG_CATEGORY_APPLICATION_AMD 0x914F +#define GL_DEBUG_CATEGORY_OTHER_AMD 0x9150 +#define GL_QUERY_BUFFER_AMD 0x9192 +#define GL_QUERY_BUFFER_BINDING_AMD 0x9193 +#define GL_QUERY_RESULT_NO_WAIT_AMD 0x9194 +#define GL_FIXED 0x140C +#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A +#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B +#define GL_LOW_FLOAT 0x8DF0 +#define GL_MEDIUM_FLOAT 0x8DF1 +#define GL_HIGH_FLOAT 0x8DF2 +#define GL_LOW_INT 0x8DF3 +#define GL_MEDIUM_INT 0x8DF4 +#define GL_HIGH_INT 0x8DF5 +#define GL_SHADER_COMPILER 0x8DFA +#define GL_SHADER_BINARY_FORMATS 0x8DF8 +#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 +#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB +#define GL_MAX_VARYING_VECTORS 0x8DFC +#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD +#define GL_RGB565 0x8D62 +#define GL_COMPRESSED_RGB8_ETC2 0x9274 +#define GL_COMPRESSED_SRGB8_ETC2 0x9275 +#define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276 +#define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277 +#define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278 +#define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279 +#define GL_COMPRESSED_R11_EAC 0x9270 +#define GL_COMPRESSED_SIGNED_R11_EAC 0x9271 +#define GL_COMPRESSED_RG11_EAC 0x9272 +#define GL_COMPRESSED_SIGNED_RG11_EAC 0x9273 +#define GL_PRIMITIVE_RESTART_FIXED_INDEX 0x8D69 +#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE 0x8D6A +#define GL_MAX_ELEMENT_INDEX 0x8D6B +#define GL_MAP_PERSISTENT_BIT 0x0040 +#define GL_MAP_COHERENT_BIT 0x0080 +#define GL_DYNAMIC_STORAGE_BIT 0x0100 +#define GL_CLIENT_STORAGE_BIT 0x0200 +#define GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT 0x00004000 +#define GL_BUFFER_IMMUTABLE_STORAGE 0x821F +#define GL_BUFFER_STORAGE_FLAGS 0x8220 +#define GL_UNPACK_COMPRESSED_BLOCK_WIDTH 0x9127 +#define GL_UNPACK_COMPRESSED_BLOCK_HEIGHT 0x9128 +#define GL_UNPACK_COMPRESSED_BLOCK_DEPTH 0x9129 +#define GL_UNPACK_COMPRESSED_BLOCK_SIZE 0x912A +#define GL_PACK_COMPRESSED_BLOCK_WIDTH 0x912B +#define GL_PACK_COMPRESSED_BLOCK_HEIGHT 0x912C +#define GL_PACK_COMPRESSED_BLOCK_DEPTH 0x912D +#define GL_PACK_COMPRESSED_BLOCK_SIZE 0x912E +#define GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB 0x8242 +#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB 0x8243 +#define GL_DEBUG_CALLBACK_FUNCTION_ARB 0x8244 +#define GL_DEBUG_CALLBACK_USER_PARAM_ARB 0x8245 +#define GL_DEBUG_SOURCE_API_ARB 0x8246 +#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB 0x8247 +#define GL_DEBUG_SOURCE_SHADER_COMPILER_ARB 0x8248 +#define GL_DEBUG_SOURCE_THIRD_PARTY_ARB 0x8249 +#define GL_DEBUG_SOURCE_APPLICATION_ARB 0x824A +#define GL_DEBUG_SOURCE_OTHER_ARB 0x824B +#define GL_DEBUG_TYPE_ERROR_ARB 0x824C +#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB 0x824D +#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB 0x824E +#define GL_DEBUG_TYPE_PORTABILITY_ARB 0x824F +#define GL_DEBUG_TYPE_PERFORMANCE_ARB 0x8250 +#define GL_DEBUG_TYPE_OTHER_ARB 0x8251 +#define GL_MAX_DEBUG_MESSAGE_LENGTH_ARB 0x9143 +#define GL_MAX_DEBUG_LOGGED_MESSAGES_ARB 0x9144 +#define GL_DEBUG_LOGGED_MESSAGES_ARB 0x9145 +#define GL_DEBUG_SEVERITY_HIGH_ARB 0x9146 +#define GL_DEBUG_SEVERITY_MEDIUM_ARB 0x9147 +#define GL_DEBUG_SEVERITY_LOW_ARB 0x9148 +#define GL_DEPTH_COMPONENT16_ARB 0x81A5 +#define GL_DEPTH_COMPONENT24_ARB 0x81A6 +#define GL_DEPTH_COMPONENT32_ARB 0x81A7 +#define GL_TEXTURE_DEPTH_SIZE_ARB 0x884A +#define GL_DEPTH_TEXTURE_MODE_ARB 0x884B +#define GL_MAX_DRAW_BUFFERS_ARB 0x8824 +#define GL_DRAW_BUFFER0_ARB 0x8825 +#define GL_DRAW_BUFFER1_ARB 0x8826 +#define GL_DRAW_BUFFER2_ARB 0x8827 +#define GL_DRAW_BUFFER3_ARB 0x8828 +#define GL_DRAW_BUFFER4_ARB 0x8829 +#define GL_DRAW_BUFFER5_ARB 0x882A +#define GL_DRAW_BUFFER6_ARB 0x882B +#define GL_DRAW_BUFFER7_ARB 0x882C +#define GL_DRAW_BUFFER8_ARB 0x882D +#define GL_DRAW_BUFFER9_ARB 0x882E +#define GL_DRAW_BUFFER10_ARB 0x882F +#define GL_DRAW_BUFFER11_ARB 0x8830 +#define GL_DRAW_BUFFER12_ARB 0x8831 +#define GL_DRAW_BUFFER13_ARB 0x8832 +#define GL_DRAW_BUFFER14_ARB 0x8833 +#define GL_DRAW_BUFFER15_ARB 0x8834 +#define GL_MAX_UNIFORM_LOCATIONS 0x826E +#define GL_FRAGMENT_PROGRAM_ARB 0x8804 +#define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875 +#define GL_PROGRAM_LENGTH_ARB 0x8627 +#define GL_PROGRAM_FORMAT_ARB 0x8876 +#define GL_PROGRAM_BINDING_ARB 0x8677 +#define GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0 +#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1 +#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2 +#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3 +#define GL_PROGRAM_TEMPORARIES_ARB 0x88A4 +#define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5 +#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6 +#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7 +#define GL_PROGRAM_PARAMETERS_ARB 0x88A8 +#define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9 +#define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA +#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB +#define GL_PROGRAM_ATTRIBS_ARB 0x88AC +#define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD +#define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE +#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF +#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4 +#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5 +#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6 +#define GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805 +#define GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806 +#define GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807 +#define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808 +#define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809 +#define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A +#define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B +#define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C +#define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D +#define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E +#define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F +#define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810 +#define GL_PROGRAM_STRING_ARB 0x8628 +#define GL_PROGRAM_ERROR_POSITION_ARB 0x864B +#define GL_CURRENT_MATRIX_ARB 0x8641 +#define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7 +#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640 +#define GL_MAX_PROGRAM_MATRICES_ARB 0x862F +#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E +#define GL_MAX_TEXTURE_COORDS_ARB 0x8871 +#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872 +#define GL_PROGRAM_ERROR_STRING_ARB 0x8874 +#define GL_MATRIX0_ARB 0x88C0 +#define GL_MATRIX1_ARB 0x88C1 +#define GL_MATRIX2_ARB 0x88C2 +#define GL_MATRIX3_ARB 0x88C3 +#define GL_MATRIX4_ARB 0x88C4 +#define GL_MATRIX5_ARB 0x88C5 +#define GL_MATRIX6_ARB 0x88C6 +#define GL_MATRIX7_ARB 0x88C7 +#define GL_MATRIX8_ARB 0x88C8 +#define GL_MATRIX9_ARB 0x88C9 +#define GL_MATRIX10_ARB 0x88CA +#define GL_MATRIX11_ARB 0x88CB +#define GL_MATRIX12_ARB 0x88CC +#define GL_MATRIX13_ARB 0x88CD +#define GL_MATRIX14_ARB 0x88CE +#define GL_MATRIX15_ARB 0x88CF +#define GL_MATRIX16_ARB 0x88D0 +#define GL_MATRIX17_ARB 0x88D1 +#define GL_MATRIX18_ARB 0x88D2 +#define GL_MATRIX19_ARB 0x88D3 +#define GL_MATRIX20_ARB 0x88D4 +#define GL_MATRIX21_ARB 0x88D5 +#define GL_MATRIX22_ARB 0x88D6 +#define GL_MATRIX23_ARB 0x88D7 +#define GL_MATRIX24_ARB 0x88D8 +#define GL_MATRIX25_ARB 0x88D9 +#define GL_MATRIX26_ARB 0x88DA +#define GL_MATRIX27_ARB 0x88DB +#define GL_MATRIX28_ARB 0x88DC +#define GL_MATRIX29_ARB 0x88DD +#define GL_MATRIX30_ARB 0x88DE +#define GL_MATRIX31_ARB 0x88DF +#define GL_FRAGMENT_SHADER_ARB 0x8B30 +#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49 +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B +#define GL_MULTISAMPLE_ARB 0x809D +#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F +#define GL_SAMPLE_COVERAGE_ARB 0x80A0 +#define GL_SAMPLE_BUFFERS_ARB 0x80A8 +#define GL_SAMPLES_ARB 0x80A9 +#define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA +#define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB +#define GL_MULTISAMPLE_BIT_ARB 0x20000000 +#define GL_SAMPLE_LOCATION_SUBPIXEL_BITS_ARB 0x933D +#define GL_SAMPLE_LOCATION_PIXEL_GRID_WIDTH_ARB 0x933E +#define GL_SAMPLE_LOCATION_PIXEL_GRID_HEIGHT_ARB 0x933F +#define GL_PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_ARB 0x9340 +#define GL_SAMPLE_LOCATION_ARB 0x8E50 +#define GL_PROGRAMMABLE_SAMPLE_LOCATION_ARB 0x9341 +#define GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_ARB 0x9342 +#define GL_FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_ARB 0x9343 +#define GL_COMPRESSED_ALPHA_ARB 0x84E9 +#define GL_COMPRESSED_LUMINANCE_ARB 0x84EA +#define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB +#define GL_COMPRESSED_INTENSITY_ARB 0x84EC +#define GL_COMPRESSED_RGB_ARB 0x84ED +#define GL_COMPRESSED_RGBA_ARB 0x84EE +#define GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF +#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0 +#define GL_TEXTURE_COMPRESSED_ARB 0x86A1 +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2 +#define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3 +#define GL_TEXTURE_RED_TYPE_ARB 0x8C10 +#define GL_TEXTURE_GREEN_TYPE_ARB 0x8C11 +#define GL_TEXTURE_BLUE_TYPE_ARB 0x8C12 +#define GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13 +#define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14 +#define GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15 +#define GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16 +#define GL_UNSIGNED_NORMALIZED_ARB 0x8C17 +#define GL_RGBA32F_ARB 0x8814 +#define GL_RGB32F_ARB 0x8815 +#define GL_ALPHA32F_ARB 0x8816 +#define GL_INTENSITY32F_ARB 0x8817 +#define GL_LUMINANCE32F_ARB 0x8818 +#define GL_LUMINANCE_ALPHA32F_ARB 0x8819 +#define GL_RGBA16F_ARB 0x881A +#define GL_RGB16F_ARB 0x881B +#define GL_ALPHA16F_ARB 0x881C +#define GL_INTENSITY16F_ARB 0x881D +#define GL_LUMINANCE16F_ARB 0x881E +#define GL_LUMINANCE_ALPHA16F_ARB 0x881F +#define GL_VERTEX_ATTRIB_BINDING 0x82D4 +#define GL_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D5 +#define GL_VERTEX_BINDING_DIVISOR 0x82D6 +#define GL_VERTEX_BINDING_OFFSET 0x82D7 +#define GL_VERTEX_BINDING_STRIDE 0x82D8 +#define GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D9 +#define GL_MAX_VERTEX_ATTRIB_BINDINGS 0x82DA +#define GL_BUFFER_SIZE_ARB 0x8764 +#define GL_BUFFER_USAGE_ARB 0x8765 +#define GL_ARRAY_BUFFER_ARB 0x8892 +#define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893 +#define GL_ARRAY_BUFFER_BINDING_ARB 0x8894 +#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895 +#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896 +#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897 +#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898 +#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899 +#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A +#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B +#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C +#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D +#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E +#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F +#define GL_READ_ONLY_ARB 0x88B8 +#define GL_WRITE_ONLY_ARB 0x88B9 +#define GL_READ_WRITE_ARB 0x88BA +#define GL_BUFFER_ACCESS_ARB 0x88BB +#define GL_BUFFER_MAPPED_ARB 0x88BC +#define GL_BUFFER_MAP_POINTER_ARB 0x88BD +#define GL_STREAM_DRAW_ARB 0x88E0 +#define GL_STREAM_READ_ARB 0x88E1 +#define GL_STREAM_COPY_ARB 0x88E2 +#define GL_STATIC_DRAW_ARB 0x88E4 +#define GL_STATIC_READ_ARB 0x88E5 +#define GL_STATIC_COPY_ARB 0x88E6 +#define GL_DYNAMIC_DRAW_ARB 0x88E8 +#define GL_DYNAMIC_READ_ARB 0x88E9 +#define GL_DYNAMIC_COPY_ARB 0x88EA +#define GL_COLOR_SUM_ARB 0x8458 +#define GL_VERTEX_PROGRAM_ARB 0x8620 +#define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622 +#define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623 +#define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624 +#define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625 +#define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626 +#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642 +#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643 +#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645 +#define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869 +#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A +#define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0 +#define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1 +#define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2 +#define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3 +#define GL_VERTEX_SHADER_ARB 0x8B31 +#define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A +#define GL_MAX_VARYING_FLOATS_ARB 0x8B4B +#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C +#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D +#define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8B89 +#define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A +#define GL_FLOAT_VEC2_ARB 0x8B50 +#define GL_FLOAT_VEC3_ARB 0x8B51 +#define GL_FLOAT_VEC4_ARB 0x8B52 +#define GL_FLOAT_MAT2_ARB 0x8B5A +#define GL_FLOAT_MAT3_ARB 0x8B5B +#define GL_FLOAT_MAT4_ARB 0x8B5C +#define GL_ELEMENT_ARRAY_ATI 0x8768 +#define GL_ELEMENT_ARRAY_TYPE_ATI 0x8769 +#define GL_ELEMENT_ARRAY_POINTER_ATI 0x876A +#define GL_FRAGMENT_SHADER_ATI 0x8920 +#define GL_REG_0_ATI 0x8921 +#define GL_REG_1_ATI 0x8922 +#define GL_REG_2_ATI 0x8923 +#define GL_REG_3_ATI 0x8924 +#define GL_REG_4_ATI 0x8925 +#define GL_REG_5_ATI 0x8926 +#define GL_REG_6_ATI 0x8927 +#define GL_REG_7_ATI 0x8928 +#define GL_REG_8_ATI 0x8929 +#define GL_REG_9_ATI 0x892A +#define GL_REG_10_ATI 0x892B +#define GL_REG_11_ATI 0x892C +#define GL_REG_12_ATI 0x892D +#define GL_REG_13_ATI 0x892E +#define GL_REG_14_ATI 0x892F +#define GL_REG_15_ATI 0x8930 +#define GL_REG_16_ATI 0x8931 +#define GL_REG_17_ATI 0x8932 +#define GL_REG_18_ATI 0x8933 +#define GL_REG_19_ATI 0x8934 +#define GL_REG_20_ATI 0x8935 +#define GL_REG_21_ATI 0x8936 +#define GL_REG_22_ATI 0x8937 +#define GL_REG_23_ATI 0x8938 +#define GL_REG_24_ATI 0x8939 +#define GL_REG_25_ATI 0x893A +#define GL_REG_26_ATI 0x893B +#define GL_REG_27_ATI 0x893C +#define GL_REG_28_ATI 0x893D +#define GL_REG_29_ATI 0x893E +#define GL_REG_30_ATI 0x893F +#define GL_REG_31_ATI 0x8940 +#define GL_CON_0_ATI 0x8941 +#define GL_CON_1_ATI 0x8942 +#define GL_CON_2_ATI 0x8943 +#define GL_CON_3_ATI 0x8944 +#define GL_CON_4_ATI 0x8945 +#define GL_CON_5_ATI 0x8946 +#define GL_CON_6_ATI 0x8947 +#define GL_CON_7_ATI 0x8948 +#define GL_CON_8_ATI 0x8949 +#define GL_CON_9_ATI 0x894A +#define GL_CON_10_ATI 0x894B +#define GL_CON_11_ATI 0x894C +#define GL_CON_12_ATI 0x894D +#define GL_CON_13_ATI 0x894E +#define GL_CON_14_ATI 0x894F +#define GL_CON_15_ATI 0x8950 +#define GL_CON_16_ATI 0x8951 +#define GL_CON_17_ATI 0x8952 +#define GL_CON_18_ATI 0x8953 +#define GL_CON_19_ATI 0x8954 +#define GL_CON_20_ATI 0x8955 +#define GL_CON_21_ATI 0x8956 +#define GL_CON_22_ATI 0x8957 +#define GL_CON_23_ATI 0x8958 +#define GL_CON_24_ATI 0x8959 +#define GL_CON_25_ATI 0x895A +#define GL_CON_26_ATI 0x895B +#define GL_CON_27_ATI 0x895C +#define GL_CON_28_ATI 0x895D +#define GL_CON_29_ATI 0x895E +#define GL_CON_30_ATI 0x895F +#define GL_CON_31_ATI 0x8960 +#define GL_MOV_ATI 0x8961 +#define GL_ADD_ATI 0x8963 +#define GL_MUL_ATI 0x8964 +#define GL_SUB_ATI 0x8965 +#define GL_DOT3_ATI 0x8966 +#define GL_DOT4_ATI 0x8967 +#define GL_MAD_ATI 0x8968 +#define GL_LERP_ATI 0x8969 +#define GL_CND_ATI 0x896A +#define GL_CND0_ATI 0x896B +#define GL_DOT2_ADD_ATI 0x896C +#define GL_SECONDARY_INTERPOLATOR_ATI 0x896D +#define GL_NUM_FRAGMENT_REGISTERS_ATI 0x896E +#define GL_NUM_FRAGMENT_CONSTANTS_ATI 0x896F +#define GL_NUM_PASSES_ATI 0x8970 +#define GL_NUM_INSTRUCTIONS_PER_PASS_ATI 0x8971 +#define GL_NUM_INSTRUCTIONS_TOTAL_ATI 0x8972 +#define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973 +#define GL_NUM_LOOPBACK_COMPONENTS_ATI 0x8974 +#define GL_COLOR_ALPHA_PAIRING_ATI 0x8975 +#define GL_SWIZZLE_STR_ATI 0x8976 +#define GL_SWIZZLE_STQ_ATI 0x8977 +#define GL_SWIZZLE_STR_DR_ATI 0x8978 +#define GL_SWIZZLE_STQ_DQ_ATI 0x8979 +#define GL_SWIZZLE_STRQ_ATI 0x897A +#define GL_SWIZZLE_STRQ_DQ_ATI 0x897B +#define GL_RED_BIT_ATI 0x00000001 +#define GL_GREEN_BIT_ATI 0x00000002 +#define GL_BLUE_BIT_ATI 0x00000004 +#define GL_2X_BIT_ATI 0x00000001 +#define GL_4X_BIT_ATI 0x00000002 +#define GL_8X_BIT_ATI 0x00000004 +#define GL_HALF_BIT_ATI 0x00000008 +#define GL_QUARTER_BIT_ATI 0x00000010 +#define GL_EIGHTH_BIT_ATI 0x00000020 +#define GL_SATURATE_BIT_ATI 0x00000040 +#define GL_COMP_BIT_ATI 0x00000002 +#define GL_NEGATE_BIT_ATI 0x00000004 +#define GL_BIAS_BIT_ATI 0x00000008 +#define GL_STATIC_ATI 0x8760 +#define GL_DYNAMIC_ATI 0x8761 +#define GL_PRESERVE_ATI 0x8762 +#define GL_DISCARD_ATI 0x8763 +#define GL_OBJECT_BUFFER_SIZE_ATI 0x8764 +#define GL_OBJECT_BUFFER_USAGE_ATI 0x8765 +#define GL_ARRAY_OBJECT_BUFFER_ATI 0x8766 +#define GL_ARRAY_OBJECT_OFFSET_ATI 0x8767 +#define GL_CONSTANT_COLOR_EXT 0x8001 +#define GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002 +#define GL_CONSTANT_ALPHA_EXT 0x8003 +#define GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004 +#define GL_BLEND_COLOR_EXT 0x8005 +#define GL_BLEND_EQUATION_RGB_EXT 0x8009 +#define GL_BLEND_EQUATION_ALPHA_EXT 0x883D +#define GL_BLEND_DST_RGB_EXT 0x80C8 +#define GL_BLEND_SRC_RGB_EXT 0x80C9 +#define GL_BLEND_DST_ALPHA_EXT 0x80CA +#define GL_BLEND_SRC_ALPHA_EXT 0x80CB +#define GL_READ_FRAMEBUFFER_EXT 0x8CA8 +#define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9 +#define GL_DRAW_FRAMEBUFFER_BINDING_EXT 0x8CA6 +#define GL_READ_FRAMEBUFFER_BINDING_EXT 0x8CAA +#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 +#define GL_MAX_SAMPLES_EXT 0x8D57 +#define GL_SCALED_RESOLVE_FASTEST_EXT 0x90BA +#define GL_SCALED_RESOLVE_NICEST_EXT 0x90BB +#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506 +#define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8 +#define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6 +#define GL_RENDERBUFFER_BINDING_EXT 0x8CA7 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4 +#define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5 +#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6 +#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7 +#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9 +#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA +#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB +#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC +#define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD +#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF +#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 +#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 +#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 +#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 +#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 +#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 +#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 +#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 +#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 +#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 +#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA +#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB +#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC +#define GL_COLOR_ATTACHMENT13_EXT 0x8CED +#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE +#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF +#define GL_DEPTH_ATTACHMENT_EXT 0x8D00 +#define GL_STENCIL_ATTACHMENT_EXT 0x8D20 +#define GL_FRAMEBUFFER_EXT 0x8D40 +#define GL_RENDERBUFFER_EXT 0x8D41 +#define GL_RENDERBUFFER_WIDTH_EXT 0x8D42 +#define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43 +#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44 +#define GL_STENCIL_INDEX1_EXT 0x8D46 +#define GL_STENCIL_INDEX4_EXT 0x8D47 +#define GL_STENCIL_INDEX8_EXT 0x8D48 +#define GL_STENCIL_INDEX16_EXT 0x8D49 +#define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50 +#define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51 +#define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52 +#define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53 +#define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54 +#define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55 +#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 +#define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA +#define GL_IUI_V2F_EXT 0x81AD +#define GL_IUI_V3F_EXT 0x81AE +#define GL_IUI_N3F_V2F_EXT 0x81AF +#define GL_IUI_N3F_V3F_EXT 0x81B0 +#define GL_T2F_IUI_V2F_EXT 0x81B1 +#define GL_T2F_IUI_V3F_EXT 0x81B2 +#define GL_T2F_IUI_N3F_V2F_EXT 0x81B3 +#define GL_T2F_IUI_N3F_V3F_EXT 0x81B4 +#define GL_ALPHA4_EXT 0x803B +#define GL_ALPHA8_EXT 0x803C +#define GL_ALPHA12_EXT 0x803D +#define GL_ALPHA16_EXT 0x803E +#define GL_LUMINANCE4_EXT 0x803F +#define GL_LUMINANCE8_EXT 0x8040 +#define GL_LUMINANCE12_EXT 0x8041 +#define GL_LUMINANCE16_EXT 0x8042 +#define GL_LUMINANCE4_ALPHA4_EXT 0x8043 +#define GL_LUMINANCE6_ALPHA2_EXT 0x8044 +#define GL_LUMINANCE8_ALPHA8_EXT 0x8045 +#define GL_LUMINANCE12_ALPHA4_EXT 0x8046 +#define GL_LUMINANCE12_ALPHA12_EXT 0x8047 +#define GL_LUMINANCE16_ALPHA16_EXT 0x8048 +#define GL_INTENSITY_EXT 0x8049 +#define GL_INTENSITY4_EXT 0x804A +#define GL_INTENSITY8_EXT 0x804B +#define GL_INTENSITY12_EXT 0x804C +#define GL_INTENSITY16_EXT 0x804D +#define GL_RGB2_EXT 0x804E +#define GL_RGB4_EXT 0x804F +#define GL_RGB5_EXT 0x8050 +#define GL_RGB8_EXT 0x8051 +#define GL_RGB10_EXT 0x8052 +#define GL_RGB12_EXT 0x8053 +#define GL_RGB16_EXT 0x8054 +#define GL_RGBA2_EXT 0x8055 +#define GL_RGBA4_EXT 0x8056 +#define GL_RGB5_A1_EXT 0x8057 +#define GL_RGBA8_EXT 0x8058 +#define GL_RGB10_A2_EXT 0x8059 +#define GL_RGBA12_EXT 0x805A +#define GL_RGBA16_EXT 0x805B +#define GL_TEXTURE_RED_SIZE_EXT 0x805C +#define GL_TEXTURE_GREEN_SIZE_EXT 0x805D +#define GL_TEXTURE_BLUE_SIZE_EXT 0x805E +#define GL_TEXTURE_ALPHA_SIZE_EXT 0x805F +#define GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060 +#define GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061 +#define GL_REPLACE_EXT 0x8062 +#define GL_PROXY_TEXTURE_1D_EXT 0x8063 +#define GL_PROXY_TEXTURE_2D_EXT 0x8064 +#define GL_TEXTURE_TOO_LARGE_EXT 0x8065 +#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 +#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 +#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 +#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 +#define GL_SRGB_EXT 0x8C40 +#define GL_SRGB8_EXT 0x8C41 +#define GL_SRGB_ALPHA_EXT 0x8C42 +#define GL_SRGB8_ALPHA8_EXT 0x8C43 +#define GL_SLUMINANCE_ALPHA_EXT 0x8C44 +#define GL_SLUMINANCE8_ALPHA8_EXT 0x8C45 +#define GL_SLUMINANCE_EXT 0x8C46 +#define GL_SLUMINANCE8_EXT 0x8C47 +#define GL_COMPRESSED_SRGB_EXT 0x8C48 +#define GL_COMPRESSED_SRGB_ALPHA_EXT 0x8C49 +#define GL_COMPRESSED_SLUMINANCE_EXT 0x8C4A +#define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8C4B +#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F +#define GL_TEXTURE_SWIZZLE_R_EXT 0x8E42 +#define GL_TEXTURE_SWIZZLE_G_EXT 0x8E43 +#define GL_TEXTURE_SWIZZLE_B_EXT 0x8E44 +#define GL_TEXTURE_SWIZZLE_A_EXT 0x8E45 +#define GL_TEXTURE_SWIZZLE_RGBA_EXT 0x8E46 +#define GL_VERTEX_ARRAY_EXT 0x8074 +#define GL_NORMAL_ARRAY_EXT 0x8075 +#define GL_COLOR_ARRAY_EXT 0x8076 +#define GL_INDEX_ARRAY_EXT 0x8077 +#define GL_TEXTURE_COORD_ARRAY_EXT 0x8078 +#define GL_EDGE_FLAG_ARRAY_EXT 0x8079 +#define GL_VERTEX_ARRAY_SIZE_EXT 0x807A +#define GL_VERTEX_ARRAY_TYPE_EXT 0x807B +#define GL_VERTEX_ARRAY_STRIDE_EXT 0x807C +#define GL_VERTEX_ARRAY_COUNT_EXT 0x807D +#define GL_NORMAL_ARRAY_TYPE_EXT 0x807E +#define GL_NORMAL_ARRAY_STRIDE_EXT 0x807F +#define GL_NORMAL_ARRAY_COUNT_EXT 0x8080 +#define GL_COLOR_ARRAY_SIZE_EXT 0x8081 +#define GL_COLOR_ARRAY_TYPE_EXT 0x8082 +#define GL_COLOR_ARRAY_STRIDE_EXT 0x8083 +#define GL_COLOR_ARRAY_COUNT_EXT 0x8084 +#define GL_INDEX_ARRAY_TYPE_EXT 0x8085 +#define GL_INDEX_ARRAY_STRIDE_EXT 0x8086 +#define GL_INDEX_ARRAY_COUNT_EXT 0x8087 +#define GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088 +#define GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089 +#define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A +#define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B +#define GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C +#define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D +#define GL_VERTEX_ARRAY_POINTER_EXT 0x808E +#define GL_NORMAL_ARRAY_POINTER_EXT 0x808F +#define GL_COLOR_ARRAY_POINTER_EXT 0x8090 +#define GL_INDEX_ARRAY_POINTER_EXT 0x8091 +#define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092 +#define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093 +#define GL_VERTEX_SHADER_EXT 0x8780 +#define GL_VERTEX_SHADER_BINDING_EXT 0x8781 +#define GL_OP_INDEX_EXT 0x8782 +#define GL_OP_NEGATE_EXT 0x8783 +#define GL_OP_DOT3_EXT 0x8784 +#define GL_OP_DOT4_EXT 0x8785 +#define GL_OP_MUL_EXT 0x8786 +#define GL_OP_ADD_EXT 0x8787 +#define GL_OP_MADD_EXT 0x8788 +#define GL_OP_FRAC_EXT 0x8789 +#define GL_OP_MAX_EXT 0x878A +#define GL_OP_MIN_EXT 0x878B +#define GL_OP_SET_GE_EXT 0x878C +#define GL_OP_SET_LT_EXT 0x878D +#define GL_OP_CLAMP_EXT 0x878E +#define GL_OP_FLOOR_EXT 0x878F +#define GL_OP_ROUND_EXT 0x8790 +#define GL_OP_EXP_BASE_2_EXT 0x8791 +#define GL_OP_LOG_BASE_2_EXT 0x8792 +#define GL_OP_POWER_EXT 0x8793 +#define GL_OP_RECIP_EXT 0x8794 +#define GL_OP_RECIP_SQRT_EXT 0x8795 +#define GL_OP_SUB_EXT 0x8796 +#define GL_OP_CROSS_PRODUCT_EXT 0x8797 +#define GL_OP_MULTIPLY_MATRIX_EXT 0x8798 +#define GL_OP_MOV_EXT 0x8799 +#define GL_OUTPUT_VERTEX_EXT 0x879A +#define GL_OUTPUT_COLOR0_EXT 0x879B +#define GL_OUTPUT_COLOR1_EXT 0x879C +#define GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D +#define GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E +#define GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F +#define GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0 +#define GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1 +#define GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2 +#define GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3 +#define GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4 +#define GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5 +#define GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6 +#define GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7 +#define GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8 +#define GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9 +#define GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA +#define GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB +#define GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC +#define GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD +#define GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE +#define GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF +#define GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0 +#define GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1 +#define GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2 +#define GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3 +#define GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4 +#define GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5 +#define GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6 +#define GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7 +#define GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8 +#define GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9 +#define GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA +#define GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB +#define GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC +#define GL_OUTPUT_FOG_EXT 0x87BD +#define GL_SCALAR_EXT 0x87BE +#define GL_VECTOR_EXT 0x87BF +#define GL_MATRIX_EXT 0x87C0 +#define GL_VARIANT_EXT 0x87C1 +#define GL_INVARIANT_EXT 0x87C2 +#define GL_LOCAL_CONSTANT_EXT 0x87C3 +#define GL_LOCAL_EXT 0x87C4 +#define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5 +#define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6 +#define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7 +#define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8 +#define GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9 +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CC +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CD +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE +#define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF +#define GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0 +#define GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1 +#define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2 +#define GL_VERTEX_SHADER_LOCALS_EXT 0x87D3 +#define GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4 +#define GL_X_EXT 0x87D5 +#define GL_Y_EXT 0x87D6 +#define GL_Z_EXT 0x87D7 +#define GL_W_EXT 0x87D8 +#define GL_NEGATIVE_X_EXT 0x87D9 +#define GL_NEGATIVE_Y_EXT 0x87DA +#define GL_NEGATIVE_Z_EXT 0x87DB +#define GL_NEGATIVE_W_EXT 0x87DC +#define GL_ZERO_EXT 0x87DD +#define GL_ONE_EXT 0x87DE +#define GL_NEGATIVE_ONE_EXT 0x87DF +#define GL_NORMALIZED_RANGE_EXT 0x87E0 +#define GL_FULL_RANGE_EXT 0x87E1 +#define GL_CURRENT_VERTEX_EXT 0x87E2 +#define GL_MVP_MATRIX_EXT 0x87E3 +#define GL_VARIANT_VALUE_EXT 0x87E4 +#define GL_VARIANT_DATATYPE_EXT 0x87E5 +#define GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6 +#define GL_VARIANT_ARRAY_TYPE_EXT 0x87E7 +#define GL_VARIANT_ARRAY_EXT 0x87E8 +#define GL_VARIANT_ARRAY_POINTER_EXT 0x87E9 +#define GL_INVARIANT_VALUE_EXT 0x87EA +#define GL_INVARIANT_DATATYPE_EXT 0x87EB +#define GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC +#define GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED +#ifndef GL_AMD_debug_output +#define GL_AMD_debug_output 1 +GLAPI int GLAD_GL_AMD_debug_output; +typedef void (APIENTRYP PFNGLDEBUGMESSAGEENABLEAMDPROC)(GLenum category, GLenum severity, GLsizei count, const GLuint* ids, GLboolean enabled); +GLAPI PFNGLDEBUGMESSAGEENABLEAMDPROC glad_glDebugMessageEnableAMD; +#define glDebugMessageEnableAMD glad_glDebugMessageEnableAMD +typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTAMDPROC)(GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar* buf); +GLAPI PFNGLDEBUGMESSAGEINSERTAMDPROC glad_glDebugMessageInsertAMD; +#define glDebugMessageInsertAMD glad_glDebugMessageInsertAMD +typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKAMDPROC)(GLDEBUGPROCAMD callback, void* userParam); +GLAPI PFNGLDEBUGMESSAGECALLBACKAMDPROC glad_glDebugMessageCallbackAMD; +#define glDebugMessageCallbackAMD glad_glDebugMessageCallbackAMD +typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGAMDPROC)(GLuint count, GLsizei bufsize, GLenum* categories, GLuint* severities, GLuint* ids, GLsizei* lengths, GLchar* message); +GLAPI PFNGLGETDEBUGMESSAGELOGAMDPROC glad_glGetDebugMessageLogAMD; +#define glGetDebugMessageLogAMD glad_glGetDebugMessageLogAMD +#endif +#ifndef GL_AMD_query_buffer_object +#define GL_AMD_query_buffer_object 1 +GLAPI int GLAD_GL_AMD_query_buffer_object; +#endif +#ifndef GL_ARB_ES2_compatibility +#define GL_ARB_ES2_compatibility 1 +GLAPI int GLAD_GL_ARB_ES2_compatibility; +typedef void (APIENTRYP PFNGLRELEASESHADERCOMPILERPROC)(); +GLAPI PFNGLRELEASESHADERCOMPILERPROC glad_glReleaseShaderCompiler; +#define glReleaseShaderCompiler glad_glReleaseShaderCompiler +typedef void (APIENTRYP PFNGLSHADERBINARYPROC)(GLsizei count, const GLuint* shaders, GLenum binaryformat, const void* binary, GLsizei length); +GLAPI PFNGLSHADERBINARYPROC glad_glShaderBinary; +#define glShaderBinary glad_glShaderBinary +typedef void (APIENTRYP PFNGLGETSHADERPRECISIONFORMATPROC)(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision); +GLAPI PFNGLGETSHADERPRECISIONFORMATPROC glad_glGetShaderPrecisionFormat; +#define glGetShaderPrecisionFormat glad_glGetShaderPrecisionFormat +typedef void (APIENTRYP PFNGLDEPTHRANGEFPROC)(GLfloat n, GLfloat f); +GLAPI PFNGLDEPTHRANGEFPROC glad_glDepthRangef; +#define glDepthRangef glad_glDepthRangef +typedef void (APIENTRYP PFNGLCLEARDEPTHFPROC)(GLfloat d); +GLAPI PFNGLCLEARDEPTHFPROC glad_glClearDepthf; +#define glClearDepthf glad_glClearDepthf +#endif +#ifndef GL_ARB_ES3_compatibility +#define GL_ARB_ES3_compatibility 1 +GLAPI int GLAD_GL_ARB_ES3_compatibility; +#endif +#ifndef GL_ARB_buffer_storage +#define GL_ARB_buffer_storage 1 +GLAPI int GLAD_GL_ARB_buffer_storage; +typedef void (APIENTRYP PFNGLBUFFERSTORAGEPROC)(GLenum target, GLsizeiptr size, const void* data, GLbitfield flags); +GLAPI PFNGLBUFFERSTORAGEPROC glad_glBufferStorage; +#define glBufferStorage glad_glBufferStorage +#endif +#ifndef GL_ARB_compatibility +#define GL_ARB_compatibility 1 +GLAPI int GLAD_GL_ARB_compatibility; +#endif +#ifndef GL_ARB_compressed_texture_pixel_storage +#define GL_ARB_compressed_texture_pixel_storage 1 +GLAPI int GLAD_GL_ARB_compressed_texture_pixel_storage; +#endif +#ifndef GL_ARB_debug_output +#define GL_ARB_debug_output 1 +GLAPI int GLAD_GL_ARB_debug_output; +typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLARBPROC)(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint* ids, GLboolean enabled); +GLAPI PFNGLDEBUGMESSAGECONTROLARBPROC glad_glDebugMessageControlARB; +#define glDebugMessageControlARB glad_glDebugMessageControlARB +typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTARBPROC)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* buf); +GLAPI PFNGLDEBUGMESSAGEINSERTARBPROC glad_glDebugMessageInsertARB; +#define glDebugMessageInsertARB glad_glDebugMessageInsertARB +typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKARBPROC)(GLDEBUGPROCARB callback, const void* userParam); +GLAPI PFNGLDEBUGMESSAGECALLBACKARBPROC glad_glDebugMessageCallbackARB; +#define glDebugMessageCallbackARB glad_glDebugMessageCallbackARB +typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGARBPROC)(GLuint count, GLsizei bufSize, GLenum* sources, GLenum* types, GLuint* ids, GLenum* severities, GLsizei* lengths, GLchar* messageLog); +GLAPI PFNGLGETDEBUGMESSAGELOGARBPROC glad_glGetDebugMessageLogARB; +#define glGetDebugMessageLogARB glad_glGetDebugMessageLogARB +#endif +#ifndef GL_ARB_depth_buffer_float +#define GL_ARB_depth_buffer_float 1 +GLAPI int GLAD_GL_ARB_depth_buffer_float; +#endif +#ifndef GL_ARB_depth_clamp +#define GL_ARB_depth_clamp 1 +GLAPI int GLAD_GL_ARB_depth_clamp; +#endif +#ifndef GL_ARB_depth_texture +#define GL_ARB_depth_texture 1 +GLAPI int GLAD_GL_ARB_depth_texture; +#endif +#ifndef GL_ARB_draw_buffers +#define GL_ARB_draw_buffers 1 +GLAPI int GLAD_GL_ARB_draw_buffers; +typedef void (APIENTRYP PFNGLDRAWBUFFERSARBPROC)(GLsizei n, const GLenum* bufs); +GLAPI PFNGLDRAWBUFFERSARBPROC glad_glDrawBuffersARB; +#define glDrawBuffersARB glad_glDrawBuffersARB +#endif +#ifndef GL_ARB_draw_buffers_blend +#define GL_ARB_draw_buffers_blend 1 +GLAPI int GLAD_GL_ARB_draw_buffers_blend; +typedef void (APIENTRYP PFNGLBLENDEQUATIONIARBPROC)(GLuint buf, GLenum mode); +GLAPI PFNGLBLENDEQUATIONIARBPROC glad_glBlendEquationiARB; +#define glBlendEquationiARB glad_glBlendEquationiARB +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIARBPROC)(GLuint buf, GLenum modeRGB, GLenum modeAlpha); +GLAPI PFNGLBLENDEQUATIONSEPARATEIARBPROC glad_glBlendEquationSeparateiARB; +#define glBlendEquationSeparateiARB glad_glBlendEquationSeparateiARB +typedef void (APIENTRYP PFNGLBLENDFUNCIARBPROC)(GLuint buf, GLenum src, GLenum dst); +GLAPI PFNGLBLENDFUNCIARBPROC glad_glBlendFunciARB; +#define glBlendFunciARB glad_glBlendFunciARB +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIARBPROC)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +GLAPI PFNGLBLENDFUNCSEPARATEIARBPROC glad_glBlendFuncSeparateiARB; +#define glBlendFuncSeparateiARB glad_glBlendFuncSeparateiARB +#endif +#ifndef GL_ARB_explicit_attrib_location +#define GL_ARB_explicit_attrib_location 1 +GLAPI int GLAD_GL_ARB_explicit_attrib_location; +#endif +#ifndef GL_ARB_explicit_uniform_location +#define GL_ARB_explicit_uniform_location 1 +GLAPI int GLAD_GL_ARB_explicit_uniform_location; +#endif +#ifndef GL_ARB_fragment_program +#define GL_ARB_fragment_program 1 +GLAPI int GLAD_GL_ARB_fragment_program; +typedef void (APIENTRYP PFNGLPROGRAMSTRINGARBPROC)(GLenum target, GLenum format, GLsizei len, const void* string); +GLAPI PFNGLPROGRAMSTRINGARBPROC glad_glProgramStringARB; +#define glProgramStringARB glad_glProgramStringARB +typedef void (APIENTRYP PFNGLBINDPROGRAMARBPROC)(GLenum target, GLuint program); +GLAPI PFNGLBINDPROGRAMARBPROC glad_glBindProgramARB; +#define glBindProgramARB glad_glBindProgramARB +typedef void (APIENTRYP PFNGLDELETEPROGRAMSARBPROC)(GLsizei n, const GLuint* programs); +GLAPI PFNGLDELETEPROGRAMSARBPROC glad_glDeleteProgramsARB; +#define glDeleteProgramsARB glad_glDeleteProgramsARB +typedef void (APIENTRYP PFNGLGENPROGRAMSARBPROC)(GLsizei n, GLuint* programs); +GLAPI PFNGLGENPROGRAMSARBPROC glad_glGenProgramsARB; +#define glGenProgramsARB glad_glGenProgramsARB +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DARBPROC)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI PFNGLPROGRAMENVPARAMETER4DARBPROC glad_glProgramEnvParameter4dARB; +#define glProgramEnvParameter4dARB glad_glProgramEnvParameter4dARB +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DVARBPROC)(GLenum target, GLuint index, const GLdouble* params); +GLAPI PFNGLPROGRAMENVPARAMETER4DVARBPROC glad_glProgramEnvParameter4dvARB; +#define glProgramEnvParameter4dvARB glad_glProgramEnvParameter4dvARB +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FARBPROC)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI PFNGLPROGRAMENVPARAMETER4FARBPROC glad_glProgramEnvParameter4fARB; +#define glProgramEnvParameter4fARB glad_glProgramEnvParameter4fARB +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FVARBPROC)(GLenum target, GLuint index, const GLfloat* params); +GLAPI PFNGLPROGRAMENVPARAMETER4FVARBPROC glad_glProgramEnvParameter4fvARB; +#define glProgramEnvParameter4fvARB glad_glProgramEnvParameter4fvARB +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DARBPROC)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI PFNGLPROGRAMLOCALPARAMETER4DARBPROC glad_glProgramLocalParameter4dARB; +#define glProgramLocalParameter4dARB glad_glProgramLocalParameter4dARB +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DVARBPROC)(GLenum target, GLuint index, const GLdouble* params); +GLAPI PFNGLPROGRAMLOCALPARAMETER4DVARBPROC glad_glProgramLocalParameter4dvARB; +#define glProgramLocalParameter4dvARB glad_glProgramLocalParameter4dvARB +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FARBPROC)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI PFNGLPROGRAMLOCALPARAMETER4FARBPROC glad_glProgramLocalParameter4fARB; +#define glProgramLocalParameter4fARB glad_glProgramLocalParameter4fARB +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FVARBPROC)(GLenum target, GLuint index, const GLfloat* params); +GLAPI PFNGLPROGRAMLOCALPARAMETER4FVARBPROC glad_glProgramLocalParameter4fvARB; +#define glProgramLocalParameter4fvARB glad_glProgramLocalParameter4fvARB +typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERDVARBPROC)(GLenum target, GLuint index, GLdouble* params); +GLAPI PFNGLGETPROGRAMENVPARAMETERDVARBPROC glad_glGetProgramEnvParameterdvARB; +#define glGetProgramEnvParameterdvARB glad_glGetProgramEnvParameterdvARB +typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERFVARBPROC)(GLenum target, GLuint index, GLfloat* params); +GLAPI PFNGLGETPROGRAMENVPARAMETERFVARBPROC glad_glGetProgramEnvParameterfvARB; +#define glGetProgramEnvParameterfvARB glad_glGetProgramEnvParameterfvARB +typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC)(GLenum target, GLuint index, GLdouble* params); +GLAPI PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC glad_glGetProgramLocalParameterdvARB; +#define glGetProgramLocalParameterdvARB glad_glGetProgramLocalParameterdvARB +typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC)(GLenum target, GLuint index, GLfloat* params); +GLAPI PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC glad_glGetProgramLocalParameterfvARB; +#define glGetProgramLocalParameterfvARB glad_glGetProgramLocalParameterfvARB +typedef void (APIENTRYP PFNGLGETPROGRAMIVARBPROC)(GLenum target, GLenum pname, GLint* params); +GLAPI PFNGLGETPROGRAMIVARBPROC glad_glGetProgramivARB; +#define glGetProgramivARB glad_glGetProgramivARB +typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGARBPROC)(GLenum target, GLenum pname, void* string); +GLAPI PFNGLGETPROGRAMSTRINGARBPROC glad_glGetProgramStringARB; +#define glGetProgramStringARB glad_glGetProgramStringARB +typedef GLboolean (APIENTRYP PFNGLISPROGRAMARBPROC)(GLuint program); +GLAPI PFNGLISPROGRAMARBPROC glad_glIsProgramARB; +#define glIsProgramARB glad_glIsProgramARB +#endif +#ifndef GL_ARB_fragment_shader +#define GL_ARB_fragment_shader 1 +GLAPI int GLAD_GL_ARB_fragment_shader; +#endif +#ifndef GL_ARB_framebuffer_object +#define GL_ARB_framebuffer_object 1 +GLAPI int GLAD_GL_ARB_framebuffer_object; +#endif +#ifndef GL_ARB_framebuffer_sRGB +#define GL_ARB_framebuffer_sRGB 1 +GLAPI int GLAD_GL_ARB_framebuffer_sRGB; +#endif +#ifndef GL_ARB_multisample +#define GL_ARB_multisample 1 +GLAPI int GLAD_GL_ARB_multisample; +typedef void (APIENTRYP PFNGLSAMPLECOVERAGEARBPROC)(GLfloat value, GLboolean invert); +GLAPI PFNGLSAMPLECOVERAGEARBPROC glad_glSampleCoverageARB; +#define glSampleCoverageARB glad_glSampleCoverageARB +#endif +#ifndef GL_ARB_sample_locations +#define GL_ARB_sample_locations 1 +GLAPI int GLAD_GL_ARB_sample_locations; +typedef void (APIENTRYP PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC)(GLenum target, GLuint start, GLsizei count, const GLfloat* v); +GLAPI PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC glad_glFramebufferSampleLocationsfvARB; +#define glFramebufferSampleLocationsfvARB glad_glFramebufferSampleLocationsfvARB +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVARBPROC)(GLuint framebuffer, GLuint start, GLsizei count, const GLfloat* v); +GLAPI PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVARBPROC glad_glNamedFramebufferSampleLocationsfvARB; +#define glNamedFramebufferSampleLocationsfvARB glad_glNamedFramebufferSampleLocationsfvARB +typedef void (APIENTRYP PFNGLEVALUATEDEPTHVALUESARBPROC)(); +GLAPI PFNGLEVALUATEDEPTHVALUESARBPROC glad_glEvaluateDepthValuesARB; +#define glEvaluateDepthValuesARB glad_glEvaluateDepthValuesARB +#endif +#ifndef GL_ARB_texture_compression +#define GL_ARB_texture_compression 1 +GLAPI int GLAD_GL_ARB_texture_compression; +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DARBPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void* data); +GLAPI PFNGLCOMPRESSEDTEXIMAGE3DARBPROC glad_glCompressedTexImage3DARB; +#define glCompressedTexImage3DARB glad_glCompressedTexImage3DARB +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DARBPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data); +GLAPI PFNGLCOMPRESSEDTEXIMAGE2DARBPROC glad_glCompressedTexImage2DARB; +#define glCompressedTexImage2DARB glad_glCompressedTexImage2DARB +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DARBPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void* data); +GLAPI PFNGLCOMPRESSEDTEXIMAGE1DARBPROC glad_glCompressedTexImage1DARB; +#define glCompressedTexImage1DARB glad_glCompressedTexImage1DARB +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void* data); +GLAPI PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC glad_glCompressedTexSubImage3DARB; +#define glCompressedTexSubImage3DARB glad_glCompressedTexSubImage3DARB +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data); +GLAPI PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC glad_glCompressedTexSubImage2DARB; +#define glCompressedTexSubImage2DARB glad_glCompressedTexSubImage2DARB +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void* data); +GLAPI PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC glad_glCompressedTexSubImage1DARB; +#define glCompressedTexSubImage1DARB glad_glCompressedTexSubImage1DARB +typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEARBPROC)(GLenum target, GLint level, void* img); +GLAPI PFNGLGETCOMPRESSEDTEXIMAGEARBPROC glad_glGetCompressedTexImageARB; +#define glGetCompressedTexImageARB glad_glGetCompressedTexImageARB +#endif +#ifndef GL_ARB_texture_float +#define GL_ARB_texture_float 1 +GLAPI int GLAD_GL_ARB_texture_float; +#endif +#ifndef GL_ARB_texture_multisample +#define GL_ARB_texture_multisample 1 +GLAPI int GLAD_GL_ARB_texture_multisample; +#endif +#ifndef GL_ARB_texture_non_power_of_two +#define GL_ARB_texture_non_power_of_two 1 +GLAPI int GLAD_GL_ARB_texture_non_power_of_two; +#endif +#ifndef GL_ARB_texture_rg +#define GL_ARB_texture_rg 1 +GLAPI int GLAD_GL_ARB_texture_rg; +#endif +#ifndef GL_ARB_texture_swizzle +#define GL_ARB_texture_swizzle 1 +GLAPI int GLAD_GL_ARB_texture_swizzle; +#endif +#ifndef GL_ARB_uniform_buffer_object +#define GL_ARB_uniform_buffer_object 1 +GLAPI int GLAD_GL_ARB_uniform_buffer_object; +#endif +#ifndef GL_ARB_vertex_array_object +#define GL_ARB_vertex_array_object 1 +GLAPI int GLAD_GL_ARB_vertex_array_object; +#endif +#ifndef GL_ARB_vertex_attrib_binding +#define GL_ARB_vertex_attrib_binding 1 +GLAPI int GLAD_GL_ARB_vertex_attrib_binding; +typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERPROC)(GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); +GLAPI PFNGLBINDVERTEXBUFFERPROC glad_glBindVertexBuffer; +#define glBindVertexBuffer glad_glBindVertexBuffer +typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATPROC)(GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); +GLAPI PFNGLVERTEXATTRIBFORMATPROC glad_glVertexAttribFormat; +#define glVertexAttribFormat glad_glVertexAttribFormat +typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATPROC)(GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +GLAPI PFNGLVERTEXATTRIBIFORMATPROC glad_glVertexAttribIFormat; +#define glVertexAttribIFormat glad_glVertexAttribIFormat +typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATPROC)(GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +GLAPI PFNGLVERTEXATTRIBLFORMATPROC glad_glVertexAttribLFormat; +#define glVertexAttribLFormat glad_glVertexAttribLFormat +typedef void (APIENTRYP PFNGLVERTEXATTRIBBINDINGPROC)(GLuint attribindex, GLuint bindingindex); +GLAPI PFNGLVERTEXATTRIBBINDINGPROC glad_glVertexAttribBinding; +#define glVertexAttribBinding glad_glVertexAttribBinding +typedef void (APIENTRYP PFNGLVERTEXBINDINGDIVISORPROC)(GLuint bindingindex, GLuint divisor); +GLAPI PFNGLVERTEXBINDINGDIVISORPROC glad_glVertexBindingDivisor; +#define glVertexBindingDivisor glad_glVertexBindingDivisor +#endif +#ifndef GL_ARB_vertex_buffer_object +#define GL_ARB_vertex_buffer_object 1 +GLAPI int GLAD_GL_ARB_vertex_buffer_object; +typedef void (APIENTRYP PFNGLBINDBUFFERARBPROC)(GLenum target, GLuint buffer); +GLAPI PFNGLBINDBUFFERARBPROC glad_glBindBufferARB; +#define glBindBufferARB glad_glBindBufferARB +typedef void (APIENTRYP PFNGLDELETEBUFFERSARBPROC)(GLsizei n, const GLuint* buffers); +GLAPI PFNGLDELETEBUFFERSARBPROC glad_glDeleteBuffersARB; +#define glDeleteBuffersARB glad_glDeleteBuffersARB +typedef void (APIENTRYP PFNGLGENBUFFERSARBPROC)(GLsizei n, GLuint* buffers); +GLAPI PFNGLGENBUFFERSARBPROC glad_glGenBuffersARB; +#define glGenBuffersARB glad_glGenBuffersARB +typedef GLboolean (APIENTRYP PFNGLISBUFFERARBPROC)(GLuint buffer); +GLAPI PFNGLISBUFFERARBPROC glad_glIsBufferARB; +#define glIsBufferARB glad_glIsBufferARB +typedef void (APIENTRYP PFNGLBUFFERDATAARBPROC)(GLenum target, GLsizeiptrARB size, const void* data, GLenum usage); +GLAPI PFNGLBUFFERDATAARBPROC glad_glBufferDataARB; +#define glBufferDataARB glad_glBufferDataARB +typedef void (APIENTRYP PFNGLBUFFERSUBDATAARBPROC)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, const void* data); +GLAPI PFNGLBUFFERSUBDATAARBPROC glad_glBufferSubDataARB; +#define glBufferSubDataARB glad_glBufferSubDataARB +typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAARBPROC)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, void* data); +GLAPI PFNGLGETBUFFERSUBDATAARBPROC glad_glGetBufferSubDataARB; +#define glGetBufferSubDataARB glad_glGetBufferSubDataARB +typedef void* (APIENTRYP PFNGLMAPBUFFERARBPROC)(GLenum target, GLenum access); +GLAPI PFNGLMAPBUFFERARBPROC glad_glMapBufferARB; +#define glMapBufferARB glad_glMapBufferARB +typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERARBPROC)(GLenum target); +GLAPI PFNGLUNMAPBUFFERARBPROC glad_glUnmapBufferARB; +#define glUnmapBufferARB glad_glUnmapBufferARB +typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVARBPROC)(GLenum target, GLenum pname, GLint* params); +GLAPI PFNGLGETBUFFERPARAMETERIVARBPROC glad_glGetBufferParameterivARB; +#define glGetBufferParameterivARB glad_glGetBufferParameterivARB +typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVARBPROC)(GLenum target, GLenum pname, void** params); +GLAPI PFNGLGETBUFFERPOINTERVARBPROC glad_glGetBufferPointervARB; +#define glGetBufferPointervARB glad_glGetBufferPointervARB +#endif +#ifndef GL_ARB_vertex_program +#define GL_ARB_vertex_program 1 +GLAPI int GLAD_GL_ARB_vertex_program; +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DARBPROC)(GLuint index, GLdouble x); +GLAPI PFNGLVERTEXATTRIB1DARBPROC glad_glVertexAttrib1dARB; +#define glVertexAttrib1dARB glad_glVertexAttrib1dARB +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVARBPROC)(GLuint index, const GLdouble* v); +GLAPI PFNGLVERTEXATTRIB1DVARBPROC glad_glVertexAttrib1dvARB; +#define glVertexAttrib1dvARB glad_glVertexAttrib1dvARB +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FARBPROC)(GLuint index, GLfloat x); +GLAPI PFNGLVERTEXATTRIB1FARBPROC glad_glVertexAttrib1fARB; +#define glVertexAttrib1fARB glad_glVertexAttrib1fARB +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVARBPROC)(GLuint index, const GLfloat* v); +GLAPI PFNGLVERTEXATTRIB1FVARBPROC glad_glVertexAttrib1fvARB; +#define glVertexAttrib1fvARB glad_glVertexAttrib1fvARB +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SARBPROC)(GLuint index, GLshort x); +GLAPI PFNGLVERTEXATTRIB1SARBPROC glad_glVertexAttrib1sARB; +#define glVertexAttrib1sARB glad_glVertexAttrib1sARB +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVARBPROC)(GLuint index, const GLshort* v); +GLAPI PFNGLVERTEXATTRIB1SVARBPROC glad_glVertexAttrib1svARB; +#define glVertexAttrib1svARB glad_glVertexAttrib1svARB +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DARBPROC)(GLuint index, GLdouble x, GLdouble y); +GLAPI PFNGLVERTEXATTRIB2DARBPROC glad_glVertexAttrib2dARB; +#define glVertexAttrib2dARB glad_glVertexAttrib2dARB +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVARBPROC)(GLuint index, const GLdouble* v); +GLAPI PFNGLVERTEXATTRIB2DVARBPROC glad_glVertexAttrib2dvARB; +#define glVertexAttrib2dvARB glad_glVertexAttrib2dvARB +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FARBPROC)(GLuint index, GLfloat x, GLfloat y); +GLAPI PFNGLVERTEXATTRIB2FARBPROC glad_glVertexAttrib2fARB; +#define glVertexAttrib2fARB glad_glVertexAttrib2fARB +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVARBPROC)(GLuint index, const GLfloat* v); +GLAPI PFNGLVERTEXATTRIB2FVARBPROC glad_glVertexAttrib2fvARB; +#define glVertexAttrib2fvARB glad_glVertexAttrib2fvARB +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SARBPROC)(GLuint index, GLshort x, GLshort y); +GLAPI PFNGLVERTEXATTRIB2SARBPROC glad_glVertexAttrib2sARB; +#define glVertexAttrib2sARB glad_glVertexAttrib2sARB +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVARBPROC)(GLuint index, const GLshort* v); +GLAPI PFNGLVERTEXATTRIB2SVARBPROC glad_glVertexAttrib2svARB; +#define glVertexAttrib2svARB glad_glVertexAttrib2svARB +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DARBPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z); +GLAPI PFNGLVERTEXATTRIB3DARBPROC glad_glVertexAttrib3dARB; +#define glVertexAttrib3dARB glad_glVertexAttrib3dARB +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVARBPROC)(GLuint index, const GLdouble* v); +GLAPI PFNGLVERTEXATTRIB3DVARBPROC glad_glVertexAttrib3dvARB; +#define glVertexAttrib3dvARB glad_glVertexAttrib3dvARB +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FARBPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z); +GLAPI PFNGLVERTEXATTRIB3FARBPROC glad_glVertexAttrib3fARB; +#define glVertexAttrib3fARB glad_glVertexAttrib3fARB +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVARBPROC)(GLuint index, const GLfloat* v); +GLAPI PFNGLVERTEXATTRIB3FVARBPROC glad_glVertexAttrib3fvARB; +#define glVertexAttrib3fvARB glad_glVertexAttrib3fvARB +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SARBPROC)(GLuint index, GLshort x, GLshort y, GLshort z); +GLAPI PFNGLVERTEXATTRIB3SARBPROC glad_glVertexAttrib3sARB; +#define glVertexAttrib3sARB glad_glVertexAttrib3sARB +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVARBPROC)(GLuint index, const GLshort* v); +GLAPI PFNGLVERTEXATTRIB3SVARBPROC glad_glVertexAttrib3svARB; +#define glVertexAttrib3svARB glad_glVertexAttrib3svARB +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVARBPROC)(GLuint index, const GLbyte* v); +GLAPI PFNGLVERTEXATTRIB4NBVARBPROC glad_glVertexAttrib4NbvARB; +#define glVertexAttrib4NbvARB glad_glVertexAttrib4NbvARB +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVARBPROC)(GLuint index, const GLint* v); +GLAPI PFNGLVERTEXATTRIB4NIVARBPROC glad_glVertexAttrib4NivARB; +#define glVertexAttrib4NivARB glad_glVertexAttrib4NivARB +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVARBPROC)(GLuint index, const GLshort* v); +GLAPI PFNGLVERTEXATTRIB4NSVARBPROC glad_glVertexAttrib4NsvARB; +#define glVertexAttrib4NsvARB glad_glVertexAttrib4NsvARB +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBARBPROC)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +GLAPI PFNGLVERTEXATTRIB4NUBARBPROC glad_glVertexAttrib4NubARB; +#define glVertexAttrib4NubARB glad_glVertexAttrib4NubARB +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVARBPROC)(GLuint index, const GLubyte* v); +GLAPI PFNGLVERTEXATTRIB4NUBVARBPROC glad_glVertexAttrib4NubvARB; +#define glVertexAttrib4NubvARB glad_glVertexAttrib4NubvARB +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVARBPROC)(GLuint index, const GLuint* v); +GLAPI PFNGLVERTEXATTRIB4NUIVARBPROC glad_glVertexAttrib4NuivARB; +#define glVertexAttrib4NuivARB glad_glVertexAttrib4NuivARB +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVARBPROC)(GLuint index, const GLushort* v); +GLAPI PFNGLVERTEXATTRIB4NUSVARBPROC glad_glVertexAttrib4NusvARB; +#define glVertexAttrib4NusvARB glad_glVertexAttrib4NusvARB +typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVARBPROC)(GLuint index, const GLbyte* v); +GLAPI PFNGLVERTEXATTRIB4BVARBPROC glad_glVertexAttrib4bvARB; +#define glVertexAttrib4bvARB glad_glVertexAttrib4bvARB +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DARBPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI PFNGLVERTEXATTRIB4DARBPROC glad_glVertexAttrib4dARB; +#define glVertexAttrib4dARB glad_glVertexAttrib4dARB +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVARBPROC)(GLuint index, const GLdouble* v); +GLAPI PFNGLVERTEXATTRIB4DVARBPROC glad_glVertexAttrib4dvARB; +#define glVertexAttrib4dvARB glad_glVertexAttrib4dvARB +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FARBPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI PFNGLVERTEXATTRIB4FARBPROC glad_glVertexAttrib4fARB; +#define glVertexAttrib4fARB glad_glVertexAttrib4fARB +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVARBPROC)(GLuint index, const GLfloat* v); +GLAPI PFNGLVERTEXATTRIB4FVARBPROC glad_glVertexAttrib4fvARB; +#define glVertexAttrib4fvARB glad_glVertexAttrib4fvARB +typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVARBPROC)(GLuint index, const GLint* v); +GLAPI PFNGLVERTEXATTRIB4IVARBPROC glad_glVertexAttrib4ivARB; +#define glVertexAttrib4ivARB glad_glVertexAttrib4ivARB +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SARBPROC)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI PFNGLVERTEXATTRIB4SARBPROC glad_glVertexAttrib4sARB; +#define glVertexAttrib4sARB glad_glVertexAttrib4sARB +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVARBPROC)(GLuint index, const GLshort* v); +GLAPI PFNGLVERTEXATTRIB4SVARBPROC glad_glVertexAttrib4svARB; +#define glVertexAttrib4svARB glad_glVertexAttrib4svARB +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVARBPROC)(GLuint index, const GLubyte* v); +GLAPI PFNGLVERTEXATTRIB4UBVARBPROC glad_glVertexAttrib4ubvARB; +#define glVertexAttrib4ubvARB glad_glVertexAttrib4ubvARB +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVARBPROC)(GLuint index, const GLuint* v); +GLAPI PFNGLVERTEXATTRIB4UIVARBPROC glad_glVertexAttrib4uivARB; +#define glVertexAttrib4uivARB glad_glVertexAttrib4uivARB +typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVARBPROC)(GLuint index, const GLushort* v); +GLAPI PFNGLVERTEXATTRIB4USVARBPROC glad_glVertexAttrib4usvARB; +#define glVertexAttrib4usvARB glad_glVertexAttrib4usvARB +typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERARBPROC)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* pointer); +GLAPI PFNGLVERTEXATTRIBPOINTERARBPROC glad_glVertexAttribPointerARB; +#define glVertexAttribPointerARB glad_glVertexAttribPointerARB +typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYARBPROC)(GLuint index); +GLAPI PFNGLENABLEVERTEXATTRIBARRAYARBPROC glad_glEnableVertexAttribArrayARB; +#define glEnableVertexAttribArrayARB glad_glEnableVertexAttribArrayARB +typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYARBPROC)(GLuint index); +GLAPI PFNGLDISABLEVERTEXATTRIBARRAYARBPROC glad_glDisableVertexAttribArrayARB; +#define glDisableVertexAttribArrayARB glad_glDisableVertexAttribArrayARB +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVARBPROC)(GLuint index, GLenum pname, GLdouble* params); +GLAPI PFNGLGETVERTEXATTRIBDVARBPROC glad_glGetVertexAttribdvARB; +#define glGetVertexAttribdvARB glad_glGetVertexAttribdvARB +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVARBPROC)(GLuint index, GLenum pname, GLfloat* params); +GLAPI PFNGLGETVERTEXATTRIBFVARBPROC glad_glGetVertexAttribfvARB; +#define glGetVertexAttribfvARB glad_glGetVertexAttribfvARB +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVARBPROC)(GLuint index, GLenum pname, GLint* params); +GLAPI PFNGLGETVERTEXATTRIBIVARBPROC glad_glGetVertexAttribivARB; +#define glGetVertexAttribivARB glad_glGetVertexAttribivARB +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVARBPROC)(GLuint index, GLenum pname, void** pointer); +GLAPI PFNGLGETVERTEXATTRIBPOINTERVARBPROC glad_glGetVertexAttribPointervARB; +#define glGetVertexAttribPointervARB glad_glGetVertexAttribPointervARB +#endif +#ifndef GL_ARB_vertex_shader +#define GL_ARB_vertex_shader 1 +GLAPI int GLAD_GL_ARB_vertex_shader; +typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONARBPROC)(GLhandleARB programObj, GLuint index, const GLcharARB* name); +GLAPI PFNGLBINDATTRIBLOCATIONARBPROC glad_glBindAttribLocationARB; +#define glBindAttribLocationARB glad_glBindAttribLocationARB +typedef void (APIENTRYP PFNGLGETACTIVEATTRIBARBPROC)(GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei* length, GLint* size, GLenum* type, GLcharARB* name); +GLAPI PFNGLGETACTIVEATTRIBARBPROC glad_glGetActiveAttribARB; +#define glGetActiveAttribARB glad_glGetActiveAttribARB +typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONARBPROC)(GLhandleARB programObj, const GLcharARB* name); +GLAPI PFNGLGETATTRIBLOCATIONARBPROC glad_glGetAttribLocationARB; +#define glGetAttribLocationARB glad_glGetAttribLocationARB +#endif +#ifndef GL_ATI_element_array +#define GL_ATI_element_array 1 +GLAPI int GLAD_GL_ATI_element_array; +typedef void (APIENTRYP PFNGLELEMENTPOINTERATIPROC)(GLenum type, const void* pointer); +GLAPI PFNGLELEMENTPOINTERATIPROC glad_glElementPointerATI; +#define glElementPointerATI glad_glElementPointerATI +typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYATIPROC)(GLenum mode, GLsizei count); +GLAPI PFNGLDRAWELEMENTARRAYATIPROC glad_glDrawElementArrayATI; +#define glDrawElementArrayATI glad_glDrawElementArrayATI +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYATIPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count); +GLAPI PFNGLDRAWRANGEELEMENTARRAYATIPROC glad_glDrawRangeElementArrayATI; +#define glDrawRangeElementArrayATI glad_glDrawRangeElementArrayATI +#endif +#ifndef GL_ATI_fragment_shader +#define GL_ATI_fragment_shader 1 +GLAPI int GLAD_GL_ATI_fragment_shader; +typedef GLuint (APIENTRYP PFNGLGENFRAGMENTSHADERSATIPROC)(GLuint range); +GLAPI PFNGLGENFRAGMENTSHADERSATIPROC glad_glGenFragmentShadersATI; +#define glGenFragmentShadersATI glad_glGenFragmentShadersATI +typedef void (APIENTRYP PFNGLBINDFRAGMENTSHADERATIPROC)(GLuint id); +GLAPI PFNGLBINDFRAGMENTSHADERATIPROC glad_glBindFragmentShaderATI; +#define glBindFragmentShaderATI glad_glBindFragmentShaderATI +typedef void (APIENTRYP PFNGLDELETEFRAGMENTSHADERATIPROC)(GLuint id); +GLAPI PFNGLDELETEFRAGMENTSHADERATIPROC glad_glDeleteFragmentShaderATI; +#define glDeleteFragmentShaderATI glad_glDeleteFragmentShaderATI +typedef void (APIENTRYP PFNGLBEGINFRAGMENTSHADERATIPROC)(); +GLAPI PFNGLBEGINFRAGMENTSHADERATIPROC glad_glBeginFragmentShaderATI; +#define glBeginFragmentShaderATI glad_glBeginFragmentShaderATI +typedef void (APIENTRYP PFNGLENDFRAGMENTSHADERATIPROC)(); +GLAPI PFNGLENDFRAGMENTSHADERATIPROC glad_glEndFragmentShaderATI; +#define glEndFragmentShaderATI glad_glEndFragmentShaderATI +typedef void (APIENTRYP PFNGLPASSTEXCOORDATIPROC)(GLuint dst, GLuint coord, GLenum swizzle); +GLAPI PFNGLPASSTEXCOORDATIPROC glad_glPassTexCoordATI; +#define glPassTexCoordATI glad_glPassTexCoordATI +typedef void (APIENTRYP PFNGLSAMPLEMAPATIPROC)(GLuint dst, GLuint interp, GLenum swizzle); +GLAPI PFNGLSAMPLEMAPATIPROC glad_glSampleMapATI; +#define glSampleMapATI glad_glSampleMapATI +typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP1ATIPROC)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +GLAPI PFNGLCOLORFRAGMENTOP1ATIPROC glad_glColorFragmentOp1ATI; +#define glColorFragmentOp1ATI glad_glColorFragmentOp1ATI +typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP2ATIPROC)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +GLAPI PFNGLCOLORFRAGMENTOP2ATIPROC glad_glColorFragmentOp2ATI; +#define glColorFragmentOp2ATI glad_glColorFragmentOp2ATI +typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP3ATIPROC)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); +GLAPI PFNGLCOLORFRAGMENTOP3ATIPROC glad_glColorFragmentOp3ATI; +#define glColorFragmentOp3ATI glad_glColorFragmentOp3ATI +typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP1ATIPROC)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +GLAPI PFNGLALPHAFRAGMENTOP1ATIPROC glad_glAlphaFragmentOp1ATI; +#define glAlphaFragmentOp1ATI glad_glAlphaFragmentOp1ATI +typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP2ATIPROC)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +GLAPI PFNGLALPHAFRAGMENTOP2ATIPROC glad_glAlphaFragmentOp2ATI; +#define glAlphaFragmentOp2ATI glad_glAlphaFragmentOp2ATI +typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP3ATIPROC)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); +GLAPI PFNGLALPHAFRAGMENTOP3ATIPROC glad_glAlphaFragmentOp3ATI; +#define glAlphaFragmentOp3ATI glad_glAlphaFragmentOp3ATI +typedef void (APIENTRYP PFNGLSETFRAGMENTSHADERCONSTANTATIPROC)(GLuint dst, const GLfloat* value); +GLAPI PFNGLSETFRAGMENTSHADERCONSTANTATIPROC glad_glSetFragmentShaderConstantATI; +#define glSetFragmentShaderConstantATI glad_glSetFragmentShaderConstantATI +#endif +#ifndef GL_ATI_vertex_array_object +#define GL_ATI_vertex_array_object 1 +GLAPI int GLAD_GL_ATI_vertex_array_object; +typedef GLuint (APIENTRYP PFNGLNEWOBJECTBUFFERATIPROC)(GLsizei size, const void* pointer, GLenum usage); +GLAPI PFNGLNEWOBJECTBUFFERATIPROC glad_glNewObjectBufferATI; +#define glNewObjectBufferATI glad_glNewObjectBufferATI +typedef GLboolean (APIENTRYP PFNGLISOBJECTBUFFERATIPROC)(GLuint buffer); +GLAPI PFNGLISOBJECTBUFFERATIPROC glad_glIsObjectBufferATI; +#define glIsObjectBufferATI glad_glIsObjectBufferATI +typedef void (APIENTRYP PFNGLUPDATEOBJECTBUFFERATIPROC)(GLuint buffer, GLuint offset, GLsizei size, const void* pointer, GLenum preserve); +GLAPI PFNGLUPDATEOBJECTBUFFERATIPROC glad_glUpdateObjectBufferATI; +#define glUpdateObjectBufferATI glad_glUpdateObjectBufferATI +typedef void (APIENTRYP PFNGLGETOBJECTBUFFERFVATIPROC)(GLuint buffer, GLenum pname, GLfloat* params); +GLAPI PFNGLGETOBJECTBUFFERFVATIPROC glad_glGetObjectBufferfvATI; +#define glGetObjectBufferfvATI glad_glGetObjectBufferfvATI +typedef void (APIENTRYP PFNGLGETOBJECTBUFFERIVATIPROC)(GLuint buffer, GLenum pname, GLint* params); +GLAPI PFNGLGETOBJECTBUFFERIVATIPROC glad_glGetObjectBufferivATI; +#define glGetObjectBufferivATI glad_glGetObjectBufferivATI +typedef void (APIENTRYP PFNGLFREEOBJECTBUFFERATIPROC)(GLuint buffer); +GLAPI PFNGLFREEOBJECTBUFFERATIPROC glad_glFreeObjectBufferATI; +#define glFreeObjectBufferATI glad_glFreeObjectBufferATI +typedef void (APIENTRYP PFNGLARRAYOBJECTATIPROC)(GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); +GLAPI PFNGLARRAYOBJECTATIPROC glad_glArrayObjectATI; +#define glArrayObjectATI glad_glArrayObjectATI +typedef void (APIENTRYP PFNGLGETARRAYOBJECTFVATIPROC)(GLenum array, GLenum pname, GLfloat* params); +GLAPI PFNGLGETARRAYOBJECTFVATIPROC glad_glGetArrayObjectfvATI; +#define glGetArrayObjectfvATI glad_glGetArrayObjectfvATI +typedef void (APIENTRYP PFNGLGETARRAYOBJECTIVATIPROC)(GLenum array, GLenum pname, GLint* params); +GLAPI PFNGLGETARRAYOBJECTIVATIPROC glad_glGetArrayObjectivATI; +#define glGetArrayObjectivATI glad_glGetArrayObjectivATI +typedef void (APIENTRYP PFNGLVARIANTARRAYOBJECTATIPROC)(GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); +GLAPI PFNGLVARIANTARRAYOBJECTATIPROC glad_glVariantArrayObjectATI; +#define glVariantArrayObjectATI glad_glVariantArrayObjectATI +typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTFVATIPROC)(GLuint id, GLenum pname, GLfloat* params); +GLAPI PFNGLGETVARIANTARRAYOBJECTFVATIPROC glad_glGetVariantArrayObjectfvATI; +#define glGetVariantArrayObjectfvATI glad_glGetVariantArrayObjectfvATI +typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTIVATIPROC)(GLuint id, GLenum pname, GLint* params); +GLAPI PFNGLGETVARIANTARRAYOBJECTIVATIPROC glad_glGetVariantArrayObjectivATI; +#define glGetVariantArrayObjectivATI glad_glGetVariantArrayObjectivATI +#endif +#ifndef GL_EXT_blend_color +#define GL_EXT_blend_color 1 +GLAPI int GLAD_GL_EXT_blend_color; +typedef void (APIENTRYP PFNGLBLENDCOLOREXTPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +GLAPI PFNGLBLENDCOLOREXTPROC glad_glBlendColorEXT; +#define glBlendColorEXT glad_glBlendColorEXT +#endif +#ifndef GL_EXT_blend_equation_separate +#define GL_EXT_blend_equation_separate 1 +GLAPI int GLAD_GL_EXT_blend_equation_separate; +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEEXTPROC)(GLenum modeRGB, GLenum modeAlpha); +GLAPI PFNGLBLENDEQUATIONSEPARATEEXTPROC glad_glBlendEquationSeparateEXT; +#define glBlendEquationSeparateEXT glad_glBlendEquationSeparateEXT +#endif +#ifndef GL_EXT_blend_func_separate +#define GL_EXT_blend_func_separate 1 +GLAPI int GLAD_GL_EXT_blend_func_separate; +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEEXTPROC)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +GLAPI PFNGLBLENDFUNCSEPARATEEXTPROC glad_glBlendFuncSeparateEXT; +#define glBlendFuncSeparateEXT glad_glBlendFuncSeparateEXT +#endif +#ifndef GL_EXT_debug_marker +#define GL_EXT_debug_marker 1 +GLAPI int GLAD_GL_EXT_debug_marker; +typedef void (APIENTRYP PFNGLINSERTEVENTMARKEREXTPROC)(GLsizei length, const GLchar *marker); +GLAPI PFNGLINSERTEVENTMARKEREXTPROC glad_glInsertEventMarkerEXT; +#define glInsertEventMarkerEXT glad_glInsertEventMarkerEXT +typedef void (APIENTRYP PFNGLPUSHGROUPMARKEREXTPROC)(GLsizei length, const GLchar *marker); +GLAPI PFNGLPUSHGROUPMARKEREXTPROC glad_glPushGroupMarkerEXT; +#define glPushGroupMarkerEXT glad_glPushGroupMarkerEXT +typedef void (APIENTRYP PFNGLPOPGROUPMARKEREXTPROC)(void); +GLAPI PFNGLPOPGROUPMARKEREXTPROC glad_glPopGroupMarkerEXT; +#define glPopGroupMarkerEXT glad_glPopGroupMarkerEXT +#endif +#ifndef GL_EXT_framebuffer_blit +#define GL_EXT_framebuffer_blit 1 +GLAPI int GLAD_GL_EXT_framebuffer_blit; +typedef void (APIENTRYP PFNGLBLITFRAMEBUFFEREXTPROC)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +GLAPI PFNGLBLITFRAMEBUFFEREXTPROC glad_glBlitFramebufferEXT; +#define glBlitFramebufferEXT glad_glBlitFramebufferEXT +#endif +#ifndef GL_EXT_framebuffer_multisample +#define GL_EXT_framebuffer_multisample 1 +GLAPI int GLAD_GL_EXT_framebuffer_multisample; +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC glad_glRenderbufferStorageMultisampleEXT; +#define glRenderbufferStorageMultisampleEXT glad_glRenderbufferStorageMultisampleEXT +#endif +#ifndef GL_EXT_framebuffer_multisample_blit_scaled +#define GL_EXT_framebuffer_multisample_blit_scaled 1 +GLAPI int GLAD_GL_EXT_framebuffer_multisample_blit_scaled; +#endif +#ifndef GL_EXT_framebuffer_object +#define GL_EXT_framebuffer_object 1 +GLAPI int GLAD_GL_EXT_framebuffer_object; +typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFEREXTPROC)(GLuint renderbuffer); +GLAPI PFNGLISRENDERBUFFEREXTPROC glad_glIsRenderbufferEXT; +#define glIsRenderbufferEXT glad_glIsRenderbufferEXT +typedef void (APIENTRYP PFNGLBINDRENDERBUFFEREXTPROC)(GLenum target, GLuint renderbuffer); +GLAPI PFNGLBINDRENDERBUFFEREXTPROC glad_glBindRenderbufferEXT; +#define glBindRenderbufferEXT glad_glBindRenderbufferEXT +typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSEXTPROC)(GLsizei n, const GLuint* renderbuffers); +GLAPI PFNGLDELETERENDERBUFFERSEXTPROC glad_glDeleteRenderbuffersEXT; +#define glDeleteRenderbuffersEXT glad_glDeleteRenderbuffersEXT +typedef void (APIENTRYP PFNGLGENRENDERBUFFERSEXTPROC)(GLsizei n, GLuint* renderbuffers); +GLAPI PFNGLGENRENDERBUFFERSEXTPROC glad_glGenRenderbuffersEXT; +#define glGenRenderbuffersEXT glad_glGenRenderbuffersEXT +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEEXTPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI PFNGLRENDERBUFFERSTORAGEEXTPROC glad_glRenderbufferStorageEXT; +#define glRenderbufferStorageEXT glad_glRenderbufferStorageEXT +typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC)(GLenum target, GLenum pname, GLint* params); +GLAPI PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC glad_glGetRenderbufferParameterivEXT; +#define glGetRenderbufferParameterivEXT glad_glGetRenderbufferParameterivEXT +typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFEREXTPROC)(GLuint framebuffer); +GLAPI PFNGLISFRAMEBUFFEREXTPROC glad_glIsFramebufferEXT; +#define glIsFramebufferEXT glad_glIsFramebufferEXT +typedef void (APIENTRYP PFNGLBINDFRAMEBUFFEREXTPROC)(GLenum target, GLuint framebuffer); +GLAPI PFNGLBINDFRAMEBUFFEREXTPROC glad_glBindFramebufferEXT; +#define glBindFramebufferEXT glad_glBindFramebufferEXT +typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSEXTPROC)(GLsizei n, const GLuint* framebuffers); +GLAPI PFNGLDELETEFRAMEBUFFERSEXTPROC glad_glDeleteFramebuffersEXT; +#define glDeleteFramebuffersEXT glad_glDeleteFramebuffersEXT +typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSEXTPROC)(GLsizei n, GLuint* framebuffers); +GLAPI PFNGLGENFRAMEBUFFERSEXTPROC glad_glGenFramebuffersEXT; +#define glGenFramebuffersEXT glad_glGenFramebuffersEXT +typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC)(GLenum target); +GLAPI PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glad_glCheckFramebufferStatusEXT; +#define glCheckFramebufferStatusEXT glad_glCheckFramebufferStatusEXT +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DEXTPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI PFNGLFRAMEBUFFERTEXTURE1DEXTPROC glad_glFramebufferTexture1DEXT; +#define glFramebufferTexture1DEXT glad_glFramebufferTexture1DEXT +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DEXTPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glad_glFramebufferTexture2DEXT; +#define glFramebufferTexture2DEXT glad_glFramebufferTexture2DEXT +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DEXTPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +GLAPI PFNGLFRAMEBUFFERTEXTURE3DEXTPROC glad_glFramebufferTexture3DEXT; +#define glFramebufferTexture3DEXT glad_glFramebufferTexture3DEXT +typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +GLAPI PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC glad_glFramebufferRenderbufferEXT; +#define glFramebufferRenderbufferEXT glad_glFramebufferRenderbufferEXT +typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC)(GLenum target, GLenum attachment, GLenum pname, GLint* params); +GLAPI PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC glad_glGetFramebufferAttachmentParameterivEXT; +#define glGetFramebufferAttachmentParameterivEXT glad_glGetFramebufferAttachmentParameterivEXT +typedef void (APIENTRYP PFNGLGENERATEMIPMAPEXTPROC)(GLenum target); +GLAPI PFNGLGENERATEMIPMAPEXTPROC glad_glGenerateMipmapEXT; +#define glGenerateMipmapEXT glad_glGenerateMipmapEXT +#endif +#ifndef GL_EXT_framebuffer_sRGB +#define GL_EXT_framebuffer_sRGB 1 +GLAPI int GLAD_GL_EXT_framebuffer_sRGB; +#endif +#ifndef GL_EXT_index_array_formats +#define GL_EXT_index_array_formats 1 +GLAPI int GLAD_GL_EXT_index_array_formats; +#endif +#ifndef GL_EXT_texture +#define GL_EXT_texture 1 +GLAPI int GLAD_GL_EXT_texture; +#endif +#ifndef GL_EXT_texture_compression_s3tc +#define GL_EXT_texture_compression_s3tc 1 +GLAPI int GLAD_GL_EXT_texture_compression_s3tc; +#endif +#ifndef GL_EXT_texture_sRGB +#define GL_EXT_texture_sRGB 1 +GLAPI int GLAD_GL_EXT_texture_sRGB; +#endif +#ifndef GL_EXT_texture_swizzle +#define GL_EXT_texture_swizzle 1 +GLAPI int GLAD_GL_EXT_texture_swizzle; +#endif +#ifndef GL_EXT_vertex_array +#define GL_EXT_vertex_array 1 +GLAPI int GLAD_GL_EXT_vertex_array; +typedef void (APIENTRYP PFNGLARRAYELEMENTEXTPROC)(GLint i); +GLAPI PFNGLARRAYELEMENTEXTPROC glad_glArrayElementEXT; +#define glArrayElementEXT glad_glArrayElementEXT +typedef void (APIENTRYP PFNGLCOLORPOINTEREXTPROC)(GLint size, GLenum type, GLsizei stride, GLsizei count, const void* pointer); +GLAPI PFNGLCOLORPOINTEREXTPROC glad_glColorPointerEXT; +#define glColorPointerEXT glad_glColorPointerEXT +typedef void (APIENTRYP PFNGLDRAWARRAYSEXTPROC)(GLenum mode, GLint first, GLsizei count); +GLAPI PFNGLDRAWARRAYSEXTPROC glad_glDrawArraysEXT; +#define glDrawArraysEXT glad_glDrawArraysEXT +typedef void (APIENTRYP PFNGLEDGEFLAGPOINTEREXTPROC)(GLsizei stride, GLsizei count, const GLboolean* pointer); +GLAPI PFNGLEDGEFLAGPOINTEREXTPROC glad_glEdgeFlagPointerEXT; +#define glEdgeFlagPointerEXT glad_glEdgeFlagPointerEXT +typedef void (APIENTRYP PFNGLGETPOINTERVEXTPROC)(GLenum pname, void** params); +GLAPI PFNGLGETPOINTERVEXTPROC glad_glGetPointervEXT; +#define glGetPointervEXT glad_glGetPointervEXT +typedef void (APIENTRYP PFNGLINDEXPOINTEREXTPROC)(GLenum type, GLsizei stride, GLsizei count, const void* pointer); +GLAPI PFNGLINDEXPOINTEREXTPROC glad_glIndexPointerEXT; +#define glIndexPointerEXT glad_glIndexPointerEXT +typedef void (APIENTRYP PFNGLNORMALPOINTEREXTPROC)(GLenum type, GLsizei stride, GLsizei count, const void* pointer); +GLAPI PFNGLNORMALPOINTEREXTPROC glad_glNormalPointerEXT; +#define glNormalPointerEXT glad_glNormalPointerEXT +typedef void (APIENTRYP PFNGLTEXCOORDPOINTEREXTPROC)(GLint size, GLenum type, GLsizei stride, GLsizei count, const void* pointer); +GLAPI PFNGLTEXCOORDPOINTEREXTPROC glad_glTexCoordPointerEXT; +#define glTexCoordPointerEXT glad_glTexCoordPointerEXT +typedef void (APIENTRYP PFNGLVERTEXPOINTEREXTPROC)(GLint size, GLenum type, GLsizei stride, GLsizei count, const void* pointer); +GLAPI PFNGLVERTEXPOINTEREXTPROC glad_glVertexPointerEXT; +#define glVertexPointerEXT glad_glVertexPointerEXT +#endif +#ifndef GL_EXT_vertex_shader +#define GL_EXT_vertex_shader 1 +GLAPI int GLAD_GL_EXT_vertex_shader; +typedef void (APIENTRYP PFNGLBEGINVERTEXSHADEREXTPROC)(); +GLAPI PFNGLBEGINVERTEXSHADEREXTPROC glad_glBeginVertexShaderEXT; +#define glBeginVertexShaderEXT glad_glBeginVertexShaderEXT +typedef void (APIENTRYP PFNGLENDVERTEXSHADEREXTPROC)(); +GLAPI PFNGLENDVERTEXSHADEREXTPROC glad_glEndVertexShaderEXT; +#define glEndVertexShaderEXT glad_glEndVertexShaderEXT +typedef void (APIENTRYP PFNGLBINDVERTEXSHADEREXTPROC)(GLuint id); +GLAPI PFNGLBINDVERTEXSHADEREXTPROC glad_glBindVertexShaderEXT; +#define glBindVertexShaderEXT glad_glBindVertexShaderEXT +typedef GLuint (APIENTRYP PFNGLGENVERTEXSHADERSEXTPROC)(GLuint range); +GLAPI PFNGLGENVERTEXSHADERSEXTPROC glad_glGenVertexShadersEXT; +#define glGenVertexShadersEXT glad_glGenVertexShadersEXT +typedef void (APIENTRYP PFNGLDELETEVERTEXSHADEREXTPROC)(GLuint id); +GLAPI PFNGLDELETEVERTEXSHADEREXTPROC glad_glDeleteVertexShaderEXT; +#define glDeleteVertexShaderEXT glad_glDeleteVertexShaderEXT +typedef void (APIENTRYP PFNGLSHADEROP1EXTPROC)(GLenum op, GLuint res, GLuint arg1); +GLAPI PFNGLSHADEROP1EXTPROC glad_glShaderOp1EXT; +#define glShaderOp1EXT glad_glShaderOp1EXT +typedef void (APIENTRYP PFNGLSHADEROP2EXTPROC)(GLenum op, GLuint res, GLuint arg1, GLuint arg2); +GLAPI PFNGLSHADEROP2EXTPROC glad_glShaderOp2EXT; +#define glShaderOp2EXT glad_glShaderOp2EXT +typedef void (APIENTRYP PFNGLSHADEROP3EXTPROC)(GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); +GLAPI PFNGLSHADEROP3EXTPROC glad_glShaderOp3EXT; +#define glShaderOp3EXT glad_glShaderOp3EXT +typedef void (APIENTRYP PFNGLSWIZZLEEXTPROC)(GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); +GLAPI PFNGLSWIZZLEEXTPROC glad_glSwizzleEXT; +#define glSwizzleEXT glad_glSwizzleEXT +typedef void (APIENTRYP PFNGLWRITEMASKEXTPROC)(GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); +GLAPI PFNGLWRITEMASKEXTPROC glad_glWriteMaskEXT; +#define glWriteMaskEXT glad_glWriteMaskEXT +typedef void (APIENTRYP PFNGLINSERTCOMPONENTEXTPROC)(GLuint res, GLuint src, GLuint num); +GLAPI PFNGLINSERTCOMPONENTEXTPROC glad_glInsertComponentEXT; +#define glInsertComponentEXT glad_glInsertComponentEXT +typedef void (APIENTRYP PFNGLEXTRACTCOMPONENTEXTPROC)(GLuint res, GLuint src, GLuint num); +GLAPI PFNGLEXTRACTCOMPONENTEXTPROC glad_glExtractComponentEXT; +#define glExtractComponentEXT glad_glExtractComponentEXT +typedef GLuint (APIENTRYP PFNGLGENSYMBOLSEXTPROC)(GLenum datatype, GLenum storagetype, GLenum range, GLuint components); +GLAPI PFNGLGENSYMBOLSEXTPROC glad_glGenSymbolsEXT; +#define glGenSymbolsEXT glad_glGenSymbolsEXT +typedef void (APIENTRYP PFNGLSETINVARIANTEXTPROC)(GLuint id, GLenum type, const void* addr); +GLAPI PFNGLSETINVARIANTEXTPROC glad_glSetInvariantEXT; +#define glSetInvariantEXT glad_glSetInvariantEXT +typedef void (APIENTRYP PFNGLSETLOCALCONSTANTEXTPROC)(GLuint id, GLenum type, const void* addr); +GLAPI PFNGLSETLOCALCONSTANTEXTPROC glad_glSetLocalConstantEXT; +#define glSetLocalConstantEXT glad_glSetLocalConstantEXT +typedef void (APIENTRYP PFNGLVARIANTBVEXTPROC)(GLuint id, const GLbyte* addr); +GLAPI PFNGLVARIANTBVEXTPROC glad_glVariantbvEXT; +#define glVariantbvEXT glad_glVariantbvEXT +typedef void (APIENTRYP PFNGLVARIANTSVEXTPROC)(GLuint id, const GLshort* addr); +GLAPI PFNGLVARIANTSVEXTPROC glad_glVariantsvEXT; +#define glVariantsvEXT glad_glVariantsvEXT +typedef void (APIENTRYP PFNGLVARIANTIVEXTPROC)(GLuint id, const GLint* addr); +GLAPI PFNGLVARIANTIVEXTPROC glad_glVariantivEXT; +#define glVariantivEXT glad_glVariantivEXT +typedef void (APIENTRYP PFNGLVARIANTFVEXTPROC)(GLuint id, const GLfloat* addr); +GLAPI PFNGLVARIANTFVEXTPROC glad_glVariantfvEXT; +#define glVariantfvEXT glad_glVariantfvEXT +typedef void (APIENTRYP PFNGLVARIANTDVEXTPROC)(GLuint id, const GLdouble* addr); +GLAPI PFNGLVARIANTDVEXTPROC glad_glVariantdvEXT; +#define glVariantdvEXT glad_glVariantdvEXT +typedef void (APIENTRYP PFNGLVARIANTUBVEXTPROC)(GLuint id, const GLubyte* addr); +GLAPI PFNGLVARIANTUBVEXTPROC glad_glVariantubvEXT; +#define glVariantubvEXT glad_glVariantubvEXT +typedef void (APIENTRYP PFNGLVARIANTUSVEXTPROC)(GLuint id, const GLushort* addr); +GLAPI PFNGLVARIANTUSVEXTPROC glad_glVariantusvEXT; +#define glVariantusvEXT glad_glVariantusvEXT +typedef void (APIENTRYP PFNGLVARIANTUIVEXTPROC)(GLuint id, const GLuint* addr); +GLAPI PFNGLVARIANTUIVEXTPROC glad_glVariantuivEXT; +#define glVariantuivEXT glad_glVariantuivEXT +typedef void (APIENTRYP PFNGLVARIANTPOINTEREXTPROC)(GLuint id, GLenum type, GLuint stride, const void* addr); +GLAPI PFNGLVARIANTPOINTEREXTPROC glad_glVariantPointerEXT; +#define glVariantPointerEXT glad_glVariantPointerEXT +typedef void (APIENTRYP PFNGLENABLEVARIANTCLIENTSTATEEXTPROC)(GLuint id); +GLAPI PFNGLENABLEVARIANTCLIENTSTATEEXTPROC glad_glEnableVariantClientStateEXT; +#define glEnableVariantClientStateEXT glad_glEnableVariantClientStateEXT +typedef void (APIENTRYP PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC)(GLuint id); +GLAPI PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC glad_glDisableVariantClientStateEXT; +#define glDisableVariantClientStateEXT glad_glDisableVariantClientStateEXT +typedef GLuint (APIENTRYP PFNGLBINDLIGHTPARAMETEREXTPROC)(GLenum light, GLenum value); +GLAPI PFNGLBINDLIGHTPARAMETEREXTPROC glad_glBindLightParameterEXT; +#define glBindLightParameterEXT glad_glBindLightParameterEXT +typedef GLuint (APIENTRYP PFNGLBINDMATERIALPARAMETEREXTPROC)(GLenum face, GLenum value); +GLAPI PFNGLBINDMATERIALPARAMETEREXTPROC glad_glBindMaterialParameterEXT; +#define glBindMaterialParameterEXT glad_glBindMaterialParameterEXT +typedef GLuint (APIENTRYP PFNGLBINDTEXGENPARAMETEREXTPROC)(GLenum unit, GLenum coord, GLenum value); +GLAPI PFNGLBINDTEXGENPARAMETEREXTPROC glad_glBindTexGenParameterEXT; +#define glBindTexGenParameterEXT glad_glBindTexGenParameterEXT +typedef GLuint (APIENTRYP PFNGLBINDTEXTUREUNITPARAMETEREXTPROC)(GLenum unit, GLenum value); +GLAPI PFNGLBINDTEXTUREUNITPARAMETEREXTPROC glad_glBindTextureUnitParameterEXT; +#define glBindTextureUnitParameterEXT glad_glBindTextureUnitParameterEXT +typedef GLuint (APIENTRYP PFNGLBINDPARAMETEREXTPROC)(GLenum value); +GLAPI PFNGLBINDPARAMETEREXTPROC glad_glBindParameterEXT; +#define glBindParameterEXT glad_glBindParameterEXT +typedef GLboolean (APIENTRYP PFNGLISVARIANTENABLEDEXTPROC)(GLuint id, GLenum cap); +GLAPI PFNGLISVARIANTENABLEDEXTPROC glad_glIsVariantEnabledEXT; +#define glIsVariantEnabledEXT glad_glIsVariantEnabledEXT +typedef void (APIENTRYP PFNGLGETVARIANTBOOLEANVEXTPROC)(GLuint id, GLenum value, GLboolean* data); +GLAPI PFNGLGETVARIANTBOOLEANVEXTPROC glad_glGetVariantBooleanvEXT; +#define glGetVariantBooleanvEXT glad_glGetVariantBooleanvEXT +typedef void (APIENTRYP PFNGLGETVARIANTINTEGERVEXTPROC)(GLuint id, GLenum value, GLint* data); +GLAPI PFNGLGETVARIANTINTEGERVEXTPROC glad_glGetVariantIntegervEXT; +#define glGetVariantIntegervEXT glad_glGetVariantIntegervEXT +typedef void (APIENTRYP PFNGLGETVARIANTFLOATVEXTPROC)(GLuint id, GLenum value, GLfloat* data); +GLAPI PFNGLGETVARIANTFLOATVEXTPROC glad_glGetVariantFloatvEXT; +#define glGetVariantFloatvEXT glad_glGetVariantFloatvEXT +typedef void (APIENTRYP PFNGLGETVARIANTPOINTERVEXTPROC)(GLuint id, GLenum value, void** data); +GLAPI PFNGLGETVARIANTPOINTERVEXTPROC glad_glGetVariantPointervEXT; +#define glGetVariantPointervEXT glad_glGetVariantPointervEXT +typedef void (APIENTRYP PFNGLGETINVARIANTBOOLEANVEXTPROC)(GLuint id, GLenum value, GLboolean* data); +GLAPI PFNGLGETINVARIANTBOOLEANVEXTPROC glad_glGetInvariantBooleanvEXT; +#define glGetInvariantBooleanvEXT glad_glGetInvariantBooleanvEXT +typedef void (APIENTRYP PFNGLGETINVARIANTINTEGERVEXTPROC)(GLuint id, GLenum value, GLint* data); +GLAPI PFNGLGETINVARIANTINTEGERVEXTPROC glad_glGetInvariantIntegervEXT; +#define glGetInvariantIntegervEXT glad_glGetInvariantIntegervEXT +typedef void (APIENTRYP PFNGLGETINVARIANTFLOATVEXTPROC)(GLuint id, GLenum value, GLfloat* data); +GLAPI PFNGLGETINVARIANTFLOATVEXTPROC glad_glGetInvariantFloatvEXT; +#define glGetInvariantFloatvEXT glad_glGetInvariantFloatvEXT +typedef void (APIENTRYP PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC)(GLuint id, GLenum value, GLboolean* data); +GLAPI PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC glad_glGetLocalConstantBooleanvEXT; +#define glGetLocalConstantBooleanvEXT glad_glGetLocalConstantBooleanvEXT +typedef void (APIENTRYP PFNGLGETLOCALCONSTANTINTEGERVEXTPROC)(GLuint id, GLenum value, GLint* data); +GLAPI PFNGLGETLOCALCONSTANTINTEGERVEXTPROC glad_glGetLocalConstantIntegervEXT; +#define glGetLocalConstantIntegervEXT glad_glGetLocalConstantIntegervEXT +typedef void (APIENTRYP PFNGLGETLOCALCONSTANTFLOATVEXTPROC)(GLuint id, GLenum value, GLfloat* data); +GLAPI PFNGLGETLOCALCONSTANTFLOATVEXTPROC glad_glGetLocalConstantFloatvEXT; +#define glGetLocalConstantFloatvEXT glad_glGetLocalConstantFloatvEXT +#endif + +#ifdef __cplusplus +} +#endif + +#endif + +////////////////////////////////////////////////////////////////////////////// +// +// IMPLEMENTATION SECTION +// + +#ifdef GLAD_IMPLEMENTATION + +#include +#include +#include + +struct gladGLversionStruct GLVersion; + +#if defined(GL_ES_VERSION_3_0) || defined(GL_VERSION_3_0) +#define _GLAD_IS_SOME_NEW_VERSION 1 +#endif + +static int max_loaded_major; +static int max_loaded_minor; + +static const char *exts = NULL; +static int num_exts_i = 0; +static const char **exts_i = NULL; + +static int get_exts(void) { +#ifdef _GLAD_IS_SOME_NEW_VERSION + if(max_loaded_major < 3) { +#endif + exts = (const char *)glGetString(GL_EXTENSIONS); +#ifdef _GLAD_IS_SOME_NEW_VERSION + } else { + int index; + + num_exts_i = 0; + glGetIntegerv(GL_NUM_EXTENSIONS, &num_exts_i); + if (num_exts_i > 0) { + exts_i = (const char **)realloc((void *)exts_i, num_exts_i * sizeof *exts_i); + } + + if (exts_i == NULL) { + return 0; + } + + for(index = 0; index < num_exts_i; index++) { + exts_i[index] = (const char*)glGetStringi(GL_EXTENSIONS, index); + } + } +#endif + return 1; +} + +static void free_exts(void) { + if (exts_i != NULL) { + free((char **)exts_i); + exts_i = NULL; + } +} + +static int has_ext(const char *ext) { +#ifdef _GLAD_IS_SOME_NEW_VERSION + if(max_loaded_major < 3) { +#endif + const char *extensions; + const char *loc; + const char *terminator; + extensions = exts; + if(extensions == NULL || ext == NULL) { + return 0; + } + + while(1) { + loc = strstr(extensions, ext); + if(loc == NULL) { + return 0; + } + + terminator = loc + strlen(ext); + if((loc == extensions || *(loc - 1) == ' ') && + (*terminator == ' ' || *terminator == '\0')) { + return 1; + } + extensions = terminator; + } +#ifdef _GLAD_IS_SOME_NEW_VERSION + } else { + int index; + + for(index = 0; index < num_exts_i; index++) { + const char *e = exts_i[index]; + + if(strcmp(e, ext) == 0) { + return 1; + } + } + } +#endif + + return 0; +} +int GLAD_GL_VERSION_1_0; +int GLAD_GL_VERSION_1_1; +int GLAD_GL_VERSION_1_2; +int GLAD_GL_VERSION_1_3; +int GLAD_GL_VERSION_1_4; +int GLAD_GL_VERSION_1_5; +int GLAD_GL_VERSION_2_0; +int GLAD_GL_VERSION_2_1; +int GLAD_GL_VERSION_3_0; +int GLAD_GL_VERSION_3_1; +int GLAD_GL_VERSION_3_2; +int GLAD_GL_VERSION_3_3; +PFNGLCOPYTEXIMAGE1DPROC glad_glCopyTexImage1D; +PFNGLVERTEXATTRIBI3UIPROC glad_glVertexAttribI3ui; +PFNGLSTENCILMASKSEPARATEPROC glad_glStencilMaskSeparate; +PFNGLFRAMEBUFFERRENDERBUFFERPROC glad_glFramebufferRenderbuffer; +PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glad_glCompressedTexSubImage3D; +PFNGLTEXCOORDP3UIVPROC glad_glTexCoordP3uiv; +PFNGLVERTEXATTRIB1SVPROC glad_glVertexAttrib1sv; +PFNGLBINDSAMPLERPROC glad_glBindSampler; +PFNGLLINEWIDTHPROC glad_glLineWidth; +PFNGLCOLORP3UIVPROC glad_glColorP3uiv; +PFNGLGETINTEGERI_VPROC glad_glGetIntegeri_v; +PFNGLCOMPILESHADERPROC glad_glCompileShader; +PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glad_glGetTransformFeedbackVarying; +PFNGLVERTEXATTRIBIPOINTERPROC glad_glVertexAttribIPointer; +PFNGLMULTITEXCOORDP3UIPROC glad_glMultiTexCoordP3ui; +PFNGLVERTEXP4UIPROC glad_glVertexP4ui; +PFNGLENABLEIPROC glad_glEnablei; +PFNGLVERTEXATTRIBP4UIPROC glad_glVertexAttribP4ui; +PFNGLCREATESHADERPROC glad_glCreateShader; +PFNGLISBUFFERPROC glad_glIsBuffer; +PFNGLGETMULTISAMPLEFVPROC glad_glGetMultisamplefv; +PFNGLGENRENDERBUFFERSPROC glad_glGenRenderbuffers; +PFNGLCOPYTEXSUBIMAGE2DPROC glad_glCopyTexSubImage2D; +PFNGLCOMPRESSEDTEXIMAGE2DPROC glad_glCompressedTexImage2D; +PFNGLVERTEXATTRIB1FPROC glad_glVertexAttrib1f; +PFNGLBLENDFUNCSEPARATEPROC glad_glBlendFuncSeparate; +PFNGLHINTPROC glad_glHint; +PFNGLVERTEXATTRIB1SPROC glad_glVertexAttrib1s; +PFNGLSAMPLEMASKIPROC glad_glSampleMaski; +PFNGLVERTEXP2UIPROC glad_glVertexP2ui; +PFNGLUNIFORMMATRIX3X2FVPROC glad_glUniformMatrix3x2fv; +PFNGLPOINTSIZEPROC glad_glPointSize; +PFNGLVERTEXATTRIB2DVPROC glad_glVertexAttrib2dv; +PFNGLDELETEPROGRAMPROC glad_glDeleteProgram; +PFNGLVERTEXATTRIB4NUIVPROC glad_glVertexAttrib4Nuiv; +PFNGLRENDERBUFFERSTORAGEPROC glad_glRenderbufferStorage; +PFNGLWAITSYNCPROC glad_glWaitSync; +PFNGLUNIFORMMATRIX4X3FVPROC glad_glUniformMatrix4x3fv; +PFNGLUNIFORM3IPROC glad_glUniform3i; +PFNGLCLEARBUFFERFVPROC glad_glClearBufferfv; +PFNGLUNIFORM3FPROC glad_glUniform3f; +PFNGLVERTEXATTRIB4UBVPROC glad_glVertexAttrib4ubv; +PFNGLGETBUFFERPARAMETERIVPROC glad_glGetBufferParameteriv; +PFNGLTEXCOORDP2UIPROC glad_glTexCoordP2ui; +PFNGLCOLORMASKIPROC glad_glColorMaski; +PFNGLCLEARBUFFERFIPROC glad_glClearBufferfi; +PFNGLGENVERTEXARRAYSPROC glad_glGenVertexArrays; +PFNGLMULTITEXCOORDP2UIPROC glad_glMultiTexCoordP2ui; +PFNGLGETSAMPLERPARAMETERIIVPROC glad_glGetSamplerParameterIiv; +PFNGLGETFRAGDATAINDEXPROC glad_glGetFragDataIndex; +PFNGLGETVERTEXATTRIBDVPROC glad_glGetVertexAttribdv; +PFNGLUNIFORMMATRIX3X4FVPROC glad_glUniformMatrix3x4fv; +PFNGLMULTITEXCOORDP4UIPROC glad_glMultiTexCoordP4ui; +PFNGLDELETEFRAMEBUFFERSPROC glad_glDeleteFramebuffers; +PFNGLDRAWARRAYSPROC glad_glDrawArrays; +PFNGLUNIFORM1UIPROC glad_glUniform1ui; +PFNGLVERTEXATTRIBI2IPROC glad_glVertexAttribI2i; +PFNGLTEXCOORDP3UIPROC glad_glTexCoordP3ui; +PFNGLVERTEXATTRIB3DPROC glad_glVertexAttrib3d; +PFNGLCLEARPROC glad_glClear; +PFNGLGETACTIVEUNIFORMNAMEPROC glad_glGetActiveUniformName; +PFNGLISENABLEDPROC glad_glIsEnabled; +PFNGLSTENCILOPPROC glad_glStencilOp; +PFNGLFRAMEBUFFERTEXTURE2DPROC glad_glFramebufferTexture2D; +PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetFramebufferAttachmentParameteriv; +PFNGLVERTEXATTRIB4NUBPROC glad_glVertexAttrib4Nub; +PFNGLGETFRAGDATALOCATIONPROC glad_glGetFragDataLocation; +PFNGLTEXIMAGE1DPROC glad_glTexImage1D; +PFNGLTEXPARAMETERIVPROC glad_glTexParameteriv; +PFNGLGETTEXIMAGEPROC glad_glGetTexImage; +PFNGLGETQUERYOBJECTI64VPROC glad_glGetQueryObjecti64v; +PFNGLGENFRAMEBUFFERSPROC glad_glGenFramebuffers; +PFNGLGETATTACHEDSHADERSPROC glad_glGetAttachedShaders; +PFNGLISRENDERBUFFERPROC glad_glIsRenderbuffer; +PFNGLDELETEVERTEXARRAYSPROC glad_glDeleteVertexArrays; +PFNGLISVERTEXARRAYPROC glad_glIsVertexArray; +PFNGLDISABLEVERTEXATTRIBARRAYPROC glad_glDisableVertexAttribArray; +PFNGLGETQUERYIVPROC glad_glGetQueryiv; +PFNGLGETSAMPLERPARAMETERFVPROC glad_glGetSamplerParameterfv; +PFNGLGETUNIFORMINDICESPROC glad_glGetUniformIndices; +PFNGLISSHADERPROC glad_glIsShader; +PFNGLVERTEXATTRIBI4UBVPROC glad_glVertexAttribI4ubv; +PFNGLPOINTPARAMETERIVPROC glad_glPointParameteriv; +PFNGLENABLEPROC glad_glEnable; +PFNGLGETACTIVEUNIFORMSIVPROC glad_glGetActiveUniformsiv; +PFNGLGETATTRIBLOCATIONPROC glad_glGetAttribLocation; +PFNGLVERTEXATTRIB4DVPROC glad_glVertexAttrib4dv; +PFNGLMULTITEXCOORDP3UIVPROC glad_glMultiTexCoordP3uiv; +PFNGLVERTEXATTRIBP3UIPROC glad_glVertexAttribP3ui; +PFNGLGETUNIFORMFVPROC glad_glGetUniformfv; +PFNGLGETUNIFORMUIVPROC glad_glGetUniformuiv; +PFNGLGETVERTEXATTRIBIIVPROC glad_glGetVertexAttribIiv; +PFNGLDRAWBUFFERPROC glad_glDrawBuffer; +PFNGLCLEARBUFFERUIVPROC glad_glClearBufferuiv; +PFNGLDRAWELEMENTSINSTANCEDPROC glad_glDrawElementsInstanced; +PFNGLFLUSHPROC glad_glFlush; +PFNGLGETRENDERBUFFERPARAMETERIVPROC glad_glGetRenderbufferParameteriv; +PFNGLGETVERTEXATTRIBPOINTERVPROC glad_glGetVertexAttribPointerv; +PFNGLFENCESYNCPROC glad_glFenceSync; +PFNGLCOLORP3UIPROC glad_glColorP3ui; +PFNGLVERTEXATTRIB3SVPROC glad_glVertexAttrib3sv; +PFNGLBEGINCONDITIONALRENDERPROC glad_glBeginConditionalRender; +PFNGLGETTEXLEVELPARAMETERIVPROC glad_glGetTexLevelParameteriv; +PFNGLMULTITEXCOORDP4UIVPROC glad_glMultiTexCoordP4uiv; +PFNGLSTENCILFUNCSEPARATEPROC glad_glStencilFuncSeparate; +PFNGLGENSAMPLERSPROC glad_glGenSamplers; +PFNGLCLAMPCOLORPROC glad_glClampColor; +PFNGLUNIFORM4IVPROC glad_glUniform4iv; +PFNGLCLEARSTENCILPROC glad_glClearStencil; +PFNGLTEXCOORDP1UIVPROC glad_glTexCoordP1uiv; +PFNGLGENTEXTURESPROC glad_glGenTextures; +PFNGLGETTEXPARAMETERIUIVPROC glad_glGetTexParameterIuiv; +PFNGLVERTEXATTRIB4NBVPROC glad_glVertexAttrib4Nbv; +PFNGLISSYNCPROC glad_glIsSync; +PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glad_glGetActiveUniformBlockName; +PFNGLUNIFORM2IPROC glad_glUniform2i; +PFNGLUNIFORM2FPROC glad_glUniform2f; +PFNGLTEXCOORDP4UIPROC glad_glTexCoordP4ui; +PFNGLGETPROGRAMIVPROC glad_glGetProgramiv; +PFNGLVERTEXATTRIBPOINTERPROC glad_glVertexAttribPointer; +PFNGLFRAMEBUFFERTEXTURELAYERPROC glad_glFramebufferTextureLayer; +PFNGLFLUSHMAPPEDBUFFERRANGEPROC glad_glFlushMappedBufferRange; +PFNGLGENQUERIESPROC glad_glGenQueries; +PFNGLVERTEXATTRIBP1UIPROC glad_glVertexAttribP1ui; +PFNGLTEXSUBIMAGE3DPROC glad_glTexSubImage3D; +PFNGLGETINTEGER64I_VPROC glad_glGetInteger64i_v; +PFNGLDELETESAMPLERSPROC glad_glDeleteSamplers; +PFNGLCOPYTEXIMAGE2DPROC glad_glCopyTexImage2D; +PFNGLBLITFRAMEBUFFERPROC glad_glBlitFramebuffer; +PFNGLISENABLEDIPROC glad_glIsEnabledi; +PFNGLSECONDARYCOLORP3UIPROC glad_glSecondaryColorP3ui; +PFNGLBINDFRAGDATALOCATIONINDEXEDPROC glad_glBindFragDataLocationIndexed; +PFNGLUNIFORM2IVPROC glad_glUniform2iv; +PFNGLVERTEXATTRIB1FVPROC glad_glVertexAttrib1fv; +PFNGLUNIFORM4UIVPROC glad_glUniform4uiv; +PFNGLFRAMEBUFFERTEXTURE1DPROC glad_glFramebufferTexture1D; +PFNGLGETSHADERIVPROC glad_glGetShaderiv; +PFNGLBINDFRAGDATALOCATIONPROC glad_glBindFragDataLocation; +PFNGLPOLYGONOFFSETPROC glad_glPolygonOffset; +PFNGLGETDOUBLEVPROC glad_glGetDoublev; +PFNGLVERTEXATTRIB1DPROC glad_glVertexAttrib1d; +PFNGLGETUNIFORMIVPROC glad_glGetUniformiv; +PFNGLMULTITEXCOORDP1UIVPROC glad_glMultiTexCoordP1uiv; +PFNGLUNIFORM3FVPROC glad_glUniform3fv; +PFNGLDEPTHRANGEPROC glad_glDepthRange; +PFNGLMAPBUFFERPROC glad_glMapBuffer; +PFNGLCOMPRESSEDTEXIMAGE3DPROC glad_glCompressedTexImage3D; +PFNGLDELETESYNCPROC glad_glDeleteSync; +PFNGLCOPYTEXSUBIMAGE3DPROC glad_glCopyTexSubImage3D; +PFNGLGETVERTEXATTRIBIVPROC glad_glGetVertexAttribiv; +PFNGLMULTIDRAWELEMENTSPROC glad_glMultiDrawElements; +PFNGLVERTEXATTRIB3FVPROC glad_glVertexAttrib3fv; +PFNGLUNIFORM3IVPROC glad_glUniform3iv; +PFNGLPOLYGONMODEPROC glad_glPolygonMode; +PFNGLDRAWBUFFERSPROC glad_glDrawBuffers; +PFNGLGETACTIVEUNIFORMBLOCKIVPROC glad_glGetActiveUniformBlockiv; +PFNGLUSEPROGRAMPROC glad_glUseProgram; +PFNGLGETPROGRAMINFOLOGPROC glad_glGetProgramInfoLog; +PFNGLBINDVERTEXARRAYPROC glad_glBindVertexArray; +PFNGLDELETEBUFFERSPROC glad_glDeleteBuffers; +PFNGLSAMPLERPARAMETERIIVPROC glad_glSamplerParameterIiv; +PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glad_glMultiDrawElementsBaseVertex; +PFNGLUNIFORM2UIVPROC glad_glUniform2uiv; +PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glad_glCompressedTexSubImage1D; +PFNGLFINISHPROC glad_glFinish; +PFNGLDELETESHADERPROC glad_glDeleteShader; +PFNGLVERTEXATTRIB4NSVPROC glad_glVertexAttrib4Nsv; +PFNGLVIEWPORTPROC glad_glViewport; +PFNGLUNIFORM1UIVPROC glad_glUniform1uiv; +PFNGLTRANSFORMFEEDBACKVARYINGSPROC glad_glTransformFeedbackVaryings; +PFNGLUNIFORM2UIPROC glad_glUniform2ui; +PFNGLVERTEXATTRIBI3IPROC glad_glVertexAttribI3i; +PFNGLCLEARDEPTHPROC glad_glClearDepth; +PFNGLVERTEXATTRIBI4USVPROC glad_glVertexAttribI4usv; +PFNGLTEXPARAMETERFPROC glad_glTexParameterf; +PFNGLTEXPARAMETERIPROC glad_glTexParameteri; +PFNGLGETSHADERSOURCEPROC glad_glGetShaderSource; +PFNGLTEXBUFFERPROC glad_glTexBuffer; +PFNGLPIXELSTOREIPROC glad_glPixelStorei; +PFNGLVALIDATEPROGRAMPROC glad_glValidateProgram; +PFNGLPIXELSTOREFPROC glad_glPixelStoref; +PFNGLGETBOOLEANI_VPROC glad_glGetBooleani_v; +PFNGLMULTITEXCOORDP2UIVPROC glad_glMultiTexCoordP2uiv; +PFNGLVERTEXATTRIBP1UIVPROC glad_glVertexAttribP1uiv; +PFNGLLINKPROGRAMPROC glad_glLinkProgram; +PFNGLBINDTEXTUREPROC glad_glBindTexture; +PFNGLGETSTRINGPROC glad_glGetString; +PFNGLVERTEXATTRIBP2UIVPROC glad_glVertexAttribP2uiv; +PFNGLDETACHSHADERPROC glad_glDetachShader; +PFNGLENDQUERYPROC glad_glEndQuery; +PFNGLNORMALP3UIPROC glad_glNormalP3ui; +PFNGLVERTEXATTRIBI2UIPROC glad_glVertexAttribI2ui; +PFNGLDELETETEXTURESPROC glad_glDeleteTextures; +PFNGLSTENCILOPSEPARATEPROC glad_glStencilOpSeparate; +PFNGLDELETEQUERIESPROC glad_glDeleteQueries; +PFNGLNORMALP3UIVPROC glad_glNormalP3uiv; +PFNGLVERTEXATTRIB4FPROC glad_glVertexAttrib4f; +PFNGLVERTEXATTRIB4DPROC glad_glVertexAttrib4d; +PFNGLGETTEXPARAMETERIVPROC glad_glGetTexParameteriv; +PFNGLVERTEXATTRIB4SPROC glad_glVertexAttrib4s; +PFNGLDRAWELEMENTSBASEVERTEXPROC glad_glDrawElementsBaseVertex; +PFNGLSAMPLECOVERAGEPROC glad_glSampleCoverage; +PFNGLSAMPLERPARAMETERIPROC glad_glSamplerParameteri; +PFNGLSAMPLERPARAMETERFPROC glad_glSamplerParameterf; +PFNGLUNIFORM1FPROC glad_glUniform1f; +PFNGLGETVERTEXATTRIBFVPROC glad_glGetVertexAttribfv; +PFNGLGETCOMPRESSEDTEXIMAGEPROC glad_glGetCompressedTexImage; +PFNGLUNIFORM1IPROC glad_glUniform1i; +PFNGLGETACTIVEATTRIBPROC glad_glGetActiveAttrib; +PFNGLTEXSUBIMAGE2DPROC glad_glTexSubImage2D; +PFNGLDISABLEPROC glad_glDisable; +PFNGLLOGICOPPROC glad_glLogicOp; +PFNGLUNIFORM4UIPROC glad_glUniform4ui; +PFNGLBINDFRAMEBUFFERPROC glad_glBindFramebuffer; +PFNGLCULLFACEPROC glad_glCullFace; +PFNGLGETSTRINGIPROC glad_glGetStringi; +PFNGLATTACHSHADERPROC glad_glAttachShader; +PFNGLQUERYCOUNTERPROC glad_glQueryCounter; +PFNGLPROVOKINGVERTEXPROC glad_glProvokingVertex; +PFNGLDRAWELEMENTSPROC glad_glDrawElements; +PFNGLVERTEXATTRIBI4SVPROC glad_glVertexAttribI4sv; +PFNGLUNIFORM1IVPROC glad_glUniform1iv; +PFNGLGETQUERYOBJECTIVPROC glad_glGetQueryObjectiv; +PFNGLREADBUFFERPROC glad_glReadBuffer; +PFNGLTEXPARAMETERIUIVPROC glad_glTexParameterIuiv; +PFNGLDRAWARRAYSINSTANCEDPROC glad_glDrawArraysInstanced; +PFNGLGENERATEMIPMAPPROC glad_glGenerateMipmap; +PFNGLSAMPLERPARAMETERIVPROC glad_glSamplerParameteriv; +PFNGLVERTEXATTRIB3FPROC glad_glVertexAttrib3f; +PFNGLVERTEXATTRIB4UIVPROC glad_glVertexAttrib4uiv; +PFNGLPOINTPARAMETERIPROC glad_glPointParameteri; +PFNGLBLENDCOLORPROC glad_glBlendColor; +PFNGLSAMPLERPARAMETERIUIVPROC glad_glSamplerParameterIuiv; +PFNGLUNMAPBUFFERPROC glad_glUnmapBuffer; +PFNGLPOINTPARAMETERFPROC glad_glPointParameterf; +PFNGLVERTEXATTRIB3SPROC glad_glVertexAttrib3s; +PFNGLBINDRENDERBUFFERPROC glad_glBindRenderbuffer; +PFNGLVERTEXATTRIBP4UIVPROC glad_glVertexAttribP4uiv; +PFNGLISPROGRAMPROC glad_glIsProgram; +PFNGLVERTEXATTRIB4BVPROC glad_glVertexAttrib4bv; +PFNGLVERTEXATTRIB4FVPROC glad_glVertexAttrib4fv; +PFNGLUNIFORM4IPROC glad_glUniform4i; +PFNGLACTIVETEXTUREPROC glad_glActiveTexture; +PFNGLENABLEVERTEXATTRIBARRAYPROC glad_glEnableVertexAttribArray; +PFNGLREADPIXELSPROC glad_glReadPixels; +PFNGLVERTEXATTRIBI3IVPROC glad_glVertexAttribI3iv; +PFNGLUNIFORM4FPROC glad_glUniform4f; +PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glRenderbufferStorageMultisample; +PFNGLUNIFORMMATRIX3FVPROC glad_glUniformMatrix3fv; +PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glad_glDrawElementsInstancedBaseVertex; +PFNGLSTENCILFUNCPROC glad_glStencilFunc; +PFNGLUNIFORMBLOCKBINDINGPROC glad_glUniformBlockBinding; +PFNGLCOLORP4UIPROC glad_glColorP4ui; +PFNGLVERTEXATTRIBI4IVPROC glad_glVertexAttribI4iv; +PFNGLGETSHADERINFOLOGPROC glad_glGetShaderInfoLog; +PFNGLVERTEXATTRIBI4IPROC glad_glVertexAttribI4i; +PFNGLGETBUFFERSUBDATAPROC glad_glGetBufferSubData; +PFNGLBLENDEQUATIONSEPARATEPROC glad_glBlendEquationSeparate; +PFNGLVERTEXATTRIBI1UIPROC glad_glVertexAttribI1ui; +PFNGLGENBUFFERSPROC glad_glGenBuffers; +PFNGLVERTEXATTRIB2SVPROC glad_glVertexAttrib2sv; +PFNGLBLENDFUNCPROC glad_glBlendFunc; +PFNGLCREATEPROGRAMPROC glad_glCreateProgram; +PFNGLTEXIMAGE3DPROC glad_glTexImage3D; +PFNGLISFRAMEBUFFERPROC glad_glIsFramebuffer; +PFNGLPRIMITIVERESTARTINDEXPROC glad_glPrimitiveRestartIndex; +PFNGLGETINTEGER64VPROC glad_glGetInteger64v; +PFNGLSCISSORPROC glad_glScissor; +PFNGLTEXCOORDP4UIVPROC glad_glTexCoordP4uiv; +PFNGLGETBOOLEANVPROC glad_glGetBooleanv; +PFNGLVERTEXP2UIVPROC glad_glVertexP2uiv; +PFNGLUNIFORM3UIVPROC glad_glUniform3uiv; +PFNGLCLEARCOLORPROC glad_glClearColor; +PFNGLVERTEXATTRIB4NIVPROC glad_glVertexAttrib4Niv; +PFNGLCLEARBUFFERIVPROC glad_glClearBufferiv; +PFNGLGETBUFFERPARAMETERI64VPROC glad_glGetBufferParameteri64v; +PFNGLCOLORP4UIVPROC glad_glColorP4uiv; +PFNGLVERTEXATTRIBI2UIVPROC glad_glVertexAttribI2uiv; +PFNGLUNIFORM3UIPROC glad_glUniform3ui; +PFNGLVERTEXATTRIBI4UIVPROC glad_glVertexAttribI4uiv; +PFNGLPOINTPARAMETERFVPROC glad_glPointParameterfv; +PFNGLUNIFORM2FVPROC glad_glUniform2fv; +PFNGLGETSAMPLERPARAMETERIUIVPROC glad_glGetSamplerParameterIuiv; +PFNGLBINDBUFFERRANGEPROC glad_glBindBufferRange; +PFNGLUNIFORMMATRIX2X3FVPROC glad_glUniformMatrix2x3fv; +PFNGLGETVERTEXATTRIBIUIVPROC glad_glGetVertexAttribIuiv; +PFNGLVERTEXATTRIB4NUSVPROC glad_glVertexAttrib4Nusv; +PFNGLDEPTHFUNCPROC glad_glDepthFunc; +PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glad_glCompressedTexSubImage2D; +PFNGLVERTEXATTRIBI4BVPROC glad_glVertexAttribI4bv; +PFNGLGETTEXPARAMETERFVPROC glad_glGetTexParameterfv; +PFNGLMULTITEXCOORDP1UIPROC glad_glMultiTexCoordP1ui; +PFNGLCLIENTWAITSYNCPROC glad_glClientWaitSync; +PFNGLVERTEXATTRIBI4UIPROC glad_glVertexAttribI4ui; +PFNGLCOLORMASKPROC glad_glColorMask; +PFNGLTEXPARAMETERIIVPROC glad_glTexParameterIiv; +PFNGLBLENDEQUATIONPROC glad_glBlendEquation; +PFNGLGETUNIFORMLOCATIONPROC glad_glGetUniformLocation; +PFNGLENDTRANSFORMFEEDBACKPROC glad_glEndTransformFeedback; +PFNGLVERTEXATTRIB4USVPROC glad_glVertexAttrib4usv; +PFNGLUNIFORM4FVPROC glad_glUniform4fv; +PFNGLBEGINTRANSFORMFEEDBACKPROC glad_glBeginTransformFeedback; +PFNGLVERTEXATTRIBI1IVPROC glad_glVertexAttribI1iv; +PFNGLISSAMPLERPROC glad_glIsSampler; +PFNGLVERTEXP3UIPROC glad_glVertexP3ui; +PFNGLVERTEXATTRIBDIVISORPROC glad_glVertexAttribDivisor; +PFNGLCOMPRESSEDTEXIMAGE1DPROC glad_glCompressedTexImage1D; +PFNGLCOPYTEXSUBIMAGE1DPROC glad_glCopyTexSubImage1D; +PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glad_glDrawRangeElementsBaseVertex; +PFNGLCHECKFRAMEBUFFERSTATUSPROC glad_glCheckFramebufferStatus; +PFNGLENDCONDITIONALRENDERPROC glad_glEndConditionalRender; +PFNGLVERTEXP3UIVPROC glad_glVertexP3uiv; +PFNGLBINDATTRIBLOCATIONPROC glad_glBindAttribLocation; +PFNGLUNIFORMMATRIX4X2FVPROC glad_glUniformMatrix4x2fv; +PFNGLVERTEXATTRIB1DVPROC glad_glVertexAttrib1dv; +PFNGLDRAWRANGEELEMENTSPROC glad_glDrawRangeElements; +PFNGLGETQUERYOBJECTUIVPROC glad_glGetQueryObjectuiv; +PFNGLBINDBUFFERBASEPROC glad_glBindBufferBase; +PFNGLBUFFERSUBDATAPROC glad_glBufferSubData; +PFNGLVERTEXATTRIB4IVPROC glad_glVertexAttrib4iv; +PFNGLMAPBUFFERRANGEPROC glad_glMapBufferRange; +PFNGLFRAMEBUFFERTEXTUREPROC glad_glFramebufferTexture; +PFNGLMULTIDRAWARRAYSPROC glad_glMultiDrawArrays; +PFNGLVERTEXP4UIVPROC glad_glVertexP4uiv; +PFNGLVERTEXATTRIBI2IVPROC glad_glVertexAttribI2iv; +PFNGLDISABLEIPROC glad_glDisablei; +PFNGLSHADERSOURCEPROC glad_glShaderSource; +PFNGLDELETERENDERBUFFERSPROC glad_glDeleteRenderbuffers; +PFNGLVERTEXATTRIBI3UIVPROC glad_glVertexAttribI3uiv; +PFNGLGETSYNCIVPROC glad_glGetSynciv; +PFNGLTEXCOORDP2UIVPROC glad_glTexCoordP2uiv; +PFNGLBEGINQUERYPROC glad_glBeginQuery; +PFNGLUNIFORMMATRIX4FVPROC glad_glUniformMatrix4fv; +PFNGLBINDBUFFERPROC glad_glBindBuffer; +PFNGLUNIFORMMATRIX2FVPROC glad_glUniformMatrix2fv; +PFNGLUNIFORMMATRIX2X4FVPROC glad_glUniformMatrix2x4fv; +PFNGLBUFFERDATAPROC glad_glBufferData; +PFNGLGETTEXPARAMETERIIVPROC glad_glGetTexParameterIiv; +PFNGLTEXCOORDP1UIPROC glad_glTexCoordP1ui; +PFNGLGETERRORPROC glad_glGetError; +PFNGLVERTEXATTRIBP2UIPROC glad_glVertexAttribP2ui; +PFNGLGETFLOATVPROC glad_glGetFloatv; +PFNGLTEXSUBIMAGE1DPROC glad_glTexSubImage1D; +PFNGLVERTEXATTRIB2FVPROC glad_glVertexAttrib2fv; +PFNGLGETTEXLEVELPARAMETERFVPROC glad_glGetTexLevelParameterfv; +PFNGLVERTEXATTRIBI1IPROC glad_glVertexAttribI1i; +PFNGLVERTEXATTRIBP3UIVPROC glad_glVertexAttribP3uiv; +PFNGLSECONDARYCOLORP3UIVPROC glad_glSecondaryColorP3uiv; +PFNGLGETINTEGERVPROC glad_glGetIntegerv; +PFNGLGETBUFFERPOINTERVPROC glad_glGetBufferPointerv; +PFNGLFRAMEBUFFERTEXTURE3DPROC glad_glFramebufferTexture3D; +PFNGLISQUERYPROC glad_glIsQuery; +PFNGLVERTEXATTRIB4SVPROC glad_glVertexAttrib4sv; +PFNGLTEXIMAGE2DPROC glad_glTexImage2D; +PFNGLSTENCILMASKPROC glad_glStencilMask; +PFNGLSAMPLERPARAMETERFVPROC glad_glSamplerParameterfv; +PFNGLISTEXTUREPROC glad_glIsTexture; +PFNGLUNIFORM1FVPROC glad_glUniform1fv; +PFNGLVERTEXATTRIB4NUBVPROC glad_glVertexAttrib4Nubv; +PFNGLTEXPARAMETERFVPROC glad_glTexParameterfv; +PFNGLGETSAMPLERPARAMETERIVPROC glad_glGetSamplerParameteriv; +PFNGLCOPYBUFFERSUBDATAPROC glad_glCopyBufferSubData; +PFNGLVERTEXATTRIBI1UIVPROC glad_glVertexAttribI1uiv; +PFNGLVERTEXATTRIB2DPROC glad_glVertexAttrib2d; +PFNGLVERTEXATTRIB2FPROC glad_glVertexAttrib2f; +PFNGLVERTEXATTRIB3DVPROC glad_glVertexAttrib3dv; +PFNGLGETQUERYOBJECTUI64VPROC glad_glGetQueryObjectui64v; +PFNGLDEPTHMASKPROC glad_glDepthMask; +PFNGLVERTEXATTRIB2SPROC glad_glVertexAttrib2s; +PFNGLTEXIMAGE3DMULTISAMPLEPROC glad_glTexImage3DMultisample; +PFNGLGETUNIFORMBLOCKINDEXPROC glad_glGetUniformBlockIndex; +PFNGLTEXIMAGE2DMULTISAMPLEPROC glad_glTexImage2DMultisample; +PFNGLGETACTIVEUNIFORMPROC glad_glGetActiveUniform; +PFNGLFRONTFACEPROC glad_glFrontFace; +int GLAD_GL_ARB_texture_compression; +int GLAD_GL_ARB_texture_swizzle; +int GLAD_GL_ATI_fragment_shader; +int GLAD_GL_EXT_texture_sRGB; +int GLAD_GL_ARB_explicit_attrib_location; +int GLAD_GL_ARB_ES3_compatibility; +int GLAD_GL_EXT_blend_color; +int GLAD_GL_EXT_framebuffer_sRGB; +int GLAD_GL_EXT_index_array_formats; +int GLAD_GL_ARB_vertex_shader; +int GLAD_GL_ARB_vertex_attrib_binding; +int GLAD_GL_ARB_vertex_program; +int GLAD_GL_EXT_texture_compression_s3tc; +int GLAD_GL_EXT_debug_marker; +int GLAD_GL_EXT_texture_swizzle; +int GLAD_GL_ARB_texture_multisample; +int GLAD_GL_ARB_texture_rg; +int GLAD_GL_ARB_texture_float; +int GLAD_GL_ARB_compressed_texture_pixel_storage; +int GLAD_GL_ARB_framebuffer_sRGB; +int GLAD_GL_ARB_vertex_array_object; +int GLAD_GL_ARB_depth_clamp; +int GLAD_GL_ARB_fragment_shader; +int GLAD_GL_ATI_vertex_array_object; +int GLAD_GL_ARB_vertex_buffer_object; +int GLAD_GL_ARB_fragment_program; +int GLAD_GL_EXT_framebuffer_multisample; +int GLAD_GL_ARB_framebuffer_object; +int GLAD_GL_ARB_draw_buffers_blend; +int GLAD_GL_EXT_vertex_shader; +int GLAD_GL_EXT_blend_func_separate; +int GLAD_GL_ARB_texture_non_power_of_two; +int GLAD_GL_EXT_texture; +int GLAD_GL_ARB_buffer_storage; +int GLAD_GL_ARB_explicit_uniform_location; +int GLAD_GL_EXT_framebuffer_object; +int GLAD_GL_EXT_framebuffer_multisample_blit_scaled; +int GLAD_GL_AMD_debug_output; +int GLAD_GL_ARB_depth_buffer_float; +int GLAD_GL_ARB_multisample; +int GLAD_GL_ARB_compatibility; +int GLAD_GL_ARB_depth_texture; +int GLAD_GL_ARB_sample_locations; +int GLAD_GL_ARB_ES2_compatibility; +int GLAD_GL_AMD_query_buffer_object; +int GLAD_GL_EXT_framebuffer_blit; +int GLAD_GL_EXT_vertex_array; +int GLAD_GL_ARB_draw_buffers; +int GLAD_GL_EXT_blend_equation_separate; +int GLAD_GL_ATI_element_array; +int GLAD_GL_ARB_debug_output; +int GLAD_GL_ARB_uniform_buffer_object; +PFNGLDEBUGMESSAGEENABLEAMDPROC glad_glDebugMessageEnableAMD; +PFNGLDEBUGMESSAGEINSERTAMDPROC glad_glDebugMessageInsertAMD; +PFNGLDEBUGMESSAGECALLBACKAMDPROC glad_glDebugMessageCallbackAMD; +PFNGLGETDEBUGMESSAGELOGAMDPROC glad_glGetDebugMessageLogAMD; +PFNGLRELEASESHADERCOMPILERPROC glad_glReleaseShaderCompiler; +PFNGLSHADERBINARYPROC glad_glShaderBinary; +PFNGLGETSHADERPRECISIONFORMATPROC glad_glGetShaderPrecisionFormat; +PFNGLDEPTHRANGEFPROC glad_glDepthRangef; +PFNGLCLEARDEPTHFPROC glad_glClearDepthf; +PFNGLBUFFERSTORAGEPROC glad_glBufferStorage; +PFNGLDEBUGMESSAGECONTROLARBPROC glad_glDebugMessageControlARB; +PFNGLDEBUGMESSAGEINSERTARBPROC glad_glDebugMessageInsertARB; +PFNGLDEBUGMESSAGECALLBACKARBPROC glad_glDebugMessageCallbackARB; +PFNGLGETDEBUGMESSAGELOGARBPROC glad_glGetDebugMessageLogARB; +PFNGLDRAWBUFFERSARBPROC glad_glDrawBuffersARB; +PFNGLBLENDEQUATIONIARBPROC glad_glBlendEquationiARB; +PFNGLBLENDEQUATIONSEPARATEIARBPROC glad_glBlendEquationSeparateiARB; +PFNGLBLENDFUNCIARBPROC glad_glBlendFunciARB; +PFNGLBLENDFUNCSEPARATEIARBPROC glad_glBlendFuncSeparateiARB; +PFNGLPROGRAMSTRINGARBPROC glad_glProgramStringARB; +PFNGLBINDPROGRAMARBPROC glad_glBindProgramARB; +PFNGLDELETEPROGRAMSARBPROC glad_glDeleteProgramsARB; +PFNGLGENPROGRAMSARBPROC glad_glGenProgramsARB; +PFNGLPROGRAMENVPARAMETER4DARBPROC glad_glProgramEnvParameter4dARB; +PFNGLPROGRAMENVPARAMETER4DVARBPROC glad_glProgramEnvParameter4dvARB; +PFNGLPROGRAMENVPARAMETER4FARBPROC glad_glProgramEnvParameter4fARB; +PFNGLPROGRAMENVPARAMETER4FVARBPROC glad_glProgramEnvParameter4fvARB; +PFNGLPROGRAMLOCALPARAMETER4DARBPROC glad_glProgramLocalParameter4dARB; +PFNGLPROGRAMLOCALPARAMETER4DVARBPROC glad_glProgramLocalParameter4dvARB; +PFNGLPROGRAMLOCALPARAMETER4FARBPROC glad_glProgramLocalParameter4fARB; +PFNGLPROGRAMLOCALPARAMETER4FVARBPROC glad_glProgramLocalParameter4fvARB; +PFNGLGETPROGRAMENVPARAMETERDVARBPROC glad_glGetProgramEnvParameterdvARB; +PFNGLGETPROGRAMENVPARAMETERFVARBPROC glad_glGetProgramEnvParameterfvARB; +PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC glad_glGetProgramLocalParameterdvARB; +PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC glad_glGetProgramLocalParameterfvARB; +PFNGLGETPROGRAMIVARBPROC glad_glGetProgramivARB; +PFNGLGETPROGRAMSTRINGARBPROC glad_glGetProgramStringARB; +PFNGLISPROGRAMARBPROC glad_glIsProgramARB; +PFNGLSAMPLECOVERAGEARBPROC glad_glSampleCoverageARB; +PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC glad_glFramebufferSampleLocationsfvARB; +PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVARBPROC glad_glNamedFramebufferSampleLocationsfvARB; +PFNGLEVALUATEDEPTHVALUESARBPROC glad_glEvaluateDepthValuesARB; +PFNGLCOMPRESSEDTEXIMAGE3DARBPROC glad_glCompressedTexImage3DARB; +PFNGLCOMPRESSEDTEXIMAGE2DARBPROC glad_glCompressedTexImage2DARB; +PFNGLCOMPRESSEDTEXIMAGE1DARBPROC glad_glCompressedTexImage1DARB; +PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC glad_glCompressedTexSubImage3DARB; +PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC glad_glCompressedTexSubImage2DARB; +PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC glad_glCompressedTexSubImage1DARB; +PFNGLGETCOMPRESSEDTEXIMAGEARBPROC glad_glGetCompressedTexImageARB; +PFNGLBINDVERTEXBUFFERPROC glad_glBindVertexBuffer; +PFNGLVERTEXATTRIBFORMATPROC glad_glVertexAttribFormat; +PFNGLVERTEXATTRIBIFORMATPROC glad_glVertexAttribIFormat; +PFNGLVERTEXATTRIBLFORMATPROC glad_glVertexAttribLFormat; +PFNGLVERTEXATTRIBBINDINGPROC glad_glVertexAttribBinding; +PFNGLVERTEXBINDINGDIVISORPROC glad_glVertexBindingDivisor; +PFNGLBINDBUFFERARBPROC glad_glBindBufferARB; +PFNGLDELETEBUFFERSARBPROC glad_glDeleteBuffersARB; +PFNGLGENBUFFERSARBPROC glad_glGenBuffersARB; +PFNGLISBUFFERARBPROC glad_glIsBufferARB; +PFNGLBUFFERDATAARBPROC glad_glBufferDataARB; +PFNGLBUFFERSUBDATAARBPROC glad_glBufferSubDataARB; +PFNGLGETBUFFERSUBDATAARBPROC glad_glGetBufferSubDataARB; +PFNGLMAPBUFFERARBPROC glad_glMapBufferARB; +PFNGLUNMAPBUFFERARBPROC glad_glUnmapBufferARB; +PFNGLGETBUFFERPARAMETERIVARBPROC glad_glGetBufferParameterivARB; +PFNGLGETBUFFERPOINTERVARBPROC glad_glGetBufferPointervARB; +PFNGLVERTEXATTRIB1DARBPROC glad_glVertexAttrib1dARB; +PFNGLVERTEXATTRIB1DVARBPROC glad_glVertexAttrib1dvARB; +PFNGLVERTEXATTRIB1FARBPROC glad_glVertexAttrib1fARB; +PFNGLVERTEXATTRIB1FVARBPROC glad_glVertexAttrib1fvARB; +PFNGLVERTEXATTRIB1SARBPROC glad_glVertexAttrib1sARB; +PFNGLVERTEXATTRIB1SVARBPROC glad_glVertexAttrib1svARB; +PFNGLVERTEXATTRIB2DARBPROC glad_glVertexAttrib2dARB; +PFNGLVERTEXATTRIB2DVARBPROC glad_glVertexAttrib2dvARB; +PFNGLVERTEXATTRIB2FARBPROC glad_glVertexAttrib2fARB; +PFNGLVERTEXATTRIB2FVARBPROC glad_glVertexAttrib2fvARB; +PFNGLVERTEXATTRIB2SARBPROC glad_glVertexAttrib2sARB; +PFNGLVERTEXATTRIB2SVARBPROC glad_glVertexAttrib2svARB; +PFNGLVERTEXATTRIB3DARBPROC glad_glVertexAttrib3dARB; +PFNGLVERTEXATTRIB3DVARBPROC glad_glVertexAttrib3dvARB; +PFNGLVERTEXATTRIB3FARBPROC glad_glVertexAttrib3fARB; +PFNGLVERTEXATTRIB3FVARBPROC glad_glVertexAttrib3fvARB; +PFNGLVERTEXATTRIB3SARBPROC glad_glVertexAttrib3sARB; +PFNGLVERTEXATTRIB3SVARBPROC glad_glVertexAttrib3svARB; +PFNGLVERTEXATTRIB4NBVARBPROC glad_glVertexAttrib4NbvARB; +PFNGLVERTEXATTRIB4NIVARBPROC glad_glVertexAttrib4NivARB; +PFNGLVERTEXATTRIB4NSVARBPROC glad_glVertexAttrib4NsvARB; +PFNGLVERTEXATTRIB4NUBARBPROC glad_glVertexAttrib4NubARB; +PFNGLVERTEXATTRIB4NUBVARBPROC glad_glVertexAttrib4NubvARB; +PFNGLVERTEXATTRIB4NUIVARBPROC glad_glVertexAttrib4NuivARB; +PFNGLVERTEXATTRIB4NUSVARBPROC glad_glVertexAttrib4NusvARB; +PFNGLVERTEXATTRIB4BVARBPROC glad_glVertexAttrib4bvARB; +PFNGLVERTEXATTRIB4DARBPROC glad_glVertexAttrib4dARB; +PFNGLVERTEXATTRIB4DVARBPROC glad_glVertexAttrib4dvARB; +PFNGLVERTEXATTRIB4FARBPROC glad_glVertexAttrib4fARB; +PFNGLVERTEXATTRIB4FVARBPROC glad_glVertexAttrib4fvARB; +PFNGLVERTEXATTRIB4IVARBPROC glad_glVertexAttrib4ivARB; +PFNGLVERTEXATTRIB4SARBPROC glad_glVertexAttrib4sARB; +PFNGLVERTEXATTRIB4SVARBPROC glad_glVertexAttrib4svARB; +PFNGLVERTEXATTRIB4UBVARBPROC glad_glVertexAttrib4ubvARB; +PFNGLVERTEXATTRIB4UIVARBPROC glad_glVertexAttrib4uivARB; +PFNGLVERTEXATTRIB4USVARBPROC glad_glVertexAttrib4usvARB; +PFNGLVERTEXATTRIBPOINTERARBPROC glad_glVertexAttribPointerARB; +PFNGLENABLEVERTEXATTRIBARRAYARBPROC glad_glEnableVertexAttribArrayARB; +PFNGLDISABLEVERTEXATTRIBARRAYARBPROC glad_glDisableVertexAttribArrayARB; +PFNGLGETVERTEXATTRIBDVARBPROC glad_glGetVertexAttribdvARB; +PFNGLGETVERTEXATTRIBFVARBPROC glad_glGetVertexAttribfvARB; +PFNGLGETVERTEXATTRIBIVARBPROC glad_glGetVertexAttribivARB; +PFNGLGETVERTEXATTRIBPOINTERVARBPROC glad_glGetVertexAttribPointervARB; +PFNGLBINDATTRIBLOCATIONARBPROC glad_glBindAttribLocationARB; +PFNGLGETACTIVEATTRIBARBPROC glad_glGetActiveAttribARB; +PFNGLGETATTRIBLOCATIONARBPROC glad_glGetAttribLocationARB; +PFNGLELEMENTPOINTERATIPROC glad_glElementPointerATI; +PFNGLDRAWELEMENTARRAYATIPROC glad_glDrawElementArrayATI; +PFNGLDRAWRANGEELEMENTARRAYATIPROC glad_glDrawRangeElementArrayATI; +PFNGLGENFRAGMENTSHADERSATIPROC glad_glGenFragmentShadersATI; +PFNGLBINDFRAGMENTSHADERATIPROC glad_glBindFragmentShaderATI; +PFNGLDELETEFRAGMENTSHADERATIPROC glad_glDeleteFragmentShaderATI; +PFNGLBEGINFRAGMENTSHADERATIPROC glad_glBeginFragmentShaderATI; +PFNGLENDFRAGMENTSHADERATIPROC glad_glEndFragmentShaderATI; +PFNGLPASSTEXCOORDATIPROC glad_glPassTexCoordATI; +PFNGLSAMPLEMAPATIPROC glad_glSampleMapATI; +PFNGLCOLORFRAGMENTOP1ATIPROC glad_glColorFragmentOp1ATI; +PFNGLCOLORFRAGMENTOP2ATIPROC glad_glColorFragmentOp2ATI; +PFNGLCOLORFRAGMENTOP3ATIPROC glad_glColorFragmentOp3ATI; +PFNGLALPHAFRAGMENTOP1ATIPROC glad_glAlphaFragmentOp1ATI; +PFNGLALPHAFRAGMENTOP2ATIPROC glad_glAlphaFragmentOp2ATI; +PFNGLALPHAFRAGMENTOP3ATIPROC glad_glAlphaFragmentOp3ATI; +PFNGLSETFRAGMENTSHADERCONSTANTATIPROC glad_glSetFragmentShaderConstantATI; +PFNGLNEWOBJECTBUFFERATIPROC glad_glNewObjectBufferATI; +PFNGLISOBJECTBUFFERATIPROC glad_glIsObjectBufferATI; +PFNGLUPDATEOBJECTBUFFERATIPROC glad_glUpdateObjectBufferATI; +PFNGLGETOBJECTBUFFERFVATIPROC glad_glGetObjectBufferfvATI; +PFNGLGETOBJECTBUFFERIVATIPROC glad_glGetObjectBufferivATI; +PFNGLFREEOBJECTBUFFERATIPROC glad_glFreeObjectBufferATI; +PFNGLARRAYOBJECTATIPROC glad_glArrayObjectATI; +PFNGLGETARRAYOBJECTFVATIPROC glad_glGetArrayObjectfvATI; +PFNGLGETARRAYOBJECTIVATIPROC glad_glGetArrayObjectivATI; +PFNGLVARIANTARRAYOBJECTATIPROC glad_glVariantArrayObjectATI; +PFNGLGETVARIANTARRAYOBJECTFVATIPROC glad_glGetVariantArrayObjectfvATI; +PFNGLGETVARIANTARRAYOBJECTIVATIPROC glad_glGetVariantArrayObjectivATI; +PFNGLBLENDCOLOREXTPROC glad_glBlendColorEXT; +PFNGLBLENDEQUATIONSEPARATEEXTPROC glad_glBlendEquationSeparateEXT; +PFNGLBLENDFUNCSEPARATEEXTPROC glad_glBlendFuncSeparateEXT; +PFNGLINSERTEVENTMARKEREXTPROC glad_glInsertEventMarkerEXT; +PFNGLPUSHGROUPMARKEREXTPROC glad_glPushGroupMarkerEXT; +PFNGLPOPGROUPMARKEREXTPROC glad_glPopGroupMarkerEXT; +PFNGLBLITFRAMEBUFFEREXTPROC glad_glBlitFramebufferEXT; +PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC glad_glRenderbufferStorageMultisampleEXT; +PFNGLISRENDERBUFFEREXTPROC glad_glIsRenderbufferEXT; +PFNGLBINDRENDERBUFFEREXTPROC glad_glBindRenderbufferEXT; +PFNGLDELETERENDERBUFFERSEXTPROC glad_glDeleteRenderbuffersEXT; +PFNGLGENRENDERBUFFERSEXTPROC glad_glGenRenderbuffersEXT; +PFNGLRENDERBUFFERSTORAGEEXTPROC glad_glRenderbufferStorageEXT; +PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC glad_glGetRenderbufferParameterivEXT; +PFNGLISFRAMEBUFFEREXTPROC glad_glIsFramebufferEXT; +PFNGLBINDFRAMEBUFFEREXTPROC glad_glBindFramebufferEXT; +PFNGLDELETEFRAMEBUFFERSEXTPROC glad_glDeleteFramebuffersEXT; +PFNGLGENFRAMEBUFFERSEXTPROC glad_glGenFramebuffersEXT; +PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glad_glCheckFramebufferStatusEXT; +PFNGLFRAMEBUFFERTEXTURE1DEXTPROC glad_glFramebufferTexture1DEXT; +PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glad_glFramebufferTexture2DEXT; +PFNGLFRAMEBUFFERTEXTURE3DEXTPROC glad_glFramebufferTexture3DEXT; +PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC glad_glFramebufferRenderbufferEXT; +PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC glad_glGetFramebufferAttachmentParameterivEXT; +PFNGLGENERATEMIPMAPEXTPROC glad_glGenerateMipmapEXT; +PFNGLARRAYELEMENTEXTPROC glad_glArrayElementEXT; +PFNGLCOLORPOINTEREXTPROC glad_glColorPointerEXT; +PFNGLDRAWARRAYSEXTPROC glad_glDrawArraysEXT; +PFNGLEDGEFLAGPOINTEREXTPROC glad_glEdgeFlagPointerEXT; +PFNGLGETPOINTERVEXTPROC glad_glGetPointervEXT; +PFNGLINDEXPOINTEREXTPROC glad_glIndexPointerEXT; +PFNGLNORMALPOINTEREXTPROC glad_glNormalPointerEXT; +PFNGLTEXCOORDPOINTEREXTPROC glad_glTexCoordPointerEXT; +PFNGLVERTEXPOINTEREXTPROC glad_glVertexPointerEXT; +PFNGLBEGINVERTEXSHADEREXTPROC glad_glBeginVertexShaderEXT; +PFNGLENDVERTEXSHADEREXTPROC glad_glEndVertexShaderEXT; +PFNGLBINDVERTEXSHADEREXTPROC glad_glBindVertexShaderEXT; +PFNGLGENVERTEXSHADERSEXTPROC glad_glGenVertexShadersEXT; +PFNGLDELETEVERTEXSHADEREXTPROC glad_glDeleteVertexShaderEXT; +PFNGLSHADEROP1EXTPROC glad_glShaderOp1EXT; +PFNGLSHADEROP2EXTPROC glad_glShaderOp2EXT; +PFNGLSHADEROP3EXTPROC glad_glShaderOp3EXT; +PFNGLSWIZZLEEXTPROC glad_glSwizzleEXT; +PFNGLWRITEMASKEXTPROC glad_glWriteMaskEXT; +PFNGLINSERTCOMPONENTEXTPROC glad_glInsertComponentEXT; +PFNGLEXTRACTCOMPONENTEXTPROC glad_glExtractComponentEXT; +PFNGLGENSYMBOLSEXTPROC glad_glGenSymbolsEXT; +PFNGLSETINVARIANTEXTPROC glad_glSetInvariantEXT; +PFNGLSETLOCALCONSTANTEXTPROC glad_glSetLocalConstantEXT; +PFNGLVARIANTBVEXTPROC glad_glVariantbvEXT; +PFNGLVARIANTSVEXTPROC glad_glVariantsvEXT; +PFNGLVARIANTIVEXTPROC glad_glVariantivEXT; +PFNGLVARIANTFVEXTPROC glad_glVariantfvEXT; +PFNGLVARIANTDVEXTPROC glad_glVariantdvEXT; +PFNGLVARIANTUBVEXTPROC glad_glVariantubvEXT; +PFNGLVARIANTUSVEXTPROC glad_glVariantusvEXT; +PFNGLVARIANTUIVEXTPROC glad_glVariantuivEXT; +PFNGLVARIANTPOINTEREXTPROC glad_glVariantPointerEXT; +PFNGLENABLEVARIANTCLIENTSTATEEXTPROC glad_glEnableVariantClientStateEXT; +PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC glad_glDisableVariantClientStateEXT; +PFNGLBINDLIGHTPARAMETEREXTPROC glad_glBindLightParameterEXT; +PFNGLBINDMATERIALPARAMETEREXTPROC glad_glBindMaterialParameterEXT; +PFNGLBINDTEXGENPARAMETEREXTPROC glad_glBindTexGenParameterEXT; +PFNGLBINDTEXTUREUNITPARAMETEREXTPROC glad_glBindTextureUnitParameterEXT; +PFNGLBINDPARAMETEREXTPROC glad_glBindParameterEXT; +PFNGLISVARIANTENABLEDEXTPROC glad_glIsVariantEnabledEXT; +PFNGLGETVARIANTBOOLEANVEXTPROC glad_glGetVariantBooleanvEXT; +PFNGLGETVARIANTINTEGERVEXTPROC glad_glGetVariantIntegervEXT; +PFNGLGETVARIANTFLOATVEXTPROC glad_glGetVariantFloatvEXT; +PFNGLGETVARIANTPOINTERVEXTPROC glad_glGetVariantPointervEXT; +PFNGLGETINVARIANTBOOLEANVEXTPROC glad_glGetInvariantBooleanvEXT; +PFNGLGETINVARIANTINTEGERVEXTPROC glad_glGetInvariantIntegervEXT; +PFNGLGETINVARIANTFLOATVEXTPROC glad_glGetInvariantFloatvEXT; +PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC glad_glGetLocalConstantBooleanvEXT; +PFNGLGETLOCALCONSTANTINTEGERVEXTPROC glad_glGetLocalConstantIntegervEXT; +PFNGLGETLOCALCONSTANTFLOATVEXTPROC glad_glGetLocalConstantFloatvEXT; +static void load_GL_VERSION_1_0(GLADloadproc load) { + if(!GLAD_GL_VERSION_1_0) return; + glad_glCullFace = (PFNGLCULLFACEPROC)load("glCullFace"); + glad_glFrontFace = (PFNGLFRONTFACEPROC)load("glFrontFace"); + glad_glHint = (PFNGLHINTPROC)load("glHint"); + glad_glLineWidth = (PFNGLLINEWIDTHPROC)load("glLineWidth"); + glad_glPointSize = (PFNGLPOINTSIZEPROC)load("glPointSize"); + glad_glPolygonMode = (PFNGLPOLYGONMODEPROC)load("glPolygonMode"); + glad_glScissor = (PFNGLSCISSORPROC)load("glScissor"); + glad_glTexParameterf = (PFNGLTEXPARAMETERFPROC)load("glTexParameterf"); + glad_glTexParameterfv = (PFNGLTEXPARAMETERFVPROC)load("glTexParameterfv"); + glad_glTexParameteri = (PFNGLTEXPARAMETERIPROC)load("glTexParameteri"); + glad_glTexParameteriv = (PFNGLTEXPARAMETERIVPROC)load("glTexParameteriv"); + glad_glTexImage1D = (PFNGLTEXIMAGE1DPROC)load("glTexImage1D"); + glad_glTexImage2D = (PFNGLTEXIMAGE2DPROC)load("glTexImage2D"); + glad_glDrawBuffer = (PFNGLDRAWBUFFERPROC)load("glDrawBuffer"); + glad_glClear = (PFNGLCLEARPROC)load("glClear"); + glad_glClearColor = (PFNGLCLEARCOLORPROC)load("glClearColor"); + glad_glClearStencil = (PFNGLCLEARSTENCILPROC)load("glClearStencil"); + glad_glClearDepth = (PFNGLCLEARDEPTHPROC)load("glClearDepth"); + glad_glStencilMask = (PFNGLSTENCILMASKPROC)load("glStencilMask"); + glad_glColorMask = (PFNGLCOLORMASKPROC)load("glColorMask"); + glad_glDepthMask = (PFNGLDEPTHMASKPROC)load("glDepthMask"); + glad_glDisable = (PFNGLDISABLEPROC)load("glDisable"); + glad_glEnable = (PFNGLENABLEPROC)load("glEnable"); + glad_glFinish = (PFNGLFINISHPROC)load("glFinish"); + glad_glFlush = (PFNGLFLUSHPROC)load("glFlush"); + glad_glBlendFunc = (PFNGLBLENDFUNCPROC)load("glBlendFunc"); + glad_glLogicOp = (PFNGLLOGICOPPROC)load("glLogicOp"); + glad_glStencilFunc = (PFNGLSTENCILFUNCPROC)load("glStencilFunc"); + glad_glStencilOp = (PFNGLSTENCILOPPROC)load("glStencilOp"); + glad_glDepthFunc = (PFNGLDEPTHFUNCPROC)load("glDepthFunc"); + glad_glPixelStoref = (PFNGLPIXELSTOREFPROC)load("glPixelStoref"); + glad_glPixelStorei = (PFNGLPIXELSTOREIPROC)load("glPixelStorei"); + glad_glReadBuffer = (PFNGLREADBUFFERPROC)load("glReadBuffer"); + glad_glReadPixels = (PFNGLREADPIXELSPROC)load("glReadPixels"); + glad_glGetBooleanv = (PFNGLGETBOOLEANVPROC)load("glGetBooleanv"); + glad_glGetDoublev = (PFNGLGETDOUBLEVPROC)load("glGetDoublev"); + glad_glGetError = (PFNGLGETERRORPROC)load("glGetError"); + glad_glGetFloatv = (PFNGLGETFLOATVPROC)load("glGetFloatv"); + glad_glGetIntegerv = (PFNGLGETINTEGERVPROC)load("glGetIntegerv"); + glad_glGetString = (PFNGLGETSTRINGPROC)load("glGetString"); + glad_glGetTexImage = (PFNGLGETTEXIMAGEPROC)load("glGetTexImage"); + glad_glGetTexParameterfv = (PFNGLGETTEXPARAMETERFVPROC)load("glGetTexParameterfv"); + glad_glGetTexParameteriv = (PFNGLGETTEXPARAMETERIVPROC)load("glGetTexParameteriv"); + glad_glGetTexLevelParameterfv = (PFNGLGETTEXLEVELPARAMETERFVPROC)load("glGetTexLevelParameterfv"); + glad_glGetTexLevelParameteriv = (PFNGLGETTEXLEVELPARAMETERIVPROC)load("glGetTexLevelParameteriv"); + glad_glIsEnabled = (PFNGLISENABLEDPROC)load("glIsEnabled"); + glad_glDepthRange = (PFNGLDEPTHRANGEPROC)load("glDepthRange"); + glad_glViewport = (PFNGLVIEWPORTPROC)load("glViewport"); +} +static void load_GL_VERSION_1_1(GLADloadproc load) { + if(!GLAD_GL_VERSION_1_1) return; + glad_glDrawArrays = (PFNGLDRAWARRAYSPROC)load("glDrawArrays"); + glad_glDrawElements = (PFNGLDRAWELEMENTSPROC)load("glDrawElements"); + glad_glPolygonOffset = (PFNGLPOLYGONOFFSETPROC)load("glPolygonOffset"); + glad_glCopyTexImage1D = (PFNGLCOPYTEXIMAGE1DPROC)load("glCopyTexImage1D"); + glad_glCopyTexImage2D = (PFNGLCOPYTEXIMAGE2DPROC)load("glCopyTexImage2D"); + glad_glCopyTexSubImage1D = (PFNGLCOPYTEXSUBIMAGE1DPROC)load("glCopyTexSubImage1D"); + glad_glCopyTexSubImage2D = (PFNGLCOPYTEXSUBIMAGE2DPROC)load("glCopyTexSubImage2D"); + glad_glTexSubImage1D = (PFNGLTEXSUBIMAGE1DPROC)load("glTexSubImage1D"); + glad_glTexSubImage2D = (PFNGLTEXSUBIMAGE2DPROC)load("glTexSubImage2D"); + glad_glBindTexture = (PFNGLBINDTEXTUREPROC)load("glBindTexture"); + glad_glDeleteTextures = (PFNGLDELETETEXTURESPROC)load("glDeleteTextures"); + glad_glGenTextures = (PFNGLGENTEXTURESPROC)load("glGenTextures"); + glad_glIsTexture = (PFNGLISTEXTUREPROC)load("glIsTexture"); +} +static void load_GL_VERSION_1_2(GLADloadproc load) { + if(!GLAD_GL_VERSION_1_2) return; + glad_glDrawRangeElements = (PFNGLDRAWRANGEELEMENTSPROC)load("glDrawRangeElements"); + glad_glTexImage3D = (PFNGLTEXIMAGE3DPROC)load("glTexImage3D"); + glad_glTexSubImage3D = (PFNGLTEXSUBIMAGE3DPROC)load("glTexSubImage3D"); + glad_glCopyTexSubImage3D = (PFNGLCOPYTEXSUBIMAGE3DPROC)load("glCopyTexSubImage3D"); +} +static void load_GL_VERSION_1_3(GLADloadproc load) { + if(!GLAD_GL_VERSION_1_3) return; + glad_glActiveTexture = (PFNGLACTIVETEXTUREPROC)load("glActiveTexture"); + glad_glSampleCoverage = (PFNGLSAMPLECOVERAGEPROC)load("glSampleCoverage"); + glad_glCompressedTexImage3D = (PFNGLCOMPRESSEDTEXIMAGE3DPROC)load("glCompressedTexImage3D"); + glad_glCompressedTexImage2D = (PFNGLCOMPRESSEDTEXIMAGE2DPROC)load("glCompressedTexImage2D"); + glad_glCompressedTexImage1D = (PFNGLCOMPRESSEDTEXIMAGE1DPROC)load("glCompressedTexImage1D"); + glad_glCompressedTexSubImage3D = (PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC)load("glCompressedTexSubImage3D"); + glad_glCompressedTexSubImage2D = (PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC)load("glCompressedTexSubImage2D"); + glad_glCompressedTexSubImage1D = (PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC)load("glCompressedTexSubImage1D"); + glad_glGetCompressedTexImage = (PFNGLGETCOMPRESSEDTEXIMAGEPROC)load("glGetCompressedTexImage"); +} +static void load_GL_VERSION_1_4(GLADloadproc load) { + if(!GLAD_GL_VERSION_1_4) return; + glad_glBlendFuncSeparate = (PFNGLBLENDFUNCSEPARATEPROC)load("glBlendFuncSeparate"); + glad_glMultiDrawArrays = (PFNGLMULTIDRAWARRAYSPROC)load("glMultiDrawArrays"); + glad_glMultiDrawElements = (PFNGLMULTIDRAWELEMENTSPROC)load("glMultiDrawElements"); + glad_glPointParameterf = (PFNGLPOINTPARAMETERFPROC)load("glPointParameterf"); + glad_glPointParameterfv = (PFNGLPOINTPARAMETERFVPROC)load("glPointParameterfv"); + glad_glPointParameteri = (PFNGLPOINTPARAMETERIPROC)load("glPointParameteri"); + glad_glPointParameteriv = (PFNGLPOINTPARAMETERIVPROC)load("glPointParameteriv"); + glad_glBlendColor = (PFNGLBLENDCOLORPROC)load("glBlendColor"); + glad_glBlendEquation = (PFNGLBLENDEQUATIONPROC)load("glBlendEquation"); +} +static void load_GL_VERSION_1_5(GLADloadproc load) { + if(!GLAD_GL_VERSION_1_5) return; + glad_glGenQueries = (PFNGLGENQUERIESPROC)load("glGenQueries"); + glad_glDeleteQueries = (PFNGLDELETEQUERIESPROC)load("glDeleteQueries"); + glad_glIsQuery = (PFNGLISQUERYPROC)load("glIsQuery"); + glad_glBeginQuery = (PFNGLBEGINQUERYPROC)load("glBeginQuery"); + glad_glEndQuery = (PFNGLENDQUERYPROC)load("glEndQuery"); + glad_glGetQueryiv = (PFNGLGETQUERYIVPROC)load("glGetQueryiv"); + glad_glGetQueryObjectiv = (PFNGLGETQUERYOBJECTIVPROC)load("glGetQueryObjectiv"); + glad_glGetQueryObjectuiv = (PFNGLGETQUERYOBJECTUIVPROC)load("glGetQueryObjectuiv"); + glad_glBindBuffer = (PFNGLBINDBUFFERPROC)load("glBindBuffer"); + glad_glDeleteBuffers = (PFNGLDELETEBUFFERSPROC)load("glDeleteBuffers"); + glad_glGenBuffers = (PFNGLGENBUFFERSPROC)load("glGenBuffers"); + glad_glIsBuffer = (PFNGLISBUFFERPROC)load("glIsBuffer"); + glad_glBufferData = (PFNGLBUFFERDATAPROC)load("glBufferData"); + glad_glBufferSubData = (PFNGLBUFFERSUBDATAPROC)load("glBufferSubData"); + glad_glGetBufferSubData = (PFNGLGETBUFFERSUBDATAPROC)load("glGetBufferSubData"); + glad_glMapBuffer = (PFNGLMAPBUFFERPROC)load("glMapBuffer"); + glad_glUnmapBuffer = (PFNGLUNMAPBUFFERPROC)load("glUnmapBuffer"); + glad_glGetBufferParameteriv = (PFNGLGETBUFFERPARAMETERIVPROC)load("glGetBufferParameteriv"); + glad_glGetBufferPointerv = (PFNGLGETBUFFERPOINTERVPROC)load("glGetBufferPointerv"); +} +static void load_GL_VERSION_2_0(GLADloadproc load) { + if(!GLAD_GL_VERSION_2_0) return; + glad_glBlendEquationSeparate = (PFNGLBLENDEQUATIONSEPARATEPROC)load("glBlendEquationSeparate"); + glad_glDrawBuffers = (PFNGLDRAWBUFFERSPROC)load("glDrawBuffers"); + glad_glStencilOpSeparate = (PFNGLSTENCILOPSEPARATEPROC)load("glStencilOpSeparate"); + glad_glStencilFuncSeparate = (PFNGLSTENCILFUNCSEPARATEPROC)load("glStencilFuncSeparate"); + glad_glStencilMaskSeparate = (PFNGLSTENCILMASKSEPARATEPROC)load("glStencilMaskSeparate"); + glad_glAttachShader = (PFNGLATTACHSHADERPROC)load("glAttachShader"); + glad_glBindAttribLocation = (PFNGLBINDATTRIBLOCATIONPROC)load("glBindAttribLocation"); + glad_glCompileShader = (PFNGLCOMPILESHADERPROC)load("glCompileShader"); + glad_glCreateProgram = (PFNGLCREATEPROGRAMPROC)load("glCreateProgram"); + glad_glCreateShader = (PFNGLCREATESHADERPROC)load("glCreateShader"); + glad_glDeleteProgram = (PFNGLDELETEPROGRAMPROC)load("glDeleteProgram"); + glad_glDeleteShader = (PFNGLDELETESHADERPROC)load("glDeleteShader"); + glad_glDetachShader = (PFNGLDETACHSHADERPROC)load("glDetachShader"); + glad_glDisableVertexAttribArray = (PFNGLDISABLEVERTEXATTRIBARRAYPROC)load("glDisableVertexAttribArray"); + glad_glEnableVertexAttribArray = (PFNGLENABLEVERTEXATTRIBARRAYPROC)load("glEnableVertexAttribArray"); + glad_glGetActiveAttrib = (PFNGLGETACTIVEATTRIBPROC)load("glGetActiveAttrib"); + glad_glGetActiveUniform = (PFNGLGETACTIVEUNIFORMPROC)load("glGetActiveUniform"); + glad_glGetAttachedShaders = (PFNGLGETATTACHEDSHADERSPROC)load("glGetAttachedShaders"); + glad_glGetAttribLocation = (PFNGLGETATTRIBLOCATIONPROC)load("glGetAttribLocation"); + glad_glGetProgramiv = (PFNGLGETPROGRAMIVPROC)load("glGetProgramiv"); + glad_glGetProgramInfoLog = (PFNGLGETPROGRAMINFOLOGPROC)load("glGetProgramInfoLog"); + glad_glGetShaderiv = (PFNGLGETSHADERIVPROC)load("glGetShaderiv"); + glad_glGetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC)load("glGetShaderInfoLog"); + glad_glGetShaderSource = (PFNGLGETSHADERSOURCEPROC)load("glGetShaderSource"); + glad_glGetUniformLocation = (PFNGLGETUNIFORMLOCATIONPROC)load("glGetUniformLocation"); + glad_glGetUniformfv = (PFNGLGETUNIFORMFVPROC)load("glGetUniformfv"); + glad_glGetUniformiv = (PFNGLGETUNIFORMIVPROC)load("glGetUniformiv"); + glad_glGetVertexAttribdv = (PFNGLGETVERTEXATTRIBDVPROC)load("glGetVertexAttribdv"); + glad_glGetVertexAttribfv = (PFNGLGETVERTEXATTRIBFVPROC)load("glGetVertexAttribfv"); + glad_glGetVertexAttribiv = (PFNGLGETVERTEXATTRIBIVPROC)load("glGetVertexAttribiv"); + glad_glGetVertexAttribPointerv = (PFNGLGETVERTEXATTRIBPOINTERVPROC)load("glGetVertexAttribPointerv"); + glad_glIsProgram = (PFNGLISPROGRAMPROC)load("glIsProgram"); + glad_glIsShader = (PFNGLISSHADERPROC)load("glIsShader"); + glad_glLinkProgram = (PFNGLLINKPROGRAMPROC)load("glLinkProgram"); + glad_glShaderSource = (PFNGLSHADERSOURCEPROC)load("glShaderSource"); + glad_glUseProgram = (PFNGLUSEPROGRAMPROC)load("glUseProgram"); + glad_glUniform1f = (PFNGLUNIFORM1FPROC)load("glUniform1f"); + glad_glUniform2f = (PFNGLUNIFORM2FPROC)load("glUniform2f"); + glad_glUniform3f = (PFNGLUNIFORM3FPROC)load("glUniform3f"); + glad_glUniform4f = (PFNGLUNIFORM4FPROC)load("glUniform4f"); + glad_glUniform1i = (PFNGLUNIFORM1IPROC)load("glUniform1i"); + glad_glUniform2i = (PFNGLUNIFORM2IPROC)load("glUniform2i"); + glad_glUniform3i = (PFNGLUNIFORM3IPROC)load("glUniform3i"); + glad_glUniform4i = (PFNGLUNIFORM4IPROC)load("glUniform4i"); + glad_glUniform1fv = (PFNGLUNIFORM1FVPROC)load("glUniform1fv"); + glad_glUniform2fv = (PFNGLUNIFORM2FVPROC)load("glUniform2fv"); + glad_glUniform3fv = (PFNGLUNIFORM3FVPROC)load("glUniform3fv"); + glad_glUniform4fv = (PFNGLUNIFORM4FVPROC)load("glUniform4fv"); + glad_glUniform1iv = (PFNGLUNIFORM1IVPROC)load("glUniform1iv"); + glad_glUniform2iv = (PFNGLUNIFORM2IVPROC)load("glUniform2iv"); + glad_glUniform3iv = (PFNGLUNIFORM3IVPROC)load("glUniform3iv"); + glad_glUniform4iv = (PFNGLUNIFORM4IVPROC)load("glUniform4iv"); + glad_glUniformMatrix2fv = (PFNGLUNIFORMMATRIX2FVPROC)load("glUniformMatrix2fv"); + glad_glUniformMatrix3fv = (PFNGLUNIFORMMATRIX3FVPROC)load("glUniformMatrix3fv"); + glad_glUniformMatrix4fv = (PFNGLUNIFORMMATRIX4FVPROC)load("glUniformMatrix4fv"); + glad_glValidateProgram = (PFNGLVALIDATEPROGRAMPROC)load("glValidateProgram"); + glad_glVertexAttrib1d = (PFNGLVERTEXATTRIB1DPROC)load("glVertexAttrib1d"); + glad_glVertexAttrib1dv = (PFNGLVERTEXATTRIB1DVPROC)load("glVertexAttrib1dv"); + glad_glVertexAttrib1f = (PFNGLVERTEXATTRIB1FPROC)load("glVertexAttrib1f"); + glad_glVertexAttrib1fv = (PFNGLVERTEXATTRIB1FVPROC)load("glVertexAttrib1fv"); + glad_glVertexAttrib1s = (PFNGLVERTEXATTRIB1SPROC)load("glVertexAttrib1s"); + glad_glVertexAttrib1sv = (PFNGLVERTEXATTRIB1SVPROC)load("glVertexAttrib1sv"); + glad_glVertexAttrib2d = (PFNGLVERTEXATTRIB2DPROC)load("glVertexAttrib2d"); + glad_glVertexAttrib2dv = (PFNGLVERTEXATTRIB2DVPROC)load("glVertexAttrib2dv"); + glad_glVertexAttrib2f = (PFNGLVERTEXATTRIB2FPROC)load("glVertexAttrib2f"); + glad_glVertexAttrib2fv = (PFNGLVERTEXATTRIB2FVPROC)load("glVertexAttrib2fv"); + glad_glVertexAttrib2s = (PFNGLVERTEXATTRIB2SPROC)load("glVertexAttrib2s"); + glad_glVertexAttrib2sv = (PFNGLVERTEXATTRIB2SVPROC)load("glVertexAttrib2sv"); + glad_glVertexAttrib3d = (PFNGLVERTEXATTRIB3DPROC)load("glVertexAttrib3d"); + glad_glVertexAttrib3dv = (PFNGLVERTEXATTRIB3DVPROC)load("glVertexAttrib3dv"); + glad_glVertexAttrib3f = (PFNGLVERTEXATTRIB3FPROC)load("glVertexAttrib3f"); + glad_glVertexAttrib3fv = (PFNGLVERTEXATTRIB3FVPROC)load("glVertexAttrib3fv"); + glad_glVertexAttrib3s = (PFNGLVERTEXATTRIB3SPROC)load("glVertexAttrib3s"); + glad_glVertexAttrib3sv = (PFNGLVERTEXATTRIB3SVPROC)load("glVertexAttrib3sv"); + glad_glVertexAttrib4Nbv = (PFNGLVERTEXATTRIB4NBVPROC)load("glVertexAttrib4Nbv"); + glad_glVertexAttrib4Niv = (PFNGLVERTEXATTRIB4NIVPROC)load("glVertexAttrib4Niv"); + glad_glVertexAttrib4Nsv = (PFNGLVERTEXATTRIB4NSVPROC)load("glVertexAttrib4Nsv"); + glad_glVertexAttrib4Nub = (PFNGLVERTEXATTRIB4NUBPROC)load("glVertexAttrib4Nub"); + glad_glVertexAttrib4Nubv = (PFNGLVERTEXATTRIB4NUBVPROC)load("glVertexAttrib4Nubv"); + glad_glVertexAttrib4Nuiv = (PFNGLVERTEXATTRIB4NUIVPROC)load("glVertexAttrib4Nuiv"); + glad_glVertexAttrib4Nusv = (PFNGLVERTEXATTRIB4NUSVPROC)load("glVertexAttrib4Nusv"); + glad_glVertexAttrib4bv = (PFNGLVERTEXATTRIB4BVPROC)load("glVertexAttrib4bv"); + glad_glVertexAttrib4d = (PFNGLVERTEXATTRIB4DPROC)load("glVertexAttrib4d"); + glad_glVertexAttrib4dv = (PFNGLVERTEXATTRIB4DVPROC)load("glVertexAttrib4dv"); + glad_glVertexAttrib4f = (PFNGLVERTEXATTRIB4FPROC)load("glVertexAttrib4f"); + glad_glVertexAttrib4fv = (PFNGLVERTEXATTRIB4FVPROC)load("glVertexAttrib4fv"); + glad_glVertexAttrib4iv = (PFNGLVERTEXATTRIB4IVPROC)load("glVertexAttrib4iv"); + glad_glVertexAttrib4s = (PFNGLVERTEXATTRIB4SPROC)load("glVertexAttrib4s"); + glad_glVertexAttrib4sv = (PFNGLVERTEXATTRIB4SVPROC)load("glVertexAttrib4sv"); + glad_glVertexAttrib4ubv = (PFNGLVERTEXATTRIB4UBVPROC)load("glVertexAttrib4ubv"); + glad_glVertexAttrib4uiv = (PFNGLVERTEXATTRIB4UIVPROC)load("glVertexAttrib4uiv"); + glad_glVertexAttrib4usv = (PFNGLVERTEXATTRIB4USVPROC)load("glVertexAttrib4usv"); + glad_glVertexAttribPointer = (PFNGLVERTEXATTRIBPOINTERPROC)load("glVertexAttribPointer"); +} +static void load_GL_VERSION_2_1(GLADloadproc load) { + if(!GLAD_GL_VERSION_2_1) return; + glad_glUniformMatrix2x3fv = (PFNGLUNIFORMMATRIX2X3FVPROC)load("glUniformMatrix2x3fv"); + glad_glUniformMatrix3x2fv = (PFNGLUNIFORMMATRIX3X2FVPROC)load("glUniformMatrix3x2fv"); + glad_glUniformMatrix2x4fv = (PFNGLUNIFORMMATRIX2X4FVPROC)load("glUniformMatrix2x4fv"); + glad_glUniformMatrix4x2fv = (PFNGLUNIFORMMATRIX4X2FVPROC)load("glUniformMatrix4x2fv"); + glad_glUniformMatrix3x4fv = (PFNGLUNIFORMMATRIX3X4FVPROC)load("glUniformMatrix3x4fv"); + glad_glUniformMatrix4x3fv = (PFNGLUNIFORMMATRIX4X3FVPROC)load("glUniformMatrix4x3fv"); +} +static void load_GL_VERSION_3_0(GLADloadproc load) { + if(!GLAD_GL_VERSION_3_0) return; + glad_glColorMaski = (PFNGLCOLORMASKIPROC)load("glColorMaski"); + glad_glGetBooleani_v = (PFNGLGETBOOLEANI_VPROC)load("glGetBooleani_v"); + glad_glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC)load("glGetIntegeri_v"); + glad_glEnablei = (PFNGLENABLEIPROC)load("glEnablei"); + glad_glDisablei = (PFNGLDISABLEIPROC)load("glDisablei"); + glad_glIsEnabledi = (PFNGLISENABLEDIPROC)load("glIsEnabledi"); + glad_glBeginTransformFeedback = (PFNGLBEGINTRANSFORMFEEDBACKPROC)load("glBeginTransformFeedback"); + glad_glEndTransformFeedback = (PFNGLENDTRANSFORMFEEDBACKPROC)load("glEndTransformFeedback"); + glad_glBindBufferRange = (PFNGLBINDBUFFERRANGEPROC)load("glBindBufferRange"); + glad_glBindBufferBase = (PFNGLBINDBUFFERBASEPROC)load("glBindBufferBase"); + glad_glTransformFeedbackVaryings = (PFNGLTRANSFORMFEEDBACKVARYINGSPROC)load("glTransformFeedbackVaryings"); + glad_glGetTransformFeedbackVarying = (PFNGLGETTRANSFORMFEEDBACKVARYINGPROC)load("glGetTransformFeedbackVarying"); + glad_glClampColor = (PFNGLCLAMPCOLORPROC)load("glClampColor"); + glad_glBeginConditionalRender = (PFNGLBEGINCONDITIONALRENDERPROC)load("glBeginConditionalRender"); + glad_glEndConditionalRender = (PFNGLENDCONDITIONALRENDERPROC)load("glEndConditionalRender"); + glad_glVertexAttribIPointer = (PFNGLVERTEXATTRIBIPOINTERPROC)load("glVertexAttribIPointer"); + glad_glGetVertexAttribIiv = (PFNGLGETVERTEXATTRIBIIVPROC)load("glGetVertexAttribIiv"); + glad_glGetVertexAttribIuiv = (PFNGLGETVERTEXATTRIBIUIVPROC)load("glGetVertexAttribIuiv"); + glad_glVertexAttribI1i = (PFNGLVERTEXATTRIBI1IPROC)load("glVertexAttribI1i"); + glad_glVertexAttribI2i = (PFNGLVERTEXATTRIBI2IPROC)load("glVertexAttribI2i"); + glad_glVertexAttribI3i = (PFNGLVERTEXATTRIBI3IPROC)load("glVertexAttribI3i"); + glad_glVertexAttribI4i = (PFNGLVERTEXATTRIBI4IPROC)load("glVertexAttribI4i"); + glad_glVertexAttribI1ui = (PFNGLVERTEXATTRIBI1UIPROC)load("glVertexAttribI1ui"); + glad_glVertexAttribI2ui = (PFNGLVERTEXATTRIBI2UIPROC)load("glVertexAttribI2ui"); + glad_glVertexAttribI3ui = (PFNGLVERTEXATTRIBI3UIPROC)load("glVertexAttribI3ui"); + glad_glVertexAttribI4ui = (PFNGLVERTEXATTRIBI4UIPROC)load("glVertexAttribI4ui"); + glad_glVertexAttribI1iv = (PFNGLVERTEXATTRIBI1IVPROC)load("glVertexAttribI1iv"); + glad_glVertexAttribI2iv = (PFNGLVERTEXATTRIBI2IVPROC)load("glVertexAttribI2iv"); + glad_glVertexAttribI3iv = (PFNGLVERTEXATTRIBI3IVPROC)load("glVertexAttribI3iv"); + glad_glVertexAttribI4iv = (PFNGLVERTEXATTRIBI4IVPROC)load("glVertexAttribI4iv"); + glad_glVertexAttribI1uiv = (PFNGLVERTEXATTRIBI1UIVPROC)load("glVertexAttribI1uiv"); + glad_glVertexAttribI2uiv = (PFNGLVERTEXATTRIBI2UIVPROC)load("glVertexAttribI2uiv"); + glad_glVertexAttribI3uiv = (PFNGLVERTEXATTRIBI3UIVPROC)load("glVertexAttribI3uiv"); + glad_glVertexAttribI4uiv = (PFNGLVERTEXATTRIBI4UIVPROC)load("glVertexAttribI4uiv"); + glad_glVertexAttribI4bv = (PFNGLVERTEXATTRIBI4BVPROC)load("glVertexAttribI4bv"); + glad_glVertexAttribI4sv = (PFNGLVERTEXATTRIBI4SVPROC)load("glVertexAttribI4sv"); + glad_glVertexAttribI4ubv = (PFNGLVERTEXATTRIBI4UBVPROC)load("glVertexAttribI4ubv"); + glad_glVertexAttribI4usv = (PFNGLVERTEXATTRIBI4USVPROC)load("glVertexAttribI4usv"); + glad_glGetUniformuiv = (PFNGLGETUNIFORMUIVPROC)load("glGetUniformuiv"); + glad_glBindFragDataLocation = (PFNGLBINDFRAGDATALOCATIONPROC)load("glBindFragDataLocation"); + glad_glGetFragDataLocation = (PFNGLGETFRAGDATALOCATIONPROC)load("glGetFragDataLocation"); + glad_glUniform1ui = (PFNGLUNIFORM1UIPROC)load("glUniform1ui"); + glad_glUniform2ui = (PFNGLUNIFORM2UIPROC)load("glUniform2ui"); + glad_glUniform3ui = (PFNGLUNIFORM3UIPROC)load("glUniform3ui"); + glad_glUniform4ui = (PFNGLUNIFORM4UIPROC)load("glUniform4ui"); + glad_glUniform1uiv = (PFNGLUNIFORM1UIVPROC)load("glUniform1uiv"); + glad_glUniform2uiv = (PFNGLUNIFORM2UIVPROC)load("glUniform2uiv"); + glad_glUniform3uiv = (PFNGLUNIFORM3UIVPROC)load("glUniform3uiv"); + glad_glUniform4uiv = (PFNGLUNIFORM4UIVPROC)load("glUniform4uiv"); + glad_glTexParameterIiv = (PFNGLTEXPARAMETERIIVPROC)load("glTexParameterIiv"); + glad_glTexParameterIuiv = (PFNGLTEXPARAMETERIUIVPROC)load("glTexParameterIuiv"); + glad_glGetTexParameterIiv = (PFNGLGETTEXPARAMETERIIVPROC)load("glGetTexParameterIiv"); + glad_glGetTexParameterIuiv = (PFNGLGETTEXPARAMETERIUIVPROC)load("glGetTexParameterIuiv"); + glad_glClearBufferiv = (PFNGLCLEARBUFFERIVPROC)load("glClearBufferiv"); + glad_glClearBufferuiv = (PFNGLCLEARBUFFERUIVPROC)load("glClearBufferuiv"); + glad_glClearBufferfv = (PFNGLCLEARBUFFERFVPROC)load("glClearBufferfv"); + glad_glClearBufferfi = (PFNGLCLEARBUFFERFIPROC)load("glClearBufferfi"); + glad_glGetStringi = (PFNGLGETSTRINGIPROC)load("glGetStringi"); + glad_glIsRenderbuffer = (PFNGLISRENDERBUFFERPROC)load("glIsRenderbuffer"); + glad_glBindRenderbuffer = (PFNGLBINDRENDERBUFFERPROC)load("glBindRenderbuffer"); + glad_glDeleteRenderbuffers = (PFNGLDELETERENDERBUFFERSPROC)load("glDeleteRenderbuffers"); + glad_glGenRenderbuffers = (PFNGLGENRENDERBUFFERSPROC)load("glGenRenderbuffers"); + glad_glRenderbufferStorage = (PFNGLRENDERBUFFERSTORAGEPROC)load("glRenderbufferStorage"); + glad_glGetRenderbufferParameteriv = (PFNGLGETRENDERBUFFERPARAMETERIVPROC)load("glGetRenderbufferParameteriv"); + glad_glIsFramebuffer = (PFNGLISFRAMEBUFFERPROC)load("glIsFramebuffer"); + glad_glBindFramebuffer = (PFNGLBINDFRAMEBUFFERPROC)load("glBindFramebuffer"); + glad_glDeleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSPROC)load("glDeleteFramebuffers"); + glad_glGenFramebuffers = (PFNGLGENFRAMEBUFFERSPROC)load("glGenFramebuffers"); + glad_glCheckFramebufferStatus = (PFNGLCHECKFRAMEBUFFERSTATUSPROC)load("glCheckFramebufferStatus"); + glad_glFramebufferTexture1D = (PFNGLFRAMEBUFFERTEXTURE1DPROC)load("glFramebufferTexture1D"); + glad_glFramebufferTexture2D = (PFNGLFRAMEBUFFERTEXTURE2DPROC)load("glFramebufferTexture2D"); + glad_glFramebufferTexture3D = (PFNGLFRAMEBUFFERTEXTURE3DPROC)load("glFramebufferTexture3D"); + glad_glFramebufferRenderbuffer = (PFNGLFRAMEBUFFERRENDERBUFFERPROC)load("glFramebufferRenderbuffer"); + glad_glGetFramebufferAttachmentParameteriv = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)load("glGetFramebufferAttachmentParameteriv"); + glad_glGenerateMipmap = (PFNGLGENERATEMIPMAPPROC)load("glGenerateMipmap"); + glad_glBlitFramebuffer = (PFNGLBLITFRAMEBUFFERPROC)load("glBlitFramebuffer"); + glad_glRenderbufferStorageMultisample = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)load("glRenderbufferStorageMultisample"); + glad_glFramebufferTextureLayer = (PFNGLFRAMEBUFFERTEXTURELAYERPROC)load("glFramebufferTextureLayer"); + glad_glMapBufferRange = (PFNGLMAPBUFFERRANGEPROC)load("glMapBufferRange"); + glad_glFlushMappedBufferRange = (PFNGLFLUSHMAPPEDBUFFERRANGEPROC)load("glFlushMappedBufferRange"); + glad_glBindVertexArray = (PFNGLBINDVERTEXARRAYPROC)load("glBindVertexArray"); + glad_glDeleteVertexArrays = (PFNGLDELETEVERTEXARRAYSPROC)load("glDeleteVertexArrays"); + glad_glGenVertexArrays = (PFNGLGENVERTEXARRAYSPROC)load("glGenVertexArrays"); + glad_glIsVertexArray = (PFNGLISVERTEXARRAYPROC)load("glIsVertexArray"); +} +static void load_GL_VERSION_3_1(GLADloadproc load) { + if(!GLAD_GL_VERSION_3_1) return; + glad_glDrawArraysInstanced = (PFNGLDRAWARRAYSINSTANCEDPROC)load("glDrawArraysInstanced"); + glad_glDrawElementsInstanced = (PFNGLDRAWELEMENTSINSTANCEDPROC)load("glDrawElementsInstanced"); + glad_glTexBuffer = (PFNGLTEXBUFFERPROC)load("glTexBuffer"); + glad_glPrimitiveRestartIndex = (PFNGLPRIMITIVERESTARTINDEXPROC)load("glPrimitiveRestartIndex"); + glad_glCopyBufferSubData = (PFNGLCOPYBUFFERSUBDATAPROC)load("glCopyBufferSubData"); + glad_glGetUniformIndices = (PFNGLGETUNIFORMINDICESPROC)load("glGetUniformIndices"); + glad_glGetActiveUniformsiv = (PFNGLGETACTIVEUNIFORMSIVPROC)load("glGetActiveUniformsiv"); + glad_glGetActiveUniformName = (PFNGLGETACTIVEUNIFORMNAMEPROC)load("glGetActiveUniformName"); + glad_glGetUniformBlockIndex = (PFNGLGETUNIFORMBLOCKINDEXPROC)load("glGetUniformBlockIndex"); + glad_glGetActiveUniformBlockiv = (PFNGLGETACTIVEUNIFORMBLOCKIVPROC)load("glGetActiveUniformBlockiv"); + glad_glGetActiveUniformBlockName = (PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC)load("glGetActiveUniformBlockName"); + glad_glUniformBlockBinding = (PFNGLUNIFORMBLOCKBINDINGPROC)load("glUniformBlockBinding"); + glad_glBindBufferRange = (PFNGLBINDBUFFERRANGEPROC)load("glBindBufferRange"); + glad_glBindBufferBase = (PFNGLBINDBUFFERBASEPROC)load("glBindBufferBase"); + glad_glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC)load("glGetIntegeri_v"); +} +static void load_GL_VERSION_3_2(GLADloadproc load) { + if(!GLAD_GL_VERSION_3_2) return; + glad_glDrawElementsBaseVertex = (PFNGLDRAWELEMENTSBASEVERTEXPROC)load("glDrawElementsBaseVertex"); + glad_glDrawRangeElementsBaseVertex = (PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC)load("glDrawRangeElementsBaseVertex"); + glad_glDrawElementsInstancedBaseVertex = (PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC)load("glDrawElementsInstancedBaseVertex"); + glad_glMultiDrawElementsBaseVertex = (PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC)load("glMultiDrawElementsBaseVertex"); + glad_glProvokingVertex = (PFNGLPROVOKINGVERTEXPROC)load("glProvokingVertex"); + glad_glFenceSync = (PFNGLFENCESYNCPROC)load("glFenceSync"); + glad_glIsSync = (PFNGLISSYNCPROC)load("glIsSync"); + glad_glDeleteSync = (PFNGLDELETESYNCPROC)load("glDeleteSync"); + glad_glClientWaitSync = (PFNGLCLIENTWAITSYNCPROC)load("glClientWaitSync"); + glad_glWaitSync = (PFNGLWAITSYNCPROC)load("glWaitSync"); + glad_glGetInteger64v = (PFNGLGETINTEGER64VPROC)load("glGetInteger64v"); + glad_glGetSynciv = (PFNGLGETSYNCIVPROC)load("glGetSynciv"); + glad_glGetInteger64i_v = (PFNGLGETINTEGER64I_VPROC)load("glGetInteger64i_v"); + glad_glGetBufferParameteri64v = (PFNGLGETBUFFERPARAMETERI64VPROC)load("glGetBufferParameteri64v"); + glad_glFramebufferTexture = (PFNGLFRAMEBUFFERTEXTUREPROC)load("glFramebufferTexture"); + glad_glTexImage2DMultisample = (PFNGLTEXIMAGE2DMULTISAMPLEPROC)load("glTexImage2DMultisample"); + glad_glTexImage3DMultisample = (PFNGLTEXIMAGE3DMULTISAMPLEPROC)load("glTexImage3DMultisample"); + glad_glGetMultisamplefv = (PFNGLGETMULTISAMPLEFVPROC)load("glGetMultisamplefv"); + glad_glSampleMaski = (PFNGLSAMPLEMASKIPROC)load("glSampleMaski"); +} +static void load_GL_VERSION_3_3(GLADloadproc load) { + if(!GLAD_GL_VERSION_3_3) return; + glad_glBindFragDataLocationIndexed = (PFNGLBINDFRAGDATALOCATIONINDEXEDPROC)load("glBindFragDataLocationIndexed"); + glad_glGetFragDataIndex = (PFNGLGETFRAGDATAINDEXPROC)load("glGetFragDataIndex"); + glad_glGenSamplers = (PFNGLGENSAMPLERSPROC)load("glGenSamplers"); + glad_glDeleteSamplers = (PFNGLDELETESAMPLERSPROC)load("glDeleteSamplers"); + glad_glIsSampler = (PFNGLISSAMPLERPROC)load("glIsSampler"); + glad_glBindSampler = (PFNGLBINDSAMPLERPROC)load("glBindSampler"); + glad_glSamplerParameteri = (PFNGLSAMPLERPARAMETERIPROC)load("glSamplerParameteri"); + glad_glSamplerParameteriv = (PFNGLSAMPLERPARAMETERIVPROC)load("glSamplerParameteriv"); + glad_glSamplerParameterf = (PFNGLSAMPLERPARAMETERFPROC)load("glSamplerParameterf"); + glad_glSamplerParameterfv = (PFNGLSAMPLERPARAMETERFVPROC)load("glSamplerParameterfv"); + glad_glSamplerParameterIiv = (PFNGLSAMPLERPARAMETERIIVPROC)load("glSamplerParameterIiv"); + glad_glSamplerParameterIuiv = (PFNGLSAMPLERPARAMETERIUIVPROC)load("glSamplerParameterIuiv"); + glad_glGetSamplerParameteriv = (PFNGLGETSAMPLERPARAMETERIVPROC)load("glGetSamplerParameteriv"); + glad_glGetSamplerParameterIiv = (PFNGLGETSAMPLERPARAMETERIIVPROC)load("glGetSamplerParameterIiv"); + glad_glGetSamplerParameterfv = (PFNGLGETSAMPLERPARAMETERFVPROC)load("glGetSamplerParameterfv"); + glad_glGetSamplerParameterIuiv = (PFNGLGETSAMPLERPARAMETERIUIVPROC)load("glGetSamplerParameterIuiv"); + glad_glQueryCounter = (PFNGLQUERYCOUNTERPROC)load("glQueryCounter"); + glad_glGetQueryObjecti64v = (PFNGLGETQUERYOBJECTI64VPROC)load("glGetQueryObjecti64v"); + glad_glGetQueryObjectui64v = (PFNGLGETQUERYOBJECTUI64VPROC)load("glGetQueryObjectui64v"); + glad_glVertexAttribDivisor = (PFNGLVERTEXATTRIBDIVISORPROC)load("glVertexAttribDivisor"); + glad_glVertexAttribP1ui = (PFNGLVERTEXATTRIBP1UIPROC)load("glVertexAttribP1ui"); + glad_glVertexAttribP1uiv = (PFNGLVERTEXATTRIBP1UIVPROC)load("glVertexAttribP1uiv"); + glad_glVertexAttribP2ui = (PFNGLVERTEXATTRIBP2UIPROC)load("glVertexAttribP2ui"); + glad_glVertexAttribP2uiv = (PFNGLVERTEXATTRIBP2UIVPROC)load("glVertexAttribP2uiv"); + glad_glVertexAttribP3ui = (PFNGLVERTEXATTRIBP3UIPROC)load("glVertexAttribP3ui"); + glad_glVertexAttribP3uiv = (PFNGLVERTEXATTRIBP3UIVPROC)load("glVertexAttribP3uiv"); + glad_glVertexAttribP4ui = (PFNGLVERTEXATTRIBP4UIPROC)load("glVertexAttribP4ui"); + glad_glVertexAttribP4uiv = (PFNGLVERTEXATTRIBP4UIVPROC)load("glVertexAttribP4uiv"); + glad_glVertexP2ui = (PFNGLVERTEXP2UIPROC)load("glVertexP2ui"); + glad_glVertexP2uiv = (PFNGLVERTEXP2UIVPROC)load("glVertexP2uiv"); + glad_glVertexP3ui = (PFNGLVERTEXP3UIPROC)load("glVertexP3ui"); + glad_glVertexP3uiv = (PFNGLVERTEXP3UIVPROC)load("glVertexP3uiv"); + glad_glVertexP4ui = (PFNGLVERTEXP4UIPROC)load("glVertexP4ui"); + glad_glVertexP4uiv = (PFNGLVERTEXP4UIVPROC)load("glVertexP4uiv"); + glad_glTexCoordP1ui = (PFNGLTEXCOORDP1UIPROC)load("glTexCoordP1ui"); + glad_glTexCoordP1uiv = (PFNGLTEXCOORDP1UIVPROC)load("glTexCoordP1uiv"); + glad_glTexCoordP2ui = (PFNGLTEXCOORDP2UIPROC)load("glTexCoordP2ui"); + glad_glTexCoordP2uiv = (PFNGLTEXCOORDP2UIVPROC)load("glTexCoordP2uiv"); + glad_glTexCoordP3ui = (PFNGLTEXCOORDP3UIPROC)load("glTexCoordP3ui"); + glad_glTexCoordP3uiv = (PFNGLTEXCOORDP3UIVPROC)load("glTexCoordP3uiv"); + glad_glTexCoordP4ui = (PFNGLTEXCOORDP4UIPROC)load("glTexCoordP4ui"); + glad_glTexCoordP4uiv = (PFNGLTEXCOORDP4UIVPROC)load("glTexCoordP4uiv"); + glad_glMultiTexCoordP1ui = (PFNGLMULTITEXCOORDP1UIPROC)load("glMultiTexCoordP1ui"); + glad_glMultiTexCoordP1uiv = (PFNGLMULTITEXCOORDP1UIVPROC)load("glMultiTexCoordP1uiv"); + glad_glMultiTexCoordP2ui = (PFNGLMULTITEXCOORDP2UIPROC)load("glMultiTexCoordP2ui"); + glad_glMultiTexCoordP2uiv = (PFNGLMULTITEXCOORDP2UIVPROC)load("glMultiTexCoordP2uiv"); + glad_glMultiTexCoordP3ui = (PFNGLMULTITEXCOORDP3UIPROC)load("glMultiTexCoordP3ui"); + glad_glMultiTexCoordP3uiv = (PFNGLMULTITEXCOORDP3UIVPROC)load("glMultiTexCoordP3uiv"); + glad_glMultiTexCoordP4ui = (PFNGLMULTITEXCOORDP4UIPROC)load("glMultiTexCoordP4ui"); + glad_glMultiTexCoordP4uiv = (PFNGLMULTITEXCOORDP4UIVPROC)load("glMultiTexCoordP4uiv"); + glad_glNormalP3ui = (PFNGLNORMALP3UIPROC)load("glNormalP3ui"); + glad_glNormalP3uiv = (PFNGLNORMALP3UIVPROC)load("glNormalP3uiv"); + glad_glColorP3ui = (PFNGLCOLORP3UIPROC)load("glColorP3ui"); + glad_glColorP3uiv = (PFNGLCOLORP3UIVPROC)load("glColorP3uiv"); + glad_glColorP4ui = (PFNGLCOLORP4UIPROC)load("glColorP4ui"); + glad_glColorP4uiv = (PFNGLCOLORP4UIVPROC)load("glColorP4uiv"); + glad_glSecondaryColorP3ui = (PFNGLSECONDARYCOLORP3UIPROC)load("glSecondaryColorP3ui"); + glad_glSecondaryColorP3uiv = (PFNGLSECONDARYCOLORP3UIVPROC)load("glSecondaryColorP3uiv"); +} +static void load_GL_AMD_debug_output(GLADloadproc load) { + if(!GLAD_GL_AMD_debug_output) return; + glad_glDebugMessageEnableAMD = (PFNGLDEBUGMESSAGEENABLEAMDPROC)load("glDebugMessageEnableAMD"); + glad_glDebugMessageInsertAMD = (PFNGLDEBUGMESSAGEINSERTAMDPROC)load("glDebugMessageInsertAMD"); + glad_glDebugMessageCallbackAMD = (PFNGLDEBUGMESSAGECALLBACKAMDPROC)load("glDebugMessageCallbackAMD"); + glad_glGetDebugMessageLogAMD = (PFNGLGETDEBUGMESSAGELOGAMDPROC)load("glGetDebugMessageLogAMD"); +} +static void load_GL_ARB_ES2_compatibility(GLADloadproc load) { + if(!GLAD_GL_ARB_ES2_compatibility) return; + glad_glReleaseShaderCompiler = (PFNGLRELEASESHADERCOMPILERPROC)load("glReleaseShaderCompiler"); + glad_glShaderBinary = (PFNGLSHADERBINARYPROC)load("glShaderBinary"); + glad_glGetShaderPrecisionFormat = (PFNGLGETSHADERPRECISIONFORMATPROC)load("glGetShaderPrecisionFormat"); + glad_glDepthRangef = (PFNGLDEPTHRANGEFPROC)load("glDepthRangef"); + glad_glClearDepthf = (PFNGLCLEARDEPTHFPROC)load("glClearDepthf"); +} +static void load_GL_ARB_buffer_storage(GLADloadproc load) { + if(!GLAD_GL_ARB_buffer_storage) return; + glad_glBufferStorage = (PFNGLBUFFERSTORAGEPROC)load("glBufferStorage"); +} +static void load_GL_ARB_debug_output(GLADloadproc load) { + if(!GLAD_GL_ARB_debug_output) return; + glad_glDebugMessageControlARB = (PFNGLDEBUGMESSAGECONTROLARBPROC)load("glDebugMessageControlARB"); + glad_glDebugMessageInsertARB = (PFNGLDEBUGMESSAGEINSERTARBPROC)load("glDebugMessageInsertARB"); + glad_glDebugMessageCallbackARB = (PFNGLDEBUGMESSAGECALLBACKARBPROC)load("glDebugMessageCallbackARB"); + glad_glGetDebugMessageLogARB = (PFNGLGETDEBUGMESSAGELOGARBPROC)load("glGetDebugMessageLogARB"); +} +static void load_GL_ARB_draw_buffers(GLADloadproc load) { + if(!GLAD_GL_ARB_draw_buffers) return; + glad_glDrawBuffersARB = (PFNGLDRAWBUFFERSARBPROC)load("glDrawBuffersARB"); +} +static void load_GL_ARB_draw_buffers_blend(GLADloadproc load) { + if(!GLAD_GL_ARB_draw_buffers_blend) return; + glad_glBlendEquationiARB = (PFNGLBLENDEQUATIONIARBPROC)load("glBlendEquationiARB"); + glad_glBlendEquationSeparateiARB = (PFNGLBLENDEQUATIONSEPARATEIARBPROC)load("glBlendEquationSeparateiARB"); + glad_glBlendFunciARB = (PFNGLBLENDFUNCIARBPROC)load("glBlendFunciARB"); + glad_glBlendFuncSeparateiARB = (PFNGLBLENDFUNCSEPARATEIARBPROC)load("glBlendFuncSeparateiARB"); +} +static void load_GL_ARB_fragment_program(GLADloadproc load) { + if(!GLAD_GL_ARB_fragment_program) return; + glad_glProgramStringARB = (PFNGLPROGRAMSTRINGARBPROC)load("glProgramStringARB"); + glad_glBindProgramARB = (PFNGLBINDPROGRAMARBPROC)load("glBindProgramARB"); + glad_glDeleteProgramsARB = (PFNGLDELETEPROGRAMSARBPROC)load("glDeleteProgramsARB"); + glad_glGenProgramsARB = (PFNGLGENPROGRAMSARBPROC)load("glGenProgramsARB"); + glad_glProgramEnvParameter4dARB = (PFNGLPROGRAMENVPARAMETER4DARBPROC)load("glProgramEnvParameter4dARB"); + glad_glProgramEnvParameter4dvARB = (PFNGLPROGRAMENVPARAMETER4DVARBPROC)load("glProgramEnvParameter4dvARB"); + glad_glProgramEnvParameter4fARB = (PFNGLPROGRAMENVPARAMETER4FARBPROC)load("glProgramEnvParameter4fARB"); + glad_glProgramEnvParameter4fvARB = (PFNGLPROGRAMENVPARAMETER4FVARBPROC)load("glProgramEnvParameter4fvARB"); + glad_glProgramLocalParameter4dARB = (PFNGLPROGRAMLOCALPARAMETER4DARBPROC)load("glProgramLocalParameter4dARB"); + glad_glProgramLocalParameter4dvARB = (PFNGLPROGRAMLOCALPARAMETER4DVARBPROC)load("glProgramLocalParameter4dvARB"); + glad_glProgramLocalParameter4fARB = (PFNGLPROGRAMLOCALPARAMETER4FARBPROC)load("glProgramLocalParameter4fARB"); + glad_glProgramLocalParameter4fvARB = (PFNGLPROGRAMLOCALPARAMETER4FVARBPROC)load("glProgramLocalParameter4fvARB"); + glad_glGetProgramEnvParameterdvARB = (PFNGLGETPROGRAMENVPARAMETERDVARBPROC)load("glGetProgramEnvParameterdvARB"); + glad_glGetProgramEnvParameterfvARB = (PFNGLGETPROGRAMENVPARAMETERFVARBPROC)load("glGetProgramEnvParameterfvARB"); + glad_glGetProgramLocalParameterdvARB = (PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC)load("glGetProgramLocalParameterdvARB"); + glad_glGetProgramLocalParameterfvARB = (PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC)load("glGetProgramLocalParameterfvARB"); + glad_glGetProgramivARB = (PFNGLGETPROGRAMIVARBPROC)load("glGetProgramivARB"); + glad_glGetProgramStringARB = (PFNGLGETPROGRAMSTRINGARBPROC)load("glGetProgramStringARB"); + glad_glIsProgramARB = (PFNGLISPROGRAMARBPROC)load("glIsProgramARB"); +} +static void load_GL_ARB_framebuffer_object(GLADloadproc load) { + if(!GLAD_GL_ARB_framebuffer_object) return; + glad_glIsRenderbuffer = (PFNGLISRENDERBUFFERPROC)load("glIsRenderbuffer"); + glad_glBindRenderbuffer = (PFNGLBINDRENDERBUFFERPROC)load("glBindRenderbuffer"); + glad_glDeleteRenderbuffers = (PFNGLDELETERENDERBUFFERSPROC)load("glDeleteRenderbuffers"); + glad_glGenRenderbuffers = (PFNGLGENRENDERBUFFERSPROC)load("glGenRenderbuffers"); + glad_glRenderbufferStorage = (PFNGLRENDERBUFFERSTORAGEPROC)load("glRenderbufferStorage"); + glad_glGetRenderbufferParameteriv = (PFNGLGETRENDERBUFFERPARAMETERIVPROC)load("glGetRenderbufferParameteriv"); + glad_glIsFramebuffer = (PFNGLISFRAMEBUFFERPROC)load("glIsFramebuffer"); + glad_glBindFramebuffer = (PFNGLBINDFRAMEBUFFERPROC)load("glBindFramebuffer"); + glad_glDeleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSPROC)load("glDeleteFramebuffers"); + glad_glGenFramebuffers = (PFNGLGENFRAMEBUFFERSPROC)load("glGenFramebuffers"); + glad_glCheckFramebufferStatus = (PFNGLCHECKFRAMEBUFFERSTATUSPROC)load("glCheckFramebufferStatus"); + glad_glFramebufferTexture1D = (PFNGLFRAMEBUFFERTEXTURE1DPROC)load("glFramebufferTexture1D"); + glad_glFramebufferTexture2D = (PFNGLFRAMEBUFFERTEXTURE2DPROC)load("glFramebufferTexture2D"); + glad_glFramebufferTexture3D = (PFNGLFRAMEBUFFERTEXTURE3DPROC)load("glFramebufferTexture3D"); + glad_glFramebufferRenderbuffer = (PFNGLFRAMEBUFFERRENDERBUFFERPROC)load("glFramebufferRenderbuffer"); + glad_glGetFramebufferAttachmentParameteriv = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)load("glGetFramebufferAttachmentParameteriv"); + glad_glGenerateMipmap = (PFNGLGENERATEMIPMAPPROC)load("glGenerateMipmap"); + glad_glBlitFramebuffer = (PFNGLBLITFRAMEBUFFERPROC)load("glBlitFramebuffer"); + glad_glRenderbufferStorageMultisample = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)load("glRenderbufferStorageMultisample"); + glad_glFramebufferTextureLayer = (PFNGLFRAMEBUFFERTEXTURELAYERPROC)load("glFramebufferTextureLayer"); +} +static void load_GL_ARB_multisample(GLADloadproc load) { + if(!GLAD_GL_ARB_multisample) return; + glad_glSampleCoverageARB = (PFNGLSAMPLECOVERAGEARBPROC)load("glSampleCoverageARB"); +} +static void load_GL_ARB_sample_locations(GLADloadproc load) { + if(!GLAD_GL_ARB_sample_locations) return; + glad_glFramebufferSampleLocationsfvARB = (PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC)load("glFramebufferSampleLocationsfvARB"); + glad_glNamedFramebufferSampleLocationsfvARB = (PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVARBPROC)load("glNamedFramebufferSampleLocationsfvARB"); + glad_glEvaluateDepthValuesARB = (PFNGLEVALUATEDEPTHVALUESARBPROC)load("glEvaluateDepthValuesARB"); +} +static void load_GL_ARB_texture_compression(GLADloadproc load) { + if(!GLAD_GL_ARB_texture_compression) return; + glad_glCompressedTexImage3DARB = (PFNGLCOMPRESSEDTEXIMAGE3DARBPROC)load("glCompressedTexImage3DARB"); + glad_glCompressedTexImage2DARB = (PFNGLCOMPRESSEDTEXIMAGE2DARBPROC)load("glCompressedTexImage2DARB"); + glad_glCompressedTexImage1DARB = (PFNGLCOMPRESSEDTEXIMAGE1DARBPROC)load("glCompressedTexImage1DARB"); + glad_glCompressedTexSubImage3DARB = (PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC)load("glCompressedTexSubImage3DARB"); + glad_glCompressedTexSubImage2DARB = (PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC)load("glCompressedTexSubImage2DARB"); + glad_glCompressedTexSubImage1DARB = (PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC)load("glCompressedTexSubImage1DARB"); + glad_glGetCompressedTexImageARB = (PFNGLGETCOMPRESSEDTEXIMAGEARBPROC)load("glGetCompressedTexImageARB"); +} +static void load_GL_ARB_texture_multisample(GLADloadproc load) { + if(!GLAD_GL_ARB_texture_multisample) return; + glad_glTexImage2DMultisample = (PFNGLTEXIMAGE2DMULTISAMPLEPROC)load("glTexImage2DMultisample"); + glad_glTexImage3DMultisample = (PFNGLTEXIMAGE3DMULTISAMPLEPROC)load("glTexImage3DMultisample"); + glad_glGetMultisamplefv = (PFNGLGETMULTISAMPLEFVPROC)load("glGetMultisamplefv"); + glad_glSampleMaski = (PFNGLSAMPLEMASKIPROC)load("glSampleMaski"); +} +static void load_GL_ARB_uniform_buffer_object(GLADloadproc load) { + if(!GLAD_GL_ARB_uniform_buffer_object) return; + glad_glGetUniformIndices = (PFNGLGETUNIFORMINDICESPROC)load("glGetUniformIndices"); + glad_glGetActiveUniformsiv = (PFNGLGETACTIVEUNIFORMSIVPROC)load("glGetActiveUniformsiv"); + glad_glGetActiveUniformName = (PFNGLGETACTIVEUNIFORMNAMEPROC)load("glGetActiveUniformName"); + glad_glGetUniformBlockIndex = (PFNGLGETUNIFORMBLOCKINDEXPROC)load("glGetUniformBlockIndex"); + glad_glGetActiveUniformBlockiv = (PFNGLGETACTIVEUNIFORMBLOCKIVPROC)load("glGetActiveUniformBlockiv"); + glad_glGetActiveUniformBlockName = (PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC)load("glGetActiveUniformBlockName"); + glad_glUniformBlockBinding = (PFNGLUNIFORMBLOCKBINDINGPROC)load("glUniformBlockBinding"); + glad_glBindBufferRange = (PFNGLBINDBUFFERRANGEPROC)load("glBindBufferRange"); + glad_glBindBufferBase = (PFNGLBINDBUFFERBASEPROC)load("glBindBufferBase"); + glad_glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC)load("glGetIntegeri_v"); +} +static void load_GL_ARB_vertex_array_object(GLADloadproc load) { + if(!GLAD_GL_ARB_vertex_array_object) return; + glad_glBindVertexArray = (PFNGLBINDVERTEXARRAYPROC)load("glBindVertexArray"); + glad_glDeleteVertexArrays = (PFNGLDELETEVERTEXARRAYSPROC)load("glDeleteVertexArrays"); + glad_glGenVertexArrays = (PFNGLGENVERTEXARRAYSPROC)load("glGenVertexArrays"); + glad_glIsVertexArray = (PFNGLISVERTEXARRAYPROC)load("glIsVertexArray"); +} +static void load_GL_ARB_vertex_attrib_binding(GLADloadproc load) { + if(!GLAD_GL_ARB_vertex_attrib_binding) return; + glad_glBindVertexBuffer = (PFNGLBINDVERTEXBUFFERPROC)load("glBindVertexBuffer"); + glad_glVertexAttribFormat = (PFNGLVERTEXATTRIBFORMATPROC)load("glVertexAttribFormat"); + glad_glVertexAttribIFormat = (PFNGLVERTEXATTRIBIFORMATPROC)load("glVertexAttribIFormat"); + glad_glVertexAttribLFormat = (PFNGLVERTEXATTRIBLFORMATPROC)load("glVertexAttribLFormat"); + glad_glVertexAttribBinding = (PFNGLVERTEXATTRIBBINDINGPROC)load("glVertexAttribBinding"); + glad_glVertexBindingDivisor = (PFNGLVERTEXBINDINGDIVISORPROC)load("glVertexBindingDivisor"); +} +static void load_GL_ARB_vertex_buffer_object(GLADloadproc load) { + if(!GLAD_GL_ARB_vertex_buffer_object) return; + glad_glBindBufferARB = (PFNGLBINDBUFFERARBPROC)load("glBindBufferARB"); + glad_glDeleteBuffersARB = (PFNGLDELETEBUFFERSARBPROC)load("glDeleteBuffersARB"); + glad_glGenBuffersARB = (PFNGLGENBUFFERSARBPROC)load("glGenBuffersARB"); + glad_glIsBufferARB = (PFNGLISBUFFERARBPROC)load("glIsBufferARB"); + glad_glBufferDataARB = (PFNGLBUFFERDATAARBPROC)load("glBufferDataARB"); + glad_glBufferSubDataARB = (PFNGLBUFFERSUBDATAARBPROC)load("glBufferSubDataARB"); + glad_glGetBufferSubDataARB = (PFNGLGETBUFFERSUBDATAARBPROC)load("glGetBufferSubDataARB"); + glad_glMapBufferARB = (PFNGLMAPBUFFERARBPROC)load("glMapBufferARB"); + glad_glUnmapBufferARB = (PFNGLUNMAPBUFFERARBPROC)load("glUnmapBufferARB"); + glad_glGetBufferParameterivARB = (PFNGLGETBUFFERPARAMETERIVARBPROC)load("glGetBufferParameterivARB"); + glad_glGetBufferPointervARB = (PFNGLGETBUFFERPOINTERVARBPROC)load("glGetBufferPointervARB"); +} +static void load_GL_ARB_vertex_program(GLADloadproc load) { + if(!GLAD_GL_ARB_vertex_program) return; + glad_glVertexAttrib1dARB = (PFNGLVERTEXATTRIB1DARBPROC)load("glVertexAttrib1dARB"); + glad_glVertexAttrib1dvARB = (PFNGLVERTEXATTRIB1DVARBPROC)load("glVertexAttrib1dvARB"); + glad_glVertexAttrib1fARB = (PFNGLVERTEXATTRIB1FARBPROC)load("glVertexAttrib1fARB"); + glad_glVertexAttrib1fvARB = (PFNGLVERTEXATTRIB1FVARBPROC)load("glVertexAttrib1fvARB"); + glad_glVertexAttrib1sARB = (PFNGLVERTEXATTRIB1SARBPROC)load("glVertexAttrib1sARB"); + glad_glVertexAttrib1svARB = (PFNGLVERTEXATTRIB1SVARBPROC)load("glVertexAttrib1svARB"); + glad_glVertexAttrib2dARB = (PFNGLVERTEXATTRIB2DARBPROC)load("glVertexAttrib2dARB"); + glad_glVertexAttrib2dvARB = (PFNGLVERTEXATTRIB2DVARBPROC)load("glVertexAttrib2dvARB"); + glad_glVertexAttrib2fARB = (PFNGLVERTEXATTRIB2FARBPROC)load("glVertexAttrib2fARB"); + glad_glVertexAttrib2fvARB = (PFNGLVERTEXATTRIB2FVARBPROC)load("glVertexAttrib2fvARB"); + glad_glVertexAttrib2sARB = (PFNGLVERTEXATTRIB2SARBPROC)load("glVertexAttrib2sARB"); + glad_glVertexAttrib2svARB = (PFNGLVERTEXATTRIB2SVARBPROC)load("glVertexAttrib2svARB"); + glad_glVertexAttrib3dARB = (PFNGLVERTEXATTRIB3DARBPROC)load("glVertexAttrib3dARB"); + glad_glVertexAttrib3dvARB = (PFNGLVERTEXATTRIB3DVARBPROC)load("glVertexAttrib3dvARB"); + glad_glVertexAttrib3fARB = (PFNGLVERTEXATTRIB3FARBPROC)load("glVertexAttrib3fARB"); + glad_glVertexAttrib3fvARB = (PFNGLVERTEXATTRIB3FVARBPROC)load("glVertexAttrib3fvARB"); + glad_glVertexAttrib3sARB = (PFNGLVERTEXATTRIB3SARBPROC)load("glVertexAttrib3sARB"); + glad_glVertexAttrib3svARB = (PFNGLVERTEXATTRIB3SVARBPROC)load("glVertexAttrib3svARB"); + glad_glVertexAttrib4NbvARB = (PFNGLVERTEXATTRIB4NBVARBPROC)load("glVertexAttrib4NbvARB"); + glad_glVertexAttrib4NivARB = (PFNGLVERTEXATTRIB4NIVARBPROC)load("glVertexAttrib4NivARB"); + glad_glVertexAttrib4NsvARB = (PFNGLVERTEXATTRIB4NSVARBPROC)load("glVertexAttrib4NsvARB"); + glad_glVertexAttrib4NubARB = (PFNGLVERTEXATTRIB4NUBARBPROC)load("glVertexAttrib4NubARB"); + glad_glVertexAttrib4NubvARB = (PFNGLVERTEXATTRIB4NUBVARBPROC)load("glVertexAttrib4NubvARB"); + glad_glVertexAttrib4NuivARB = (PFNGLVERTEXATTRIB4NUIVARBPROC)load("glVertexAttrib4NuivARB"); + glad_glVertexAttrib4NusvARB = (PFNGLVERTEXATTRIB4NUSVARBPROC)load("glVertexAttrib4NusvARB"); + glad_glVertexAttrib4bvARB = (PFNGLVERTEXATTRIB4BVARBPROC)load("glVertexAttrib4bvARB"); + glad_glVertexAttrib4dARB = (PFNGLVERTEXATTRIB4DARBPROC)load("glVertexAttrib4dARB"); + glad_glVertexAttrib4dvARB = (PFNGLVERTEXATTRIB4DVARBPROC)load("glVertexAttrib4dvARB"); + glad_glVertexAttrib4fARB = (PFNGLVERTEXATTRIB4FARBPROC)load("glVertexAttrib4fARB"); + glad_glVertexAttrib4fvARB = (PFNGLVERTEXATTRIB4FVARBPROC)load("glVertexAttrib4fvARB"); + glad_glVertexAttrib4ivARB = (PFNGLVERTEXATTRIB4IVARBPROC)load("glVertexAttrib4ivARB"); + glad_glVertexAttrib4sARB = (PFNGLVERTEXATTRIB4SARBPROC)load("glVertexAttrib4sARB"); + glad_glVertexAttrib4svARB = (PFNGLVERTEXATTRIB4SVARBPROC)load("glVertexAttrib4svARB"); + glad_glVertexAttrib4ubvARB = (PFNGLVERTEXATTRIB4UBVARBPROC)load("glVertexAttrib4ubvARB"); + glad_glVertexAttrib4uivARB = (PFNGLVERTEXATTRIB4UIVARBPROC)load("glVertexAttrib4uivARB"); + glad_glVertexAttrib4usvARB = (PFNGLVERTEXATTRIB4USVARBPROC)load("glVertexAttrib4usvARB"); + glad_glVertexAttribPointerARB = (PFNGLVERTEXATTRIBPOINTERARBPROC)load("glVertexAttribPointerARB"); + glad_glEnableVertexAttribArrayARB = (PFNGLENABLEVERTEXATTRIBARRAYARBPROC)load("glEnableVertexAttribArrayARB"); + glad_glDisableVertexAttribArrayARB = (PFNGLDISABLEVERTEXATTRIBARRAYARBPROC)load("glDisableVertexAttribArrayARB"); + glad_glProgramStringARB = (PFNGLPROGRAMSTRINGARBPROC)load("glProgramStringARB"); + glad_glBindProgramARB = (PFNGLBINDPROGRAMARBPROC)load("glBindProgramARB"); + glad_glDeleteProgramsARB = (PFNGLDELETEPROGRAMSARBPROC)load("glDeleteProgramsARB"); + glad_glGenProgramsARB = (PFNGLGENPROGRAMSARBPROC)load("glGenProgramsARB"); + glad_glProgramEnvParameter4dARB = (PFNGLPROGRAMENVPARAMETER4DARBPROC)load("glProgramEnvParameter4dARB"); + glad_glProgramEnvParameter4dvARB = (PFNGLPROGRAMENVPARAMETER4DVARBPROC)load("glProgramEnvParameter4dvARB"); + glad_glProgramEnvParameter4fARB = (PFNGLPROGRAMENVPARAMETER4FARBPROC)load("glProgramEnvParameter4fARB"); + glad_glProgramEnvParameter4fvARB = (PFNGLPROGRAMENVPARAMETER4FVARBPROC)load("glProgramEnvParameter4fvARB"); + glad_glProgramLocalParameter4dARB = (PFNGLPROGRAMLOCALPARAMETER4DARBPROC)load("glProgramLocalParameter4dARB"); + glad_glProgramLocalParameter4dvARB = (PFNGLPROGRAMLOCALPARAMETER4DVARBPROC)load("glProgramLocalParameter4dvARB"); + glad_glProgramLocalParameter4fARB = (PFNGLPROGRAMLOCALPARAMETER4FARBPROC)load("glProgramLocalParameter4fARB"); + glad_glProgramLocalParameter4fvARB = (PFNGLPROGRAMLOCALPARAMETER4FVARBPROC)load("glProgramLocalParameter4fvARB"); + glad_glGetProgramEnvParameterdvARB = (PFNGLGETPROGRAMENVPARAMETERDVARBPROC)load("glGetProgramEnvParameterdvARB"); + glad_glGetProgramEnvParameterfvARB = (PFNGLGETPROGRAMENVPARAMETERFVARBPROC)load("glGetProgramEnvParameterfvARB"); + glad_glGetProgramLocalParameterdvARB = (PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC)load("glGetProgramLocalParameterdvARB"); + glad_glGetProgramLocalParameterfvARB = (PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC)load("glGetProgramLocalParameterfvARB"); + glad_glGetProgramivARB = (PFNGLGETPROGRAMIVARBPROC)load("glGetProgramivARB"); + glad_glGetProgramStringARB = (PFNGLGETPROGRAMSTRINGARBPROC)load("glGetProgramStringARB"); + glad_glGetVertexAttribdvARB = (PFNGLGETVERTEXATTRIBDVARBPROC)load("glGetVertexAttribdvARB"); + glad_glGetVertexAttribfvARB = (PFNGLGETVERTEXATTRIBFVARBPROC)load("glGetVertexAttribfvARB"); + glad_glGetVertexAttribivARB = (PFNGLGETVERTEXATTRIBIVARBPROC)load("glGetVertexAttribivARB"); + glad_glGetVertexAttribPointervARB = (PFNGLGETVERTEXATTRIBPOINTERVARBPROC)load("glGetVertexAttribPointervARB"); + glad_glIsProgramARB = (PFNGLISPROGRAMARBPROC)load("glIsProgramARB"); +} +static void load_GL_ARB_vertex_shader(GLADloadproc load) { + if(!GLAD_GL_ARB_vertex_shader) return; + glad_glVertexAttrib1fARB = (PFNGLVERTEXATTRIB1FARBPROC)load("glVertexAttrib1fARB"); + glad_glVertexAttrib1sARB = (PFNGLVERTEXATTRIB1SARBPROC)load("glVertexAttrib1sARB"); + glad_glVertexAttrib1dARB = (PFNGLVERTEXATTRIB1DARBPROC)load("glVertexAttrib1dARB"); + glad_glVertexAttrib2fARB = (PFNGLVERTEXATTRIB2FARBPROC)load("glVertexAttrib2fARB"); + glad_glVertexAttrib2sARB = (PFNGLVERTEXATTRIB2SARBPROC)load("glVertexAttrib2sARB"); + glad_glVertexAttrib2dARB = (PFNGLVERTEXATTRIB2DARBPROC)load("glVertexAttrib2dARB"); + glad_glVertexAttrib3fARB = (PFNGLVERTEXATTRIB3FARBPROC)load("glVertexAttrib3fARB"); + glad_glVertexAttrib3sARB = (PFNGLVERTEXATTRIB3SARBPROC)load("glVertexAttrib3sARB"); + glad_glVertexAttrib3dARB = (PFNGLVERTEXATTRIB3DARBPROC)load("glVertexAttrib3dARB"); + glad_glVertexAttrib4fARB = (PFNGLVERTEXATTRIB4FARBPROC)load("glVertexAttrib4fARB"); + glad_glVertexAttrib4sARB = (PFNGLVERTEXATTRIB4SARBPROC)load("glVertexAttrib4sARB"); + glad_glVertexAttrib4dARB = (PFNGLVERTEXATTRIB4DARBPROC)load("glVertexAttrib4dARB"); + glad_glVertexAttrib4NubARB = (PFNGLVERTEXATTRIB4NUBARBPROC)load("glVertexAttrib4NubARB"); + glad_glVertexAttrib1fvARB = (PFNGLVERTEXATTRIB1FVARBPROC)load("glVertexAttrib1fvARB"); + glad_glVertexAttrib1svARB = (PFNGLVERTEXATTRIB1SVARBPROC)load("glVertexAttrib1svARB"); + glad_glVertexAttrib1dvARB = (PFNGLVERTEXATTRIB1DVARBPROC)load("glVertexAttrib1dvARB"); + glad_glVertexAttrib2fvARB = (PFNGLVERTEXATTRIB2FVARBPROC)load("glVertexAttrib2fvARB"); + glad_glVertexAttrib2svARB = (PFNGLVERTEXATTRIB2SVARBPROC)load("glVertexAttrib2svARB"); + glad_glVertexAttrib2dvARB = (PFNGLVERTEXATTRIB2DVARBPROC)load("glVertexAttrib2dvARB"); + glad_glVertexAttrib3fvARB = (PFNGLVERTEXATTRIB3FVARBPROC)load("glVertexAttrib3fvARB"); + glad_glVertexAttrib3svARB = (PFNGLVERTEXATTRIB3SVARBPROC)load("glVertexAttrib3svARB"); + glad_glVertexAttrib3dvARB = (PFNGLVERTEXATTRIB3DVARBPROC)load("glVertexAttrib3dvARB"); + glad_glVertexAttrib4fvARB = (PFNGLVERTEXATTRIB4FVARBPROC)load("glVertexAttrib4fvARB"); + glad_glVertexAttrib4svARB = (PFNGLVERTEXATTRIB4SVARBPROC)load("glVertexAttrib4svARB"); + glad_glVertexAttrib4dvARB = (PFNGLVERTEXATTRIB4DVARBPROC)load("glVertexAttrib4dvARB"); + glad_glVertexAttrib4ivARB = (PFNGLVERTEXATTRIB4IVARBPROC)load("glVertexAttrib4ivARB"); + glad_glVertexAttrib4bvARB = (PFNGLVERTEXATTRIB4BVARBPROC)load("glVertexAttrib4bvARB"); + glad_glVertexAttrib4ubvARB = (PFNGLVERTEXATTRIB4UBVARBPROC)load("glVertexAttrib4ubvARB"); + glad_glVertexAttrib4usvARB = (PFNGLVERTEXATTRIB4USVARBPROC)load("glVertexAttrib4usvARB"); + glad_glVertexAttrib4uivARB = (PFNGLVERTEXATTRIB4UIVARBPROC)load("glVertexAttrib4uivARB"); + glad_glVertexAttrib4NbvARB = (PFNGLVERTEXATTRIB4NBVARBPROC)load("glVertexAttrib4NbvARB"); + glad_glVertexAttrib4NsvARB = (PFNGLVERTEXATTRIB4NSVARBPROC)load("glVertexAttrib4NsvARB"); + glad_glVertexAttrib4NivARB = (PFNGLVERTEXATTRIB4NIVARBPROC)load("glVertexAttrib4NivARB"); + glad_glVertexAttrib4NubvARB = (PFNGLVERTEXATTRIB4NUBVARBPROC)load("glVertexAttrib4NubvARB"); + glad_glVertexAttrib4NusvARB = (PFNGLVERTEXATTRIB4NUSVARBPROC)load("glVertexAttrib4NusvARB"); + glad_glVertexAttrib4NuivARB = (PFNGLVERTEXATTRIB4NUIVARBPROC)load("glVertexAttrib4NuivARB"); + glad_glVertexAttribPointerARB = (PFNGLVERTEXATTRIBPOINTERARBPROC)load("glVertexAttribPointerARB"); + glad_glEnableVertexAttribArrayARB = (PFNGLENABLEVERTEXATTRIBARRAYARBPROC)load("glEnableVertexAttribArrayARB"); + glad_glDisableVertexAttribArrayARB = (PFNGLDISABLEVERTEXATTRIBARRAYARBPROC)load("glDisableVertexAttribArrayARB"); + glad_glBindAttribLocationARB = (PFNGLBINDATTRIBLOCATIONARBPROC)load("glBindAttribLocationARB"); + glad_glGetActiveAttribARB = (PFNGLGETACTIVEATTRIBARBPROC)load("glGetActiveAttribARB"); + glad_glGetAttribLocationARB = (PFNGLGETATTRIBLOCATIONARBPROC)load("glGetAttribLocationARB"); + glad_glGetVertexAttribdvARB = (PFNGLGETVERTEXATTRIBDVARBPROC)load("glGetVertexAttribdvARB"); + glad_glGetVertexAttribfvARB = (PFNGLGETVERTEXATTRIBFVARBPROC)load("glGetVertexAttribfvARB"); + glad_glGetVertexAttribivARB = (PFNGLGETVERTEXATTRIBIVARBPROC)load("glGetVertexAttribivARB"); + glad_glGetVertexAttribPointervARB = (PFNGLGETVERTEXATTRIBPOINTERVARBPROC)load("glGetVertexAttribPointervARB"); +} +static void load_GL_ATI_element_array(GLADloadproc load) { + if(!GLAD_GL_ATI_element_array) return; + glad_glElementPointerATI = (PFNGLELEMENTPOINTERATIPROC)load("glElementPointerATI"); + glad_glDrawElementArrayATI = (PFNGLDRAWELEMENTARRAYATIPROC)load("glDrawElementArrayATI"); + glad_glDrawRangeElementArrayATI = (PFNGLDRAWRANGEELEMENTARRAYATIPROC)load("glDrawRangeElementArrayATI"); +} +static void load_GL_ATI_fragment_shader(GLADloadproc load) { + if(!GLAD_GL_ATI_fragment_shader) return; + glad_glGenFragmentShadersATI = (PFNGLGENFRAGMENTSHADERSATIPROC)load("glGenFragmentShadersATI"); + glad_glBindFragmentShaderATI = (PFNGLBINDFRAGMENTSHADERATIPROC)load("glBindFragmentShaderATI"); + glad_glDeleteFragmentShaderATI = (PFNGLDELETEFRAGMENTSHADERATIPROC)load("glDeleteFragmentShaderATI"); + glad_glBeginFragmentShaderATI = (PFNGLBEGINFRAGMENTSHADERATIPROC)load("glBeginFragmentShaderATI"); + glad_glEndFragmentShaderATI = (PFNGLENDFRAGMENTSHADERATIPROC)load("glEndFragmentShaderATI"); + glad_glPassTexCoordATI = (PFNGLPASSTEXCOORDATIPROC)load("glPassTexCoordATI"); + glad_glSampleMapATI = (PFNGLSAMPLEMAPATIPROC)load("glSampleMapATI"); + glad_glColorFragmentOp1ATI = (PFNGLCOLORFRAGMENTOP1ATIPROC)load("glColorFragmentOp1ATI"); + glad_glColorFragmentOp2ATI = (PFNGLCOLORFRAGMENTOP2ATIPROC)load("glColorFragmentOp2ATI"); + glad_glColorFragmentOp3ATI = (PFNGLCOLORFRAGMENTOP3ATIPROC)load("glColorFragmentOp3ATI"); + glad_glAlphaFragmentOp1ATI = (PFNGLALPHAFRAGMENTOP1ATIPROC)load("glAlphaFragmentOp1ATI"); + glad_glAlphaFragmentOp2ATI = (PFNGLALPHAFRAGMENTOP2ATIPROC)load("glAlphaFragmentOp2ATI"); + glad_glAlphaFragmentOp3ATI = (PFNGLALPHAFRAGMENTOP3ATIPROC)load("glAlphaFragmentOp3ATI"); + glad_glSetFragmentShaderConstantATI = (PFNGLSETFRAGMENTSHADERCONSTANTATIPROC)load("glSetFragmentShaderConstantATI"); +} +static void load_GL_ATI_vertex_array_object(GLADloadproc load) { + if(!GLAD_GL_ATI_vertex_array_object) return; + glad_glNewObjectBufferATI = (PFNGLNEWOBJECTBUFFERATIPROC)load("glNewObjectBufferATI"); + glad_glIsObjectBufferATI = (PFNGLISOBJECTBUFFERATIPROC)load("glIsObjectBufferATI"); + glad_glUpdateObjectBufferATI = (PFNGLUPDATEOBJECTBUFFERATIPROC)load("glUpdateObjectBufferATI"); + glad_glGetObjectBufferfvATI = (PFNGLGETOBJECTBUFFERFVATIPROC)load("glGetObjectBufferfvATI"); + glad_glGetObjectBufferivATI = (PFNGLGETOBJECTBUFFERIVATIPROC)load("glGetObjectBufferivATI"); + glad_glFreeObjectBufferATI = (PFNGLFREEOBJECTBUFFERATIPROC)load("glFreeObjectBufferATI"); + glad_glArrayObjectATI = (PFNGLARRAYOBJECTATIPROC)load("glArrayObjectATI"); + glad_glGetArrayObjectfvATI = (PFNGLGETARRAYOBJECTFVATIPROC)load("glGetArrayObjectfvATI"); + glad_glGetArrayObjectivATI = (PFNGLGETARRAYOBJECTIVATIPROC)load("glGetArrayObjectivATI"); + glad_glVariantArrayObjectATI = (PFNGLVARIANTARRAYOBJECTATIPROC)load("glVariantArrayObjectATI"); + glad_glGetVariantArrayObjectfvATI = (PFNGLGETVARIANTARRAYOBJECTFVATIPROC)load("glGetVariantArrayObjectfvATI"); + glad_glGetVariantArrayObjectivATI = (PFNGLGETVARIANTARRAYOBJECTIVATIPROC)load("glGetVariantArrayObjectivATI"); +} +static void load_GL_EXT_blend_color(GLADloadproc load) { + if(!GLAD_GL_EXT_blend_color) return; + glad_glBlendColorEXT = (PFNGLBLENDCOLOREXTPROC)load("glBlendColorEXT"); +} +static void load_GL_EXT_blend_equation_separate(GLADloadproc load) { + if(!GLAD_GL_EXT_blend_equation_separate) return; + glad_glBlendEquationSeparateEXT = (PFNGLBLENDEQUATIONSEPARATEEXTPROC)load("glBlendEquationSeparateEXT"); +} +static void load_GL_EXT_blend_func_separate(GLADloadproc load) { + if(!GLAD_GL_EXT_blend_func_separate) return; + glad_glBlendFuncSeparateEXT = (PFNGLBLENDFUNCSEPARATEEXTPROC)load("glBlendFuncSeparateEXT"); +} +static void load_GL_EXT_debug_marker(GLADloadproc load) { + if(!GLAD_GL_EXT_debug_marker) return; + glad_glInsertEventMarkerEXT = (PFNGLINSERTEVENTMARKEREXTPROC)load("glInsertEventMarkerEXT"); + glad_glPushGroupMarkerEXT = (PFNGLPUSHGROUPMARKEREXTPROC)load("glPushGroupMarkerEXT"); + glad_glPopGroupMarkerEXT = (PFNGLPOPGROUPMARKEREXTPROC)load("glPopGroupMarkerEXT"); +} +static void load_GL_EXT_framebuffer_blit(GLADloadproc load) { + if(!GLAD_GL_EXT_framebuffer_blit) return; + glad_glBlitFramebufferEXT = (PFNGLBLITFRAMEBUFFEREXTPROC)load("glBlitFramebufferEXT"); +} +static void load_GL_EXT_framebuffer_multisample(GLADloadproc load) { + if(!GLAD_GL_EXT_framebuffer_multisample) return; + glad_glRenderbufferStorageMultisampleEXT = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC)load("glRenderbufferStorageMultisampleEXT"); +} +static void load_GL_EXT_framebuffer_object(GLADloadproc load) { + if(!GLAD_GL_EXT_framebuffer_object) return; + glad_glIsRenderbufferEXT = (PFNGLISRENDERBUFFEREXTPROC)load("glIsRenderbufferEXT"); + glad_glBindRenderbufferEXT = (PFNGLBINDRENDERBUFFEREXTPROC)load("glBindRenderbufferEXT"); + glad_glDeleteRenderbuffersEXT = (PFNGLDELETERENDERBUFFERSEXTPROC)load("glDeleteRenderbuffersEXT"); + glad_glGenRenderbuffersEXT = (PFNGLGENRENDERBUFFERSEXTPROC)load("glGenRenderbuffersEXT"); + glad_glRenderbufferStorageEXT = (PFNGLRENDERBUFFERSTORAGEEXTPROC)load("glRenderbufferStorageEXT"); + glad_glGetRenderbufferParameterivEXT = (PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC)load("glGetRenderbufferParameterivEXT"); + glad_glIsFramebufferEXT = (PFNGLISFRAMEBUFFEREXTPROC)load("glIsFramebufferEXT"); + glad_glBindFramebufferEXT = (PFNGLBINDFRAMEBUFFEREXTPROC)load("glBindFramebufferEXT"); + glad_glDeleteFramebuffersEXT = (PFNGLDELETEFRAMEBUFFERSEXTPROC)load("glDeleteFramebuffersEXT"); + glad_glGenFramebuffersEXT = (PFNGLGENFRAMEBUFFERSEXTPROC)load("glGenFramebuffersEXT"); + glad_glCheckFramebufferStatusEXT = (PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC)load("glCheckFramebufferStatusEXT"); + glad_glFramebufferTexture1DEXT = (PFNGLFRAMEBUFFERTEXTURE1DEXTPROC)load("glFramebufferTexture1DEXT"); + glad_glFramebufferTexture2DEXT = (PFNGLFRAMEBUFFERTEXTURE2DEXTPROC)load("glFramebufferTexture2DEXT"); + glad_glFramebufferTexture3DEXT = (PFNGLFRAMEBUFFERTEXTURE3DEXTPROC)load("glFramebufferTexture3DEXT"); + glad_glFramebufferRenderbufferEXT = (PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC)load("glFramebufferRenderbufferEXT"); + glad_glGetFramebufferAttachmentParameterivEXT = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC)load("glGetFramebufferAttachmentParameterivEXT"); + glad_glGenerateMipmapEXT = (PFNGLGENERATEMIPMAPEXTPROC)load("glGenerateMipmapEXT"); +} +static void load_GL_EXT_vertex_array(GLADloadproc load) { + if(!GLAD_GL_EXT_vertex_array) return; + glad_glArrayElementEXT = (PFNGLARRAYELEMENTEXTPROC)load("glArrayElementEXT"); + glad_glColorPointerEXT = (PFNGLCOLORPOINTEREXTPROC)load("glColorPointerEXT"); + glad_glDrawArraysEXT = (PFNGLDRAWARRAYSEXTPROC)load("glDrawArraysEXT"); + glad_glEdgeFlagPointerEXT = (PFNGLEDGEFLAGPOINTEREXTPROC)load("glEdgeFlagPointerEXT"); + glad_glGetPointervEXT = (PFNGLGETPOINTERVEXTPROC)load("glGetPointervEXT"); + glad_glIndexPointerEXT = (PFNGLINDEXPOINTEREXTPROC)load("glIndexPointerEXT"); + glad_glNormalPointerEXT = (PFNGLNORMALPOINTEREXTPROC)load("glNormalPointerEXT"); + glad_glTexCoordPointerEXT = (PFNGLTEXCOORDPOINTEREXTPROC)load("glTexCoordPointerEXT"); + glad_glVertexPointerEXT = (PFNGLVERTEXPOINTEREXTPROC)load("glVertexPointerEXT"); +} +static void load_GL_EXT_vertex_shader(GLADloadproc load) { + if(!GLAD_GL_EXT_vertex_shader) return; + glad_glBeginVertexShaderEXT = (PFNGLBEGINVERTEXSHADEREXTPROC)load("glBeginVertexShaderEXT"); + glad_glEndVertexShaderEXT = (PFNGLENDVERTEXSHADEREXTPROC)load("glEndVertexShaderEXT"); + glad_glBindVertexShaderEXT = (PFNGLBINDVERTEXSHADEREXTPROC)load("glBindVertexShaderEXT"); + glad_glGenVertexShadersEXT = (PFNGLGENVERTEXSHADERSEXTPROC)load("glGenVertexShadersEXT"); + glad_glDeleteVertexShaderEXT = (PFNGLDELETEVERTEXSHADEREXTPROC)load("glDeleteVertexShaderEXT"); + glad_glShaderOp1EXT = (PFNGLSHADEROP1EXTPROC)load("glShaderOp1EXT"); + glad_glShaderOp2EXT = (PFNGLSHADEROP2EXTPROC)load("glShaderOp2EXT"); + glad_glShaderOp3EXT = (PFNGLSHADEROP3EXTPROC)load("glShaderOp3EXT"); + glad_glSwizzleEXT = (PFNGLSWIZZLEEXTPROC)load("glSwizzleEXT"); + glad_glWriteMaskEXT = (PFNGLWRITEMASKEXTPROC)load("glWriteMaskEXT"); + glad_glInsertComponentEXT = (PFNGLINSERTCOMPONENTEXTPROC)load("glInsertComponentEXT"); + glad_glExtractComponentEXT = (PFNGLEXTRACTCOMPONENTEXTPROC)load("glExtractComponentEXT"); + glad_glGenSymbolsEXT = (PFNGLGENSYMBOLSEXTPROC)load("glGenSymbolsEXT"); + glad_glSetInvariantEXT = (PFNGLSETINVARIANTEXTPROC)load("glSetInvariantEXT"); + glad_glSetLocalConstantEXT = (PFNGLSETLOCALCONSTANTEXTPROC)load("glSetLocalConstantEXT"); + glad_glVariantbvEXT = (PFNGLVARIANTBVEXTPROC)load("glVariantbvEXT"); + glad_glVariantsvEXT = (PFNGLVARIANTSVEXTPROC)load("glVariantsvEXT"); + glad_glVariantivEXT = (PFNGLVARIANTIVEXTPROC)load("glVariantivEXT"); + glad_glVariantfvEXT = (PFNGLVARIANTFVEXTPROC)load("glVariantfvEXT"); + glad_glVariantdvEXT = (PFNGLVARIANTDVEXTPROC)load("glVariantdvEXT"); + glad_glVariantubvEXT = (PFNGLVARIANTUBVEXTPROC)load("glVariantubvEXT"); + glad_glVariantusvEXT = (PFNGLVARIANTUSVEXTPROC)load("glVariantusvEXT"); + glad_glVariantuivEXT = (PFNGLVARIANTUIVEXTPROC)load("glVariantuivEXT"); + glad_glVariantPointerEXT = (PFNGLVARIANTPOINTEREXTPROC)load("glVariantPointerEXT"); + glad_glEnableVariantClientStateEXT = (PFNGLENABLEVARIANTCLIENTSTATEEXTPROC)load("glEnableVariantClientStateEXT"); + glad_glDisableVariantClientStateEXT = (PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC)load("glDisableVariantClientStateEXT"); + glad_glBindLightParameterEXT = (PFNGLBINDLIGHTPARAMETEREXTPROC)load("glBindLightParameterEXT"); + glad_glBindMaterialParameterEXT = (PFNGLBINDMATERIALPARAMETEREXTPROC)load("glBindMaterialParameterEXT"); + glad_glBindTexGenParameterEXT = (PFNGLBINDTEXGENPARAMETEREXTPROC)load("glBindTexGenParameterEXT"); + glad_glBindTextureUnitParameterEXT = (PFNGLBINDTEXTUREUNITPARAMETEREXTPROC)load("glBindTextureUnitParameterEXT"); + glad_glBindParameterEXT = (PFNGLBINDPARAMETEREXTPROC)load("glBindParameterEXT"); + glad_glIsVariantEnabledEXT = (PFNGLISVARIANTENABLEDEXTPROC)load("glIsVariantEnabledEXT"); + glad_glGetVariantBooleanvEXT = (PFNGLGETVARIANTBOOLEANVEXTPROC)load("glGetVariantBooleanvEXT"); + glad_glGetVariantIntegervEXT = (PFNGLGETVARIANTINTEGERVEXTPROC)load("glGetVariantIntegervEXT"); + glad_glGetVariantFloatvEXT = (PFNGLGETVARIANTFLOATVEXTPROC)load("glGetVariantFloatvEXT"); + glad_glGetVariantPointervEXT = (PFNGLGETVARIANTPOINTERVEXTPROC)load("glGetVariantPointervEXT"); + glad_glGetInvariantBooleanvEXT = (PFNGLGETINVARIANTBOOLEANVEXTPROC)load("glGetInvariantBooleanvEXT"); + glad_glGetInvariantIntegervEXT = (PFNGLGETINVARIANTINTEGERVEXTPROC)load("glGetInvariantIntegervEXT"); + glad_glGetInvariantFloatvEXT = (PFNGLGETINVARIANTFLOATVEXTPROC)load("glGetInvariantFloatvEXT"); + glad_glGetLocalConstantBooleanvEXT = (PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC)load("glGetLocalConstantBooleanvEXT"); + glad_glGetLocalConstantIntegervEXT = (PFNGLGETLOCALCONSTANTINTEGERVEXTPROC)load("glGetLocalConstantIntegervEXT"); + glad_glGetLocalConstantFloatvEXT = (PFNGLGETLOCALCONSTANTFLOATVEXTPROC)load("glGetLocalConstantFloatvEXT"); +} +static int find_extensionsGL(void) { + if (!get_exts()) return 0; + GLAD_GL_AMD_debug_output = has_ext("GL_AMD_debug_output"); + GLAD_GL_AMD_query_buffer_object = has_ext("GL_AMD_query_buffer_object"); + GLAD_GL_ARB_ES2_compatibility = has_ext("GL_ARB_ES2_compatibility"); + GLAD_GL_ARB_ES3_compatibility = has_ext("GL_ARB_ES3_compatibility"); + GLAD_GL_ARB_buffer_storage = has_ext("GL_ARB_buffer_storage"); + GLAD_GL_ARB_compatibility = has_ext("GL_ARB_compatibility"); + GLAD_GL_ARB_compressed_texture_pixel_storage = has_ext("GL_ARB_compressed_texture_pixel_storage"); + GLAD_GL_ARB_debug_output = has_ext("GL_ARB_debug_output"); + GLAD_GL_ARB_depth_buffer_float = has_ext("GL_ARB_depth_buffer_float"); + GLAD_GL_ARB_depth_clamp = has_ext("GL_ARB_depth_clamp"); + GLAD_GL_ARB_depth_texture = has_ext("GL_ARB_depth_texture"); + GLAD_GL_ARB_draw_buffers = has_ext("GL_ARB_draw_buffers"); + GLAD_GL_ARB_draw_buffers_blend = has_ext("GL_ARB_draw_buffers_blend"); + GLAD_GL_ARB_explicit_attrib_location = has_ext("GL_ARB_explicit_attrib_location"); + GLAD_GL_ARB_explicit_uniform_location = has_ext("GL_ARB_explicit_uniform_location"); + GLAD_GL_ARB_fragment_program = has_ext("GL_ARB_fragment_program"); + GLAD_GL_ARB_fragment_shader = has_ext("GL_ARB_fragment_shader"); + GLAD_GL_ARB_framebuffer_object = has_ext("GL_ARB_framebuffer_object"); + GLAD_GL_ARB_framebuffer_sRGB = has_ext("GL_ARB_framebuffer_sRGB"); + GLAD_GL_ARB_multisample = has_ext("GL_ARB_multisample"); + GLAD_GL_ARB_sample_locations = has_ext("GL_ARB_sample_locations"); + GLAD_GL_ARB_texture_compression = has_ext("GL_ARB_texture_compression"); + GLAD_GL_ARB_texture_float = has_ext("GL_ARB_texture_float"); + GLAD_GL_ARB_texture_multisample = has_ext("GL_ARB_texture_multisample"); + GLAD_GL_ARB_texture_non_power_of_two = has_ext("GL_ARB_texture_non_power_of_two"); + GLAD_GL_ARB_texture_rg = has_ext("GL_ARB_texture_rg"); + GLAD_GL_ARB_texture_swizzle = has_ext("GL_ARB_texture_swizzle"); + GLAD_GL_ARB_uniform_buffer_object = has_ext("GL_ARB_uniform_buffer_object"); + GLAD_GL_ARB_vertex_array_object = has_ext("GL_ARB_vertex_array_object"); + GLAD_GL_ARB_vertex_attrib_binding = has_ext("GL_ARB_vertex_attrib_binding"); + GLAD_GL_ARB_vertex_buffer_object = has_ext("GL_ARB_vertex_buffer_object"); + GLAD_GL_ARB_vertex_program = has_ext("GL_ARB_vertex_program"); + GLAD_GL_ARB_vertex_shader = has_ext("GL_ARB_vertex_shader"); + GLAD_GL_ATI_element_array = has_ext("GL_ATI_element_array"); + GLAD_GL_ATI_fragment_shader = has_ext("GL_ATI_fragment_shader"); + GLAD_GL_ATI_vertex_array_object = has_ext("GL_ATI_vertex_array_object"); + GLAD_GL_EXT_blend_color = has_ext("GL_EXT_blend_color"); + GLAD_GL_EXT_blend_equation_separate = has_ext("GL_EXT_blend_equation_separate"); + GLAD_GL_EXT_blend_func_separate = has_ext("GL_EXT_blend_func_separate"); + GLAD_GL_EXT_debug_marker = has_ext("GL_EXT_debug_marker"); + GLAD_GL_EXT_framebuffer_blit = has_ext("GL_EXT_framebuffer_blit"); + GLAD_GL_EXT_framebuffer_multisample = has_ext("GL_EXT_framebuffer_multisample"); + GLAD_GL_EXT_framebuffer_multisample_blit_scaled = has_ext("GL_EXT_framebuffer_multisample_blit_scaled"); + GLAD_GL_EXT_framebuffer_object = has_ext("GL_EXT_framebuffer_object"); + GLAD_GL_EXT_framebuffer_sRGB = has_ext("GL_EXT_framebuffer_sRGB"); + GLAD_GL_EXT_index_array_formats = has_ext("GL_EXT_index_array_formats"); + GLAD_GL_EXT_texture = has_ext("GL_EXT_texture"); + GLAD_GL_EXT_texture_compression_s3tc = has_ext("GL_EXT_texture_compression_s3tc"); + GLAD_GL_EXT_texture_sRGB = has_ext("GL_EXT_texture_sRGB"); + GLAD_GL_EXT_texture_swizzle = has_ext("GL_EXT_texture_swizzle"); + GLAD_GL_EXT_vertex_array = has_ext("GL_EXT_vertex_array"); + GLAD_GL_EXT_vertex_shader = has_ext("GL_EXT_vertex_shader"); + free_exts(); + return 1; +} + +static void find_coreGL(void) { + + /* Thank you @elmindreda + * https://github.com/elmindreda/greg/blob/master/templates/greg.c.in#L176 + * https://github.com/glfw/glfw/blob/master/src/context.c#L36 + */ + int i, major, minor; + + const char* version; + const char* prefixes[] = { + "OpenGL ES-CM ", + "OpenGL ES-CL ", + "OpenGL ES ", + NULL + }; + + version = (const char*) glGetString(GL_VERSION); + if (!version) return; + + for (i = 0; prefixes[i]; i++) { + const size_t length = strlen(prefixes[i]); + if (strncmp(version, prefixes[i], length) == 0) { + version += length; + break; + } + } + +/* PR #18 */ +#ifdef _MSC_VER + sscanf_s(version, "%d.%d", &major, &minor); +#else + sscanf(version, "%d.%d", &major, &minor); +#endif + + GLVersion.major = major; GLVersion.minor = minor; + max_loaded_major = major; max_loaded_minor = minor; + GLAD_GL_VERSION_1_0 = (major == 1 && minor >= 0) || major > 1; + GLAD_GL_VERSION_1_1 = (major == 1 && minor >= 1) || major > 1; + GLAD_GL_VERSION_1_2 = (major == 1 && minor >= 2) || major > 1; + GLAD_GL_VERSION_1_3 = (major == 1 && minor >= 3) || major > 1; + GLAD_GL_VERSION_1_4 = (major == 1 && minor >= 4) || major > 1; + GLAD_GL_VERSION_1_5 = (major == 1 && minor >= 5) || major > 1; + GLAD_GL_VERSION_2_0 = (major == 2 && minor >= 0) || major > 2; + GLAD_GL_VERSION_2_1 = (major == 2 && minor >= 1) || major > 2; + GLAD_GL_VERSION_3_0 = (major == 3 && minor >= 0) || major > 3; + GLAD_GL_VERSION_3_1 = (major == 3 && minor >= 1) || major > 3; + GLAD_GL_VERSION_3_2 = (major == 3 && minor >= 2) || major > 3; + GLAD_GL_VERSION_3_3 = (major == 3 && minor >= 3) || major > 3; + if (GLVersion.major > 3 || (GLVersion.major >= 3 && GLVersion.minor >= 3)) { + max_loaded_major = 3; + max_loaded_minor = 3; + } +} + +int gladLoadGLLoader(GLADloadproc load) { + GLVersion.major = 0; GLVersion.minor = 0; + glGetString = (PFNGLGETSTRINGPROC)load("glGetString"); + if(glGetString == NULL) return 0; + if(glGetString(GL_VERSION) == NULL) return 0; + find_coreGL(); + load_GL_VERSION_1_0(load); + load_GL_VERSION_1_1(load); + load_GL_VERSION_1_2(load); + load_GL_VERSION_1_3(load); + load_GL_VERSION_1_4(load); + load_GL_VERSION_1_5(load); + load_GL_VERSION_2_0(load); + load_GL_VERSION_2_1(load); + load_GL_VERSION_3_0(load); + load_GL_VERSION_3_1(load); + load_GL_VERSION_3_2(load); + load_GL_VERSION_3_3(load); + + if (!find_extensionsGL()) return 0; + load_GL_AMD_debug_output(load); + load_GL_ARB_ES2_compatibility(load); + load_GL_ARB_buffer_storage(load); + load_GL_ARB_debug_output(load); + load_GL_ARB_draw_buffers(load); + load_GL_ARB_draw_buffers_blend(load); + load_GL_ARB_fragment_program(load); + load_GL_ARB_framebuffer_object(load); + load_GL_ARB_multisample(load); + load_GL_ARB_sample_locations(load); + load_GL_ARB_texture_compression(load); + load_GL_ARB_texture_multisample(load); + load_GL_ARB_uniform_buffer_object(load); + load_GL_ARB_vertex_array_object(load); + load_GL_ARB_vertex_attrib_binding(load); + load_GL_ARB_vertex_buffer_object(load); + load_GL_ARB_vertex_program(load); + load_GL_ARB_vertex_shader(load); + load_GL_ATI_element_array(load); + load_GL_ATI_fragment_shader(load); + load_GL_ATI_vertex_array_object(load); + load_GL_EXT_blend_color(load); + load_GL_EXT_blend_equation_separate(load); + load_GL_EXT_blend_func_separate(load); + load_GL_EXT_debug_marker(load); + load_GL_EXT_framebuffer_blit(load); + load_GL_EXT_framebuffer_multisample(load); + load_GL_EXT_framebuffer_object(load); + load_GL_EXT_vertex_array(load); + load_GL_EXT_vertex_shader(load); + return GLVersion.major != 0 || GLVersion.minor != 0; +} + +#endif // GLAD_IMPLEMENTATION diff --git a/examples/others/iqm_loader/models_iqm_animation.c b/examples/others/iqm_loader/models_iqm_animation.c new file mode 100644 index 000000000..418208a84 --- /dev/null +++ b/examples/others/iqm_loader/models_iqm_animation.c @@ -0,0 +1,98 @@ +/******************************************************************************************* +* +* raylib [models] example - Load IQM 3d model with animations and play them +* +* This example has been created using raylib 2.0 (www.raylib.com) +* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) +* +* Copyright (c) 2018 @culacant and @raysan5 +* +********************************************************************************************/ + +#include "raylib.h" + +#define RIQM_IMPLEMENTATION +#include "riqm.h" + +int main() +{ + // Initialization + //-------------------------------------------------------------------------------------- + int screenWidth = 800; + int screenHeight = 450; + + InitWindow(screenWidth, screenHeight, "raylib [models] example - iqm animation"); + + // Define the camera to look into our 3d world + Camera camera = { 0 }; + camera.position = (Vector3){ 10.0f, 10.0f, 10.0f }; // Camera position + camera.target = (Vector3){ 0.0f, 0.0f, 0.0f }; // Camera looking at point + camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; // Camera up vector (rotation towards target) + camera.fovy = 45.0f; // Camera field-of-view Y + camera.type = CAMERA_PERSPECTIVE; // Camera mode type + + // Load the animated model mesh and basic data + AnimatedModel model = LoadAnimatedModel("resources/guy.iqm"); + + // Load model texture and set material + // NOTE: There is only 1 mesh and 1 material (both at index 0), thats what the 2 0's are + model = AnimatedModelAddTexture(model, "resources/guytex.png"); // REPLACE! + model = SetMeshMaterial(model, 0, 0); // REPLACE! + + // Load animation data + Animation anim = LoadAnimationFromIQM("resources/guyanim.iqm"); + + int animFrameCounter = 0; + + SetCameraMode(camera, CAMERA_FREE); // Set free camera mode + + SetTargetFPS(60); // Set our game to run at 60 frames-per-second + //-------------------------------------------------------------------------------------- + + // Main game loop + while (!WindowShouldClose()) // Detect window close button or ESC key + { + // Update + //---------------------------------------------------------------------------------- + UpdateCamera(&camera); + + // Play animation when spacebar is held down + if (IsKeyDown(KEY_SPACE)) + { + animFrameCounter++; + AnimateModel(model, anim, animFrameCounter); // Animate the model with animation data and frame + } + //---------------------------------------------------------------------------------- + + // Draw + //---------------------------------------------------------------------------------- + BeginDrawing(); + + ClearBackground(RAYWHITE); + + BeginMode3D(camera); + + DrawAnimatedModel(model, Vector3Zero(), 1.0f, WHITE); // Draw animated model + + DrawGrid(10, 1.0f); // Draw a grid + + EndMode3D(); + + DrawText("(c) Guy IQM 3D model by -------", screenWidth - 200, screenHeight - 20, 10, GRAY); + + DrawFPS(10, 10); + + EndDrawing(); + //---------------------------------------------------------------------------------- + } + + // De-Initialization + //-------------------------------------------------------------------------------------- + UnloadAnimation(anim); // Unload animation data + UnloadAnimatedModel(model); // Unload animated model + + CloseWindow(); // Close window and OpenGL context + //-------------------------------------------------------------------------------------- + + return 0; +} diff --git a/examples/others/iqm_loader/raymath.h b/examples/others/iqm_loader/raymath.h new file mode 100644 index 000000000..a574dd0d0 --- /dev/null +++ b/examples/others/iqm_loader/raymath.h @@ -0,0 +1,1334 @@ +/********************************************************************************************** +* +* raymath v1.2 - Math functions to work with Vector3, Matrix and Quaternions +* +* CONFIGURATION: +* +* #define RAYMATH_IMPLEMENTATION +* Generates the implementation of the library into the included file. +* If not defined, the library is in header only mode and can be included in other headers +* or source files without problems. But only ONE file should hold the implementation. +* +* #define RAYMATH_HEADER_ONLY +* Define static inline functions code, so #include header suffices for use. +* This may use up lots of memory. +* +* #define RAYMATH_STANDALONE +* Avoid raylib.h header inclusion in this file. +* Vector3 and Matrix data types are defined internally in raymath module. +* +* +* LICENSE: zlib/libpng +* +* Copyright (c) 2015-2017 Ramon Santamaria (@raysan5) +* +* This software is provided "as-is", without any express or implied warranty. In no event +* will the authors be held liable for any damages arising from the use of this software. +* +* Permission is granted to anyone to use this software for any purpose, including commercial +* applications, and to alter it and redistribute it freely, subject to the following restrictions: +* +* 1. The origin of this software must not be misrepresented; you must not claim that you +* wrote the original software. If you use this software in a product, an acknowledgment +* in the product documentation would be appreciated but is not required. +* +* 2. Altered source versions must be plainly marked as such, and must not be misrepresented +* as being the original software. +* +* 3. This notice may not be removed or altered from any source distribution. +* +**********************************************************************************************/ + +#ifndef RAYMATH_H +#define RAYMATH_H + +//#define RAYMATH_STANDALONE // NOTE: To use raymath as standalone lib, just uncomment this line +//#define RAYMATH_HEADER_ONLY // NOTE: To compile functions as static inline, uncomment this line + +#ifndef RAYMATH_STANDALONE + #include "raylib.h" // Required for structs: Vector3, Matrix +#endif + +#ifdef __cplusplus + #define RMEXTERN extern "C" // Functions visible from other files (no name mangling of functions in C++) +#else + #define RMEXTERN // Functions visible from other files +#endif + +#if defined RAYMATH_IMPLEMENTATION && defined RAYMATH_HEADER_ONLY + #error "Specifying both RAYMATH_IMPLEMENTATION and RAYMATH_HEADER_ONLY is contradictory" +#endif + +#ifdef RAYMATH_IMPLEMENTATION + #define RMDEF extern inline // Provide external definition +#elif defined RAYMATH_HEADER_ONLY + #define RMDEF static inline // Functions may be inlined, no external out-of-line definition +#else + #ifdef __TINYC__ + #define RMDEF static inline // plain inline not supported by tinycc (See issue #435) + #else + #define RMDEF inline // Functions may be inlined or external definition used + #endif +#endif + + +//---------------------------------------------------------------------------------- +// Defines and Macros +//---------------------------------------------------------------------------------- +#ifndef PI + #define PI 3.14159265358979323846 +#endif + +#ifndef DEG2RAD + #define DEG2RAD (PI/180.0f) +#endif + +#ifndef RAD2DEG + #define RAD2DEG (180.0f/PI) +#endif + +// Return float vector for Matrix +#ifndef MatrixToFloat + #define MatrixToFloat(mat) (MatrixToFloatV(mat).v) +#endif + +// Return float vector for Vector3 +#ifndef Vector3ToFloat + #define Vector3ToFloat(vec) (Vector3ToFloatV(vec).v) +#endif + +//---------------------------------------------------------------------------------- +// Types and Structures Definition +//---------------------------------------------------------------------------------- + +#if defined(RAYMATH_STANDALONE) + // Vector2 type + typedef struct Vector2 { + float x; + float y; + } Vector2; + + // Vector3 type + typedef struct Vector3 { + float x; + float y; + float z; + } Vector3; + + // Matrix type (OpenGL style 4x4 - right handed, column major) + typedef struct Matrix { + float m0, m4, m8, m12; + float m1, m5, m9, m13; + float m2, m6, m10, m14; + float m3, m7, m11, m15; + } Matrix; + + // Quaternion type + typedef struct Quaternion { + float x; + float y; + float z; + float w; + } Quaternion; +#endif + +// NOTE: Helper types to be used instead of array return types for *ToFloat functions +typedef struct float3 { float v[3]; } float3; +typedef struct float16 { float v[16]; } float16; + +#include // Required for: sinf(), cosf(), tan(), fabs() + +//---------------------------------------------------------------------------------- +// Module Functions Definition - Utils math +//---------------------------------------------------------------------------------- + +// Clamp float value +RMDEF float Clamp(float value, float min, float max) +{ + const float res = value < min ? min : value; + return res > max ? max : res; +} + +//---------------------------------------------------------------------------------- +// Module Functions Definition - Vector2 math +//---------------------------------------------------------------------------------- + +// Vector with components value 0.0f +RMDEF Vector2 Vector2Zero(void) +{ + Vector2 result = { 0.0f, 0.0f }; + return result; +} + +// Vector with components value 1.0f +RMDEF Vector2 Vector2One(void) +{ + Vector2 result = { 1.0f, 1.0f }; + return result; +} + +// Add two vectors (v1 + v2) +RMDEF Vector2 Vector2Add(Vector2 v1, Vector2 v2) +{ + Vector2 result = { v1.x + v2.x, v1.y + v2.y }; + return result; +} + +// Subtract two vectors (v1 - v2) +RMDEF Vector2 Vector2Subtract(Vector2 v1, Vector2 v2) +{ + Vector2 result = { v1.x - v2.x, v1.y - v2.y }; + return result; +} + +// Calculate vector length +RMDEF float Vector2Length(Vector2 v) +{ + float result = sqrtf((v.x*v.x) + (v.y*v.y)); + return result; +} + +// Calculate two vectors dot product +RMDEF float Vector2DotProduct(Vector2 v1, Vector2 v2) +{ + float result = (v1.x*v2.x + v1.y*v2.y); + return result; +} + +// Calculate distance between two vectors +RMDEF float Vector2Distance(Vector2 v1, Vector2 v2) +{ + float result = sqrtf((v1.x - v2.x)*(v1.x - v2.x) + (v1.y - v2.y)*(v1.y - v2.y)); + return result; +} + +// Calculate angle from two vectors in X-axis +RMDEF float Vector2Angle(Vector2 v1, Vector2 v2) +{ + float result = atan2f(v2.y - v1.y, v2.x - v1.x)*(180.0f/PI); + if (result < 0) result += 360.0f; + return result; +} + +// Scale vector (multiply by value) +RMDEF Vector2 Vector2Scale(Vector2 v, float scale) +{ + Vector2 result = { v.x*scale, v.y*scale }; + return result; +} + +// Negate vector +RMDEF Vector2 Vector2Negate(Vector2 v) +{ + Vector2 result = { -v.x, -v.y }; + return result; +} + +// Divide vector by a float value +RMDEF Vector2 Vector2Divide(Vector2 v, float div) +{ + Vector2 result = { v.x/div, v.y/div }; + return result; +} + +// Normalize provided vector +RMDEF Vector2 Vector2Normalize(Vector2 v) +{ + Vector2 result = Vector2Divide(v, Vector2Length(v)); + return result; +} + +//---------------------------------------------------------------------------------- +// Module Functions Definition - Vector3 math +//---------------------------------------------------------------------------------- + +// Vector with components value 0.0f +RMDEF Vector3 Vector3Zero(void) +{ + Vector3 result = { 0.0f, 0.0f, 0.0f }; + return result; +} + +// Vector with components value 1.0f +RMDEF Vector3 Vector3One(void) +{ + Vector3 result = { 1.0f, 1.0f, 1.0f }; + return result; +} + +// Add two vectors +RMDEF Vector3 Vector3Add(Vector3 v1, Vector3 v2) +{ + Vector3 result = { v1.x + v2.x, v1.y + v2.y, v1.z + v2.z }; + return result; +} + +// Substract two vectors +RMDEF Vector3 Vector3Subtract(Vector3 v1, Vector3 v2) +{ + Vector3 result = { v1.x - v2.x, v1.y - v2.y, v1.z - v2.z }; + return result; +} + +// Multiply vector by scalar +RMDEF Vector3 Vector3Multiply(Vector3 v, float scalar) +{ + Vector3 result = { v.x*scalar, v.y*scalar, v.z*scalar }; + return result; +} + +// Multiply vector by vector +RMDEF Vector3 Vector3MultiplyV(Vector3 v1, Vector3 v2) +{ + Vector3 result = { v1.x*v2.x, v1.y*v2.y, v1.z*v2.z }; + return result; +} + +// Calculate two vectors cross product +RMDEF Vector3 Vector3CrossProduct(Vector3 v1, Vector3 v2) +{ + Vector3 result = { v1.y*v2.z - v1.z*v2.y, v1.z*v2.x - v1.x*v2.z, v1.x*v2.y - v1.y*v2.x }; + return result; +} + +// Calculate one vector perpendicular vector +RMDEF Vector3 Vector3Perpendicular(Vector3 v) +{ + Vector3 result = { 0 }; + + float min = fabs(v.x); + Vector3 cardinalAxis = {1.0f, 0.0f, 0.0f}; + + if (fabs(v.y) < min) + { + min = fabs(v.y); + Vector3 tmp = {0.0f, 1.0f, 0.0f}; + cardinalAxis = tmp; + } + + if (fabs(v.z) < min) + { + Vector3 tmp = {0.0f, 0.0f, 1.0f}; + cardinalAxis = tmp; + } + + result = Vector3CrossProduct(v, cardinalAxis); + + return result; +} + +// Calculate vector length +RMDEF float Vector3Length(const Vector3 v) +{ + float result = sqrtf(v.x*v.x + v.y*v.y + v.z*v.z); + return result; +} + +// Calculate two vectors dot product +RMDEF float Vector3DotProduct(Vector3 v1, Vector3 v2) +{ + float result = (v1.x*v2.x + v1.y*v2.y + v1.z*v2.z); + return result; +} + +// Calculate distance between two vectors +RMDEF float Vector3Distance(Vector3 v1, Vector3 v2) +{ + float dx = v2.x - v1.x; + float dy = v2.y - v1.y; + float dz = v2.z - v1.z; + float result = sqrtf(dx*dx + dy*dy + dz*dz); + return result; +} + +// Scale provided vector +RMDEF Vector3 Vector3Scale(Vector3 v, float scale) +{ + Vector3 result = { v.x*scale, v.y*scale, v.z*scale }; + return result; +} + +// Negate provided vector (invert direction) +RMDEF Vector3 Vector3Negate(Vector3 v) +{ + Vector3 result = { -v.x, -v.y, -v.z }; + return result; +} + +// Normalize provided vector +RMDEF Vector3 Vector3Normalize(Vector3 v) +{ + Vector3 result = v; + + float length, ilength; + length = Vector3Length(v); + if (length == 0.0f) length = 1.0f; + ilength = 1.0f/length; + + result.x *= ilength; + result.y *= ilength; + result.z *= ilength; + + return result; +} + +// Orthonormalize provided vectors +// Makes vectors normalized and orthogonal to each other +// Gram-Schmidt function implementation +RMDEF void Vector3OrthoNormalize(Vector3 *v1, Vector3 *v2) +{ + *v1 = Vector3Normalize(*v1); + Vector3 vn = Vector3CrossProduct(*v1, *v2); + vn = Vector3Normalize(vn); + *v2 = Vector3CrossProduct(vn, *v1); +} + +// Transforms a Vector3 by a given Matrix +RMDEF Vector3 Vector3Transform(Vector3 v, Matrix mat) +{ + Vector3 result = { 0 }; + float x = v.x; + float y = v.y; + float z = v.z; + + result.x = mat.m0*x + mat.m4*y + mat.m8*z + mat.m12; + result.y = mat.m1*x + mat.m5*y + mat.m9*z + mat.m13; + result.z = mat.m2*x + mat.m6*y + mat.m10*z + mat.m14; + + return result; +}; + +// Transform a vector by quaternion rotation +RMDEF Vector3 Vector3RotateByQuaternion(Vector3 v, Quaternion q) +{ + Vector3 result = { 0 }; + + result.x = v.x*(q.x*q.x + q.w*q.w - q.y*q.y - q.z*q.z) + v.y*(2*q.x*q.y - 2*q.w*q.z) + v.z*(2*q.x*q.z + 2*q.w*q.y); + result.y = v.x*(2*q.w*q.z + 2*q.x*q.y) + v.y*(q.w*q.w - q.x*q.x + q.y*q.y - q.z*q.z) + v.z*(-2*q.w*q.x + 2*q.y*q.z); + result.z = v.x*(-2*q.w*q.y + 2*q.x*q.z) + v.y*(2*q.w*q.x + 2*q.y*q.z)+ v.z*(q.w*q.w - q.x*q.x - q.y*q.y + q.z*q.z); + + return result; +} + +// Calculate linear interpolation between two vectors +RMDEF Vector3 Vector3Lerp(Vector3 v1, Vector3 v2, float amount) +{ + Vector3 result = { 0 }; + + result.x = v1.x + amount*(v2.x - v1.x); + result.y = v1.y + amount*(v2.y - v1.y); + result.z = v1.z + amount*(v2.z - v1.z); + + return result; +} + +// Calculate reflected vector to normal +RMDEF Vector3 Vector3Reflect(Vector3 v, Vector3 normal) +{ + // I is the original vector + // N is the normal of the incident plane + // R = I - (2*N*( DotProduct[ I,N] )) + + Vector3 result = { 0 }; + + float dotProduct = Vector3DotProduct(v, normal); + + result.x = v.x - (2.0f*normal.x)*dotProduct; + result.y = v.y - (2.0f*normal.y)*dotProduct; + result.z = v.z - (2.0f*normal.z)*dotProduct; + + return result; +} + +// Return min value for each pair of components +RMDEF Vector3 Vector3Min(Vector3 v1, Vector3 v2) +{ + Vector3 result = { 0 }; + + result.x = fminf(v1.x, v2.x); + result.y = fminf(v1.y, v2.y); + result.z = fminf(v1.z, v2.z); + + return result; +} + +// Return max value for each pair of components +RMDEF Vector3 Vector3Max(Vector3 v1, Vector3 v2) +{ + Vector3 result = { 0 }; + + result.x = fmaxf(v1.x, v2.x); + result.y = fmaxf(v1.y, v2.y); + result.z = fmaxf(v1.z, v2.z); + + return result; +} + +// Compute barycenter coordinates (u, v, w) for point p with respect to triangle (a, b, c) +// NOTE: Assumes P is on the plane of the triangle +RMDEF Vector3 Vector3Barycenter(Vector3 p, Vector3 a, Vector3 b, Vector3 c) +{ + //Vector v0 = b - a, v1 = c - a, v2 = p - a; + + Vector3 v0 = Vector3Subtract(b, a); + Vector3 v1 = Vector3Subtract(c, a); + Vector3 v2 = Vector3Subtract(p, a); + float d00 = Vector3DotProduct(v0, v0); + float d01 = Vector3DotProduct(v0, v1); + float d11 = Vector3DotProduct(v1, v1); + float d20 = Vector3DotProduct(v2, v0); + float d21 = Vector3DotProduct(v2, v1); + + float denom = d00*d11 - d01*d01; + + Vector3 result = { 0 }; + + result.y = (d11*d20 - d01*d21)/denom; + result.z = (d00*d21 - d01*d20)/denom; + result.x = 1.0f - (result.z + result.y); + + return result; +} + +// Returns Vector3 as float array +RMDEF float3 Vector3ToFloatV(Vector3 v) +{ + float3 buffer = { 0 }; + + buffer.v[0] = v.x; + buffer.v[1] = v.y; + buffer.v[2] = v.z; + + return buffer; +} + +//---------------------------------------------------------------------------------- +// Module Functions Definition - Matrix math +//---------------------------------------------------------------------------------- + +// Compute matrix determinant +RMDEF float MatrixDeterminant(Matrix mat) +{ + float result = { 0 }; + + // Cache the matrix values (speed optimization) + float a00 = mat.m0, a01 = mat.m1, a02 = mat.m2, a03 = mat.m3; + float a10 = mat.m4, a11 = mat.m5, a12 = mat.m6, a13 = mat.m7; + float a20 = mat.m8, a21 = mat.m9, a22 = mat.m10, a23 = mat.m11; + float a30 = mat.m12, a31 = mat.m13, a32 = mat.m14, a33 = mat.m15; + + result = a30*a21*a12*a03 - a20*a31*a12*a03 - a30*a11*a22*a03 + a10*a31*a22*a03 + + a20*a11*a32*a03 - a10*a21*a32*a03 - a30*a21*a02*a13 + a20*a31*a02*a13 + + a30*a01*a22*a13 - a00*a31*a22*a13 - a20*a01*a32*a13 + a00*a21*a32*a13 + + a30*a11*a02*a23 - a10*a31*a02*a23 - a30*a01*a12*a23 + a00*a31*a12*a23 + + a10*a01*a32*a23 - a00*a11*a32*a23 - a20*a11*a02*a33 + a10*a21*a02*a33 + + a20*a01*a12*a33 - a00*a21*a12*a33 - a10*a01*a22*a33 + a00*a11*a22*a33; + + return result; +} + +// Returns the trace of the matrix (sum of the values along the diagonal) +RMDEF float MatrixTrace(Matrix mat) +{ + float result = (mat.m0 + mat.m5 + mat.m10 + mat.m15); + return result; +} + +// Transposes provided matrix +RMDEF Matrix MatrixTranspose(Matrix mat) +{ + Matrix result = { 0 }; + + result.m0 = mat.m0; + result.m1 = mat.m4; + result.m2 = mat.m8; + result.m3 = mat.m12; + result.m4 = mat.m1; + result.m5 = mat.m5; + result.m6 = mat.m9; + result.m7 = mat.m13; + result.m8 = mat.m2; + result.m9 = mat.m6; + result.m10 = mat.m10; + result.m11 = mat.m14; + result.m12 = mat.m3; + result.m13 = mat.m7; + result.m14 = mat.m11; + result.m15 = mat.m15; + + return result; +} + +// Invert provided matrix +RMDEF Matrix MatrixInvert(Matrix mat) +{ + Matrix result = { 0 }; + + // Cache the matrix values (speed optimization) + float a00 = mat.m0, a01 = mat.m1, a02 = mat.m2, a03 = mat.m3; + float a10 = mat.m4, a11 = mat.m5, a12 = mat.m6, a13 = mat.m7; + float a20 = mat.m8, a21 = mat.m9, a22 = mat.m10, a23 = mat.m11; + float a30 = mat.m12, a31 = mat.m13, a32 = mat.m14, a33 = mat.m15; + + float b00 = a00*a11 - a01*a10; + float b01 = a00*a12 - a02*a10; + float b02 = a00*a13 - a03*a10; + float b03 = a01*a12 - a02*a11; + float b04 = a01*a13 - a03*a11; + float b05 = a02*a13 - a03*a12; + float b06 = a20*a31 - a21*a30; + float b07 = a20*a32 - a22*a30; + float b08 = a20*a33 - a23*a30; + float b09 = a21*a32 - a22*a31; + float b10 = a21*a33 - a23*a31; + float b11 = a22*a33 - a23*a32; + + // Calculate the invert determinant (inlined to avoid double-caching) + float invDet = 1.0f/(b00*b11 - b01*b10 + b02*b09 + b03*b08 - b04*b07 + b05*b06); + + result.m0 = (a11*b11 - a12*b10 + a13*b09)*invDet; + result.m1 = (-a01*b11 + a02*b10 - a03*b09)*invDet; + result.m2 = (a31*b05 - a32*b04 + a33*b03)*invDet; + result.m3 = (-a21*b05 + a22*b04 - a23*b03)*invDet; + result.m4 = (-a10*b11 + a12*b08 - a13*b07)*invDet; + result.m5 = (a00*b11 - a02*b08 + a03*b07)*invDet; + result.m6 = (-a30*b05 + a32*b02 - a33*b01)*invDet; + result.m7 = (a20*b05 - a22*b02 + a23*b01)*invDet; + result.m8 = (a10*b10 - a11*b08 + a13*b06)*invDet; + result.m9 = (-a00*b10 + a01*b08 - a03*b06)*invDet; + result.m10 = (a30*b04 - a31*b02 + a33*b00)*invDet; + result.m11 = (-a20*b04 + a21*b02 - a23*b00)*invDet; + result.m12 = (-a10*b09 + a11*b07 - a12*b06)*invDet; + result.m13 = (a00*b09 - a01*b07 + a02*b06)*invDet; + result.m14 = (-a30*b03 + a31*b01 - a32*b00)*invDet; + result.m15 = (a20*b03 - a21*b01 + a22*b00)*invDet; + + return result; +} + +// Normalize provided matrix +RMDEF Matrix MatrixNormalize(Matrix mat) +{ + Matrix result = { 0 }; + + float det = MatrixDeterminant(mat); + + result.m0 = mat.m0/det; + result.m1 = mat.m1/det; + result.m2 = mat.m2/det; + result.m3 = mat.m3/det; + result.m4 = mat.m4/det; + result.m5 = mat.m5/det; + result.m6 = mat.m6/det; + result.m7 = mat.m7/det; + result.m8 = mat.m8/det; + result.m9 = mat.m9/det; + result.m10 = mat.m10/det; + result.m11 = mat.m11/det; + result.m12 = mat.m12/det; + result.m13 = mat.m13/det; + result.m14 = mat.m14/det; + result.m15 = mat.m15/det; + + return result; +} + +// Returns identity matrix +RMDEF Matrix MatrixIdentity(void) +{ + Matrix result = { 1.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 1.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 1.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 1.0f }; + + return result; +} + +// Add two matrices +RMDEF Matrix MatrixAdd(Matrix left, Matrix right) +{ + Matrix result = MatrixIdentity(); + + result.m0 = left.m0 + right.m0; + result.m1 = left.m1 + right.m1; + result.m2 = left.m2 + right.m2; + result.m3 = left.m3 + right.m3; + result.m4 = left.m4 + right.m4; + result.m5 = left.m5 + right.m5; + result.m6 = left.m6 + right.m6; + result.m7 = left.m7 + right.m7; + result.m8 = left.m8 + right.m8; + result.m9 = left.m9 + right.m9; + result.m10 = left.m10 + right.m10; + result.m11 = left.m11 + right.m11; + result.m12 = left.m12 + right.m12; + result.m13 = left.m13 + right.m13; + result.m14 = left.m14 + right.m14; + result.m15 = left.m15 + right.m15; + + return result; +} + +// Substract two matrices (left - right) +RMDEF Matrix MatrixSubstract(Matrix left, Matrix right) +{ + Matrix result = MatrixIdentity(); + + result.m0 = left.m0 - right.m0; + result.m1 = left.m1 - right.m1; + result.m2 = left.m2 - right.m2; + result.m3 = left.m3 - right.m3; + result.m4 = left.m4 - right.m4; + result.m5 = left.m5 - right.m5; + result.m6 = left.m6 - right.m6; + result.m7 = left.m7 - right.m7; + result.m8 = left.m8 - right.m8; + result.m9 = left.m9 - right.m9; + result.m10 = left.m10 - right.m10; + result.m11 = left.m11 - right.m11; + result.m12 = left.m12 - right.m12; + result.m13 = left.m13 - right.m13; + result.m14 = left.m14 - right.m14; + result.m15 = left.m15 - right.m15; + + return result; +} + +// Returns translation matrix +RMDEF Matrix MatrixTranslate(float x, float y, float z) +{ + Matrix result = { 1.0f, 0.0f, 0.0f, x, + 0.0f, 1.0f, 0.0f, y, + 0.0f, 0.0f, 1.0f, z, + 0.0f, 0.0f, 0.0f, 1.0f }; + + return result; +} + +// Create rotation matrix from axis and angle +// NOTE: Angle should be provided in radians +RMDEF Matrix MatrixRotate(Vector3 axis, float angle) +{ + Matrix result = { 0 }; + + float x = axis.x, y = axis.y, z = axis.z; + + float length = sqrtf(x*x + y*y + z*z); + + if ((length != 1.0f) && (length != 0.0f)) + { + length = 1.0f/length; + x *= length; + y *= length; + z *= length; + } + + float sinres = sinf(angle); + float cosres = cosf(angle); + float t = 1.0f - cosres; + + result.m0 = x*x*t + cosres; + result.m1 = y*x*t + z*sinres; + result.m2 = z*x*t - y*sinres; + result.m3 = 0.0f; + + result.m4 = x*y*t - z*sinres; + result.m5 = y*y*t + cosres; + result.m6 = z*y*t + x*sinres; + result.m7 = 0.0f; + + result.m8 = x*z*t + y*sinres; + result.m9 = y*z*t - x*sinres; + result.m10 = z*z*t + cosres; + result.m11 = 0.0f; + + result.m12 = 0.0f; + result.m13 = 0.0f; + result.m14 = 0.0f; + result.m15 = 1.0f; + + return result; +} + +// Returns x-rotation matrix (angle in radians) +RMDEF Matrix MatrixRotateX(float angle) +{ + Matrix result = MatrixIdentity(); + + float cosres = cosf(angle); + float sinres = sinf(angle); + + result.m5 = cosres; + result.m6 = -sinres; + result.m9 = sinres; + result.m10 = cosres; + + return result; +} + +// Returns y-rotation matrix (angle in radians) +RMDEF Matrix MatrixRotateY(float angle) +{ + Matrix result = MatrixIdentity(); + + float cosres = cosf(angle); + float sinres = sinf(angle); + + result.m0 = cosres; + result.m2 = sinres; + result.m8 = -sinres; + result.m10 = cosres; + + return result; +} + +// Returns z-rotation matrix (angle in radians) +RMDEF Matrix MatrixRotateZ(float angle) +{ + Matrix result = MatrixIdentity(); + + float cosres = cosf(angle); + float sinres = sinf(angle); + + result.m0 = cosres; + result.m1 = -sinres; + result.m4 = sinres; + result.m5 = cosres; + + return result; +} + +// Returns scaling matrix +RMDEF Matrix MatrixScale(float x, float y, float z) +{ + Matrix result = { x, 0.0f, 0.0f, 0.0f, + 0.0f, y, 0.0f, 0.0f, + 0.0f, 0.0f, z, 0.0f, + 0.0f, 0.0f, 0.0f, 1.0f }; + + return result; +} + +// Returns two matrix multiplication +// NOTE: When multiplying matrices... the order matters! +RMDEF Matrix MatrixMultiply(Matrix left, Matrix right) +{ + Matrix result = { 0 }; + + result.m0 = left.m0*right.m0 + left.m1*right.m4 + left.m2*right.m8 + left.m3*right.m12; + result.m1 = left.m0*right.m1 + left.m1*right.m5 + left.m2*right.m9 + left.m3*right.m13; + result.m2 = left.m0*right.m2 + left.m1*right.m6 + left.m2*right.m10 + left.m3*right.m14; + result.m3 = left.m0*right.m3 + left.m1*right.m7 + left.m2*right.m11 + left.m3*right.m15; + result.m4 = left.m4*right.m0 + left.m5*right.m4 + left.m6*right.m8 + left.m7*right.m12; + result.m5 = left.m4*right.m1 + left.m5*right.m5 + left.m6*right.m9 + left.m7*right.m13; + result.m6 = left.m4*right.m2 + left.m5*right.m6 + left.m6*right.m10 + left.m7*right.m14; + result.m7 = left.m4*right.m3 + left.m5*right.m7 + left.m6*right.m11 + left.m7*right.m15; + result.m8 = left.m8*right.m0 + left.m9*right.m4 + left.m10*right.m8 + left.m11*right.m12; + result.m9 = left.m8*right.m1 + left.m9*right.m5 + left.m10*right.m9 + left.m11*right.m13; + result.m10 = left.m8*right.m2 + left.m9*right.m6 + left.m10*right.m10 + left.m11*right.m14; + result.m11 = left.m8*right.m3 + left.m9*right.m7 + left.m10*right.m11 + left.m11*right.m15; + result.m12 = left.m12*right.m0 + left.m13*right.m4 + left.m14*right.m8 + left.m15*right.m12; + result.m13 = left.m12*right.m1 + left.m13*right.m5 + left.m14*right.m9 + left.m15*right.m13; + result.m14 = left.m12*right.m2 + left.m13*right.m6 + left.m14*right.m10 + left.m15*right.m14; + result.m15 = left.m12*right.m3 + left.m13*right.m7 + left.m14*right.m11 + left.m15*right.m15; + + return result; +} + +// Returns perspective projection matrix +RMDEF Matrix MatrixFrustum(double left, double right, double bottom, double top, double near, double far) +{ + Matrix result = { 0 }; + + float rl = (right - left); + float tb = (top - bottom); + float fn = (far - near); + + result.m0 = (near*2.0f)/rl; + result.m1 = 0.0f; + result.m2 = 0.0f; + result.m3 = 0.0f; + + result.m4 = 0.0f; + result.m5 = (near*2.0f)/tb; + result.m6 = 0.0f; + result.m7 = 0.0f; + + result.m8 = (right + left)/rl; + result.m9 = (top + bottom)/tb; + result.m10 = -(far + near)/fn; + result.m11 = -1.0f; + + result.m12 = 0.0f; + result.m13 = 0.0f; + result.m14 = -(far*near*2.0f)/fn; + result.m15 = 0.0f; + + return result; +} + +// Returns perspective projection matrix +// NOTE: Angle should be provided in radians +RMDEF Matrix MatrixPerspective(double fovy, double aspect, double near, double far) +{ + double top = near*tan(fovy*0.5); + double right = top*aspect; + Matrix result = MatrixFrustum(-right, right, -top, top, near, far); + + return result; +} + +// Returns orthographic projection matrix +RMDEF Matrix MatrixOrtho(double left, double right, double bottom, double top, double near, double far) +{ + Matrix result = { 0 }; + + float rl = (right - left); + float tb = (top - bottom); + float fn = (far - near); + + result.m0 = 2.0f/rl; + result.m1 = 0.0f; + result.m2 = 0.0f; + result.m3 = 0.0f; + result.m4 = 0.0f; + result.m5 = 2.0f/tb; + result.m6 = 0.0f; + result.m7 = 0.0f; + result.m8 = 0.0f; + result.m9 = 0.0f; + result.m10 = -2.0f/fn; + result.m11 = 0.0f; + result.m12 = -(left + right)/rl; + result.m13 = -(top + bottom)/tb; + result.m14 = -(far + near)/fn; + result.m15 = 1.0f; + + return result; +} + +// Returns camera look-at matrix (view matrix) +RMDEF Matrix MatrixLookAt(Vector3 eye, Vector3 target, Vector3 up) +{ + Matrix result = { 0 }; + + Vector3 z = Vector3Subtract(eye, target); + z = Vector3Normalize(z); + Vector3 x = Vector3CrossProduct(up, z); + x = Vector3Normalize(x); + Vector3 y = Vector3CrossProduct(z, x); + y = Vector3Normalize(y); + + result.m0 = x.x; + result.m1 = x.y; + result.m2 = x.z; + result.m3 = 0.0f; + result.m4 = y.x; + result.m5 = y.y; + result.m6 = y.z; + result.m7 = 0.0f; + result.m8 = z.x; + result.m9 = z.y; + result.m10 = z.z; + result.m11 = 0.0f; + result.m12 = eye.x; + result.m13 = eye.y; + result.m14 = eye.z; + result.m15 = 1.0f; + + result = MatrixInvert(result); + + return result; +} + +// Returns float array of matrix data +RMDEF float16 MatrixToFloatV(Matrix mat) +{ + float16 buffer = { 0 }; + + buffer.v[0] = mat.m0; + buffer.v[1] = mat.m1; + buffer.v[2] = mat.m2; + buffer.v[3] = mat.m3; + buffer.v[4] = mat.m4; + buffer.v[5] = mat.m5; + buffer.v[6] = mat.m6; + buffer.v[7] = mat.m7; + buffer.v[8] = mat.m8; + buffer.v[9] = mat.m9; + buffer.v[10] = mat.m10; + buffer.v[11] = mat.m11; + buffer.v[12] = mat.m12; + buffer.v[13] = mat.m13; + buffer.v[14] = mat.m14; + buffer.v[15] = mat.m15; + + return buffer; +} + +//---------------------------------------------------------------------------------- +// Module Functions Definition - Quaternion math +//---------------------------------------------------------------------------------- + +// Returns identity quaternion +RMDEF Quaternion QuaternionIdentity(void) +{ + Quaternion result = { 0.0f, 0.0f, 0.0f, 1.0f }; + return result; +} + +// Computes the length of a quaternion +RMDEF float QuaternionLength(Quaternion q) +{ + float result = sqrt(q.x*q.x + q.y*q.y + q.z*q.z + q.w*q.w); + return result; +} + +// Normalize provided quaternion +RMDEF Quaternion QuaternionNormalize(Quaternion q) +{ + Quaternion result = { 0 }; + + float length, ilength; + length = QuaternionLength(q); + if (length == 0.0f) length = 1.0f; + ilength = 1.0f/length; + + result.x = q.x*ilength; + result.y = q.y*ilength; + result.z = q.z*ilength; + result.w = q.w*ilength; + + return result; +} + +// Invert provided quaternion +RMDEF Quaternion QuaternionInvert(Quaternion q) +{ + Quaternion result = q; + float length = QuaternionLength(q); + float lengthSq = length*length; + + if (lengthSq != 0.0) + { + float i = 1.0f/lengthSq; + + result.x *= -i; + result.y *= -i; + result.z *= -i; + result.w *= i; + } + + return result; +} + +// Calculate two quaternion multiplication +RMDEF Quaternion QuaternionMultiply(Quaternion q1, Quaternion q2) +{ + Quaternion result = { 0 }; + + float qax = q1.x, qay = q1.y, qaz = q1.z, qaw = q1.w; + float qbx = q2.x, qby = q2.y, qbz = q2.z, qbw = q2.w; + + result.x = qax*qbw + qaw*qbx + qay*qbz - qaz*qby; + result.y = qay*qbw + qaw*qby + qaz*qbx - qax*qbz; + result.z = qaz*qbw + qaw*qbz + qax*qby - qay*qbx; + result.w = qaw*qbw - qax*qbx - qay*qby - qaz*qbz; + + return result; +} + +// Calculate linear interpolation between two quaternions +RMDEF Quaternion QuaternionLerp(Quaternion q1, Quaternion q2, float amount) +{ + Quaternion result = { 0 }; + + result.x = q1.x + amount*(q2.x - q1.x); + result.y = q1.y + amount*(q2.y - q1.y); + result.z = q1.z + amount*(q2.z - q1.z); + result.w = q1.w + amount*(q2.w - q1.w); + + return result; +} + +// Calculate slerp-optimized interpolation between two quaternions +RMDEF Quaternion QuaternionNlerp(Quaternion q1, Quaternion q2, float amount) +{ + Quaternion result = QuaternionLerp(q1, q2, amount); + result = QuaternionNormalize(result); + + return result; +} + +// Calculates spherical linear interpolation between two quaternions +RMDEF Quaternion QuaternionSlerp(Quaternion q1, Quaternion q2, float amount) +{ + Quaternion result = { 0 }; + + float cosHalfTheta = q1.x*q2.x + q1.y*q2.y + q1.z*q2.z + q1.w*q2.w; + + if (fabs(cosHalfTheta) >= 1.0f) result = q1; + else if (cosHalfTheta > 0.95f) result = QuaternionNlerp(q1, q2, amount); + else + { + float halfTheta = acos(cosHalfTheta); + float sinHalfTheta = sqrt(1.0f - cosHalfTheta*cosHalfTheta); + + if (fabs(sinHalfTheta) < 0.001f) + { + result.x = (q1.x*0.5f + q2.x*0.5f); + result.y = (q1.y*0.5f + q2.y*0.5f); + result.z = (q1.z*0.5f + q2.z*0.5f); + result.w = (q1.w*0.5f + q2.w*0.5f); + } + else + { + float ratioA = sinf((1 - amount)*halfTheta)/sinHalfTheta; + float ratioB = sinf(amount*halfTheta)/sinHalfTheta; + + result.x = (q1.x*ratioA + q2.x*ratioB); + result.y = (q1.y*ratioA + q2.y*ratioB); + result.z = (q1.z*ratioA + q2.z*ratioB); + result.w = (q1.w*ratioA + q2.w*ratioB); + } + } + + return result; +} + +// Calculate quaternion based on the rotation from one vector to another +RMDEF Quaternion QuaternionFromVector3ToVector3(Vector3 from, Vector3 to) +{ + Quaternion result = { 0 }; + + float cos2Theta = Vector3DotProduct(from, to); + Vector3 cross = Vector3CrossProduct(from, to); + + result.x = cross.x; + result.y = cross.y; + result.z = cross.y; + result.w = 1.0f + cos2Theta; // NOTE: Added QuaternioIdentity() + + // Normalize to essentially nlerp the original and identity to 0.5 + result = QuaternionNormalize(result); + + // Above lines are equivalent to: + //Quaternion result = QuaternionNlerp(q, QuaternionIdentity(), 0.5f); + + return result; +} + +// Returns a quaternion for a given rotation matrix +RMDEF Quaternion QuaternionFromMatrix(Matrix mat) +{ + Quaternion result = { 0 }; + + float trace = MatrixTrace(mat); + + if (trace > 0.0f) + { + float s = (float)sqrt(trace + 1)*2.0f; + float invS = 1.0f/s; + + result.w = s*0.25f; + result.x = (mat.m6 - mat.m9)*invS; + result.y = (mat.m8 - mat.m2)*invS; + result.z = (mat.m1 - mat.m4)*invS; + } + else + { + float m00 = mat.m0, m11 = mat.m5, m22 = mat.m10; + + if (m00 > m11 && m00 > m22) + { + float s = (float)sqrt(1.0f + m00 - m11 - m22)*2.0f; + float invS = 1.0f/s; + + result.w = (mat.m6 - mat.m9)*invS; + result.x = s*0.25f; + result.y = (mat.m4 + mat.m1)*invS; + result.z = (mat.m8 + mat.m2)*invS; + } + else if (m11 > m22) + { + float s = (float)sqrt(1.0f + m11 - m00 - m22)*2.0f; + float invS = 1.0f/s; + + result.w = (mat.m8 - mat.m2)*invS; + result.x = (mat.m4 + mat.m1)*invS; + result.y = s*0.25f; + result.z = (mat.m9 + mat.m6)*invS; + } + else + { + float s = (float)sqrt(1.0f + m22 - m00 - m11)*2.0f; + float invS = 1.0f/s; + + result.w = (mat.m1 - mat.m4)*invS; + result.x = (mat.m8 + mat.m2)*invS; + result.y = (mat.m9 + mat.m6)*invS; + result.z = s*0.25f; + } + } + + return result; +} + +// Returns a matrix for a given quaternion +RMDEF Matrix QuaternionToMatrix(Quaternion q) +{ + Matrix result = { 0 }; + + float x = q.x, y = q.y, z = q.z, w = q.w; + + float x2 = x + x; + float y2 = y + y; + float z2 = z + z; + + float length = QuaternionLength(q); + float lengthSquared = length*length; + + float xx = x*x2/lengthSquared; + float xy = x*y2/lengthSquared; + float xz = x*z2/lengthSquared; + + float yy = y*y2/lengthSquared; + float yz = y*z2/lengthSquared; + float zz = z*z2/lengthSquared; + + float wx = w*x2/lengthSquared; + float wy = w*y2/lengthSquared; + float wz = w*z2/lengthSquared; + + result.m0 = 1.0f - (yy + zz); + result.m1 = xy - wz; + result.m2 = xz + wy; + result.m3 = 0.0f; + result.m4 = xy + wz; + result.m5 = 1.0f - (xx + zz); + result.m6 = yz - wx; + result.m7 = 0.0f; + result.m8 = xz - wy; + result.m9 = yz + wx; + result.m10 = 1.0f - (xx + yy); + result.m11 = 0.0f; + result.m12 = 0.0f; + result.m13 = 0.0f; + result.m14 = 0.0f; + result.m15 = 1.0f; + + return result; +} + +// Returns rotation quaternion for an angle and axis +// NOTE: angle must be provided in radians +RMDEF Quaternion QuaternionFromAxisAngle(Vector3 axis, float angle) +{ + Quaternion result = { 0.0f, 0.0f, 0.0f, 1.0f }; + + if (Vector3Length(axis) != 0.0f) + + angle *= 0.5f; + + axis = Vector3Normalize(axis); + + float sinres = sinf(angle); + float cosres = cosf(angle); + + result.x = axis.x*sinres; + result.y = axis.y*sinres; + result.z = axis.z*sinres; + result.w = cosres; + + result = QuaternionNormalize(result); + + return result; +} + +// Returns the rotation angle and axis for a given quaternion +RMDEF void QuaternionToAxisAngle(Quaternion q, Vector3 *outAxis, float *outAngle) +{ + if (fabs(q.w) > 1.0f) q = QuaternionNormalize(q); + + Vector3 resAxis = { 0.0f, 0.0f, 0.0f }; + float resAngle = 0.0f; + + resAngle = 2.0f*(float)acos(q.w); + float den = (float)sqrt(1.0f - q.w*q.w); + + if (den > 0.0001f) + { + resAxis.x = q.x/den; + resAxis.y = q.y/den; + resAxis.z = q.z/den; + } + else + { + // This occurs when the angle is zero. + // Not a problem: just set an arbitrary normalized axis. + resAxis.x = 1.0f; + } + + *outAxis = resAxis; + *outAngle = resAngle; +} + +// Returns he quaternion equivalent to Euler angles +RMDEF Quaternion QuaternionFromEuler(float roll, float pitch, float yaw) +{ + Quaternion q = { 0 }; + + float x0 = cosf(roll*0.5f); + float x1 = sinf(roll*0.5f); + float y0 = cosf(pitch*0.5f); + float y1 = sinf(pitch*0.5f); + float z0 = cosf(yaw*0.5f); + float z1 = sinf(yaw*0.5f); + + q.x = x1*y0*z0 - x0*y1*z1; + q.y = x0*y1*z0 + x1*y0*z1; + q.z = x0*y0*z1 - x1*y1*z0; + q.w = x0*y0*z0 + x1*y1*z1; + + return q; +} + +// Return the Euler angles equivalent to quaternion (roll, pitch, yaw) +// NOTE: Angles are returned in a Vector3 struct in degrees +RMDEF Vector3 QuaternionToEuler(Quaternion q) +{ + Vector3 result = { 0 }; + + // roll (x-axis rotation) + float x0 = 2.0f*(q.w*q.x + q.y*q.z); + float x1 = 1.0f - 2.0f*(q.x*q.x + q.y*q.y); + result.x = atan2f(x0, x1)*RAD2DEG; + + // pitch (y-axis rotation) + float y0 = 2.0f*(q.w*q.y - q.z*q.x); + y0 = y0 > 1.0f ? 1.0f : y0; + y0 = y0 < -1.0f ? -1.0f : y0; + result.y = asinf(y0)*RAD2DEG; + + // yaw (z-axis rotation) + float z0 = 2.0f*(q.w*q.z + q.x*q.y); + float z1 = 1.0f - 2.0f*(q.y*q.y + q.z*q.z); + result.z = atan2f(z0, z1)*RAD2DEG; + + return result; +} + +// Transform a quaternion given a transformation matrix +RMDEF Quaternion QuaternionTransform(Quaternion q, Matrix mat) +{ + Quaternion result = { 0 }; + + result.x = mat.m0*q.x + mat.m4*q.y + mat.m8*q.z + mat.m12*q.w; + result.y = mat.m1*q.x + mat.m5*q.y + mat.m9*q.z + mat.m13*q.w; + result.z = mat.m2*q.x + mat.m6*q.y + mat.m10*q.z + mat.m14*q.w; + result.w = mat.m3*q.x + mat.m7*q.y + mat.m11*q.z + mat.m15*q.w; + + return result; +} + +#endif // RAYMATH_H diff --git a/examples/others/iqm_loader/resources/guy.blend b/examples/others/iqm_loader/resources/guy.blend new file mode 100644 index 0000000000000000000000000000000000000000..3880467d80313c6c426675f1fb8e3dd2a5a14773 GIT binary patch literal 665304 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

uV{<#BRKDsjJu}PV}a+GDu7!SIp*+ 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 H?)dvZw^bvG literal 0 HcmV?d00001 diff --git a/examples/others/iqm_loader/resources/guy.iqm b/examples/others/iqm_loader/resources/guy.iqm new file mode 100644 index 0000000000000000000000000000000000000000..36bed5e0f26ad32370a05ded58bde6c9f0a4b0ea GIT binary patch literal 39408 zcmeHw2V4|M^Y#dcm;;LO6ay-tqAo!}c4kbNFft}Y1Ys3W6jT&UD`3tb>Y5M}Fb0(1 zVcbQ`u2~GIr>JL6XZ8&9RZW0_Qy0Jgd+*OL>|S-((_P*3Ooy7D?#1ic)1y=0J`CNx zlY6g@oq7;P1VOyiKmeaPAX7j}fS5pF3h_&jI-pO2xT+&Tq`MGA1<*ZcA%4?=;OjWt zg&-mzy%We&(09%QrRb-_1YiFaEn7Me?mpxFLj!z94Tl6Gbj+CXgzp%?a9)G_R+7@1 z2=*TyMEHb`_U^%lp~NWv5ujt(ml)~q<0oYDh0rXN*Lb6RtuL_AAa!uq)#bOj6s&ceZznJ2h*^vE|n8vOqA?AstWc}nh7Y&>OmV~0(`IzKCJ~o zl;l$i(mYxd#O1_=+Q2_&DU%&eE6eUKp>+rSQ7=mh)4Pd!IY=KZ+DP^dvM25@1L>#S zw;i+rU9v$v2g;s-bhMGziRqUiy=eVd&qXm^st5VV)8+L@*F_uYTByr87rmBrk44K$ zeB{@X*D2Y{?@Qu__b%sv_bZh}U1}@2jl>iAppA6DSif{Fw2{(Lm(u0!jOi7j-8}as zkn(iYrF68p0&PARZ17s&O8-$k^0Lys$m_vtN$K)>P?z(U>cMo$9_#s5I@(C-XtVT9 zCuIn<)s9(Dm01?uNe^*M#z1->QO}0-@uJNV(Y`g5JqqcEp^uzFKP=jyz5;BHK|0#V z>(oH{S#cc7>pui#FNx{$Ysu5)^&Anei=3rvp)Rjeel7Vu%FD`a|vd9`&rP=L&Wr%qK@3;_Hr9+TdW8B zPR>nkBfqY^PWg4^^~mo_eqDLGydL>=<@KaJo=(ZL% zVmjJX6Vv7Pdm+8g<9O{*u$S9lIt}Shi`4lE>g)*VcrAJTnC|h7dgSSHZu0BOuT`{8 z>0008EaxM?mb}i9&uI$hsj~DwDy_p|vJ2=T?at)uu8=O-jD_^<^chrt(H`|&n0NAY zNxuN;Shi@L=ODeEEM2m}bSx{s7M7LL<@E#rXY>PTFX`W_6Vs(S@g606EGyM7m6fg~ z*lVG1RHt+;sm`LDi}I1Kh4xaNy>|MMcQ%KSDV?mTKA>0L z9<9B+;S$vy^b3%l1G)$3pcUiZW(TAHG~wGZ#KajOmD< z&5q^st7yjZ*aBkA$8^kZRX<+Ywo@5$xsi`@^m}t2V~iNnv7IW-ZA~`qJdVt6Oz|;d zOh=4751Iy$XOGWUhHMJsF~*27eR`85W#ffo$UNU{wo zs*T}e#F&m4<7e~x@#$-=1v|u;9uFAf;p;o``PGzy9b!zc3b+l~i_Cp)PCmXdgl{jz z*nfyIy@}faWu495Dd0*pEzC**-s(2z<9+NF{UHN_VahE%D0zo#|C`+ zVT|pE>E3_!d5<%8Xiu(UqOui1u^=UE_6k5d3GbxBm1uM!chx8MvUp_ z0FSk{At%Ck9G=ygACDL##`LBzKGE)Km{6{Agc)BRF{UF%KZfIV1eC+^iZNnLN4$8X zHP3@Gbs~2GFN~2FrX&6uHI~1h9`}9oF{UHN`>e1=(=Pm709otxM5WELiF}M0)0+Xt zab~~kpmJGM1i9?#H9kg+=_>&v4?mbM$P4EW#yEd49dXdd3M8?3n@c~9D|xBa0p%#b z821H?>C`()c`tXra{Z+=0j zU`&6J=d84NWli2=54Rn<=^c+TMvUnz+tEtDzxFF5O_#WuTz{)vAAiLKG5eI`@fWLu z%CNNul)idesSZ2lf|!69F{W=dvQnnIzgBAB4pBDsxWdPXF&**1obsfl;{l~{g@4X`(;qaE%ru~c_{k3eOWd9=_>qb6y!o3zpC$V0z$965YUflLUE?6&cZc-dw z+k7O`}{9#Tf(nHkDV_ zOv5&s|K26NI696UwExkVl-vAl`%Cw@Bjr{8{r*T7`?c8fy*Oi1Zu4*RFXouXxyp|* ziQCAQ;rZk9N4nIW#ht%Dd%t1ecQUG8UvjedXL9)VDUR;nrmlTCV!Z?QLveH?GNKjQMt113sW|$t);>|k?tGc;^@+N2s_>*-~aqbhxX*hG91;V7gOiQf)Sz4pT9rS2g7r^ z1lZy|6h}`?w6Jfrr;m2jnJQ#)bgUQ0L_5Fx{ByvN{I5u@$R#Q9hp{b$<;+Z)GRasAb~-Kq9& z{a^EC@IH#-f&STRVXc|Yanni6KeW5GLnoR2NTZQ_*-l&AHo^R&cuGnHpFd)47d{`` z3HdeLW5Z)Cb9{h%{(AFU_ybq3P`(E06x&5R9G(|_0@mj9D~e}8em5Ea&VYA*sE}{( z2iP-ub^iSq#T_8OJFK;lGjfXt+(7YnzI~@-$?3gi`9(3b-x^%2OYPU@n03YgnLXCo z9r~;Xlf(Pn@8MnBj8+GaBX|wrY({4)=I4Vr!e*djx{LD zx6jYwuW)U=|IlISd+_?-!*L%9=l40D#@pj{*W1^Y-aoK?3Sn&bk6gV%`JDqSU?_}7(Z`}pWs;L$4^n*3G#=>|D8X7DgjW1p%Za#n_aFH=v6gg? z^7{v!ukWkN;D(t0zl%$ZD#7!S$`=>IHOY-I|62<8RIX9x(r9_Pqa@rQW_7 z>%x0Le^gw&9LD2arbdQXmMn?~LO#4trAzr20dMyX&9`3xyzetL`1Lv36vcxeAK%B2 z7v^6AoZ%gsZ;$D7*ECIU1@&V7xA3`n&87Lv=eOU{Fuk>CkL~lyhf{2T_b4p?Ev%o{ z+&)2;-*d;te0#j!Z_r+uS52gQ`Ui&htn{|w+tEMr*Z=&yMSAMh=zMz|Pd>xL@cMX< z{Cq5mdz)_M^U)upeeJy#JnjYeamctG&mGGa#ptJC{xy-VJqGZ8ghYrsIh zO}~dX4Du|LAHXm?#PqGR zfuEM#nyQlJ*SeNs->m?X1iZ6R8wam|Yh(NUEauy@X_=n(V)<|4%x2vSv<7scOd{~faS$G$|)VjuC>mSd?uzL$@jrz-ZQhroNE#J?!EJk}~bLYBWht9*u^ z42Q1rvbTr(kjfXunaxhMZX(OqJUD0XAj89-$zuD# z{qgIq%4d|APZq`9ME^P`Ed}c*rS%28!}0BgX4$LIGH+f&wl+5^Vj z3i-#Pm>?_*h^i{~x&j zn;IFGvV317^Yl+6^6km4z9-VeeM`Q6IY$4v$)}EebJ_F#LtZMjf2wpn^bz}*28G^_ zii=DAU;Z)szx-4BU;dbuEnC)9`hZ^aBW2~sU{FXmfJ^?%pAx_L2iucxV^qY?&tMKV zO8>w7|2FvE7?`duXdAg+Tzh#L)QjTp)${*S`nTGpXghrm!}R6p8Yz9&q1pkH#^|B&{KaC>FgW%tXp&HhYzz^o!wV>n zVG%`GgV=zeZY$zu5H|;bKhq*mw-a$oh+*MKz+#a=9Tt5&hQ$}*00Ms&N1*N`;x-Vs z1#t#J-9^OhAa(^&f}l={n1YxFX%B*W2N1*^K{|nS7IilfcY(MoNH-AFyNkF7#O@$H zK~V1{;@%MV0qF~ZdOs0+K+J&j2SI&+hzCME2xKq_>YgGV0&b! zdWaK1Hh`eM5d`rjkj)@lL_JZ&Nf0N4upp>!74bHRw}b2eK|MvpJ0ac$k_v))nuyaO z&H&jBg8J_w&V+am$X*cC_lbBv#0NkQf}pMyu@2%akV7D-XM-R<3~~hIsHh(k@o|Vx zfSd$D{gjCH5T6D)1A_Wl5ubzjJjewQ)Gvzo62v(mmqAd!BI2tMUjxYnLH)XjZ$Nw# z@;vEQ8mp{hqicqbCBwyj`vj!1Z^;` z2~ryb^U%tKyihv}IA8;B){6-Wz^1|W4n>VY%| zaRjjiu?DFNQXixd2-=`+V-QP_h9H=S^)&;*bj-(kEkT-q*nnU;ERPuNv0PISOv5sG z9n8aPBL^&l`N#q5!hB3`4T5=ShjrM4AV0Ll>)U}ifFK{VZ3%++*9rvl6d+C@XoGo( zF&(di_l#*+4)f6t>y*mlwJ;6K;589ry;!a-NIMW3#2G{h(gwr@gapBS%(G=Jx^#1;KJy9x>Wuxv?OahGqJI zcz_H7=?l^yq&G-EkO3f=k9nRTn9qO=1VJ0L9Snly(H8U29_=t4^RX=EV|lC-%VBxM zXpiME9n-Lk7sx0O9}r)Vp&&y*yg~dxFn>6R3Iy}eE)Zk{2->6VFc7psTg=BiERXsA zAfrLBY%oXw2-b@>h|vzq4gtvAfBkZ*mKqOm?ZN6b|-N)Uvb|3cxLzmc-UP}tw zE5N=4$fYU9sg8<%RNaL6J8yJvw^`R>?@j`x2!EV^MeQMpgf!qmXuojWK{+4gH|zs$ zep22sGa^+G-!(HT#2@FA5s2F`hgM&HuT7>{_epPW{8(AJUKuR~u{p%@`n!RxF^Gm8 zwd=Ks1F2tNy{o^&Gvx%G89C75*}?HTvqJVbKTJS$di^e}r{yXA&b1F7HL)z$VHXOd z6|%=UR1)N#)$E-bO*r-HYsN17E>VglrrQ*svj;XUYVQrUrXZD!GI!R?bfesshTHG! z6xGgb^s&?nm96cTzn@;HejLB0KzdIdo;Fg|n7Vnt#LhP`28=pY-8Id0qXO=!kUfq+ zGZ4$I3lwNy^XS4>Xur0`bGsWB=?c{Gz9hl1iTqm^b9|}^H9v&Zf~$p+-~VJo!&i!K zyA#K8Bkz#bIF7+uJ^vfyxMsHi8>qWk(b^!*RyE?jlO&jr{VA_^8I1KQAmzR>-oICG z(d&Gx-XG12;?|3E0sF7)sFkVqFn?;sT-;@3Znwq6ZtqUVZ_JUgN#7{Cp%J zUfsb8>i>4V>)d)fhCC_fi1BEM<@Ms6#d?j#?cIg*c4)stX^(sKR9587wMWNRP+Gll zD^%~o>hY++)$MzhHhVwzN(+>l>+r zc})(0`Q4+hOQCwl?|aJEyMS2GZ2U3CQFZ=^L)o*J9c{XFD^xG~0IYZWNxQTUaK;hU zEOplx?pBk7OXeJG{|!IzXj6#odSZQZlPeu<%0=Wkc3wKiaj0DdN27zk6{;8KT160b zy_%`Z!C&01rObdfS1bm90V~9R_>15B&9~7Jy5@JCZZ_8vlr0qf<_CQW)=Nz;nOX<@ zO6Ck@#xC$HWx=md-|#DrwddI&-{d9Q=DHu$i(?m`ZSYo^J_7s+ytSpF5Aly$pX%It z(I3NCt+&2X&PBjR|Vx z93e#Ch)-_`2~YBwF@!oG0Q2xOdoQ7OP7>-A=gj2XyTolntObg=< z6JeYS*LE2)na+iL4deQ3{v{I>&VwioGL*eLwB_u-#^2~i)ROLhr4ot@VQ5wx|EgQIXDWN9DHt|2W5Z0VCS(ZH6Am;5-jyqSeM5;JkAwnHRV}(qF z@Z77*PwdKHej*_ES1rxmU!8rr`T#Pi{rcgxs8>CnK4^nXX1%FY`}gwkk4^U>leZPi zynI{n31K;rVUDb1GAwtgRLO~KpxpwF^PNZr|FsO>%x5r6+3chk4p?PbysuKg1a%bG z{@6Q0cWGa zn!$59u0_)?GH--BO4lC9LXJKps6Z=1UZMt-0!kH4Y z2z7Z;x^CTfmliMX zb+P23R;^$Z66ddO?>n}+-GSNsEIy-Xr9Y!cFRe^sVByQMw|8kYC1JL|8Ow1lAxp#Z zX2b4i2*)iyetVh23XZ$%+G}wE6Vy?5*q}cV!ZRm4(^@%trU_`&@y1<89ly4FKuc_s z_>&$HX~*N!`#d7lr6yE5JAJrAo0mH@)3HsG$^N=za(jiU@r2r93==nGwqEZIZQ>UN zBX-2*iK;|`NK`S*^5a&kdTrsjuU+-s3z(peVyDF35yGJdYi~}VYi}0Nz5O@(-`n3X zc|sr9gI(^b?dV_iz{D*(XCf2D;p5}E4qW^_eio1Gu^??+4~J?Efpb=EkDPRsM$-#N zYY?Fh^POaR{0O}1d$H{Dn0r1a*`wckCS@G)eVc{>j~UxqznawD6y{ z^U*zrX~%ecif8H!GF&#yfMA*@Sw)l;Ev3Rx})HGeePtz0-K)wH1v=E^D&CKcSv8 zgk@KTX*71-80OApjx(R!DK`arr>-B%-pNrOow|?X%tHUZTF@q_qh$DDn+RdO6-y`G z9=UXqfRf{EBa`DUO9X7p9I`u#dYt;7aUYI2YYA3YegdQY{#n2;uWN zUjr&n{2Cyj*x3u0#Lf;Kv*sQ$**mvdy{fYZ2PM5hCbJe#*gY?z(r{r_;4<@Ygv-n> zw0AU&3n!Mlr@D2Ya$^-FB0M&DTw8=hZBdB_Q-ZYovzI70pY5YFPohZ=2!eWYOwV|k|I=yXUsxO#D50Ta|wCfFbo zA*?fMN6)*lJ9-MJV$j2_6@#jK%!4P>?AiN9ttsOec%_#sc$cK8YM~+LrmQ&cHgOL2 z&Zz|Zp{Eks`dsv7*)OpkIVquf{bLV?aoI|!4=)-#r)f1<*)L&PlTACK9cOc#Rr1$% z1x!#!`RIsDgz$xzd;3Zo+}jJNqSwsKie3?JmAWC5aYL7xSPbdkp>-yqPN<+7UgCP} z<}8M*&6kYIiuQSGG&d(S#aSe7zf&nAr2W)2W`w zq#ASo?r&*%Esw27CKdMo)uF=vbJ3-yF-*`5mi;{ES~O2UkQVgj3}0U zv9ga#iwPWOeMos-;sJZ2pre%IXR#1A>5$&+>i+a*0$S7l?U}Xh%d~P@giI!NfO9E& zQga;n2^EIAwR-YEt87w*pF4Ms{nqBrvHQyx^=H|uT{$jdmO{}x5T6RLmp3B2m%1$M zU-x0zq=ERZ3U!@+IH!OK>L@w2uy=&;h2zSGl}@Z^D4@BH@mJ?M4r^kz9sVuRm$ps^ zh-e4rMqOd_B~*xTHu>w=sjGDx&A>LxNTjh=_X5?YCcBzu94U9<%bTpV=6DnKqj~DS=PRFujGk+n^;yK4C_^R7Teiy z+(mfHn7g*amNFy(?{^#*sR|sxP3Jh}BUV|!1a*{YEs%*29;xxQg7br~6$F%6qs)uM z8gDD5eIV2?UtXz^Ub;k$t`#FL5$eCHjjI*>DfQukauxZx?{S0=zp;8-wg zV;%$R*y$|WtQ(vS_Ve?;0?(R|D=b@Y^MdUnkQ_Vv6@V)bDQ+dxnNPcz1?qIzyx)aj^LF?&Jn^A zWyhO-eKX!vKp)Di`|zQRPpK)Duy;z8HLJX-Oq}VJQOG2_tpC^4x4lYsO+Y5hd)AD3 zKlhn(J)zzWOtvKG^^;kK$vXi4WJJ!ImaE}e3~M&Ky8%}$&vRVgzc=(LV1hczq{hfZ z2%DQOGrsU~nX!PZP49lPHmze43+sTFFYQb#SAAbH(Rfl9WU|V%1?T+tGovYskcsuD z%O=*J;@&>@BGmhWS$5+fjfTu&n7B4@f*Ii6d+b^8TXFF2dNwP3un)&g`C>JMzJM2e2Fa~puI*dzwR|UTcRa+dpN^2^0wGyw7SG17*`zk%qW=){o+=_ zf}h1Vzcetq`DN&*w#OJIE0$%`BNU4MfebTj7o5?AJn6H$1;A*o;bTCB+RtZ&5#M44AsE=*ENv|+F`D+DnJdf=U9&%%WfR!H%O(rVFRn9NO&&} zigG&90NQ^o%kEkqHLmjZ|3;gbc4ipsF)TZ&uU_9|E6YAxfJ~0`$2D8cgAB9o0mmVe ze}9}*bcJ)1Wh^`Tg+eh$$J&5rgAq#w9fx;7-6oF9)LI3ugE!QFf9}}zC)BN%!6;x< zs>eAj>lF`e;(7bD3f{bK!T!mB#ACz80IPrBp9~zp+SIY)xGk6T`o>!srsnV9Pn!6p zo{zv0#&dcq{$ic@~HM)U&vz8^biT zVi@le8qGC$7E|!#Gv9YM7yITu&2a5<}TLjb#V;i2=5I| zcBdpvhfz9hH_OgUs5zt;tSJAdYqtFc*KBV_vTT<<9yvEUs8mDLgu4ECLVa~^N&*M% z@Nyx`+GuUNes=u%b?n-oUdMXFzM7&Nlk;kbLh%vSu`h>Wzrd3=1>V8?vG8mOtR7$P zzp=LeGoE42pMrNiYnAFetnE)_!mJrqKlWM)^lS`s@abau>YD$?`_Ag69yw|7zO&R* zqhZvnO?7A!^LpcyZ|GajE8uYD(iDanka&B)Tl#-vPYEWhdN1rLbqUgF z&U9nh>g%vg9<9B)34R?ok!4Gs?sn>2#~dyh+Djr+mhBd6jHy?ze7|5b(6x=Tn# zrPTex{z;~Gb;|WWaX+>XEBe%f3R;)@%#1=%J%I6{rtXt&2}t1yalIib6BIf6v56byBMCuVHcC4 zvf=l6u!<_1o$Egmc5?nxXBl|D^X;>YPkw}&g}E~cc7`p6v4IO#bKFzE)2goE*?xm} z!;dH0tX?q>&v!n+d5-i!9i<(tg5e#I52f=R0e$~`XI{#;&v$&UvosMtk z%+z_l7;Mu}Mn2ZI- zR4Q^OG0ZoDQ12Qyc60|=!;;~!mODCSsUN&${QKvC@vsMbc@&dz8}?7=Og3;l?6bRs zEb~iQ1i$-LgZDq7jHwgzgR@cS9XJhzPOY0m~e0*}^n zeEZNvuzDQh$1smhRfuzd_o45d7bAxkur~)`{&_K?pFb}SgWdAM0bJUrM|!<}7Bc~B zo$Fs|lri+q)M+gH`S74+dsh7544vZ7&>@tap#zeip>N(ioePCCbjKf_q4zogXM~g3 zv}l;cF7??!&*kuzF>3v&&oE-+H7wivM7Ox6{9fR%^1Fgx=NAqV6Zpjme5K!7ELC&b zXETKm*I4+zC?Vn9@khV4;5e0PHk@c-IT#CYZo0pIP+GH*8qK@%-~X+J#3afHzY>#E zEy0uI38BP9LWY?b9fH4eSSvBHg5M5YgkOD_tYbrNC^3><>eR3Vg@NXRe~;|B_b%|waG`Th)JG%6@<(I}Pb z<$A+RvMlf`F?l_apg2wlB_gvFxevDp!U2TX7t`6`kF$rly zP)@UiP+}q>!%WhTG)86NMso zn#5!roT&773rd@irP093=)1q&lKjbKSNuv$-pwGWc^iaKVj>~KO!}`>sZIt-Oishw z=xAV)9IR5!TTKl6-ml0cCSSYaS7Nf6h7)*eA(WU%$S{*5r@+U;pAZPWa{~5}qJWA1 zj9%}$!*HAA_Q$Wp1e`Qg4u2XCp~OT&hMD;9)o9Y{N=&ry2AZ@qC~egqy*?nwFcaDj zzY>$wAcE@hK?o%#5;Dvr7xuwzVPzz=$+~`odMmWa(;jf<1uJSpy<--NUx~>I_!Ytt zOCgk)NXRggO7IH;XhD(5xgCW1G_*;BFoojMO2bUxOc1^jlhaO|_ShyNl$c1!Fq8Z1 zHJZs|Bqo;^vFuG?(l<(>u!u0s(@esq*! zCRWM#m6$YeAk<&G3!%hBLWY^tgLm){D~ZX11dp7OF+ph=%k}#1-3>D-u^Yb^GjZ9X(X0a>AhZcJkF}`?OnSoGRrqSdOso&#S7LG>_K`KKg-~K5A;V1i zZda+Ujg*)?p3g9qMhB(+v0ksA4!?UeG>a#l#;?T0WGbOP7b}Dk6A2k+5|O6SjP;e6 z+}r}cyMZ?8Jz1lPYiF3r`78L9n0$q2MZJYWC^3^Gcn0hDBet!n7o@ysB1P1N^8GarHZmN!~{>_@GCKS9z&=dcM74z zL_&s{eEn0Q(84L7Fn7wpE=6+~v58TzS8&-dlRIzmD=}%h9LC9ZA(WU%$S{+6M->Xi zB#DU@ex2JAm_(~Jn&ZWI?)3c|zY>!>uv2-I6+(%LgbXv83jU-M{2oeZlQ1~7wt;an zd6-7yV8=`_G>fNv!LP(*MKGbxoG6466A2k+vJ+1Hp1?0O1txQ$r<(zj^FvjtebI(` z2mb02e(T`P|NQ~7$?L#zSz$sbF_DmACJSIUIucGp1txB3Eb9QhGaYt3%NFBVjMo$X z5(1f=oJml*i9(3!SgV8#GfBLzQccc(FaETgwLvC1EA{%nU;ccXK#L~jb-++!A|b;} z#+_6sEc1KEEsanMZKBst+Gv=`uQN`5mAS)lzluNkb$l%R?(!FT?!YPKFY+wrxT5P5 zPMhKRH3~y%7E8$REZ&+6zbG4mcKFtl;}5_5=hr8C{Z>E2v-sCpv;8{j*nh0;)iIl3 zH4mZGI}$S7JN1t%6z#@Jy@PA}QsC{kz?$vs8pFF5zs~#4uk#LA_`P^gZG0~lLaBEo zWVm-?=0QK?zZcgR-;3+RNmFs&i+`QHf`9Ixm}KCNi3zM$g!PGp47UmHpX5%FMyv_^ zRmc%|Lk}OQQoW}Q`4jx5L(x5@adEhdG%ikJA|b;}5@GN01^<^D=-C3{jRp6VmcieR z_P=9z?)*CYY=!q8y+#vM>lZ>OwTXlbx5<%HLeB`^{sf%&#llX`1b>wj!?Hb>2J-v%IsZqUWfVT&iGp8A+N>2qsZAtgxJ^9A!e4a3 z?_7iti|0EPVHVeqfj#tM?D!Qv^IGMDXI?@mF_DmACdLooUxUg&^EwA-Ua#P6^j4x? zZ}`j$f9X)<91wgGoczH@Vj>~KOd7&2XafAp211*_-<;UsIpDqN@YhwvIN$ko&PEHL z7rV?MsMu*jD7A@%47Z8VA-z64{|)^w_$}z&jG(mNhpAMR&l{e_zs?ytjtJq@3HJ*A z`~Px6rv{O_zK`RzF4+_JXT$$f-g{31>77-DwptcRg$%1k*K8cA8)v>=`{z{W{WpJ~ zL8-4LkQsNY(C=16QYWWXqc63L)RkPcUQ3v5aoD1pLG5k3fpqL{PA6`Nq}+3>(dDQ} zU3(@$TO)T}JO9%&DCesi$j|T1=?l9eVGrDbp3^H*_sn~P*7N}FTIc!<>f_FhWV=UI zX*w&CI@hH--FZ-??os?k?TK^ST<88dgBrjklNP^O(Cr=5>QQr9=uq)l8Rb-K}8v=&!r<*sWpsO}E?$<@l5^x18Zly$?} zbSG|xuE)_t?TwgdWqigA%B%G;GOm7Yx?@Nrm3N^I-EzeYUEbp)ZFI&CWv_8FC}YJ% za#gF}=y|0hsl(gq()-@4b(+j%?T$USl$K>@P`)2;k)!eo(w8jMy5GyO z+C8tzlGVf1lvBHB0Pw765I$+*}?&L91ci%iwdvf#yvhn)} zYOqHcDsz8Ry4T&wl#{D9ZPIj{ZrGAd+Ki72N$dKPD5vg~sEVI#XyZ!ZROBFA`r6oF z-Kic4+H3a`$a@dRQy(*{Q9Eikr*Gv>pz056PIv1ZpwoG+)mru1O$K>|P|s%8qWV|2 zqhIz7rAl_Qqw|gq*X_NtQfqzdB)KhSG_`G0UFylhmUN8;!Bl$XR&*_kp}HZ)%d~38 zTjap?0aWKI4XE)8Ths5>22!fD*7V0g19h*SEYfay_lk61?@u}AG@^2i?dd)nR8(#= zd;0gxzPkG-=4w~pF`}%t`%v>fHKt;EIM7LHzErcR4s?8fciqwB(b~MkvQ)-xFDiOv zQ>saTBfaa%P-@yHNBX?7o36_CXl=7ZbLvgs!BpEr*3?B$C%S{LCzZ0%iMANv&gX|8 zszsUA96w4uk3A4Juh(uQVod+Dk|`BHZ*sho};)YfXYRQBmM^ut-6l)GJ9 zy7Q$ze7^Y`D=PV3A8Oo4TdI2BwzN}YFY3v`w)EFt{dCzOGqu4_t*Q3Ly{We=Y^ede z+tM3{45cEQIn#9pc<3?@&eGn`ZbrRH>`6V@X-f_H+?F;~cvBO@ooUy`wLGZ%eJSa;AIl^rk*;ai-5VWOT7dXKTxw*-_q0-Kl7;Eu~O6(>~X{sm~cg z`A=f`$KNPlQ@sA4MXqlwUjK{8f3(Q|oyb2yKS%`os8@#(xtS|666_zq&a7o^UoOOuP@Bs-7tS`Wb@ZVoWD5#|AhH}2IhZ5nE!*s`QJmF|L8wFME?;3 z{-dhsKc8xH<2 z2>jnW@PA#v|4IIHfy{quME{u${$7kRpZ}%SY(D?%F{!{?uWo=ENOrX{IucJ%7GNz|EE3Oan)4&8L(I-kGm z=q_r(u@mIPx=!?8L8(;p+s^bAw@lqs=ZAd$(7F4mdCDBpy*)`+a6Uj)>fC`I^YoCe zb;vtDe@o5dRNRt0a$AWm^oGmFsf->y=$kFh=ms7z(&74O1apb%uX#=$YTt(*Q7?y@ za*d(4J-Mbk6I+JQuV;}*9kTmO20t83?|PO;4LIXXSNi;?&SFCqK0m3|b1K}tBz5kB zA8l9t1?62PkiPBsN|&Oq#pidO{E1rIq#RZLb};=e_%pR8a6G*|J+@xiEVCP} z`TUi=E7MDj>Qh^lv*@n3D$_@%&84^KDrIF4bLR8IgR9feXEmV|x8~6)#x>|mofgrr zs#s)MPNDhy)sDZ>?^2pm_mqq2Pv?K5Kc0x8H<;GWvaH#K&wsU|0UZ{kpw9P>r7N^; zNZ7kj;vR3T%=JRKqcc5(_xKTOR6X-g#9ci!9Tj)*6Ewa-4 z`tteuXHN9R#@(oe<2TZYo7>O_b|%us1L(eDbMMf>CK)l zbgwhXbUc)g6U!ff@+MGzACzwj<<~)ZL)SON-_ZRVYCl8mZ>aw|K>wc;`~NQV|1IeM zr_ldO=zk07e?#NP(D+M)@q0`*eqX`(br8pI4vb$z^#=b}5&T~j@P85DKWB*kGZp;jLhzsA;6Go1|Fi@D*%th7Bhmj} z1pj*g{BL{kziYw&o(KPH$bYv0|G!G+|4YjJe>V94itzkU$(|nx@cg(bK0jW=^Mior z&s_2O6C*x<0^s>$1kaym@cc3K{Q4c9f2YOg-(TYMZxTHJy211B7(D+BJwFXSfBzTd Cm}OT0 literal 0 HcmV?d00001 diff --git a/examples/others/iqm_loader/resources/guyanim.iqm b/examples/others/iqm_loader/resources/guyanim.iqm new file mode 100644 index 0000000000000000000000000000000000000000..824a68a3bcd323d8d69451cec545bc17e00e252d GIT binary patch literal 18244 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 literal 0 HcmV?d00001 diff --git a/examples/others/iqm_loader/resources/guytex.png b/examples/others/iqm_loader/resources/guytex.png new file mode 100644 index 0000000000000000000000000000000000000000..7f8135521c53c815f262bfffabb25b6c56027145 GIT binary patch literal 302388 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%0AjuluH` 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

KU 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�sS?U+_V#Z01{HI34Q{I@Y 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%0D9fN=mpP$EiwH*WaKi09rxb}r{I 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 // Required for: FILE + +//#define RIQM_STATIC +#ifdef RIQM_STATIC + #define RIQMDEF static // Functions just visible to module including this file +#else + #ifdef __cplusplus + #define RIQMDEF extern "C" // Functions visible from other files (no name mangling of functions in C++) + #else + #define RIQMDEF extern // Functions visible from other files + #endif +#endif + +//---------------------------------------------------------------------------------- +// Types and Structures Definition +//---------------------------------------------------------------------------------- + +#define JOINT_NAME_LENGTH 32 // Joint name string length +#define MESH_NAME_LENGTH 32 // Mesh name string length + +typedef struct Joint { + char name[JOINT_NAME_LENGTH]; + int parent; +} Joint; + +typedef struct Pose { + Vector3 translation; + Quaternion rotation; + Vector3 scale; +} Pose; + +typedef struct Animation { + int jointCount; + Joint *joints; // NOTE: Joints in anims do not have names + + int frameCount; + float framerate; + + Pose **framepose; +} Animation; + +typedef struct AnimatedMesh { + char name[MESH_NAME_LENGTH]; + + int vertexCount; + int triangleCount; + + float *vertices; + float *normals; + float *texcoords; + float *animVertices; + float *animNormals; + unsigned short *triangles; + + int *weightId; + float *weightBias; + + unsigned int vaoId; + unsigned int vboId[7]; +} AnimatedMesh; + +typedef struct AnimatedModel { + int meshCount; + AnimatedMesh *mesh; + + int materialCount; + int *meshMaterialId; + Material *materials; + + int jointCount; + Joint *joints; + + Pose *basepose; + Matrix transform; +} AnimatedModel; + +//---------------------------------------------------------------------------------- +// Module Functions Declaration +//---------------------------------------------------------------------------------- + +// Loading/Unloading functions +RIQMDEF AnimatedModel LoadAnimatedModel(const char *filename); +RIQMDEF void UnloadAnimatedModel(AnimatedModel model); +RIQMDEF Animation LoadAnimation(const char *filename); +RIQMDEF void UnloadAnimation(Animation anim); + +RIQMDEF AnimatedModel AnimatedModelAddTexture(AnimatedModel model,const char *filename); // GENERIC! +RIQMDEF AnimatedModel SetMeshMaterial(AnimatedModel model,int meshid, int textureid); // GENERIC! + + +// Usage functionality +RIQMDEF bool CheckSkeletonsMatch(AnimatedModel model, Animation anim); +RIQMDEF void AnimateModel(AnimatedModel model, Animation anim, int frame); +RIQMDEF void DrawAnimatedModel(AnimatedModel model,Vector3 position,float scale,Color tint); +RIQMDEF void DrawAnimatedModelEx(AnimatedModel model,Vector3 position,Vector3 rotationAxis,float rotationAngle, Vector3 scale,Color tint); + +#endif // RIQM_H + + +/*********************************************************************************** +* +* RIQM IMPLEMENTATION +* +************************************************************************************/ + +#if defined(RIQM_IMPLEMENTATION) + +//#include "utils.h" // Required for: fopen() Android mapping + +#include // Required for: FILE, fopen(), fclose(), feof(), fseek(), fread() +#include // Required for: malloc(), free() +#include // Required for: strncmp(),strcpy() + +#include "raymath.h" // Required for: Vector3, Quaternion functions +#include "rlgl.h" // raylib OpenGL abstraction layer to OpenGL 1.1, 2.1, 3.3+ or ES2 + +#include "glad.h" + + +//---------------------------------------------------------------------------------- +// Defines and Macros +//---------------------------------------------------------------------------------- +#define IQM_MAGIC "INTERQUAKEMODEL" // IQM file magic number +#define IQM_VERSION 2 // only IQM version 2 supported +#define ANIMJOINTNAME "ANIMJOINT" // default joint name (used in Animation) + +//---------------------------------------------------------------------------------- +// Types and Structures Definition +//---------------------------------------------------------------------------------- +// iqm file structs +typedef struct IQMHeader { + char magic[16]; + unsigned int version; + unsigned int filesize; + unsigned int flags; + unsigned int num_text, ofs_text; + unsigned int num_meshes, ofs_meshes; + unsigned int num_vertexarrays, num_vertexes, ofs_vertexarrays; + unsigned int num_triangles, ofs_triangles, ofs_adjacency; + unsigned int num_joints, ofs_joints; + unsigned int num_poses, ofs_poses; + unsigned int num_anims, ofs_anims; + unsigned int num_frames, num_framechannels, ofs_frames, ofs_bounds; + unsigned int num_comment, ofs_comment; + unsigned int num_extensions, ofs_extensions; +} IQMHeader; + +typedef struct IQMMesh { + unsigned int name; + unsigned int material; + unsigned int first_vertex, num_vertexes; + unsigned int first_triangle, num_triangles; +} IQMMesh; + +typedef enum { + IQM_POSITION = 0, + IQM_TEXCOORD = 1, + IQM_NORMAL = 2, + IQM_TANGENT = 3, // tangents unused by default + IQM_BLENDINDEXES = 4, + IQM_BLENDWEIGHTS = 5, + IQM_COLOR = 6, // vertex colors unused by default + IQM_CUSTOM = 0x10 // custom vertex values unused by default +} IQMVertexType; + +typedef struct IQMTriangle { + unsigned int vertex[3]; +} IQMTriangle; + +typedef struct IQMAdjacency { // adjacency unused by default + unsigned int triangle[3]; +} IQMAdjacency; + +typedef struct IQMJoint { + unsigned int name; + int parent; + float translate[3], rotate[4], scale[3]; +} IQMJoint; + +typedef struct IQMPose { + int parent; + unsigned int mask; + float channeloffset[10]; + float channelscale[10]; +} IQMPose; + +typedef struct IQMAnim { + unsigned int name; + unsigned int first_frame, num_frames; + float framerate; + unsigned int flags; +} IQMAnim; + +typedef struct IQMVertexArray { + unsigned int type; + unsigned int flags; + unsigned int format; + unsigned int size; + unsigned int offset; +} IQMVertexArray; + +typedef struct IQMBounds { // bounds unused by default + float bbmin[3], bbmax[3]; + float xyradius, radius; +} IQMBounds; + +//---------------------------------------------------------------------------------- +// Global Variables Definition +//---------------------------------------------------------------------------------- + +//---------------------------------------------------------------------------------- +// Module specific Functions Declaration +//---------------------------------------------------------------------------------- +void rlLoadAnimatedMesh(AnimatedMesh *amesh, bool dynamic); +void rlUnloadAnimatedMesh(AnimatedMesh *amesh); +void rlUpdateAnimatedMesh(AnimatedMesh *amesh); +void rlDrawAnimatedMesh(AnimatedMesh amesh, Material material, Matrix transform); + +static AnimatedModel LoadIQM(const char *filename); + +//---------------------------------------------------------------------------------- +// Module Functions Definition +//---------------------------------------------------------------------------------- +void rlLoadAnimatedMesh(AnimatedMesh *amesh, bool dynamic) +{ + amesh->vaoId = 0; // Vertex Array Object + amesh->vboId[0] = 0; // Vertex positions VBO << these are the animated vertices in animVertices + amesh->vboId[1] = 0; // Vertex texcoords VBO + amesh->vboId[2] = 0; // Vertex normals VBO << these are the animated normals in animNormals + amesh->vboId[3] = 0; // Vertex colors VBO + amesh->vboId[4] = 0; // Vertex tangents VBO UNUSED + amesh->vboId[5] = 0; // Vertex texcoords2 VBO UNUSED + amesh->vboId[6] = 0; // Vertex indices VBO + +#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) + int drawHint = GL_STATIC_DRAW; + if (dynamic) drawHint = GL_DYNAMIC_DRAW; + + if (vaoSupported) + { + // Initialize Quads VAO (Buffer A) + glGenVertexArrays(1, &amesh->vaoId); + glBindVertexArray(amesh->vaoId); + } + + // NOTE: Attributes must be uploaded considering default locations points + + // Enable vertex attributes: position (shader-location = 0) + glGenBuffers(1, &amesh->vboId[0]); + glBindBuffer(GL_ARRAY_BUFFER, amesh->vboId[0]); + glBufferData(GL_ARRAY_BUFFER, sizeof(float)*3*amesh->vertexCount, amesh->animVertices, drawHint); + glVertexAttribPointer(0, 3, GL_FLOAT, 0, 0, 0); + glEnableVertexAttribArray(0); + + // Enable vertex attributes: texcoords (shader-location = 1) + glGenBuffers(1, &amesh->vboId[1]); + glBindBuffer(GL_ARRAY_BUFFER, amesh->vboId[1]); + glBufferData(GL_ARRAY_BUFFER, sizeof(float)*2*amesh->vertexCount, amesh->texcoords, drawHint); + glVertexAttribPointer(1, 2, GL_FLOAT, 0, 0, 0); + glEnableVertexAttribArray(1); + + // Enable vertex attributes: normals (shader-location = 2) + if (amesh->animNormals != NULL) + { + glGenBuffers(1, &amesh->vboId[2]); + glBindBuffer(GL_ARRAY_BUFFER, amesh->vboId[2]); + glBufferData(GL_ARRAY_BUFFER, sizeof(float)*3*amesh->vertexCount, amesh->animNormals, drawHint); + glVertexAttribPointer(2, 3, GL_FLOAT, 0, 0, 0); + glEnableVertexAttribArray(2); + } + else + { + // Default color vertex attribute set to WHITE + glVertexAttrib3f(2, 1.0f, 1.0f, 1.0f); + glDisableVertexAttribArray(2); + } +// colors UNUSED +/* + // Default color vertex attribute (shader-location = 3) + if (mesh->colors != NULL) + { + glGenBuffers(1, &amesh->vboId[3]); + glBindBuffer(GL_ARRAY_BUFFER, amesh->vboId[3]); + glBufferData(GL_ARRAY_BUFFER, sizeof(unsigned char)*4*mesh->vertexCount, mesh->colors, drawHint); + glVertexAttribPointer(3, 4, GL_UNSIGNED_BYTE, GL_TRUE, 0, 0); + glEnableVertexAttribArray(3); + } + else + { + // Default color vertex attribute set to WHITE + glVertexAttrib4f(3, 1.0f, 1.0f, 1.0f, 1.0f); + glDisableVertexAttribArray(3); + } +*/ +// colors to default + glVertexAttrib4f(3, 1.0f, 1.0f, 1.0f, 1.0f); + glDisableVertexAttribArray(3); + +// tangents UNUSED +/* + // Default tangent vertex attribute (shader-location = 4) + if (mesh->tangents != NULL) + { + glGenBuffers(1, &mesh->vboId[4]); + glBindBuffer(GL_ARRAY_BUFFER, mesh->vboId[4]); + glBufferData(GL_ARRAY_BUFFER, sizeof(float)*4*mesh->vertexCount, mesh->tangents, drawHint); + glVertexAttribPointer(4, 4, GL_FLOAT, 0, 0, 0); + glEnableVertexAttribArray(4); + } + else + { + // Default tangents vertex attribute + glVertexAttrib4f(4, 0.0f, 0.0f, 0.0f, 0.0f); + glDisableVertexAttribArray(4); + } +*/ +// tangents to default + glVertexAttrib4f(4, 0.0f, 0.0f, 0.0f, 0.0f); + glDisableVertexAttribArray(4); + +// texcoords2 UNUSED +/* + // Default texcoord2 vertex attribute (shader-location = 5) + if (mesh->texcoords2 != NULL) + { + glGenBuffers(1, &mesh->vboId[5]); + glBindBuffer(GL_ARRAY_BUFFER, mesh->vboId[5]); + glBufferData(GL_ARRAY_BUFFER, sizeof(float)*2*mesh->vertexCount, mesh->texcoords2, drawHint); + glVertexAttribPointer(5, 2, GL_FLOAT, 0, 0, 0); + glEnableVertexAttribArray(5); + } + else + { + // Default texcoord2 vertex attribute + glVertexAttrib2f(5, 0.0f, 0.0f); + glDisableVertexAttribArray(5); + } +*/ +// texcoords2 to default + glVertexAttrib2f(5, 0.0f, 0.0f); + glDisableVertexAttribArray(5); + + if (amesh->triangles != NULL) + { + glGenBuffers(1, &amesh->vboId[6]); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, amesh->vboId[6]); + glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(unsigned short)*amesh->triangleCount*3, amesh->triangles, GL_STATIC_DRAW); + } + + if (vaoSupported) + { + if (amesh->vaoId > 0) TraceLog(LOG_INFO, "[VAO ID %i] Mesh uploaded successfully to VRAM (GPU)", amesh->vaoId); + else TraceLog(LOG_WARNING, "Mesh could not be uploaded to VRAM (GPU)"); + } + else + { + TraceLog(LOG_INFO, "[VBOs] Mesh uploaded successfully to VRAM (GPU)"); + } +#endif +} + +// Unload mesh data from CPU and GPU +void rlUnloadAnimatedMesh(AnimatedMesh *amesh) +{ + if (amesh->vertices != NULL) free(amesh->vertices); + if (amesh->animVertices != NULL) free(amesh->animVertices); + if (amesh->texcoords != NULL) free(amesh->texcoords); + if (amesh->normals != NULL) free(amesh->normals); + if (amesh->animNormals != NULL) free(amesh->animNormals); +// if (mesh->colors != NULL) free(mesh->colors); +// if (mesh->tangents != NULL) free(mesh->tangents); +// if (mesh->texcoords2 != NULL) free(mesh->texcoords2); + if (amesh->triangles != NULL) free(amesh->triangles); + if (amesh->weightId != NULL) free(amesh->weightId); + if (amesh->weightBias != NULL) free(amesh->weightBias); + + rlDeleteBuffers(amesh->vboId[0]); // vertex + rlDeleteBuffers(amesh->vboId[1]); // texcoords + rlDeleteBuffers(amesh->vboId[2]); // normals + rlDeleteBuffers(amesh->vboId[3]); // colors + rlDeleteBuffers(amesh->vboId[4]); // tangents + rlDeleteBuffers(amesh->vboId[5]); // texcoords2 + rlDeleteBuffers(amesh->vboId[6]); // indices + + rlDeleteVertexArrays(amesh->vaoId); +} + +// Update vertex and normal data into GPU +void rlUpdateAnimatedMesh(AnimatedMesh *amesh) +{ +#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) + // Activate mesh VAO + if (vaoSupported) glBindVertexArray(amesh->vaoId); + + // Update positions data + glBindBuffer(GL_ARRAY_BUFFER, amesh->vboId[0]); + glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(float)*3*amesh->vertexCount, amesh->animVertices); + + // Update normals data + glBindBuffer(GL_ARRAY_BUFFER, amesh->vboId[2]); + glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(float)*3*amesh->vertexCount, amesh->animNormals); + + // Unbind the current VAO + if (vaoSupported) glBindVertexArray(0); + + //mesh.vertices = glMapBuffer(GL_ARRAY_BUFFER, GL_READ_WRITE); + // Now we can modify vertices + //glUnmapBuffer(GL_ARRAY_BUFFER); +#endif +} + +// Draw a 3d mesh with material and transform +void rlDrawAnimatedMesh(AnimatedMesh amesh, Material material, Matrix transform) +{ +#if defined(GRAPHICS_API_OPENGL_11) +/* + glEnable(GL_TEXTURE_2D); + glBindTexture(GL_TEXTURE_2D, material.maps[MAP_DIFFUSE].texture.id); + + // NOTE: On OpenGL 1.1 we use Vertex Arrays to draw model + glEnableClientState(GL_VERTEX_ARRAY); // Enable vertex array + glEnableClientState(GL_TEXTURE_COORD_ARRAY); // Enable texture coords array + + //if (amesh.normals != NULL) glEnableClientState(GL_NORMAL_ARRAY); // Enable normals array + //if (amesh.colors != NULL) glEnableClientState(GL_COLOR_ARRAY); // Enable colors array + + glVertexPointer(3, GL_FLOAT, 0, amesh.animVertices); // Pointer to vertex coords array + glTexCoordPointer(2, GL_FLOAT, 0, amesh.texcoords); // Pointer to texture coords array + if (amesh.animNormals != NULL) glNormalPointer(GL_FLOAT, 0, amesh.animNormals); // Pointer to normals array + //if (mesh.colors != NULL) glColorPointer(4, GL_UNSIGNED_BYTE, 0, mesh.colors); // Pointer to colors array + + rlPushMatrix(); + rlMultMatrixf(MatrixToFloat(transform)); + rlColor4ub(material.maps[MAP_DIFFUSE].color.rotation, material.maps[MAP_DIFFUSE].color.g, material.maps[MAP_DIFFUSE].color.b, material.maps[MAP_DIFFUSE].color.a); + + if (amesh.triangles != NULL) glDrawElements(GL_TRIANGLES, amesh.triangleCount*3, GL_UNSIGNED_SHORT, amesh.triangles); + else glDrawArrays(GL_TRIANGLES, 0, amesh.vertexCount); + rlPopMatrix(); + + glDisableClientState(GL_VERTEX_ARRAY); // Disable vertex array + glDisableClientState(GL_TEXTURE_COORD_ARRAY); // Disable texture coords array + if (amesh.animNormals != NULL) glDisableClientState(GL_NORMAL_ARRAY); // Disable normals array + //if (mesh.colors != NULL) glDisableClientState(GL_NORMAL_ARRAY); // Disable colors array + + glDisable(GL_TEXTURE_2D); + glBindTexture(GL_TEXTURE_2D, 0); +*/ +#endif + +#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) + // Bind shader program + glUseProgram(material.scalehader.id); + + // Matrices and other values required by shader + //----------------------------------------------------- + // Calculate and send to shader model matrix (used by PBR shader) + if (material.scalehader.locs[LOC_MATRIX_MODEL] != -1) SetShaderValueMatrix(material.scalehader, material.scalehader.locs[LOC_MATRIX_MODEL], transform); + + // Upload to shader material.colDiffuse + if (material.scalehader.locs[LOC_COLOR_DIFFUSE] != -1) + glUniform4f(material.scalehader.locs[LOC_COLOR_DIFFUSE], (float)material.maps[MAP_DIFFUSE].color.rotation/255.0f, + (float)material.maps[MAP_DIFFUSE].color.g/255.0f, + (float)material.maps[MAP_DIFFUSE].color.b/255.0f, + (float)material.maps[MAP_DIFFUSE].color.a/255.0f); + + // Upload to shader material.colSpecular (if available) + if (material.scalehader.locs[LOC_COLOR_SPECULAR] != -1) + glUniform4f(material.scalehader.locs[LOC_COLOR_SPECULAR], (float)material.maps[MAP_SPECULAR].color.rotation/255.0f, + (float)material.maps[MAP_SPECULAR].color.g/255.0f, + (float)material.maps[MAP_SPECULAR].color.b/255.0f, + (float)material.maps[MAP_SPECULAR].color.a/255.0f); + + if (material.scalehader.locs[LOC_MATRIX_VIEW] != -1) SetShaderValueMatrix(material.scalehader, material.scalehader.locs[LOC_MATRIX_VIEW], modelview); + if (material.scalehader.locs[LOC_MATRIX_PROJECTION] != -1) SetShaderValueMatrix(material.scalehader, material.scalehader.locs[LOC_MATRIX_PROJECTION], projection); + + // At this point the modelview matrix just contains the view matrix (camera) + // That's because BeginMode3D() sets it an no model-drawing function modifies it, all use rlPushMatrix() and rlPopMatrix() + Matrix matView = modelview; // View matrix (camera) + Matrix matProjection = projection; // Projection matrix (perspective) + + // Calculate model-view matrix combining matModel and matView + Matrix matModelView = MatrixMultiply(transform, matView); // Transform to camera-space coordinates + //----------------------------------------------------- + + // Bind active texture maps (if available) + for (int i = 0; i < MAX_MATERIAL_MAPS; i++) + { + if (material.maps[i].texture.id > 0) + { + glActiveTexture(GL_TEXTURE0 + i); + if ((i == MAP_IRRADIANCE) || (i == MAP_PREFILTER) || (i == MAP_CUBEMAP)) glBindTexture(GL_TEXTURE_CUBE_MAP, material.maps[i].texture.id); + else glBindTexture(GL_TEXTURE_2D, material.maps[i].texture.id); + + glUniform1i(material.scalehader.locs[LOC_MAP_DIFFUSE + i], i); + } + } + + // Bind vertex array objects (or VBOs) + if (vaoSupported) glBindVertexArray(amesh.vaoId); + else + { + // TODO: Simplify VBO binding into a for loop + + // Bind mesh VBO data: vertex position (shader-location = 0) + glBindBuffer(GL_ARRAY_BUFFER, amesh.vboId[0]); + glVertexAttribPointer(material.scalehader.locs[LOC_VERTEX_POSITION], 3, GL_FLOAT, 0, 0, 0); + glEnableVertexAttribArray(material.scalehader.locs[LOC_VERTEX_POSITION]); + + // Bind mesh VBO data: vertex texcoords (shader-location = 1) + glBindBuffer(GL_ARRAY_BUFFER, amesh.vboId[1]); + glVertexAttribPointer(material.scalehader.locs[LOC_VERTEX_TEXCOORD01], 2, GL_FLOAT, 0, 0, 0); + glEnableVertexAttribArray(material.scalehader.locs[LOC_VERTEX_TEXCOORD01]); + + // Bind mesh VBO data: vertex normals (shader-location = 2, if available) + if (material.scalehader.locs[LOC_VERTEX_NORMAL] != -1) + { + glBindBuffer(GL_ARRAY_BUFFER, amesh.vboId[2]); + glVertexAttribPointer(material.scalehader.locs[LOC_VERTEX_NORMAL], 3, GL_FLOAT, 0, 0, 0); + glEnableVertexAttribArray(material.scalehader.locs[LOC_VERTEX_NORMAL]); + } + + // Bind mesh VBO data: vertex colors (shader-location = 3, if available) + if (material.scalehader.locs[LOC_VERTEX_COLOR] != -1) + { + if (amesh.vboId[3] != 0) + { + glBindBuffer(GL_ARRAY_BUFFER, amesh.vboId[3]); + glVertexAttribPointer(material.scalehader.locs[LOC_VERTEX_COLOR], 4, GL_UNSIGNED_BYTE, GL_TRUE, 0, 0); + glEnableVertexAttribArray(material.scalehader.locs[LOC_VERTEX_COLOR]); + } + else + { + // Set default value for unused attribute + // NOTE: Required when using default shader and no VAO support + glVertexAttrib4f(material.scalehader.locs[LOC_VERTEX_COLOR], 1.0f, 1.0f, 1.0f, 1.0f); + glDisableVertexAttribArray(material.scalehader.locs[LOC_VERTEX_COLOR]); + } + } + + // Bind mesh VBO data: vertex tangents (shader-location = 4, if available) + if (material.scalehader.locs[LOC_VERTEX_TANGENT] != -1) + { + glBindBuffer(GL_ARRAY_BUFFER, amesh.vboId[4]); + glVertexAttribPointer(material.scalehader.locs[LOC_VERTEX_TANGENT], 4, GL_FLOAT, 0, 0, 0); + glEnableVertexAttribArray(material.scalehader.locs[LOC_VERTEX_TANGENT]); + } + + // Bind mesh VBO data: vertex texcoords2 (shader-location = 5, if available) + if (material.scalehader.locs[LOC_VERTEX_TEXCOORD02] != -1) + { + glBindBuffer(GL_ARRAY_BUFFER, amesh.vboId[5]); + glVertexAttribPointer(material.scalehader.locs[LOC_VERTEX_TEXCOORD02], 2, GL_FLOAT, 0, 0, 0); + glEnableVertexAttribArray(material.scalehader.locs[LOC_VERTEX_TEXCOORD02]); + } + + if (amesh.triangles != NULL) glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, amesh.vboId[6]); + } + + int eyesCount = 1; +#if defined(SUPPORT_VR_SIMULATOR) + if (vrStereoRender) eyesCount = 2; +#endif + + for (int eye = 0; eye < eyesCount; eye++) + { + if (eyesCount == 1) modelview = matModelView; + #if defined(SUPPORT_VR_SIMULATOR) + else SetStereoView(eye, matProjection, matModelView); + #endif + + // Calculate model-view-projection matrix (MVP) + Matrix matMVP = MatrixMultiply(modelview, projection); // Transform to screen-space coordinates + + // Send combined model-view-projection matrix to shader + glUniformMatrix4fv(material.scalehader.locs[LOC_MATRIX_MVP], 1, false, MatrixToFloat(matMVP)); + + // Draw call! + if (amesh.triangles != NULL) glDrawElements(GL_TRIANGLES, amesh.triangleCount*3, GL_UNSIGNED_SHORT, 0); // Indexed vertices draw + else glDrawArrays(GL_TRIANGLES, 0, amesh.vertexCount); + } + + // Unbind all binded texture maps + for (int i = 0; i < MAX_MATERIAL_MAPS; i++) + { + glActiveTexture(GL_TEXTURE0 + i); // Set shader active texture + if ((i == MAP_IRRADIANCE) || (i == MAP_PREFILTER) || (i == MAP_CUBEMAP)) glBindTexture(GL_TEXTURE_CUBE_MAP, 0); + else glBindTexture(GL_TEXTURE_2D, 0); // Unbind current active texture + } + + // Unind vertex array objects (or VBOs) + if (vaoSupported) glBindVertexArray(0); + else + { + glBindBuffer(GL_ARRAY_BUFFER, 0); + if (amesh.triangles != NULL) glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); + } + + // Unbind shader program + glUseProgram(0); + + // Restore projection/modelview matrices + // NOTE: In stereo rendering matrices are being modified to fit every eye + projection = matProjection; + modelview = matView; +#endif +} + +#ifdef __cplusplus +extern "C" { // Prevents name mangling of functions +#endif + +// Load .iqm file and initialize animated model +AnimatedModel LoadAnimatedModel(const char *filename) +{ + AnimatedModel out = LoadIQM(filename); + + for (int i = 0; i < out.meshCount; i++) rlLoadAnimatedMesh(&out.mesh[i], false); + + out.transform = MatrixIdentity(); + out.meshMaterialId = malloc(sizeof(int)*out.meshCount); + out.materials = NULL; + out.materialCount = 0; + + for (int i = 0; i < out.meshCount; i++) out.meshMaterialId[i] = -1; + + return out; +} + +// Add a texture to an animated model +AnimatedModel AnimatedModelAddTexture(AnimatedModel model, const char *filename) +{ + Texture2D texture = LoadTexture(filename); + + model.materials = realloc(model.materials, sizeof(Material)*(model.materialCount + 1)); + model.materials[model.materialCount] = LoadMaterialDefault(); + model.materials[model.materialCount].maps[MAP_DIFFUSE].texture = texture; + model.materialCount++; + + return model; +} + +// Set the material for a mesh +AnimatedModel SetMeshMaterial(AnimatedModel model, int meshid, int textureid) +{ + if (meshid > model.meshCount) + { + TraceLog(LOG_WARNING, "MeshId greater than meshCount\n"); + return model; + } + + if (textureid > model.materialCount) + { + TraceLog(LOG_WARNING,"textureid greater than materialCount\n"); + return model; + } + + model.meshMaterialId[meshid] = textureid; + + return model; +} + +// Load animations from a .iqm file +Animation LoadAnimationFromIQM(const char *filename) +{ + Animation animation = { 0 }; + + FILE *iqmFile; + IQMHeader iqm; + + iqmFile = fopen(filename,"rb"); + + if (!iqmFile) + { + TraceLog(LOG_ERROR, "[%s] Unable to open file", filename); + return animation; + } + + // header + fread(&iqm, sizeof(IQMHeader), 1, iqmFile); + + if (strncmp(iqm.magic, IQM_MAGIC, sizeof(IQM_MAGIC))) + { + TraceLog(LOG_ERROR, "Magic Number \"%s\"does not match.", iqm.magic); + fclose(iqmFile); + return animation; + } + + if (iqm.version != IQM_VERSION) + { + TraceLog(LOG_ERROR, "IQM version %i is incorrect.", iqm.version); + fclose(iqmFile); + return animation; + } + + // header + if (iqm.num_anims > 1) TraceLog(LOG_WARNING, "More than 1 animation in file, only the first one will get loaded"); + + // joints + IQMPose *poses; + poses = malloc(sizeof(IQMPose)*iqm.num_poses); + fseek(iqmFile, iqm.ofs_poses, SEEK_SET); + fread(poses, sizeof(IQMPose)*iqm.num_poses, 1, iqmFile); + + animation.jointCount = iqm.num_poses; + animation.joints = malloc(sizeof(Joint)*iqm.num_poses); + + for (int j = 0; j < iqm.num_poses; j++) + { + strcpy(animation.joints[j].name, ANIMJOINTNAME); + animation.joints[j].parent = poses[j].parent; + } + + // animations + IQMAnim anim = {0}; + fseek(iqmFile, iqm.ofs_anims, SEEK_SET); + fread(&anim, sizeof(IQMAnim), 1, iqmFile); + + animation.frameCount = anim.num_frames; + animation.framerate = anim.framerate; + + // frameposes + unsigned short *framedata = malloc(sizeof(unsigned short)*iqm.num_frames*iqm.num_framechannels); + fseek(iqmFile, iqm.ofs_frames, SEEK_SET); + fread(framedata, sizeof(unsigned short)*iqm.num_frames*iqm.num_framechannels, 1, iqmFile); + + animation.framepose = malloc(sizeof(Pose*)*anim.num_frames); + for (int j = 0; j < anim.num_frames; j++) animation.framepose[j] = malloc(sizeof(Pose)*iqm.num_poses); + + int dcounter = anim.first_frame*iqm.num_framechannels; + + for (int frame = 0; frame < anim.num_frames; frame++) + { + for (int i = 0; i < iqm.num_poses; i++) + { + animation.framepose[frame][i].translation.x = poses[i].channeloffset[0]; + + if (poses[i].mask & 0x01) + { + animation.framepose[frame][i].translation.x += framedata[dcounter]*poses[i].channelscale[0]; + dcounter++; + } + + animation.framepose[frame][i].translation.y = poses[i].channeloffset[1]; + + if (poses[i].mask & 0x02) + { + animation.framepose[frame][i].translation.y += framedata[dcounter]*poses[i].channelscale[1]; + dcounter++; + } + + animation.framepose[frame][i].translation.z = poses[i].channeloffset[2]; + + if (poses[i].mask & 0x04) + { + animation.framepose[frame][i].translation.z += framedata[dcounter]*poses[i].channelscale[2]; + dcounter++; + } + + animation.framepose[frame][i].rotation.x = poses[i].channeloffset[3]; + + if (poses[i].mask & 0x08) + { + animation.framepose[frame][i].rotation.x += framedata[dcounter]*poses[i].channelscale[3]; + dcounter++; + } + + animation.framepose[frame][i].rotation.y = poses[i].channeloffset[4]; + + if (poses[i].mask & 0x10) + { + animation.framepose[frame][i].rotation.y += framedata[dcounter]*poses[i].channelscale[4]; + dcounter++; + } + + animation.framepose[frame][i].rotation.z = poses[i].channeloffset[5]; + + if (poses[i].mask & 0x20) + { + animation.framepose[frame][i].rotation.z += framedata[dcounter]*poses[i].channelscale[5]; + dcounter++; + } + + animation.framepose[frame][i].rotation.w = poses[i].channeloffset[6]; + + if (poses[i].mask & 0x40) + { + animation.framepose[frame][i].rotation.w += framedata[dcounter]*poses[i].channelscale[6]; + dcounter++; + } + + animation.framepose[frame][i].scale.x = poses[i].channeloffset[7]; + + if (poses[i].mask & 0x80) + { + animation.framepose[frame][i].scale.x += framedata[dcounter]*poses[i].channelscale[7]; + dcounter++; + } + + animation.framepose[frame][i].scale.y = poses[i].channeloffset[8]; + + if (poses[i].mask & 0x100) + { + animation.framepose[frame][i].scale.y += framedata[dcounter]*poses[i].channelscale[8]; + dcounter++; + } + + animation.framepose[frame][i].scale.z = poses[i].channeloffset[9]; + + if (poses[i].mask & 0x200) + { + animation.framepose[frame][i].scale.z += framedata[dcounter]*poses[i].channelscale[9]; + dcounter++; + } + + animation.framepose[frame][i].rotation = QuaternionNormalize(animation.framepose[frame][i].rotation); + } + } + + // Build frameposes + for (int frame = 0; frame < anim.num_frames; frame++) + { + for (int i = 0; i < animation.jointCount; i++) + { + if (animation.joints[i].parent >= 0) + { + animation.framepose[frame][i].rotation = QuaternionMultiply(animation.framepose[frame][animation.joints[i].parent].rotation, animation.framepose[frame][i].rotation); + animation.framepose[frame][i].translation = Vector3RotateByQuaternion(animation.framepose[frame][i].translation, animation.framepose[frame][animation.joints[i].parent].rotation); + animation.framepose[frame][i].translation = Vector3Add(animation.framepose[frame][i].translation, animation.framepose[frame][animation.joints[i].parent].translation); + animation.framepose[frame][i].scale = Vector3MultiplyV(animation.framepose[frame][i].scale, animation.framepose[frame][animation.joints[i].parent].scale); + } + } + } + + free(framedata); + free(poses); + + fclose(iqmFile); + + return animation; +} + +// Unload animated model +void UnloadAnimatedModel(AnimatedModel model) +{ + free(model.materials); + free(model.meshMaterialId); + free(model.joints); + free(model.basepose); + + for (int i = 0; i < model.meshCount; i++) rlUnloadAnimatedMesh(&model.mesh[i]); + + free(model.mesh); +} + +// Unload animation +void UnloadAnimation(Animation anim) +{ + free(anim.joints); + free(anim.framepose); + + for (int i = 0; i < anim.frameCount; i++) free(anim.framepose[i]); +} + +// Check if skeletons match, only parents and jointCount are checked +bool CheckSkeletonsMatch(AnimatedModel model, Animation anim) +{ + if (model.jointCount != anim.jointCount) return 0; + + for (int i = 0; i < model.jointCount; i++) + { + if (model.joints[i].parent != anim.joints[i].parent) return 0; + } + + return 1; +} + +// Calculate the animated vertex positions and normals based on an animation at a given frame +void AnimateModel(AnimatedModel model, Animation anim, int frame) +{ + if (frame >= anim.frameCount) frame = frame%anim.frameCount; + + for (int m = 0; m < model.meshCount; m++) + { + Vector3 outv = {0}; + Vector3 outn = {0}; + + Vector3 baset = {0}; + Quaternion baser = {0}; + Vector3 bases = {0}; + + Vector3 outt = {0}; + Quaternion outr = {0}; + Vector3 outs = {0}; + + int vcounter = 0; + int wcounter = 0; + int weightId = 0; + + for (int i = 0; i < model.mesh[m].vertexCount; i++) + { + weightId = model.mesh[m].weightId[wcounter]; + baset = model.basepose[weightId].translation; + baser = model.basepose[weightId].rotation; + bases = model.basepose[weightId].scale; + outt = anim.framepose[frame][weightId].translation; + outr = anim.framepose[frame][weightId].rotation; + outs = anim.framepose[frame][weightId].scale; + + // vertices + outv = (Vector3){model.mesh[m].vertices[vcounter],model.mesh[m].vertices[vcounter + 1],model.mesh[m].vertices[vcounter + 2]}; + outv = Vector3MultiplyV(outv,outs); + outv = Vector3Subtract(outv,baset); + outv = Vector3RotateByQuaternion(outv,QuaternionMultiply(outr,QuaternionInvert(baser))); + outv = Vector3Add(outv,outt); + model.mesh[m].animVertices[vcounter] = outv.x; + model.mesh[m].animVertices[vcounter + 1] = outv.y; + model.mesh[m].animVertices[vcounter + 2] = outv.z; + + // normals + outn = (Vector3){model.mesh[m].normals[vcounter],model.mesh[m].normals[vcounter + 1],model.mesh[m].normals[vcounter + 2]}; + outn = Vector3RotateByQuaternion(outn,QuaternionMultiply(outr,QuaternionInvert(baser))); + model.mesh[m].animNormals[vcounter] = outn.x; + model.mesh[m].animNormals[vcounter + 1] = outn.y; + model.mesh[m].animNormals[vcounter + 2] = outn.z; + vcounter += 3; + wcounter += 4; + } + } +} + +// Draw an animated model +void DrawAnimatedModel(AnimatedModel model,Vector3 position,float scale,Color tint) +{ + Vector3 vScale = { scale, scale, scale }; + Vector3 rotationAxis = { 0.0f,0.0f,0.0f }; + + DrawAnimatedModelEx(model, position, rotationAxis, 0.0f, vScale, tint); +} + +// Draw an animated model with extended parameters +void DrawAnimatedModelEx(AnimatedModel model,Vector3 position,Vector3 rotationAxis,float rotationAngle, Vector3 scale,Color tint) +{ + if (model.materialCount == 0) + { + TraceLog(LOG_WARNING,"No materials set, can't draw animated mesh\n"); + return; + } + + Matrix matScale = MatrixScale(scale.x,scale.y,scale.z); + Matrix matRotation = MatrixRotate(rotationAxis,rotationAngle*DEG2RAD); + Matrix matTranslation = MatrixTranslate(position.x,position.y,position.z); + + Matrix matTransform = MatrixMultiply(MatrixMultiply(matScale,matRotation),matTranslation); + model.transform = MatrixMultiply(model.transform,matTransform); + + for (int i = 0; i < model.meshCount; i++) + { + rlUpdateAnimatedMesh(&model.mesh[i]); + rlDrawAnimatedMesh(model.mesh[i],model.materials[model.meshMaterialId[i]],MatrixIdentity()); + } +} + + + + + + +// Load animated model meshes from IQM file +static AnimatedModel LoadIQM(const char *filename) +{ + AnimatedModel model = { 0 }; + + FILE *iqmFile; + IQMHeader iqm; + + IQMMesh *imesh; + IQMTriangle *tri; + IQMVertexArray *va; + IQMJoint *ijoint; + + float *vertex; + float *normal; + float *text; + char *blendi; + unsigned char *blendw; + + iqmFile = fopen(filename, "rb"); + + if (!iqmFile) + { + TraceLog(LOG_ERROR, "[%s] Unable to open file", filename); + return model; + } + + // header + fread(&iqm,sizeof(IQMHeader), 1, iqmFile); + + if (strncmp(iqm.magic, IQM_MAGIC, sizeof(IQM_MAGIC))) + { + TraceLog(LOG_ERROR, "Magic Number \"%s\"does not match.", iqm.magic); + fclose(iqmFile); + return model; + } + + if(iqm.version != IQM_VERSION) + { + TraceLog(LOG_ERROR, "IQM version %i is incorrect.", iqm.version); + fclose(iqmFile); + return model; + } + + // meshes + imesh = malloc(sizeof(IQMMesh)*iqm.num_meshes); + fseek(iqmFile, iqm.ofs_meshes, SEEK_SET); + fread(imesh, sizeof(IQMMesh)*iqm.num_meshes, 1, iqmFile); + + model.meshCount = iqm.num_meshes; + model.mesh = malloc(sizeof(AnimatedMesh)*iqm.num_meshes); + + for (int i = 0; i < iqm.num_meshes; i++) + { + fseek(iqmFile,iqm.ofs_text+imesh[i].name,SEEK_SET); + fread(model.mesh[i].name, sizeof(char)*MESH_NAME_LENGTH, 1, iqmFile); + model.mesh[i].vertexCount = imesh[i].num_vertexes; + model.mesh[i].vertices = malloc(sizeof(float)*imesh[i].num_vertexes*3); + model.mesh[i].normals = malloc(sizeof(float)*imesh[i].num_vertexes*3); + model.mesh[i].texcoords = malloc(sizeof(float)*imesh[i].num_vertexes*2); + model.mesh[i].weightId = malloc(sizeof(int)*imesh[i].num_vertexes*4); + model.mesh[i].weightBias = malloc(sizeof(float)*imesh[i].num_vertexes*4); + model.mesh[i].triangleCount = imesh[i].num_triangles; + model.mesh[i].triangles = malloc(sizeof(unsigned short)*imesh[i].num_triangles*3); + model.mesh[i].animVertices = malloc(sizeof(float)*imesh[i].num_vertexes*3); + model.mesh[i].animNormals = malloc(sizeof(float)*imesh[i].num_vertexes*3); + } + + // tris + tri = malloc(sizeof(IQMTriangle)*iqm.num_triangles); + fseek(iqmFile, iqm.ofs_triangles, SEEK_SET); + fread(tri, sizeof(IQMTriangle)*iqm.num_triangles, 1, iqmFile); + + for (int m = 0; m < iqm.num_meshes; m++) + { + int tcounter = 0; + + for (int i=imesh[m].first_triangle; i < imesh[m].first_triangle+imesh[m].num_triangles; i++) + { + // IQM triangles are stored counter clockwise, but raylib sets opengl to clockwise drawing, so we swap them around + model.mesh[m].triangles[tcounter+2] = tri[i].vertex[0] - imesh[m].first_vertex; + model.mesh[m].triangles[tcounter+1] = tri[i].vertex[1] - imesh[m].first_vertex; + model.mesh[m].triangles[tcounter] = tri[i].vertex[2] - imesh[m].first_vertex; + tcounter += 3; + } + } + + // vertarrays + va = malloc(sizeof(IQMVertexArray)*iqm.num_vertexarrays); + fseek(iqmFile, iqm.ofs_vertexarrays, SEEK_SET); + fread(va, sizeof(IQMVertexArray)*iqm.num_vertexarrays, 1, iqmFile); + + for (int i = 0; i < iqm.num_vertexarrays; i++) + { + switch (va[i].type) + { + case IQM_POSITION: + { + vertex = malloc(sizeof(float)*iqm.num_vertexes*3); + fseek(iqmFile, va[i].offset, SEEK_SET); + fread(vertex, sizeof(float)*iqm.num_vertexes*3, 1, iqmFile); + + for (int m = 0; m < iqm.num_meshes; m++) + { + int vcounter = 0; + for (int i = imesh[m].first_vertex*3; i < (imesh[m].first_vertex + imesh[m].num_vertexes)*3; i++) + { + model.mesh[m].vertices[vcounter] = vertex[i]; + model.mesh[m].animVertices[vcounter] = vertex[i]; + vcounter++; + } + } + } break; + case IQM_NORMAL: + { + normal = malloc(sizeof(float)*iqm.num_vertexes*3); + fseek(iqmFile, va[i].offset, SEEK_SET); + fread(normal, sizeof(float)*iqm.num_vertexes*3, 1, iqmFile); + + for (int m = 0; m < iqm.num_meshes; m++) + { + int vcounter = 0; + for (int i = imesh[m].first_vertex*3; i < (imesh[m].first_vertex + imesh[m].num_vertexes)*3; i++) + { + model.mesh[m].normals[vcounter] = normal[i]; + model.mesh[m].animNormals[vcounter] = normal[i]; + vcounter++; + } + } + } break; + case IQM_TEXCOORD: + { + text = malloc(sizeof(float)*iqm.num_vertexes*2); + fseek(iqmFile, va[i].offset, SEEK_SET); + fread(text, sizeof(float)*iqm.num_vertexes*2, 1, iqmFile); + + for (int m = 0; m < iqm.num_meshes; m++) + { + int vcounter = 0; + for (int i = imesh[m].first_vertex*2; i < (imesh[m].first_vertex + imesh[m].num_vertexes)*2; i++) + { + model.mesh[m].texcoords[vcounter] = text[i]; + vcounter++; + } + } + } break; + case IQM_BLENDINDEXES: + { + blendi = malloc(sizeof(char)*iqm.num_vertexes*4); + fseek(iqmFile, va[i].offset, SEEK_SET); + fread(blendi, sizeof(char)*iqm.num_vertexes*4, 1, iqmFile); + + for (int m = 0; m < iqm.num_meshes; m++) + { + int vcounter = 0; + for (int i = imesh[m].first_vertex*4; i < (imesh[m].first_vertex + imesh[m].num_vertexes)*4; i++) + { + model.mesh[m].weightId[vcounter] = blendi[i]; + vcounter++; + } + } + } break; + case IQM_BLENDWEIGHTS: + { + blendw = malloc(sizeof(unsigned char)*iqm.num_vertexes*4); + fseek(iqmFile,va[i].offset,SEEK_SET); + fread(blendw,sizeof(unsigned char)*iqm.num_vertexes*4,1,iqmFile); + + for (int m = 0; m < iqm.num_meshes; m++) + { + int vcounter = 0; + for (int i = imesh[m].first_vertex*4; i < (imesh[m].first_vertex + imesh[m].num_vertexes)*4; i++) + { + model.mesh[m].weightBias[vcounter] = blendw[i]/255.0f; + vcounter++; + } + } + } break; + } + } + + // joints, include base poses + ijoint = malloc(sizeof(IQMJoint)*iqm.num_joints); + fseek(iqmFile, iqm.ofs_joints, SEEK_SET); + fread(ijoint, sizeof(IQMJoint)*iqm.num_joints, 1, iqmFile); + + model.jointCount = iqm.num_joints; + model.joints = malloc(sizeof(Joint)*iqm.num_joints); + model.basepose = malloc(sizeof(Pose)*iqm.num_joints); + + for (int i = 0; i < iqm.num_joints; i++) + { + // joints + model.joints[i].parent = ijoint[i].parent; + fseek(iqmFile, iqm.ofs_text + ijoint[i].name, SEEK_SET); + fread(model.joints[i].name,sizeof(char)*JOINT_NAME_LENGTH, 1, iqmFile); + + // basepose + model.basepose[i].translation.x = ijoint[i].translate[0]; + model.basepose[i].translation.y = ijoint[i].translate[1]; + model.basepose[i].translation.z = ijoint[i].translate[2]; + + model.basepose[i].rotation.x = ijoint[i].rotate[0]; + model.basepose[i].rotation.y = ijoint[i].rotate[1]; + model.basepose[i].rotation.z = ijoint[i].rotate[2]; + model.basepose[i].rotation.w = ijoint[i].rotate[3]; + + model.basepose[i].scale.x = ijoint[i].scale[0]; + model.basepose[i].scale.y = ijoint[i].scale[1]; + model.basepose[i].scale.z = ijoint[i].scale[2]; + } + + // build base pose + for (int i = 0; i < model.jointCount; i++) + { + if (model.joints[i].parent >= 0) + { + model.basepose[i].rotation = QuaternionMultiply(model.basepose[model.joints[i].parent].rotation, model.basepose[i].rotation); + model.basepose[i].translation = Vector3RotateByQuaternion(model.basepose[i].translation, model.basepose[model.joints[i].parent].rotation); + model.basepose[i].translation = Vector3Add(model.basepose[i].translation, model.basepose[model.joints[i].parent].translation); + model.basepose[i].scale = Vector3MultiplyV(model.basepose[i].scale, model.basepose[model.joints[i].parent].scale); + } + } + + fclose(iqmFile); + free(imesh); + free(tri); + free(va); + free(vertex); + free(normal); + free(text); + free(blendi); + free(blendw); + free(ijoint); + + return model; +} + +#endif \ No newline at end of file diff --git a/examples/others/iqm_loader/rlgl.h b/examples/others/iqm_loader/rlgl.h new file mode 100644 index 000000000..0a66a8f0e --- /dev/null +++ b/examples/others/iqm_loader/rlgl.h @@ -0,0 +1,500 @@ +/********************************************************************************************** +* +* rlgl - raylib OpenGL abstraction layer +* +* rlgl is a wrapper for multiple OpenGL versions (1.1, 2.1, 3.3 Core, ES 2.0) to +* pseudo-OpenGL 1.1 style functions (rlVertex, rlTranslate, rlRotate...). +* +* When chosing an OpenGL version greater than OpenGL 1.1, rlgl stores vertex data on internal +* VBO buffers (and VAOs if available). It requires calling 3 functions: +* rlglInit() - Initialize internal buffers and auxiliar resources +* rlglDraw() - Process internal buffers and send required draw calls +* rlglClose() - De-initialize internal buffers data and other auxiliar resources +* +* CONFIGURATION: +* +* #define GRAPHICS_API_OPENGL_11 +* #define GRAPHICS_API_OPENGL_21 +* #define GRAPHICS_API_OPENGL_33 +* #define GRAPHICS_API_OPENGL_ES2 +* Use selected OpenGL graphics backend, should be supported by platform +* Those preprocessor defines are only used on rlgl module, if OpenGL version is +* required by any other module, use rlGetVersion() tocheck it +* +* #define RLGL_STANDALONE +* Use rlgl as standalone library (no raylib dependency) +* +* #define SUPPORT_VR_SIMULATOR +* Support VR simulation functionality (stereo rendering) +* +* #define SUPPORT_DISTORTION_SHADER +* Include stereo rendering distortion shader (shader_distortion.h) +* +* DEPENDENCIES: +* raymath - 3D math functionality (Vector3, Matrix, Quaternion) +* GLAD - OpenGL extensions loading (OpenGL 3.3 Core only) +* +* +* LICENSE: zlib/libpng +* +* Copyright (c) 2014-2017 Ramon Santamaria (@raysan5) +* +* This software is provided "as-is", without any express or implied warranty. In no event +* will the authors be held liable for any damages arising from the use of this software. +* +* Permission is granted to anyone to use this software for any purpose, including commercial +* applications, and to alter it and redistribute it freely, subject to the following restrictions: +* +* 1. The origin of this software must not be misrepresented; you must not claim that you +* wrote the original software. If you use this software in a product, an acknowledgment +* in the product documentation would be appreciated but is not required. +* +* 2. Altered source versions must be plainly marked as such, and must not be misrepresented +* as being the original software. +* +* 3. This notice may not be removed or altered from any source distribution. +* +**********************************************************************************************/ + +#ifndef RLGL_H +#define RLGL_H + +#if defined(RLGL_STANDALONE) + #define RAYMATH_STANDALONE +#else + #include "raylib.h" // Required for: Model, Shader, Texture2D, TraceLog() +#endif + +#include "raymath.h" // Required for: Vector3, Matrix + +// Security check in case no GRAPHICS_API_OPENGL_* defined +#if !defined(GRAPHICS_API_OPENGL_11) && !defined(GRAPHICS_API_OPENGL_21) && !defined(GRAPHICS_API_OPENGL_33) && !defined(GRAPHICS_API_OPENGL_ES2) + #define GRAPHICS_API_OPENGL_11 +#endif + +// Security check in case multiple GRAPHICS_API_OPENGL_* defined +#if defined(GRAPHICS_API_OPENGL_11) + #if defined(GRAPHICS_API_OPENGL_21) + #undef GRAPHICS_API_OPENGL_21 + #endif + #if defined(GRAPHICS_API_OPENGL_33) + #undef GRAPHICS_API_OPENGL_33 + #endif + #if defined(GRAPHICS_API_OPENGL_ES2) + #undef GRAPHICS_API_OPENGL_ES2 + #endif +#endif + +#if defined(GRAPHICS_API_OPENGL_21) + #define GRAPHICS_API_OPENGL_33 +#endif + +//---------------------------------------------------------------------------------- +// Defines and Macros +//---------------------------------------------------------------------------------- +#if defined(GRAPHICS_API_OPENGL_11) || defined(GRAPHICS_API_OPENGL_33) + // NOTE: This is the maximum amount of lines, triangles and quads per frame, be careful! + #define MAX_LINES_BATCH 8192 + #define MAX_TRIANGLES_BATCH 4096 + #define MAX_QUADS_BATCH 8192 +#elif defined(GRAPHICS_API_OPENGL_ES2) + // NOTE: Reduce memory sizes for embedded systems (RPI and HTML5) + // NOTE: On HTML5 (emscripten) this is allocated on heap, by default it's only 16MB!...just take care... + #define MAX_LINES_BATCH 1024 // Critical for wire shapes (sphere) + #define MAX_TRIANGLES_BATCH 2048 // Critical for some shapes (sphere) + #define MAX_QUADS_BATCH 1024 // Be careful with text, every letter maps a quad +#endif + +// Texture parameters (equivalent to OpenGL defines) +#define RL_TEXTURE_WRAP_S 0x2802 // GL_TEXTURE_WRAP_S +#define RL_TEXTURE_WRAP_T 0x2803 // GL_TEXTURE_WRAP_T +#define RL_TEXTURE_MAG_FILTER 0x2800 // GL_TEXTURE_MAG_FILTER +#define RL_TEXTURE_MIN_FILTER 0x2801 // GL_TEXTURE_MIN_FILTER +#define RL_TEXTURE_ANISOTROPIC_FILTER 0x3000 // Anisotropic filter (custom identifier) + +#define RL_FILTER_NEAREST 0x2600 // GL_NEAREST +#define RL_FILTER_LINEAR 0x2601 // GL_LINEAR +#define RL_FILTER_MIP_NEAREST 0x2700 // GL_NEAREST_MIPMAP_NEAREST +#define RL_FILTER_NEAREST_MIP_LINEAR 0x2702 // GL_NEAREST_MIPMAP_LINEAR +#define RL_FILTER_LINEAR_MIP_NEAREST 0x2701 // GL_LINEAR_MIPMAP_NEAREST +#define RL_FILTER_MIP_LINEAR 0x2703 // GL_LINEAR_MIPMAP_LINEAR + +#define RL_WRAP_REPEAT 0x2901 // GL_REPEAT +#define RL_WRAP_CLAMP 0x812F // GL_CLAMP_TO_EDGE +#define RL_WRAP_CLAMP_MIRROR 0x8742 // GL_MIRROR_CLAMP_EXT + +// Matrix modes (equivalent to OpenGL) +#define RL_MODELVIEW 0x1700 // GL_MODELVIEW +#define RL_PROJECTION 0x1701 // GL_PROJECTION +#define RL_TEXTURE 0x1702 // GL_TEXTURE + +// Primitive assembly draw modes +#define RL_LINES 0x0001 // GL_LINES +#define RL_TRIANGLES 0x0004 // GL_TRIANGLES +#define RL_QUADS 0x0007 // GL_QUADS + +//---------------------------------------------------------------------------------- +// Types and Structures Definition +//---------------------------------------------------------------------------------- +typedef enum { OPENGL_11 = 1, OPENGL_21, OPENGL_33, OPENGL_ES_20 } GlVersion; + +typedef unsigned char byte; + +#if defined(RLGL_STANDALONE) + #ifndef __cplusplus + // Boolean type + typedef enum { false, true } bool; + #endif + + // Color type, RGBA (32bit) + typedef struct Color { + unsigned char r; + unsigned char g; + unsigned char b; + unsigned char a; + } Color; + + // Rectangle type + typedef struct Rectangle { + int x; + int y; + int width; + int height; + } Rectangle; + + // Texture2D type + // NOTE: Data stored in GPU memory + typedef struct Texture2D { + unsigned int id; // OpenGL texture id + int width; // Texture base width + int height; // Texture base height + int mipmaps; // Mipmap levels, 1 by default + int format; // Data format (PixelFormat) + } Texture2D; + + // RenderTexture2D type, for texture rendering + typedef struct RenderTexture2D { + unsigned int id; // Render texture (fbo) id + Texture2D texture; // Color buffer attachment texture + Texture2D depth; // Depth buffer attachment texture + } RenderTexture2D; + + // Vertex data definning a mesh + typedef struct Mesh { + int vertexCount; // number of vertices stored in arrays + int triangleCount; // number of triangles stored (indexed or not) + float *vertices; // vertex position (XYZ - 3 components per vertex) (shader-location = 0) + float *texcoords; // vertex texture coordinates (UV - 2 components per vertex) (shader-location = 1) + float *texcoords2; // vertex second texture coordinates (useful for lightmaps) (shader-location = 5) + float *normals; // vertex normals (XYZ - 3 components per vertex) (shader-location = 2) + float *tangents; // vertex tangents (XYZW - 4 components per vertex) (shader-location = 4) + unsigned char *colors; // vertex colors (RGBA - 4 components per vertex) (shader-location = 3) + unsigned short *indices;// vertex indices (in case vertex data comes indexed) + + unsigned int vaoId; // OpenGL Vertex Array Object id + unsigned int vboId[7]; // OpenGL Vertex Buffer Objects id (7 types of vertex data) + } Mesh; + + // Shader and material limits + #define MAX_SHADER_LOCATIONS 32 + #define MAX_MATERIAL_MAPS 12 + + // Shader type (generic) + typedef struct Shader { + unsigned int id; // Shader program id + int locs[MAX_SHADER_LOCATIONS]; // Shader locations array + } Shader; + + // Material texture map + typedef struct MaterialMap { + Texture2D texture; // Material map texture + Color color; // Material map color + float value; // Material map value + } MaterialMap; + + // Material type (generic) + typedef struct Material { + Shader shader; // Material shader + MaterialMap maps[MAX_MATERIAL_MAPS]; // Material maps + float *params; // Material generic parameters (if required) + } Material; + + // Camera type, defines a camera position/orientation in 3d space + typedef struct Camera { + Vector3 position; // Camera position + Vector3 target; // Camera target it looks-at + Vector3 up; // Camera up vector (rotation over its axis) + float fovy; // Camera field-of-view apperture in Y (degrees) + } Camera; + + // Head-Mounted-Display device parameters + typedef struct VrDeviceInfo { + int hResolution; // HMD horizontal resolution in pixels + int vResolution; // HMD vertical resolution in pixels + float hScreenSize; // HMD horizontal size in meters + float vScreenSize; // HMD vertical size in meters + float vScreenCenter; // HMD screen center in meters + float eyeToScreenDistance; // HMD distance between eye and display in meters + float lensSeparationDistance; // HMD lens separation distance in meters + float interpupillaryDistance; // HMD IPD (distance between pupils) in meters + float lensDistortionValues[4]; // HMD lens distortion constant parameters + float chromaAbCorrection[4]; // HMD chromatic aberration correction parameters + } VrDeviceInfo; + + // TraceLog message types + typedef enum { + LOG_INFO = 0, + LOG_ERROR, + LOG_WARNING, + LOG_DEBUG, + LOG_OTHER + } TraceLogType; + + // Texture formats (support depends on OpenGL version) + typedef enum { + UNCOMPRESSED_GRAYSCALE = 1, // 8 bit per pixel (no alpha) + UNCOMPRESSED_GRAY_ALPHA, + UNCOMPRESSED_R5G6B5, // 16 bpp + UNCOMPRESSED_R8G8B8, // 24 bpp + UNCOMPRESSED_R5G5B5A1, // 16 bpp (1 bit alpha) + UNCOMPRESSED_R4G4B4A4, // 16 bpp (4 bit alpha) + UNCOMPRESSED_R8G8B8A8, // 32 bpp + UNCOMPRESSED_R32, // 32 bpp (1 channel - float) + UNCOMPRESSED_R32G32B32, // 32*3 bpp (3 channels - float) + UNCOMPRESSED_R32G32B32A32, // 32*4 bpp (4 channels - float) + COMPRESSED_DXT1_RGB, // 4 bpp (no alpha) + COMPRESSED_DXT1_RGBA, // 4 bpp (1 bit alpha) + COMPRESSED_DXT3_RGBA, // 8 bpp + COMPRESSED_DXT5_RGBA, // 8 bpp + COMPRESSED_ETC1_RGB, // 4 bpp + COMPRESSED_ETC2_RGB, // 4 bpp + COMPRESSED_ETC2_EAC_RGBA, // 8 bpp + COMPRESSED_PVRT_RGB, // 4 bpp + COMPRESSED_PVRT_RGBA, // 4 bpp + COMPRESSED_ASTC_4x4_RGBA, // 8 bpp + COMPRESSED_ASTC_8x8_RGBA // 2 bpp + } PixelFormat; + + // Texture parameters: filter mode + // NOTE 1: Filtering considers mipmaps if available in the texture + // NOTE 2: Filter is accordingly set for minification and magnification + typedef enum { + FILTER_POINT = 0, // No filter, just pixel aproximation + FILTER_BILINEAR, // Linear filtering + FILTER_TRILINEAR, // Trilinear filtering (linear with mipmaps) + FILTER_ANISOTROPIC_4X, // Anisotropic filtering 4x + FILTER_ANISOTROPIC_8X, // Anisotropic filtering 8x + FILTER_ANISOTROPIC_16X, // Anisotropic filtering 16x + } TextureFilterMode; + + // Texture parameters: wrap mode + typedef enum { + WRAP_REPEAT = 0, + WRAP_CLAMP, + WRAP_MIRROR + } TextureWrapMode; + + // Color blending modes (pre-defined) + typedef enum { + BLEND_ALPHA = 0, + BLEND_ADDITIVE, + BLEND_MULTIPLIED + } BlendMode; + + // Shader location point type + typedef enum { + LOC_VERTEX_POSITION = 0, + LOC_VERTEX_TEXCOORD01, + LOC_VERTEX_TEXCOORD02, + LOC_VERTEX_NORMAL, + LOC_VERTEX_TANGENT, + LOC_VERTEX_COLOR, + LOC_MATRIX_MVP, + LOC_MATRIX_MODEL, + LOC_MATRIX_VIEW, + LOC_MATRIX_PROJECTION, + LOC_VECTOR_VIEW, + LOC_COLOR_DIFFUSE, + LOC_COLOR_SPECULAR, + LOC_COLOR_AMBIENT, + LOC_MAP_ALBEDO, // LOC_MAP_DIFFUSE + LOC_MAP_METALNESS, // LOC_MAP_SPECULAR + LOC_MAP_NORMAL, + LOC_MAP_ROUGHNESS, + LOC_MAP_OCCLUSION, + LOC_MAP_EMISSION, + LOC_MAP_HEIGHT, + LOC_MAP_CUBEMAP, + LOC_MAP_IRRADIANCE, + LOC_MAP_PREFILTER, + LOC_MAP_BRDF + } ShaderLocationIndex; + + #define LOC_MAP_DIFFUSE LOC_MAP_ALBEDO + #define LOC_MAP_SPECULAR LOC_MAP_METALNESS + + // Material map type + typedef enum { + MAP_ALBEDO = 0, // MAP_DIFFUSE + MAP_METALNESS = 1, // MAP_SPECULAR + MAP_NORMAL = 2, + MAP_ROUGHNESS = 3, + MAP_OCCLUSION, + MAP_EMISSION, + MAP_HEIGHT, + MAP_CUBEMAP, // NOTE: Uses GL_TEXTURE_CUBE_MAP + MAP_IRRADIANCE, // NOTE: Uses GL_TEXTURE_CUBE_MAP + MAP_PREFILTER, // NOTE: Uses GL_TEXTURE_CUBE_MAP + MAP_BRDF + } TexmapIndex; + + #define MAP_DIFFUSE MAP_ALBEDO + #define MAP_SPECULAR MAP_METALNESS + + // VR Head Mounted Display devices + typedef enum { + HMD_DEFAULT_DEVICE = 0, + HMD_OCULUS_RIFT_DK2, + HMD_OCULUS_RIFT_CV1, + HMD_OCULUS_GO, + HMD_VALVE_HTC_VIVE, + HMD_SONY_PSVR + } VrDevice; +#endif + +#ifdef __cplusplus +extern "C" { // Prevents name mangling of functions +#endif + +//------------------------------------------------------------------------------------ +// Functions Declaration - Matrix operations +//------------------------------------------------------------------------------------ +void rlMatrixMode(int mode); // Choose the current matrix to be transformed +void rlPushMatrix(void); // Push the current matrix to stack +void rlPopMatrix(void); // Pop lattest inserted matrix from stack +void rlLoadIdentity(void); // Reset current matrix to identity matrix +void rlTranslatef(float x, float y, float z); // Multiply the current matrix by a translation matrix +void rlRotatef(float angleDeg, float x, float y, float z); // Multiply the current matrix by a rotation matrix +void rlScalef(float x, float y, float z); // Multiply the current matrix by a scaling matrix +void rlMultMatrixf(float *matf); // Multiply the current matrix by another matrix +void rlFrustum(double left, double right, double bottom, double top, double near, double far); +void rlOrtho(double left, double right, double bottom, double top, double near, double far); +void rlViewport(int x, int y, int width, int height); // Set the viewport area + +//------------------------------------------------------------------------------------ +// Functions Declaration - Vertex level operations +//------------------------------------------------------------------------------------ +void rlBegin(int mode); // Initialize drawing mode (how to organize vertex) +void rlEnd(void); // Finish vertex providing +void rlVertex2i(int x, int y); // Define one vertex (position) - 2 int +void rlVertex2f(float x, float y); // Define one vertex (position) - 2 float +void rlVertex3f(float x, float y, float z); // Define one vertex (position) - 3 float +void rlTexCoord2f(float x, float y); // Define one vertex (texture coordinate) - 2 float +void rlNormal3f(float x, float y, float z); // Define one vertex (normal) - 3 float +void rlColor4ub(byte r, byte g, byte b, byte a); // Define one vertex (color) - 4 byte +void rlColor3f(float x, float y, float z); // Define one vertex (color) - 3 float +void rlColor4f(float x, float y, float z, float w); // Define one vertex (color) - 4 float + +//------------------------------------------------------------------------------------ +// Functions Declaration - OpenGL equivalent functions (common to 1.1, 3.3+, ES2) +// NOTE: This functions are used to completely abstract raylib code from OpenGL layer +//------------------------------------------------------------------------------------ +void rlEnableTexture(unsigned int id); // Enable texture usage +void rlDisableTexture(void); // Disable texture usage +void rlTextureParameters(unsigned int id, int param, int value); // Set texture parameters (filter, wrap) +void rlEnableRenderTexture(unsigned int id); // Enable render texture (fbo) +void rlDisableRenderTexture(void); // Disable render texture (fbo), return to default framebuffer +void rlEnableDepthTest(void); // Enable depth test +void rlDisableDepthTest(void); // Disable depth test +void rlEnableWireMode(void); // Enable wire mode +void rlDisableWireMode(void); // Disable wire mode +void rlDeleteTextures(unsigned int id); // Delete OpenGL texture from GPU +void rlDeleteRenderTextures(RenderTexture2D target); // Delete render textures (fbo) from GPU +void rlDeleteShader(unsigned int id); // Delete OpenGL shader program from GPU +void rlDeleteVertexArrays(unsigned int id); // Unload vertex data (VAO) from GPU memory +void rlDeleteBuffers(unsigned int id); // Unload vertex data (VBO) from GPU memory +void rlClearColor(byte r, byte g, byte b, byte a); // Clear color buffer with color +void rlClearScreenBuffers(void); // Clear used screen buffers (color and depth) + +//------------------------------------------------------------------------------------ +// Functions Declaration - rlgl functionality +//------------------------------------------------------------------------------------ +void rlglInit(int width, int height); // Initialize rlgl (buffers, shaders, textures, states) +void rlglClose(void); // De-inititialize rlgl (buffers, shaders, textures) +void rlglDraw(void); // Update and Draw default buffers (lines, triangles, quads) + +int rlGetVersion(void); // Returns current OpenGL version +bool rlCheckBufferLimit(int type, int vCount); // Check internal buffer overflow for a given number of vertex +void rlSetDebugMarker(const char *text); // Set debug marker for analysis +void rlLoadExtensions(void *loader); // Load OpenGL extensions +Vector3 rlUnproject(Vector3 source, Matrix proj, Matrix view); // Get world coordinates from screen coordinates + +// Textures data management +unsigned int rlLoadTexture(void *data, int width, int height, int format, int mipmapCount); // Load texture in GPU +void rlUpdateTexture(unsigned int id, int width, int height, int format, const void *data); // Update GPU texture with new data +void rlUnloadTexture(unsigned int id); +void rlGenerateMipmaps(Texture2D *texture); // Generate mipmap data for selected texture +void *rlReadTexturePixels(Texture2D texture); // Read texture pixel data +unsigned char *rlReadScreenPixels(int width, int height); // Read screen pixel data (color buffer) +RenderTexture2D rlLoadRenderTexture(int width, int height); // Load a texture to be used for rendering (fbo with color and depth attachments) + +// Vertex data management +void rlLoadMesh(Mesh *mesh, bool dynamic); // Upload vertex data into GPU and provided VAO/VBO ids +void rlUpdateMesh(Mesh mesh, int buffer, int numVertex); // Update vertex data on GPU (upload new data to one buffer) +void rlDrawMesh(Mesh mesh, Material material, Matrix transform); // Draw a 3d mesh with material and transform +void rlUnloadMesh(Mesh *mesh); // Unload mesh data from CPU and GPU + +// NOTE: There is a set of shader related functions that are available to end user, +// to avoid creating function wrappers through core module, they have been directly declared in raylib.h + +#if defined(RLGL_STANDALONE) +//------------------------------------------------------------------------------------ +// Shaders System Functions (Module: rlgl) +// NOTE: This functions are useless when using OpenGL 1.1 +//------------------------------------------------------------------------------------ +Shader LoadShader(char *vsFileName, char *fsFileName); // Load a custom shader and bind default locations +void UnloadShader(Shader shader); // Unload a custom shader from memory + +Shader GetShaderDefault(void); // Get default shader +Texture2D GetTextureDefault(void); // Get default texture + +// Shader configuration functions +int GetShaderLocation(Shader shader, const char *uniformName); // Get shader uniform location +void SetShaderValue(Shader shader, int uniformLoc, const float *value, int size); // Set shader uniform value (float) +void SetShaderValuei(Shader shader, int uniformLoc, const int *value, int size); // Set shader uniform value (int) +void SetShaderValueMatrix(Shader shader, int uniformLoc, Matrix mat); // Set shader uniform value (matrix 4x4) +void SetMatrixProjection(Matrix proj); // Set a custom projection matrix (replaces internal projection matrix) +void SetMatrixModelview(Matrix view); // Set a custom modelview matrix (replaces internal modelview matrix) +Matrix GetMatrixModelview(); // Get internal modelview matrix + + +// Texture maps generation (PBR) +// NOTE: Required shaders should be provided +Texture2D GenTextureCubemap(Shader shader, Texture2D skyHDR, int size); // Generate cubemap texture from HDR texture +Texture2D GenTextureIrradiance(Shader shader, Texture2D cubemap, int size); // Generate irradiance texture using cubemap data +Texture2D GenTexturePrefilter(Shader shader, Texture2D cubemap, int size); // Generate prefilter texture using cubemap data +Texture2D GenTextureBRDF(Shader shader, Texture2D cubemap, int size); // Generate BRDF texture using cubemap data + +// Shading and blending +void BeginShaderMode(Shader shader); // Begin custom shader drawing +void EndShaderMode(void); // End custom shader drawing (use default shader) +void BeginBlendMode(int mode); // Begin blending mode (alpha, additive, multiplied) +void EndBlendMode(void); // End blending mode (reset to default: alpha blending) + +// VR simulator functionality +VrDeviceInfo GetVrDeviceInfo(int vrDeviceType); // Get VR device information for some standard devices +void InitVrSimulator(VrDeviceInfo info); // Init VR simulator for selected device parameters +void CloseVrSimulator(void); // Close VR simulator for current device +void UpdateVrTracking(Camera *camera); // Update VR tracking (position and orientation) and camera +void ToggleVrMode(void); // Enable/Disable VR experience (device or simulator) +void BeginVrDrawing(void); // Begin VR stereo rendering +void EndVrDrawing(void); // End VR stereo rendering + +void TraceLog(int msgType, const char *text, ...); // Show trace log messages (LOG_INFO, LOG_WARNING, LOG_ERROR, LOG_DEBUG) +#endif + +#ifdef __cplusplus +} +#endif + +#endif // RLGL_H