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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¢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 kU)w`l4xEM7e;*|v^gP0OgovR{#J2 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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

y8OU|Wv*K} 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�guD zrfk`AWR{}X4}N=}iU?z-JK;qcD#zW=uuHw)ztsFcx9!U9tLjcU-dH#B#kr(c^S>&d z-o`z1!;uXpkN+RD`>KBa&+9JknVQRs%KCh7{EG5qEh$4Elf} zwI`=$-h6Y1XGcG*zZBH|W3!L4^^&UXuY39qR4N|m7MuR7Sd?M<|J%nN3TEo8*2_tH z(JaL5ufp<>BS$6FbV&rKMu641KsBd%FLnL>js%I@8}iiz3HICd~b6jz_27 z)Uat$$y}oKPG`-H8LKv4Gb-KZ#88n&LF4#@HA6p=Ka>!dePhdURv2| zI&F*ePv^)(i(D0^WGpdz5qRSdXF0=}{*Bu&G%}>SKMLB%XQ%y$vx@UQ=T zoi8&|qCCAe8wouWnK0qflt=ru9UlBi|IcZ}e`G7$9C?3(Z`)`5y?@8)^6j(7<=;Pf zI-}oW<2-{&N3@qM_>;Ux@7TSR>*i&~lQhgqW?oOx_L#(}urX}GN`;-%7I%D1|G3kh zE2Z{Smub&5kK~{qK~V}OFEsgIzfJb|!M@>|$fc@O$-kvB({nc$pXlSVacPsezP9%Sqqvu|mFh;7R}w-S z>(3lNq;t0GH`6Px(tjK5pPZL|KS6L~t6>eR{qi$^F8}aP|97*^WDzP#p5$m4Z(OH)HapdF)}!6ls~SJEZT{Que?7vfYV*$H(Mz^fh&1%G zhOB0=m~~~s{CYS2qaTghTdoQ-cbsVytIT40)q4MLWKV#kLte~n&&xrXF1I*qRHAnu z5-|>2n4}@ zqQcyt`!yy0Uu{(pZrauR+V9w=l4}O4VrKUgdowFd7>Iah&FYQtFHr#zO>*dCfN5!|kaLn2NQJ(L_D-U0X zl$#$9-Hi>ew&BjG{b0)w!}>wz$eG8o3`Io~+MjuK&k_5yPwrN#TCEDhSrx{nkLS%f zkEj(q?A2+Em^#rshMOt)tsO&@?)hm;oGz(M-Wj9a$2(E=q)O?gC0BJ$w{*;!ViNDg zt$W4e)YG_-txr}?RX*VC_im$&oO4vtoVHI)4oBLp7~j;b&_8taXR(gD!-0Fp1S)lo zzIoH(;Pd1($HA(};(s13Ew6dDS9e2gp6lcJ#t)Cox_aAnMaC)5b33E7ClJZT^N^9+OO&dc$WPYi&Ejqv0{h>vVnO%^9CI z1=&4*{%_Gd(8S=PqnDCPPyH_2!sn2f`}vJk(7+$+fe9q1IQ|W+{hS2Mp ziK=R^o^F-7>hV)$|J|DJ>7_60L(hb8OgeHv^lMfq^X3Z^)=h1!Sax0y97 zCAF3twd{29&&-@9dZ}iI2dCyz_I(bgUM&bH`0@W{^>&HZ)86jOj@`BY^u6@=o6lR? zwLdPdDLSkuwvpe>ZDIpQr%h8wzyyJbN&*dtG{?)NU&|F{4Diong!Vv5(sWtV<`b@lG%UC-A9 zE_Ul(B~?1p)a~jV?nNi(?qSK$j$c?1`ErrJm}|+pcXrR`<{r{WIpVl~b+G!v`A4iD zER>1&`g!{K{dGCVUS$23b_+T-X?=Ipso78c=BNA)S$g(Z#tDESXt%wtfDD?TV*O?``i{FvsG_wQ1Mav+YjjXI;_6iv4sH5O|-mwWQ;=x?^J*{vSMa_!@ymls|2d`?x{)+pT!eD`}w zuKX=&(YQ}eJ$K%S-$<0r{oK@Uv98L-;Df2pp;;1a4?T=`dNP%(H@>L2^L=jmu~Q{8 z7TF)uEO_(fxjtjdCw=CII^KqGhG#YM49X1684s!sFB6v#n6|*v?84UzsvmmgmENB- zysv?=>=c69Sv2AC~0Z3n#VWg z)3$=iW{&pl96s-ss6Mds;ACA=l*KxA!@Z+%t9BO``dITY83|43_#vBh&F=RNQU9ku zg4X});khqsVWzT_zbW%TUqZmKsC!&ftV|y2eS8@Z-O zGHb@cinX62j~P!$zw^}9=C|IGAI!-N8!nm8`*Uq$Zuyy{+vg7`T4ve&kX)Z`_4Q%M z;h-`vKjw&Kf40OHDkh%{P}e+{ay;dD{g=7_eF_@< z-6#L$!R#f+nd8cj2Y$Q$nU_acxoh7v*FRDW7w*442U`o^#;}il!F7gbH3}Eh8D{M1 z5=>aaB^uhOw_a|QctaYmVe<3+mJYWJcd;#MvCZ4-;Ax|>=+&a^`*N>SA6HzpetAOi zU$f4`h5k85OShi<=^nUsgC#%fx$iUHFF44mwTH?4g~hJyLods^gch9MD3%aADLyuR zhh+Pw_k@4&fY5@5|rMko#t5cSowUP-lqqQMbZ3A z9#kBzUax2VWNY%LUjm``Qs(nA?~8MNnXWiFeEE;|OYd6+_>D3=X4ftLaeYsj&TW@6 zYoUs&Q}#uR&9`5_`sS?k%FDl`gjbauaV+QR6W!{^_+oFp?(D~`8KR`?|6D0@O7?#cuBAH-K)pd*X^g) zm#z95xXXa)g*1Z{o8RVzVehzKF(rCEmUv^x7$sgv$KaxcX{%>y0X5L(T(f59` z?dACYESt-GlO^BGJ}$BMQ}27p6@FFQl6fBd_`mu4B8PLqGj(tNy#BJmcuIXu?4Hl_ zH_0d0YV_IMF09m;zj&E*%+fnw=C@w={4!a|eNm^pnAeW7x-;9%?|Q_fUO2YZ;E(9K zlEZ)A8Q4fNybIVN{Q9nH!3`E8yDYxPTdO1APcGVXEOpVTnOP}Cin78z%l-%bapKAC z)ehYLY@++K>xQz&wd#^xrhmJ(khgMM#ys{fE2GOFdE1q7KAwL1ZR@3ZTsHjG4}|&_ z|LwhW|Hw?WUe=TeHp<&y*6|BfM4hVV_%XR(-=yr^Qmgokh4qHkmm^ObuiY{&PWQgE za?aUFccuOX>@#HAU~}mxC&NCkuy|&H6(3tRAHVU5fjj2t_lCZ0i=*1L?jNe3o78aA zX}jtwk!4i}r=&N&UX*Ys^`3FudY zzEDzrp<1ti)lTc3!c!V%yPD5i`1V}=>Oa3bs4JFe*3!lCQ%;yQ2H zhjaE_^@giLX1<&Mc&lbi{M6N=C%1O`H7aoX+-$7Pyc?S3wAbfRwC09_pB%=!TCOLY zIJ)56^yrsd@0F`2Gd}1zG;h-_U#7Q5W@;7{PAJT^c(|nY%09ITM*3?*FAInI1^Jjv zNRxOamv^AU;^MX^*^)8M3TxF}Bh2%7{C95BoqVN4(!#KQ%^r5qz^O~-X}-vrAM%Rx zcSl{|r-REc$=5Cau)Q$0O6SJwKm1y+r({ez&?ofcNAlV&*JHFU>nzxJj?1MmMcW9vBA zd$D}uZs+KqQ<%0qm3TVmJg4uym@(x#%LUSfb_FaE|e|s8j&vPnW zUp4({d7I76pU>0(nJm4t^i%xng*CSNAxD@Q$}*%Uzqt0=T{U*?`a`xeR$X@ck-AUi z$e$aFy`^6Cy-{O6FpK<_D;{|CBaIQXE(W?>FhjWzAHFL?983@dk4(HQsWmJ91eaW0C2~JGaK#$GZuVZ|%(Z#b&5|Db?UMg@F7oN^W4X=7`*TfZ zKQdbu8ktq-`6iuNSF*s~=<(EJB`v!x?fb7x5;<mVi2=?iOf5N-+fED8hz3xF?Ri{j%QW8nVfQQ;{RV#t=yMY zcN=$@g$uTA+PV1;Uuw*gM)AKPb|1v*F6@lUecH16by~uu^uOM7PRceu4EY@Eef?6- z$=`a5)R+&%dXzq@6ydBe*v9-(W9K{vH6NAPuVU4vJ#;?LziiHw6;A!@5;-I;-c=D> zA$>=4jfD7mBdNCLRc`Xk5}HnD%Ou);bdP&&WEIeT`MSBmpySc{vY!p|-4d}oA1K{j)I`8lvvkAE_?!2P0vrc@~ztVSkmH7R>U)m2^ z>pvbm?qpuoAbId~=f@Ya2lp*dTHWMxxZx>hy`C}e4FyRJray~*GFcT)-Yw7h#Mr28 z&Q?=`~GL|@AY%D%KnwBA;G_TzuafA9Z& zE_QTMscf?6{C8|8B#!Dn3NgIKIcLF-SNv=LG&-alI#3`PJ0tqcd#kWh@AY~Z^7qHQ zXld4}^43dje*Z6OzrW()lWjJeV((7h+bnPFxP5JjrxHf9Xl12G*UQT6; z_ZQGlJ7ZIDyUXzC+&&h+*q{4#UH_M;)J>i=g>f45j$bD)dt0$K_3c)?`znGxe1a|? zU*r2fV&Ct|-`pc|y5z$Bw%fDgE00`L*Zo@R7$nD)acMnww=jzCLe_<{#nul|N4VD?99)ea^66n$d#sz|-&7 zn)QALaNe4K?CH&nqxDae>os=$>#AN@I?Iq#X5-{7r4rhw<~|6qzxVV1ukv+i>+1~W z*Z!PY$LM%WkVpOdqZjO2mj#dRi#EM$p|rFn=8ON={U5At&P*yY3y{lcG7`=LObGJ=S#MGw%AVHv%>ix z^Smj^4>Ap2MVfOH=mxTQ>RbKLmb??m1>9;PwJ!QOk&-wG!f2TjStrxj{bpszIKlUdAGJc;t=l{!4>*u}MnOuFgP1w(QuiARA*=-FfVUH)wmzgZJ zE_0p3lxoG-4|g%F{3Y^whSOfdMUTtYPdMc+__o3O#y)YCjRqedwH9oi(0R9~NxSf} zUOm_6k3YU|{9V7l>tEIFje9!n!-6X_x2Eo}7hkh{A3x7xsiXE&{_kYVlVY49`g+Fl z43Yiq43W>8n$D+Becmc4!!t=O===NIkD82T#Q9%;zPmVMOK}!zL zdi{!P2GeC(3sF}4R$pf2#B1}7Rh0$VZ9T1=y|3KwOf=Xj?Xke4N}VsyIPlSR{Xg92 z`p-MRzl|_acshcmKPsi2W1PKJmrk1^52{dio~*&&>U0Q}(>mn*9Hh|DPvr*YfcPsyGSfr&MMJ~+D!O#9#~)zLd*ioh zA@`lEZ_4*4hnW;4e{tM&H{!ykn`ag;y(KKSl3hkiYNtkm{zR^b7!ePKjP{*^69f~;vmWR)>{ax(HwPoDi#?O{jZ8@W^e(~j29 z&7Xc)?ZpI>#e1qm`MbKLxR&|s`odQKyuBh;NWGnbM_Hhl+x1qN zaeL_G27}yZ-wx=X4-)xXbte9>)s%WkCN3Furbjzx=g!K8bI1s@$WnscKvL51&z{{pMu zWrcm3TXJVDSGX>HHQZ=(L?r`%OKRozAEr@3e8IdkzBFC1+AjBPS>p@wgGUXXp7CDo zrv3Mg+Xn52+U1&C?(Bat{kUq*>p2F32lm~VDipJB*Xi@&e{L=m*w?MUo@IiZ*wOwA zCG%A_>}Rp~RR625uvJLr_`l@u@<-*F4-_Be{I;@T!S4URGA=~T-E+af{pEkBU*)pi7v9 zH}C&qmFWnGVwqwwVOZ{#)B2eT$9fUUtVv9ru$C z)2yuK&DN{dITe}m#L3yN`{et-i=#q&EPjb~&uCmy&CSytYc3|c@QrxtK8+s>e;j|b zM2b;F{EMS^W&W-VNzH#PR)L&%zP|e(@YDWo`TtA>w`FXKZVfx9N#6SE{*zysVL4+* z^Rs=j#rpEUE(g|^{aN}Wey!cructnoSZg`j4Ti| zF7n?c^tAjl+l~$)BV&)KKZ?33s`uhJZ=B}%$(grAG07vmpqE|Zj7~F$+NqfboS(X# zJkQ!DE_3f{zw3!eIY*oLpXP1ipQfMR^8ZKAhMK=_?<_Z%DenJxx3&D$T;VS3hP)Nb z9qk3He^i&xued4l>3c_SaMP~G>&w0*&G=$4V~%QoctgtzgZ==s<6-}FZ%p2Q@rI6J zz`xTU>wiDka6qs=zR&N()Z_o+v)_3CoWJl-y;A&if5s2847I`u>%tjK6b;x7chpXq z`(&NdHRX`H3ojqt40+ai>0`0Y6B$FXa~3~%_IC^07`MOvJMH?{E3!uyzO>?Nvbrb{ z+sq`S#$>^(7WQi9bHUQiMz$MljL#y=7KzrYIyd$&&X&vj>1e<6uj+@*_S++Ww%?xr zQ+K>(bd68>B45v#fQ2fA~r51x7gy)@`W|uU-gTXtu*` z_RjT!nsdeKJpH#E)-rzTan!y~e9@QUHTz{=x*v3ZsLpd{9m_tEy86x=Zj2YX*?HIL z6^NR!%|Fe?sB6?+l&(Bo2b3W0r-7kKD@~I_Ez0ZXnd0*N7Z(&59=%fdWcWf-^TdK#W?35Vx z!}Oq8_9p8aTW$E$jHU@ho}5`9-aDgQS?k@h;Pn&N*#1xA*sws*v|h2qjxC+LA^2V9-Iw(OjMg1hjs3M#;Pi);Kg0S$H1u<} zEVDc;pzvInG4Az-7ZZhLc2yr~E^-kzS+_GZb=N`Fh{>S}*EXlF6;0_{eNj|kU8AB* z+uR+#(s!iNST9~;5a0K$`;xzGz@O(;^9wk0mde{t`5W+pTaLM*mm%oWLid~IdNuO} zG};CC67vt-^1s6Ee>V7=i zKF!d7LR*F9dFfBvTW?$VF}dur%U9-}|74~`&7|Ik(X)29RsWp+OZfm7*Md34f7EGYtlS(5f#MezckixLT%^~>9M-_vZ6+DNhsE9dk zWO${kB_qz=zOm%^>Z6R78~Z*sE%WYHeDElC&4h?|HzWo0R=xkq|3j)IWa+miEunAk zPb`1#wWB?ciOpEY{-9#N?~iHgp2c=>N*_rt)Rk|wuhsr{N&eGcCy`$P|CUCHBs*yQ zlwgr^Zs29Pz{A71M3BG5?f=T~z(23g)$M-VZ|IQ7!(hfV!SBn-#cS^;Hyyv#_3NTv zU-4|gzHT$)HQ&5rmR_#BdqkH_KEB4sX!qJ(HfQGk-}dblkK9cOrhq>`Z`wybS#xPA z|Ce?B?iU$U<&JG1q^$hqfH$AsSpup~TVVcbN zV4}&BkluF9#x!0L(T=GT#7&=9)z4)W*x&xTbW;8y(OGK>dAUv;6(}rTKVwps?#*Kz zWr7)tqL%4#rmpyD_CoCCk7*j0A4uCT@>pae#%eV6--qs|enSP({~_<5hR@+;NtF4Z z&3MVuK;p@}`gsxw8(*BZ{yAxu*rY#aME3PEe0zNQ-&Ku-s7symwrRY*sAqFM<@%{- zE)S!gEvwad73R8si(qE0<(`GMnXi{jKA-Pw&sHwJ`#*pD$M@TF<}fW_eq#OqmBw3@ zi|YFq2k=}A_;d5>|4n=D|M#+c|HpiK|KIJW_U{vHICPVzBCGlJ-c?gibad@>+>!rB z;47c_XO}O3Wr{7!w>)g|bggN-o@jKn?`K0>Nv_nPmu3%*_kEqb?I>gV%=RC-51(wE zX7)5~V}j13DXw28tcVp{x~q3tJo_b{=1=>lI4bO#e6DmxLbT?x9iRjZDl$Aceb^eN z9C9Mufrt;P7Y~c{|Vo`@6!HH?*9!Krp*5C+}6zMFH89{{>!fTWx`WyL^V8VS@Xj;@t(Q;Wlt{cPk!AdOOGu6Fui-Oa{Qx{;Y)8n{&%if#qW0bzm>N% zEl-O1Msfe513gi0+Bx=HQfwOQ9tplUT>5?G zAN!b(Sp+-ExyT|{{GW-)t=^?6ZY}GXLDzaa(4Le{N7adiakC@dUhNB zQcRsz*l~YKnMc0Ws(_T&pBcE!lb-T2Y>l)De>Q9N%!y~&7fmaO=+LzBOn?*$wxFat z&tlmDO|OKKg#lc%3TKN+PH^0;`%mQcooOp$ug{r&nc@90KjxH0_mWmbuAKH`TD;oI z)yo}Ic*7P12wh7xu{-rop#6{sTVMOK#^94Gv4>td^Pf4Iwc$Y`tNtyaus?BIu0Oxf z{WHes<4VS}S=?(yDzE>4GxMI!HGRf8`!6h=|KGZP;f6ZC3te?m3~PRL=P&;Ad}F=7 z+f@GJ|B4g649zU3_a3@CaWl{4@{`Bs3c)Tm)Tv(4m3{ell>_Au@|J-=(; z)Ow-A+{@Bp5-RcvG^Z!p-*KqZwfZ?zAo9db?-^4I9HY+Z#-uJcX_}a;UVcci`uNlz zEz!I9-aUW1#>>)&nQ8hCrfW5vt9fhBH3entR```~Us;v47WVf633gmMzE)*9-lfQSfE|(*qUW z=5vgd^f-?BvGQEr_HbJIqlfd4u|8@))?ns)Xr|fW6yEs>3=EJv0+Ro2xZ}B5_pQNM ziQIm*r!KNn7{7&=D?TfIm^0yOP1}js<8#C}8%(Yb;jF3rnY?-W>HURQY?hx<{eXdCTsuL#}3RdYFPtBfmfKSNcI!E1gDaKQWG_U(l zb?r{L+Vc68=7AmFjyWc~=e+4jVqE4rt*}irZ^}0@zF&;GKht+H@|^eZ|ChQkJY(~U z3o3V}?O^Xd(Cu;Yliq)y`y4wa<>-Z+E021tzyHcg20!K(Ar1ZCy4mKN{78B5WoF>7 znVhLjZu??|<5Q<@VXimX_rbGl8vn}^Eqi!Q`&$(pIQstJR$Zx`;W0~^?`0k^-;;UW z%-((Gf+ws@(|53VSFDk#*`3(=={&o{S1z{oDFvS%{W+TRZRLmM?|$sK@ig`Nf$b}Q z1b=s)`aihl|Nk{L`A58FTAi%<7PJ0c&4SmnH*fw~UYhf}de^?iAKbgDSK6(JXPsfo zUGdE+v6Sntlf(Ce2X?=Z)#&Ca+Q%AT$CAN(fZrti&)u6xU**4k{=Y8tdj5~+42B{J z0vc*Z_i{b?xWTz=+Plg9h5;^0)w?R=J}sHD;gNRSf;Zb)4EaY^c? zxXK=e9VRR(78{Vqd^uf%U7L?Ji1A--tJBQgyY@`ZPu&};w^f+Awl+S#V3~UN zgUb&dI9{+($~`Gmba^(zjTwLQN}I&9OLkbg|4HR}Fq?sU@3Y^2pMLG$ucRANXlu@6 zJ~4Wc*43@4vH~?9N<}8E+t+uEH}cDePVKr=lV$%-DL(3W*lNeZw+B~k`6>L~=ZSQ| zw2A8)90eMetPNBsxp{h@!v4QU*{0Ohl^*P}Umq{ReBl4L>8Go8PQGFJ8~@KWvd8UC ze|@~@PS)@I|26DCZruMnz5f6DbN|lF|Nre+i+$nYPpS6lJgpOb+Mk=&>FJd?$R*GE zQ~v87+lQqIJt{|zmzy|kbU8Thy#3{`vo~*ky8i6ExqnZ+`MEj&e4O2X!PxtAZSDVG zd-LYa;hRN;g4aI<*|jlBvRv^#9sZ zw|!3S&u2B?j=nzn=BxBv_6sgmm6}m=B_iglYU3|@d25q;c ze(z_F^$)bNrt|pCNelUyfBK9Q=f@?&a~%B(T53gA1zYUEktxs&4qtx2B2Oh0E0KcQ+*;^e}r9^y~D+L;EZ0cf8WcY?I?O z-?3)zKHmUK5+`Vf8BTM{! z%MVG?QXPda-A{Zsk6%?N?f$W>s5M~cjvPN{Nye`En{IU8?-Wdw*wHEYVE#|_|KEDE zzvTb_lHVi6Xr?*O{M-g34eR4y#7pIV`B#S;-I`bNcH82N__$ib-8=sHu$}5pe}0-j zRpi3fs`$H(^;PaJ&x@vnbnUk~maF|gP;JMd_{zdx2kh7!zFyk-jG>2lkKBXx|FSOx z)a0>S{Q9Q-ZF;yK#$Y0`uP%Z^PVupt}>6V z+4s2S-gC3oc?~SP{{3Uo`pvNF#2$mKC;ysXNnzOW-)x50hGv$w$*!>xQ??x8FLd7K zEO+?FaiMve4bI%17$duM&WD39i$v0%Fj zj_17pKkxn{7tarFeWefGmU}$9EYQH1oW8wtBiEhR#jSk$zh?#d9u>;JZ}d_31>@KRctw~Y#O32l4dJg(t}w56h!L~jUmb8d=G5$$QU8CQ&NRGxYH{o5k^^>a z4YvdS+%~$SdFKoFchz6P)taB%QnqM(T>33wjlTZ=EBd81a&8T${nMX^#|!UYzv}$5 zpuVJY4LMdHHLf3?P!OBRkeG3RVZ(*3kGdDu#D<7IE;;b()!Y)VIQ|6jnfvNvd0jUh zy~%MPvq#WO?|ej*YeeTXf1?+NL_JbdvPqZqb?RNgG*SS>lpJrd(iI3x*|j9$sM1Yvk!#^9LYSA)63WG zZ*mjV_j6#{dY|V*aKWSldO{Uv{-zr-yt%}zHfyn017o;2%c)9X&~!{(z9Tr|M0M-ec5vH1aTeCtH77qIpMq zx=4a;?y}?gvo0U3&CC6r@4GxH=+d$+(I>aNm*nP`^=l@5(aY z|F?EleVNL5_>J|={!9Mz{uY#&m0evQmcR5*yT5n*LBKT`EO2yzJ)BowobEkNyt%+EpRVy1+SQUx-}=!|CstjE6df zUsU|Gc$J|pKPf8QzC&r%qXnkt4>|wb_BG<)-;)dhDrS|FS^VOd&RD+vVf&M5b;JKZ z`#(&*nOw!2V8me45@$a3qXMVF&MU2F9cBD%0`=yx9sROomBpgzzZ}F9-=ApAUccx| z^v>&1Hwra=@!GveUbarYyV?C&Bt!Ls>=q6V^O8399X-dsGi`8yaKiNG)ISDH6Z*^lJ^fzxmFw)2yFN^}dl<@>{z>n=%n{K4 zFa5b^(--rHo$_C1`XtS_Q&#Ao+5TzjiN2!CKQ=QqKK{C=+Wz|P@8U)bbM{{9oTC3F z>VWh{VSVj~U!MMWz2lyqi|OrPhCOToZtPRCru@6{_xW?C-R*2!_wRiDbt2`*{aK{!Ve7E%J#Ujl?nBuLhf5Rs z->+nMdoA8twl`>7>pIo-+_Rm6538_G&-_ptYPr>C!Q4B&suym*6y3f%?9XkcWR@TI z|DV4vw_@4d=viw&MAT;#vM&425N7{Str*7VqQINc=PYGFN56yaWPGi z|3)v@81G2+c_MnB(PDbtNtcx~dyRG_WvrcIeyVo%%y8uc2|np^i+#g0jP)j8^9)Z- zy|eqpC*ygSosShxKD~1xOSJ`i$?9W{njiO^&wnca^xxWw7qj;7eD&b^B!OcMOTz-&C(=`=PTH98kzbA3 zfg^vHa^oAj$tHf`Og#6Kw+8!({`OE_KDYLgjmoW)3?C*$z2=-Y^E@IBT`YYof2245-%=;|K>Tasq4&?P|Cg-Ue&O5~>F=^NB0JP_{B0{dbQO0e@m?z^!`{T zN;3CM7hE94)%EH9WQL$GZ-e;~YV>0CA3I#NZoRNSo_m2Di}%9UtC^H*G6L`XG3GMd z2^l-OGl?ZBYo}`3^5bbn40GaU`>5VhYK%FO6YXB{G$33idd6I*E2Y9b-3xTm53wdj zHfW2tq)T1oOJ;a*>6D@9|9OfIE`M6WFFmL}c=ZYEiK^2#e@>g2dePHIu^`fD*AnGC z+g#@@yk}bD7Ir4IAL;nGBv!pE(D2Km>c+rNoR!R+8@TJ``JUEaF?@0Cn0r1?|1y(H zcUx!cJ-fN*LFSG(@3wu6-dVY+kDn>-XL5B-;r!Jy+turiZ^}KFetm`w>j8Gg(y8$Z zC$89WKJe5v-2QsKBx6GV8tHZowiPpGJ8E5ewCdBV6}+8lyo_dt%xa=HoV(t-y#M`T z`^~TCbNv$!`mr-E_S~~yhwP^FGX7fWGM~qTxnZ92m)^?NKMqeX*u`?$f6t#)cf@0K zqt`C3FfZ_BSkGo(Z+-3M>>jlbCp{KikDuqWRzA)3_vf3PR}&462kbijMHaMDI_Yn& zmY+uh=bhKb+!S>6)PF3IY@40J&mJ=Ob=5M4NPQ&-OP(0LZEa4S{C95d6x*@q@cJLC zemF<-GF@<;W&BsFXqip*>vk3l_DN5)1H2rC~1jD(~m*I>hIa>QT8wwd51C+dK z&GUYo>Ue(7u}tr|!S5y)pV~q}#X0|&iWa;&*>|T*yKA>-Mc=o@4;KH(cCY=n((2;! z@Xf6~48}bS>q|dI9r$p<{%N^v$?AefURT%;nE&VZnuJ)WAk3I+5fA+8Y!Qr+&{rrT5*NWdf zTT-0DW_ACl&nB!D#>U;H{uzyP*6knMi`@jEmtKx&J9iRFiGRX1HPZYbDnN@gg(RG2=@ZX>7vrRfz zd=+aF=Gdy>Y48(N#rO!#P}$(gG?_7Ba*Em?PR|88IeZ#|r{2DJ^qe8Cd}2%NuaYTK zTcclZfB&S}|LMJwun*mi3p9SuWmNcJTbIJp|LF13$4?l}wKc?CVAb+`b6uk$uBNv$ zHG*@Oo-JSM-WgAtcf!KeD zPcO^ewee=LX~_{P{U|8vQxZP=*YZCGYm!*fzR#cg&wt66*HI5P|LzYwVEupMvE6T{ z)-z`9D7r7d;7w8XCHYTfvdv|?{DnL?xBRs!oc!NF<-+{qdE3u?*ysB_B93_m55xAG z+G=s-N{nh>Z_6Dh54ylS$#`)1CAsW#E}m$$CIkyx1JCz@gD z^FgKY_T&Sa8vm}O&HglhtE?1b*ct9WInjNSog#QMT8eYTW=VyYRocpRYER!UGM|k} z(RgQM_pkR9{#Aj_U$uxT0s?Aa$t+U3rX|2KKj z`^Ep>{HT5&f69J6^9h55SSU6+^Pr5v{_XENN_^(C-nR(^{3SFa~&yBr_7%+SU_y_Ne~>l}4q;kRShh?6yq*;4IeH%kb;z-dDE_ndUTe%;$FX7vIltVEZp2v$&5k z*N^k^GP}JBJDxOiPQaGwK^w$Bi|<;JvH7uolIH)_+Ob9qYYc=$emyA;ubZJWL;rlp zI`Pe$k5+#&WGaw);Bz&HwIqD$iywVbj2(Q2vp3`}o3%;Acxt`Nt8@p?=>3cG?RYn* zFxY0;ajX_*;I4be-#R~-;nUx(|7)Jlx7*n1|0(;gpuU{DK*r9YUWtZq;hLa-iqnwU&HXh=Bzbx;q2?NjEgI4L&9k+k|bK6XV z-CA1Yi|+>cAeKV$H*sAXKI#4F3O3RE`6S6=!`;2#WQ|{a5H|5ln9Snm`SX72cl+0d zHmnSFUt^MAcr#kQD3W<{z%Z~!`B}jE#YaRf3WELyvKaC#ak{ajeAbiKYXUZXU1w|k z_ExHW^gi{}-%AT-{df`<{;Ra%X0)j1sr_|_SpHkwXXQ|60;#P>hi1R1_R{yDjiWz*V*r$JkKPweJUeEoUB0YS+hK5xxd^=ffVsh6yL zrOizt-AM#Swh)i9><27b&*R1-?A=iT3}x?fHkxC1Sk84lRhf-gZ~tpl1sAP2KK0w@id>JReL^-O&GO{?`K>1|_SfOF8Se zJiSpK_+)kbvB~x_9&<$YhkRSOQRu`2E%7!p>DwI6{r%b>1=IZNEu&vKSEqlT{&dA& zKSrG!)e{^I_A@S+&$?&V6@TVeCI{YV*nghb+IyYBz(;3#{6xVAwNrb8xwP)b`m7MU z@GV-3N$cu~Id)A>bN0Ov-SH`d;e4mkv-8{zaitHYxL5Kvyk|JG<+c2&{WZV1&P~p5 zI9Ydwzl-^u!R$MSr#bMgR=#%V@RyFCzL9g6vCMk8GW>w^t|xl6UGEueO3Wo0y+BZ-0OOdns6-1&kZ@1x+ner znm7OIkGj9BWMz2WSkD!(o-yVm!-h|)%ndWvpU`37XR!UXhJoMLtG02>75Qa#-wwX1 z`ML1a_k9I5{0sI>O1Sm-9-kRgfKRyAo@{U5=*cddmaVN7S}=!Wg`4d5{8MkD`ey!} zRbT7HwMqEuyAtb7vrpuyF_ur9y>Uj6zt9Sygjf6Zx4#xCiGRBLY>hhefn2ZRN2TpT z6>|<>I#sXrSL64aPr`bq_KDVn${yXnx2?&}+PbginjdqFap3h{=Z+`ZclN<$K zMR|Fq{0w>J{5?#fHGc8wx+A~6KVEpY^hLlI(|Az}wj~)7Gm5yi|6BdDzx?}uao@k} z_Sk=u-ZOmQW%&5%_x~E^18xjFj0apq)C{uN%^pfy`0$mTVt&lrS6guJul?jt^<~Fe zCpKLddG}s~;pwfb92*Ls-IrkeeoS%Fo~++o3+r#0#msamHhTNhbMxK%GY^{`>QUBy zaB^-NOP0N5UZLC}wey9lpDK#7e5QtQPdxpfz+AE>_*m~Z2mKEG-8oL>%#$N!%{Z+A(vVg0ey4Bu%buby{F{&%g#bdzu7L}drDvw?Xo3nu*vk^iLp zwIWBOO|5yA*~#S94?^a%t23VG+ROR)mzK>|&6J7fue^3O4)hVSkmbygUXgo8?MFzK z)6cfuf5Ltko-LfZ)%Vvjb>Gfi=c{CrI2P+^={e>?OXn=u%@7~!`Eo-%mt&%ux#t5;kA%yb46EwCPK;x}uw%t^k=kRN%*VTG zwEkzR6wG;aSz*CP(UR8o;|r#|np$=(e9!;?MP=)fzy7^6=hxj|L4tWGp0E&OB;eMSRHN} zF!e|=b>!SBJ>T-{O@l$K+M|Vsw+HUv(e{b?&2!46`sd7p7w(@)@wnOMd2~B>%#Nsq z975(ht0y(I1>04(JAYm04g6EYrmhY zHCZq9)c*P6n2;?G8%{G%d~@p2;!A3JwQE2ATqj|5^y$-@vXgr09#!*&{I*PH>CsPUtihr#&mn)5fl zUe{(YV$u0x=Jhf&B&#!W8@LMP`Got9j`-?`IAqUKP_#+b^ zn=;h0KbRBDP$k;H&ou9VX2Y6WdTtCErxz_4eKed6cL)Z=q(<@|%o1DC86>33n;{bl8}W5%aUEMso}I3I(OiSX~XI5cQqN-@SE`&9GhAmCz`=l=*RWLdPl|I22aHv2Ca?rw73Tdj=wJHzttvH&^Iy+QX;M6} zoN0>BgOxjUxaz9sdi|UiV`=in=1ZA$ow?Zgg0(DL6 zD-MpLyEuC9EPSrq@Nn|H{X6{`SM2#C#c-eL!fOWazcvc$%s*x^x-|tCWViaI!Yk}Q<$*OW4rd{)mcfRgUC>~?Veup>8o2? z+0UgR8OQ6tI(hy7y=$M6Gp}76Ll4s&z7v-jW{Pdx%J*m4>ZQB6Ek5t%z9)P>TXn;u z-&U4)B)sl!*lqT9AIsFg%j$OM9~NHd|MP3j)VB$N%N9KOUcq-*wZHkZ<)l9=4r}ge z|0B!rX5UxI&Ph+$*A~2;D9rMIgXoIjH)g>z^RyaYtbZL7Rl~k{hxJ9tmZYbLb!x-4 znH>cd9x46$?S{z7l~?t88N}aT^JY7CYJW|_buWhH&4nhS6?3MEH9p^))H-?JuTGP# z!W|v5dn2Z#Z28Nh@;3R~%GdkWd0uYVU3k;*U|-7ar$0}u=v(_I{NvPvX{`|-ZohxY z@&CS%!qa=!f9Ei5IJ7>N`Q<~M9~Y%P!>$zd`>vP1a)5hpNL|{~c=uO7*$#N^{vZD5 z%lsgZiTqZAui}+WC3I5?FYJiToD=_XE`#P{?ZQZ1R&9IX-;WuWDD&=|zGWT@XVYQF z_&G0Gnw$1}``U#pxw1f|JD9;J%49jiz1TXf=%drECN2mUiMgFpv%gM?vF^|B^S@b7 zu3E0~Yhx^jRs9ElJ8efvhBW=sy^}xr2N&FOwmIWAZQf7mliY^|YMFKlPMm(Ax36YL zS?Rfg@T7}xPuKHb6MmT|)S>9+{N{GW?vL|VludTnayW0xch9FU6Xsh!wB!Em@p;+$ zIjQX{&j*K^J&-t&$&v9=Zl%q#thp;#Zta`t>LXLPb$iT(1gqZV;O?`x<-XwV3_ic^E@{Sk@{gL?})cv3kU$ z6LU9mm&lQa_iA>|u&wX>^~po_>iJWBp@D_j7nxg{ndd}uZf}coHZf5yOm>}B@LhxP zSGQjEtQm3tzx{mk=6`TUFhkhC!|v?!j0;7hN<5Zp=Gw%6aIJm2#QWuUc7|}Pu=DTi z*=*{<1h|>{3Ri0PFdAIuXlGa0;KQ@}>7{+`8!D>QRE*WQCJ0yuEr=CkT2#XN+^G3_ zsGsl+nS@IVz6aL-^+|j$a^R@CRm+E+@!k_Mol+P7ahz{?XL-M3!dVW7Mz5{r)7EzI zd-L6Acu@QQsxj-maIXEc4xav>+Z6?!WS zl+Q%IS`Hz0{s&K5MY}#--|D~BK?#nATIJ|!U z>7wAp{TbOM>vOXA{oTK3l8`R*0ZZ%uR-6aEGbrtyF(cxS=Y`!{F7Foz{#VNMz>B%= zoH_Fm{bRddh@ZMB$tgDXcch-zf#%J^J)6TPcC}TmJ|cYmsCDOl)(dl)EFMQQs8?|{ ze0pRi#i&&E`R=ESygQ4}$bY=B%2h?-?pz7d}Qc$T2N_SeD!H#PsK6mOOu^l0&bTU#k1xduQ|idvTF@=T1%z33Cr!%`Nxp z#m8fQGh!BMuJ~)zmOtBR57%z7YLOjMjAbW#omM@F4AcIzROyXF)%E}u(fAj08Fu+Z zeAa4f*k_XUW-zp3$N=X{6G&4J5WvaL%lUKBaG+>_m6rytYt zpnpF#54`8^@0p%-;YnrVqP08Y{;vD^=4t$U9)`O2@fB14FLCGJEUfS~-ugw=fBC2L zgBh%T?Z42s@k)iNhE&swUDp``B#t`tg#U7DsGr9d6dUf9+V}4qXYs?JmzOve$jtT2 z)Z~!ez`NUFX~H)Jr-@V6XFq+DpB1d2jxm=GaiR?(Tp6D{lE$%JN;0crwi8+i25Wc%r!IlZtK*$8B+j zGgqxP7XE(tI$FR?V~Ntsa5pZ)k2{{I-k#vER#4RVdeIci70Z4LsvZbf6g!h$B96yZ z%5-*4gvhS8SVfOrUF9i4qPKMCeZDidhI_f}qD>o=au3J~-Rn{DPyW6mpdtC{?&%-@ zHP+pJH~-(1V4E#>>r+n7xS7Gw(7^VZO^n~K;Nop7n<3iLRZsQKnn{6~$(SXVH2 ztK)mS>V9!*@73*VntDh|hjr_t%!p5g%FW=$+$ylMZYtU}e-g``Wp_@AeqPS>=k>2A?$0;#|C2xKBDF3@tT}~8==cv~ zuZOK=@5HTs?B7$Rc2xf9|C#>G2@DUO7HXGYFn$v}@x3JT5l=69`DNVB4QJS_SP!f- zSugOSr%L32u##lg1gDf4O*zIaQ@D=p{&QySQxgUosqO!C8~W44vzIgc%AED&JDXe% z%L1(|cD|T1=S3zs9oJ_#qd#-G=rThK#RFg6au2O$n8WZv^lI$FHJAB5E#hrbKW}m? z*yCxVzWN2eC>gFLw-V}>Zd;b$@Vs=Q34@C4%N;Rcj1oEl|Gs{7l2#R&bLXRK!P8EK zPkV!ASH2NCQzj>pX>cbi=aKCk?J{$P%TBc(Ro{0`3N71yw`gDLD&Cp-4*5bKb;Vy5 zl)Yn;{&jF+Oy=w6TNM)?=6;aaP-EbjqQUG?wt8KwfS0TJRn9$ZTU#ct>E|M$`}VU7Q^yc;56+>Of~Z_A9@;aTv0!Tr+Q_66dBBHrEl55vut zO21I6I+m`v^LWCwMbd{lZ=Ma`6&JMWw(irokd=S7ciK%+T(FOCga5KAhNoj&7R+3E z!pG8Nk5k{O#w|U z{`$Qx4mYOfX(UOq{WxfEG{5%C>7bdci;oMouVZ_%Gh+3>ohEyY?HDwU{*PJD_(6-| zl)Zey+}GOwq?=M=jR*V8sl!LxjqGw4;_XL@l>VB!apch%C2URz`9 zyBmKQ&px#>@=x8~6npF7+OJX#A17UWHFv>MArH>}e(Sb7&2tm1IFD3rw4KvuA#)_A zC6h0qW=j2um(re#6P~Iry?^_x7XSV@gUK74o*#Vj&Yejv=+vxbyLgZ9IR3NFVfVF# zcSN3TJ9TZto>GI;wXb{LH$GgLyFEK_qUhz{PxvM?eEQ7E&~oCi*`Iwb%;HUcjqJG> zRNrk-y5qkp?B{Zp!v;G}YBY%WT~FPAC*)9%zr59h;Nm|l+m27*660Dc7O}ISC~@(H zHB)c1_HDGe=n^fTkyZwH` zA}+em|LOj&JzKaJALk7_%#~$eAonQh?7xHkXVdM!c)OO0$<00Y#An?uv0oYYCq4dr zI^f^*>8Ect^>b|coiEi}SeDOiYyHD^PcLJRbNA{g-erA?IzC;xx?V*k_t_ z6Q?uO`FvbD*Q=)LiLTkRhiZWb>JDnY_$gggQ8-b3_kR;x`FY-QPQLGc2z>}pir(5= zFSKC}(}Kv$hB|MhR1%I(e{s!tW!~+Ks9%bAQcQbh9V*vobiSQ^Uuo*fDqYDRukUO; zRS|3XPJ3SZ?-SY#9(wLs`!hInSpQwwPUBBlqX3O+5&;BxKc5VB^R#Fw?LSa+pe)QUXk@to9CEKYTo^s3YU)nNJulm)4FCQOHo%*ACf4SZ7Yw@DK zlFa{F?OYdiY%G5F{lDd}dQD{pHio^%2j1Ds|KL6v-(@q6S6AilXy0K(tmPCo+Tt|zKVmeNaDlmAH%HJb}f3Oc6Q=huO5b{o4#>GzJ752{)z1j za)&e<)^IIfZKv}&>(Lu!em#+L-+6ZD`jh%E{g3Ln{^{q9`_qH|u%2(3oy>8;bh@F! zz5n47u5*6I{*U?jT437FfR1~4FT_i}9xL1VtBOfdYiPj^<0q~p;g=6 z&ENE&wEV5{aEYgVp=Y(0ophiCV~n48kU{oMqiL7K-Igbto~YO)X63eW{~B2dk6o@p z$zpr*8}$={-ajpWD&eViY<5NbCWkvmO?fN?Kio`T^GC}3#Nj6=R(Pgosd_KH&;8>N zlhNej!=jS&?fF@m?KWPPxcEi&ySfllv)+!Bz~8f#cbCK}v*f+KcVYce-wt)<#>qGS z%6skp^6|}oLpBpPm+KG1HsAm8ujbp~|K%l5W=Nad`og&XXyi}M1K#_X7kEF8&)WUW zEBV3=W%1tgU&|)v2l7EwD(>VQn&BysL+fp&(1^M(Q_qwhIp1mgS7o8j zzLLxPc{hlPyX07C9{VqFVN1=9fcdj8WOH^c?wR28E>7h^FVD&OWu7~>L~J>|;jFvY zOEtFhKh}MTT`Z;4uUFJ^n%Si^^v>=NxtFvy?cI6Drt$N>^GtX4aQXK!KhAAtY;asw zIAiiU7vYB!0uSxEzI=wd`i^afoEINR5y)6tyu0Ar?k83}JP&1}+C+~tU3Weg=y>{<_M_%Gf|=6~8~t^Ww@A^B|G`rs zc5QBWhxOC?84fJYA=7VN2;Xwbu1*r=1pC9kWoucD(2h9FU&8i8!qs2UvVuDcz9h=?S-M|gDX@1zd3aC zZIX@0Bd3)A=XT_@$NxY1^UZGi^ERgwF73bnfBL2M%D>Vj7`A9@m&VTiv4?rV6&?%C z*V^yz7(dqxZ0wbmU=G{!Jb&@>kn*42$L2rtsyAlX6K6bQw%U&$*BJxetuAb|(VX#V zYWucV-~XGwtor`H>+`!q3y&T;Z{jp@nT4Op50L|ZY_}KG9DZ&uC(v2bXa38M){10k{?YjRIXtGyAd%(5(_jXf|IZ(V>h)MHxxSy5;hm0a&4YrM<%@X!Y^z?j zvX1GdiKJNYk0Pspu&XE*i~qp7rQ!)N1htjZ4yd z#kRL)?67k%*u5qD?}tzI1a^lQ=0sn_v>%!HmGI*?7 z*m(6=CAz|nr2kq_G3)z6M+QwFx5nKsxWDYYB*~guud@72`^)VX4}y!P+Zb%EOYF$h z6ti2sW{GD@G>72w9WFPH`d(0JygjX9 zxA^v=i~7;Y5iQDgzjJ=={}%lDX8v#O9`&U(5B} z=1H`Z><`1OhjJrB0OUh?OBC98wapUI0#zcuhVo(S}-HcHX?(#>{y{h4#q{{}OJ zPq(`H;9%4xi=&zMa#%JbhNeEXY|{8K%ij8*#=rSqc9kbN5@gyK`)+Lh9AExtYTv6g z^#!|SE7Nc0kJip-(#E_GS>!yK-u!y}r)H_{X4|LFjjyvj zopzB=E1)gPJ4x)`haKzQe+jZ(dJ3qB`ZnQO!7a8NMq z%*T?;60MpK=KOA6W>et5bDP%f8AWwHO8rl*C0X;-ey+>k_SdAsZH`#yyZweow|y}` z{j)4MK1=YJCIi3z)agY`ztz`&aK3JOuTZsGY{$Qo%a)u^`q`N&_Ec=%QU?1MHK$n~ z@6anVUy*t<_}_ZZxTxj+OHZnPNR?f9pgX<$=JfcCyM8U}disy>pFX&`4h{+HtlX`LR_qC;-v(E8brHB4Vi#a;ee+p~Nhw1ZK^COlfGI1(=YpN$Z$lP z!TWE`9j9UuuWxfa{kkgmd|%Jm+u8GTwbn1zQy!_}$9uUpM8FH4{6wCaS%;_4cn3H;Lg zYIEm4j!N2(C0p-wp@5tQ}?%< z2Pd{=Chq2Lx|^}RxGHDk_0#XZW!0S7^G$c_?}z(3=NatfVX#q=+;aCtcY(*!=HH7g ztq&F$@Eu;Rc6kL`jvEjJ%990nXq%Q z!5jJZ?%_yoJssc0&2wTy%4VMD;dxRw-XF3$bn)XFU&R+MZ-46k;>ezu7%b4cUH6=i z)Gfga@BjBc*uJPJYa+kL(zndnvRppV^QO1{&$jb=I+d-^%8@bF*CAm~-PD#-(;cKD zvZRboz3@@EpD+ad#ZF$LI`@I~ zw1(Mf7wpRCJe|8i{@X_DlTR28Quka9XP99t=#$NH!fMHZJ*Q124(85T`_{|EY{KO0 zwLg=&%BQ8C(Qvr4k(W6+b&elbiuT&y_gI&2KIwX&cUH^peUd+d_bmSNTa-a;!MvF6 zM{%!?6ny@4rO?xPiP-g=B+mI?Tf~gy4(X&fK0Y>iYlA4e!kkV9nJ;S@*E^P7bXcm% z=JD|N471f8fo*=XTUHq;6bIh@Xs+~Pn${O$z-{1&q|f0=C9wwArh zH;%AMbj}ft5!TovuqUu3d(NrIjLm(LYE4$VudY#7yrlqXTCq@@45e9=a%I0FqVXWP4W$@ z`8z+L?#}twENqLWyy`k^(Qrs_zZ7%8tJ0eS59a>TaFICaqWE^X1o+>$ngIs(y+?8^sm&+XXnF>m}(S~55&mF^e+DYDezyVszU!C`-W!TRa0N5 z*6+I8&632sc#Y|sinQO&bD1RC)+T%0%#7%@Y%8jD`_93}`M}uW>xtzD)_NXDnwL_W z{mDku&F1xAE(g9H5;Zm_zU&BY7S4;kv~|Z4$?oiza!NH^ZH*^23Tn@1{?0n|a`LX% zvzME9Co-&9&kztcFKg+Hj}v{BnU}V&Tzu;6?3i^44@`4p?_V{)q||Uo=+y*w$B-JP zm$NrL2~VhQ{$Zx|yh&_38~-zrN4;7V6*KtvU0W!*ZM}gi(=$=duA+tI_MWFgWj~rK zEZ|g7p7WWb;E&!ewMcj7eJRuSbeQBOzIw6D!Bk&0<8jY*UirJJsz>J^t-Rv4e~wxtB& z$t-0P8mhXFdGxp+Q~5B%yQF7BX_sQ1gj#E1vf%4Ceo~t=<7}ro*^60j|Mca{J*9aT zcjhp3q{rJ_seJMJ<8rwT_dF#J-F=bGdMZiLpHW8Vy4~;Qn_D=8JMS&Iuzkz!1G9g~ zyguS^ZMp92U@OfF@27t`TCqlD-`8l#xk^2s&d=IbTI$2u;ko0A{}zP<8$F(#-Yvmd zbYer}v~`ae)qbYrl%G=gIWx1fY~Dm2;V*x^E-bwMyi+f)<&JL}YgB9btw+qyL&Zfj z&V@{}xbaKuPpon4&rcgZs%~ym;b1TSEd8L2Z<@`uS5qsxF1dtlNO`p>m2qL}x={H9 z@rh*}!HkB})oz|koz3AN#I$_PpUcN>o^?Ip*&Sc@u8j&++kUO{V<@nx+gbBc z_EZ1=3-U8;>%XnN>Hh!jf2F6dpRhZ%KjGoZ*3&FkrUWzoue|s1 zhR$+^lou7t`Wg3S`!jyfW#Ckc(-t@!Tohs}`+3RH1y%b~x7V9ie{Sx+$zAq0@ZaaT z^(odnJ(;Y%6sFYiR9w7yOV2#zU`6))tGPBWW#T8q?szP*W7?{x1_#ZjHmF*6eqWYk z^Ye?%@mz)zlbRm<6t7EX$#~qDoWAL`;stiQns+BxAC6(}WY0OYsGj$2r`!GIi4Rsv zvF`eJ>+8;K?^EyFT+|b`-XE3o^;8Vk>s^x9BD4?l%J8)s7KAnOR)4p6+?{``#kjA9 zvpSJyYRn_0ki(KWwUfnuHK)WJv$mNlr@H?{V*$7I{Uzy>CTw0l`)T8P`)k_-FaBKI zRgub2!0uP1x#*>_zK6@bY28hm`?K8Vd=c+)df~Li_-fULJRbr6T~7SlRNc7WEj#gT z!uyTOqknig#c&>GsIgjo{LQ2D=ePd;e@LCdf|X&9z`LvR|E8zO|5^G!Zf->K?8Z~7 zhf}i!HZ`g(^<-_&?36fsm8GBOMr!cX%&*(-y*6!mk%5UZ$?%#3w zomp5(WXVb1<5S%oXWl99^FMkqd0nqJ(?`W~2aoU`Zf&z!Xrh1kl;LFynLS)P?n*E5 zE=%r=(a+nJw0-xLy*hFeniq5TzC5$yWQ)blM_*6%1_j);SdsBD$n6Ekj)iZSqu=rN z%grlsc9Fg(vT{wf?}Ck!79QOpb$wTtk|pce?`M2E_IHNQzHgX#YD@F$Ut#VwS)nhz z%FHilzWc|2yJ5rexeXtzl@I*55x^esc-!&+(|>u{#h-ev{`pTV!_j@el>dKvqy7JD z{c3|RrOtI#GiT}dB z-)8;(3{%qMeP=)X(#eo__k##Sq3+*^9lr62A5*t?zkamV?%mSC3is-!r+(j$89m!^I{lu3Pwmtj7h8`#Tr!=1 zMjP{|jXewns{4*Jlz7g+>AEL4#NaVkrb}G$cbi2mOH9w)C|5XSdhg6p$ta_O3hvKw zHB&eiUsw^mh2L()r04ovzE#aCQ;$m7ee(F1Tq3HjbaB4s(d(N|*##*}{W4p3NOfPG!78>$;lH zRNU=SmZ|;h^XrqbQif>c*|CsKvfcx!aJ6@hnlY)c) zBouxmaU4)+NV+GG*mw7soPkrKCIc0zIpReb|a<_S_j-We?EPF zirqfe1(Oc2_$_~&VIVVa7Q=mCMZ+U28~ExKXU?13CHmmV5e-e>JQt>`&(?kW6tmFo znI%(H+u<3vTlBZ|$t{*V-22f!F^2DWuIrs0b(v2$_a5Xcluq5_d@ER`aDFw*-^US~ zwlX%HX=^%NP~s$a4POFxBL}RUT74#Cdi>;_C)55f*YBOFd-VIf^7l*bFAv@< zzq?*^f%fsW@d0Z&u1u@>qu>93|MTzv#j98w!kN~Dn0v@}m$qW(=fEtQB^dB zF=44NLviMw;yCsIk-vhe^+74<8erL^F8r|5UK=&ni1E4d#Y= z!3R@$nDb*LRId9e_iDTo57}E*C~hTLQ07+)%D(KJ2JIbZj;)vdeM95=veO6GbBcW` zJ)<$-y>Cs>iUW0`Wt*5Uzngyfm-BXM z%BQ#9kBQr{J+a6j@vB*($-SqVUuJUzh7@GVtSVVB_1j|kzMX2f5AJ)ZyzfzO_ovVp zP3xKiTTkuHJThyp;A7U$^Hh%c#RYEAU)pYw5dTMIN#CO)om=wdQ`j7L8g^8)w{FpL zKfhM7YU6cwC!4A3`lKIL8;J0pD^!&!c-cPT;O5@!%To21oeqEaa@X_yKk<(jg>Fi{ zJIuAE?(OZ?6MuJ^--or-io#{)G0R9or<{ZZZ7le3PZ`Rnydp&3v5~vC(V_bleOcKNW(tX1=ktw z>DpiWy7E}zKc$9a&6noS5o|a(b6V1A*SEU%y^7O1v$|&YFetXatlP_CQ@1lS;^$Vo z-i)Rgp3Mtyx8%S4Ba&vEKAD#>GS%Ni+i+|46U-GBkXnyUt z+5KC}(~iDBP=Bheaoc^xTLw%FQ~kIrUgf>lix;Z+u}~$Ab?XbA1Xs-*qYs=*;xjyh zU$PgrrtDT{+qq0eDDCD4-pADw1s-;YHwQI5;=S3^_I=^n$>Ev;nJ=y7YoooIn4YD! zTAzB#b8z};6E&f}PtFRh_dd2+M?Ef5Y>9u>z0tUr;ee^mkD%p~)~7J+xS)MXJU>OC zR@wI1*P3r(*PYZC>n&N~FnQ0W8j~HTgHEN@RNrpN&t$3YTP8c3``*)*Z7Y@ic-l?4 zz85Z)H>;4a=s(8(J>u?4?f+&viZ#F5*WEfV>S6IWNBPjpfDg}a*+1A(U;gL+(s=d> z*L01f>hIQmyZryxn`Zmp;>uBvkEaCPs!ckOIQPWD#cL#)A8FKo_hM*n`~GKYm^#xR zU50&(3f__rEm#%KPJ7RAW5NOp?Z1gE9Io+C53g|eXBW6&S8-BxD5Mc@BFo1@0JT#u2>@~>_z&##akW2f#NzEN3fH6C?g+O?(RYQOdO2@|;hgt4 z{_Ou-l(+cB?DOJQl3R;rR0>%wU(Tbdf9k@aNV{+aSDwFY&&|YTckxQky;jKM?e}11 zTIYHLjbp*m^GlvE_n3dU*sz5LHLCzi47w5m2{p0JU848;U!`e@OtpERK{{BDm zyZ?XQS@wVP#n~phKW^^->YgtD@8$jnc9-_1^S4@ci)4R3&ahxILv1p{$C7~F#Gl1| zzoKuZGiX{GT%Y;DdoGj1#Ov7%Z}NUGZWKslxuD7LYsb`tvcHwA4$Xp3?{Cn$vsX+Z zGC+*GWp4e^KsK*V#sl}6esuLPREauV-~CiwYQ7cghDYIS0x=SdEO+)RHe|hUy6OHg z{$;{L599JHm`zDj&)#T~3YKy+BGx7`m@|$V>P4}efqJK1TA@BUq$&40JFXqV<+gTKyv%C8M8a}U`+*(DeBZS%u-8(WvgJ+};Pj1lX$(Bd=CjYQNFUjee2&t1-kJo zV|mM;F2CTF+1lxJz2t#lPwj&T^SeZ?PE7UZbGc=~dLU-S*6q&@{RnLe_@w_;?pGY@-`b+&26bjrnq%Tx`x&3EQ)S(wok4ZDeJ{MVfLhp{#gvTEOOEU7MnY;X59`TAN zU7omtGyKMm6Bkr=>E2vfd*t1f^8dHLmCG-)^qR~P@hivi^7K3N@1(sd&Z;Tf|8wPj z*MEQR2krjfWXRycZ}jol?dAW^$Pp z7W{N;5P$aMZImb9B*x;CMgNk@_WgME=I5uyH(TRacU;nBnEB>QH$x%U0+o(J$xicA zPyLjP{A;eq+8H^1tY5h6cTi+%&6DelNqmhn+TMGWlqfq)E)VB&%&m=4ziUx)sq~WE zPmvwfoKHTVT|fCk-p$g6&3nITumv9oF54bh`*{biTmKftqFoiMYI*Ng{9$pB-D1P@ zB_P3II-~EE`2Y3yf8DHF*3NPN=ELrd-Un^+KN<=pSR6<=!1PJ_enQzh8Jjcy=i|!u zSbX{wwVq+mPo=VbR;M_3O=J=HGDG?ir+rgrQ{$ZGsx`Nkhn<}NcW1nW{WlMt@;yOCkPgBtN{gKh(;$nv4JMq~f|6>-s$YojZ>Cw%- zVhXI1iyQWt3cOZWx^&N_k{YHqUqMNyb6<5Ex?AnoR=iI7IkQW6IYY>-1>t2DpEU{+ z`pUN-414O`gyDQ^w+0_zdv2Sxa!n{9g}L0>|eH^==b5Cb*oRU$a>J1#o}SP z)Sppk*?f`Yw)o@=QdipKGt|mUICsp>cyS|tm(9b4O{P5W!*1mKxVu8$D0FQm>$lat zlVxX=?VlsZ{xw3rR>pMqKC#Da3`;-P#IvnuH{EmUK-!ezKc;JIk4P_9_t8;#A}(k1 zq3-qeA3x{jy;D2)e)p@p^?m>9|1}?db6NgO+Wgv0GipEn%qqKlfBpQv|K0~?%N)|@ z+i*^JuS1ZH&HTD&|15&O9G0_D?oqqaJe}dx|0imkHldtfo_U=8+fqH9<#O9Z;l#eZ ziyb#ze*gIYt)KBlCj}04Hmo`@If4EA%l*GEZ|48M*EM%}O@CJUr86$n z_GkMb*K??b!JzN!;t$;G#NU7Y+{<86zcGdX(0v95{fOoKp)UgdO>Haf=H)!_=&U*8 zp2zx6=f7uN6Y*xta>gS~e{y*yPE53{)_WR%pXq{TLpgUXcfvofcELyDjO*5Xb@o@P z3<>0G{j-AaXQ242{zGeo8N%Ot{;Xf!KWU%vB;_w!vrpbDP;%IC2Y?0oUTG`-t66ab9Jf1V@^}4^u zlIoi_MH@5Zh_qPc*$4!FYOK7r?u(6PV(G#okE^ddRt~ALIXJDb?P>L+3rh|jXQ)(d zFnA}R`fqW6#ir6ctAF=T9tt?M*Ri=O=kGq*FYmg2Yt;)TfseHU{>^?FAqKG%=BRrl_4{rmJZ`G3pn z!#Xt>G9xvnEEkHt#AO}P%Xq3eLvihv>gn;EYxg|X_PW&(&v}61z`E^zY!S1s`t1{q zec$5!Q*~bVb|3=O0(f!CPRgXL5)FyX7h=gk7}hE?&;MV?4Ba{ z;MFT{QBQkojai{mj9y>gtkk$Rk>k!*@4{2_7hAk8XxX1wwDUvujL?(eBI^}nJJbG! zeSN-Fc^1QAu2$C`u1~Ga#rq^36l6E77n?cJ`iE)lhlwf8@qvHt_BH+WWeZ#P+W6a^oyE97YzI$N%b^Eb^#$&Ww{V)*If_fIsjr&Q;KRP(DL(MQ zsg{X5{?FfQ{&MQu$jiIKp5>jhJG*~(>HD>tV)Z10*9Ao`+ss|hIN|9;)i?f*#tSA2 z2&efpa(R+RB?po38NFos#9hQ7745?y8G<@oV@arpR1McO`VvXzPmi_-I+W7 zb2f*4$#=2QEbSwtkH2pB8P*>@ep~AL9S(^`XO{;vPSmftB;4_Rf|XCyD}~}5^^S|xH`0wB%WnQ3 z^{!s+lKtN=@~8j*{B!?IhWw-JJ8Qqc|2O;Y^#4EWL+__}zg!wOsokUL%g=oZf2Rhr z2&yoB6Kwx|a+&WfK7rc|hj=&Y8zpfwM6)n5`tl|9@t_OSLvhyD4G_Y85*w4%mo_41?m?J!^G!)zyCMt%bAo0?Y598s96~*@QdkWM`USisw%_O-v1u2)_LkzicjApnK60A zW3|5Qj4Ad$w<>OJQFPw1Oy^a1bhu6aRsDI(PuPETVVsaISz>=dVD@tdg%kE&O15XJ z{~i0H@oTl+eP2<=%Vi1=RA+qaU$n*i*JahS`SOpP_jrBmzmh1^ zp*hDlo)9>`c%vbc+W`)VMq$?ld`y;g&u7?fl{|g*+n$1JHhX$rd3g0+PW@Sb^ZWXx z|2Hx@1fM#1MXvvL`Tu+SL#HrwtVlh!z=ieE-bQiOqoHbnI)`p7UvDB%r(2l5zb=Jy zzl8GXzs)XUmO3FEstsxT)t_haZ~pK2<7kwVBE!R}Jm-WuRJ%eg6|Ce}Giq7naCca3 zSmoeSdPb|^U2hoUi)@Bld<{Ym)~#de_@!z1viZa5zHL{Yxy-m@ZJOZzb5(YNL*fgBkxb;N!9IENvua0?Pg9jVcK$BguQv;Jb@$g zn^`P-XKR~$o|*5wd+y)(XAXu**INhQ)_MP2mHF91ZN7Khtqq?xF*TUTFlbb(q#kfN)!_6ian>59 z6;JGQrY`=qWRv10_rFuz4;^21{^ygR$(Q0^Om2uTpI&}H>+7C#Ofz2SFc>O$PFidA zf~#mwuF@KpsRcrBPX+AYd15PKWmvtQAyMS?Khwo_7wf9{SY=+yG+a#I8d?3%I(8$M zLecbS4Tc#DumAtPDSrRt#lM)}M}^H-y&dt^ZcfR>X@8E&ZvMNY)ORYQX0jiV{(2{2vf6Y@)Q}%%?EgtFZV2DQSeoKrMyh-aW~^BfhR^%LcbrV|Kf6(BP#GD zzA|+)lfty$#=qs4#NU>hu=M7cO`;ATyM!-?n~JF2yfJIqwCF5`+y(aU<6cj0h|lD1 z;A4?_+0C%H|5W{It>BLyvRB_vWeC~Zw=?i>ZO{Hy*;n>o>)L*oGu}#I;4= zOgxXyn=zPL>dj+3-)vRXsJSWSzryd_P^Kr zIlaE*{23Qc{-X|el>)Z0a+r%SX)s!t1SBONWxUN9vfMba=;B^&uZGR>uNsoiF@S|-YzFbr`FV@FgeRT z>q1!>cz^r7E016Ik?6(s^rDBiyA+CN#Dhh{pyn{?}kb~mVe9tf7|psyZ-aC z>d(FR9^apGa!*XnWqT_b=EKUqmv>EXO}!I%^YH!Of+2PHK3g2glJ~ad7u>y*t6|@w zKN*ktw@mmaF@s}u_@8B^-5HkUB%IF?r5keXiivV!H@5#jxL??-LGsbf#ro{2X{wptwFd)EH|=@0 zu<_~TMx~{*ntF6@O+VAvu#-u_??3;g^)(af(tbSUFVc5)s1r<3Qgv9v7BF+86~pXL zrC+-kL=D6^(?ky(^_b5pldXE-=J!LtlFNg`88u2nrfNNY!C8N~&928}w}Gg(%kg{{F+%4bQk%Ru=VdjgHVfAFj;zn_2maMh`@5K7 z$K-7@UrU?`)L=PKBRIq5$l)2j0tdMtr3K$gXX$AWteD9mqx@6<@#bSJ6L&?wy}0+` z@ApcTk9Ix1)RVufZlvpZ}NedB&sR|EF?^kit;H7$inl!fMEP`N&8a7k&Q6%j7|8bG|NOtb^+x*N z9b0R^|IL>Tsf`Ot-S_Kdtjs_2G}rZEpW`xu`q%DN*1YoWhjmbWFyF*GGE=|#*UZ@c zuk&09^USnL8T+EEnKKKH>Q5GAsxfAA?>XSb%22On>Gt8cK)uz)5L zE9RH}+@O4^bop)TnDaI^E!S6lb=t#*%eF_9@wFZAa%)wVFfE3RH)rG*{EPdscxLRo z`#-X)J{`F)Rv)jq;LqBx+Kh{W1KJI*#aaF37he8F?0MjQen-Us#kr4GFoc+878r6L zx_gWR+-T@&5HtW~)0`%TBl68>JO8g?=_s$<8U@^C_E#yX!_D< zxp1zCaKR0Jv5OAvlWb&mNm$7AATjoI(SM6MZTlxyu^yam{clA{aw@~JABQb{SFd3A zYTyY@FAU>fv~s84ty{aD6y#3ScvMb#Tg>_2pr9_ST?$<6L%q8vfaTHOi8t$GWxgFZ zYxuWxQ|-<>LUuo`e&6Y0n6)`CcH5PbZbPPM=LBZfhEq8nihgxJ_;U`41a9L9vED2+ zy=8wcQzA#u^G2Zus1YFcE#t)8gx7f~H*S_XFFg>& z#rVPZaIx3+Hx0WU#jjPn<_AjT(D0RDRNf%L==bOO@7NEl+Zc{$G387Nzd_za{J+_}qYi8Kg8C`&sMcp_wD`F{ zkI{kgfL22YlgsDte-`c3V^qJZqwkdi2|7}wkBG)Pkp8GI8jlb~6x5N4CTN;jE{eHH0dEvS#4_Q#{ zjO3t6R&rxq_)@E5ylZIrO{?alvBfA}P8Z_vHwB6KI|-tKC5LBkKz9Palb z0y%-Dhhg*I)*r|J{SRUCU}X4c%kpXVmE@b7z3v(5pZ&Dss{X0dpU!KaPjpL==UB6r z;eq!2kJ&E{Z@;tZ;hOK$j>>P{aZp(!cc%0XqgN{m3!b7_ zw5{L4@`t}y!>&L3fABZ|Nzb0VeM$X9-(9Y0fiZcU5mU}TbbBBm7_pK;;@^YxKc7Bq z7n+`TWa?@yrmFhfDwQ>ve1g5gYlSzoKdd}4G2CL+ew7b*kxPOD9BbMgbbkAP>R;O( z%D8d=7lv(2Th`8aXprmjIBr^6;2kTk2G`2ji{6?rRXZmvWm>SFbB&>o>fcYt`z>#( z)IHi*Dx*>Ow~L|jkbjAa)=MSbN;8AFfBWSk?$`ZTJIUZ??1Gn-CnoLE_1>&;&Z|MS!Rplmfrxm<3t@YI&OUZh{_q)7eVxl4 zU(IhW4|>k#xA^(aJ%8%uv{c_P&Us+(A@`3*=2r8TZz#o#M59=v%}@KBxr_(I7^X0- zVX)Z1%22yieBuwgMw!=3GC_q!A7^8)2*XLi%mjgdTSO;r{`X)mmB{ZBq zh*mIs1kg)6)<3)BdUdygvImXPI9_}u&bDz08r$1F*ohe(B;g@`NYRiwpHd#KK;QBWI z^Gq{(m6dPG&DhzfdbQx&{nP*D7koER_~`RHvFo2@%A_sNRZ1tI`rw6NhbY7I)Nl6N znUCyba9_aiLVDv7#^p29#ahpMzcx@V$lzGBl%XOb^RKB%y@2PB<{QFOryG5HCpE3B zX^XTWe|O=D#R8!GXs>nuj!&IKabn>DBpc$am~3CZ-_Nihl)>}ge39!q?MK%2FN&;9p7TD4lv|14ocA}r<&5&->JRcW z@85*gl;C1DPKIf**PruSxEjv?KdRW^?(*lMx|!R9rHUIiGBxa<%wDf!dr-e{rdw6R zv&jvneFp1(wC}yeGyVVib004SuW5eeef-2*b5OktHVxDu<6=q=Wt`B?`0UgFI?)5c zE%F}s*!Mhlc=a?(qVc%WhG|R+|2sAwkJ;54z4NsEpB0OlEv%>4>iu5x<2-xaA?4Z= zD~&D)y*k8o+1lv9w`CkPU!U=F&Fjp*#m&;Xi(x5G--ex2k0geEZ+hb{`seO)-MoH_ zRnvBF0%Zeep17gMRLG$a&yXR)cu@L}-Tv4Gx@S3Z1R4L?_;=jP6_o5YLUyhJlUsr! z)Bnfy-@}ubUjAA1y6#K*``!BWHTPrpzTWlOJD1Z!NcDi#*E!SE;v^h;#au%~!d>)_ z+!Ac>KJa?;ed{}?&aRyK>~$_mpn^HG6%U+>OA{()b-2m&VCT`Z0VP?=8{%2kFx=3; zr*{^$#F)dvBv8L?!Y0uLcmLO`O#WY8&o=Mxed{NB1$<0l3}+aRIwE-xTqEnaH>_uH z_;&g^L$^>u)rRYz_Vk%Dxjm>9*ueClvY>n=s`>{j1QVXgH#04WWh}VT8@2hNTzg@oxw2#-Q23%QEBd@t*UpRZr7C{bvzpaFKp~caKqmoED#T z3CkJ=i!bU=exVi4%q|Vi4DPX(3DEL>v$fz4T)LCWBb33?W=WeH$NuwY)0 z9Q*NO@#2j0i*BoVHKn#Q<|(BI#>(uIXNmgc-|76{Pz#iP&*vXs3d`=`#3<1?*=d2! z-|J=!=a?QCH@N4?d7qJ={r<#5tCz3%JO3>@wr+M_;J@b_-z6E&H|{!(X1jae0grTs zf?xK}89qGSEga7v;Lp9u{`?v4_%g8rd%k>rVwLlsLq>V!eHPXA3^!PGmz$!wUO_;^ z`2W;D^ErOsf1dNt?(`@BGE=7Iet(1+*E4vilDz4P4h+qe=UCHrpcGwHYfXQC68e(dkUx#1OK zu2J=SX2$S^KWjefcm7a66~{QiXPhVZe!lr^dzQ4gS(S;0Yn=Zl zf8t5KvEPzOf8w9!Numt1|A);vjG7kqRIo%a9_X=WXPEcs%>U%hpL=RnZ(}-h`tzgu z1Z$QDODEMUd=+bu{kK8q7OKWMMoc?-A56KuV@V*HLY0t!$&J^F5qk3S^mu!0;^_b3vll6@!xEiL~i>gB+ z9a`RkO3)66dEbxUtY4mUP4QXxr8C^yg%bAf7wg!6^1n#2Hp8-r8>y&;M$ds=93IR9 zPwY(@Uq7=xRPwpw&jv}T#*TY=f7Jf*7k-sw;5RJnKra%s1vrwbUtRvs%eJNbUfq8+ z&+Qs#_k2iAXJXkVv}e_xZ8^J_bIkbRzfoe>9;Sqjj=%8y0ZjmF+!Q!IE~#O7(5k^S zX@)*?df=?eho{4s0*>vmIen@u=K0fq+I1{p3~LxpTtwG<#xcR9QdVoqm<6s6Sl|53pM87RbHSfxa^Dx3d_EM& zq!Y|?=CrZSd)422pVa?dp3i#VSA^wKbPsnjoc^c2xJV$OZLdPLY|uW9vyVO;t=2rT zS>rx;(_hD6-+%HBn@kS0Gw8J*pNQdN=Li1()_;C?{?F3e?;bgA)K7@|cy;yRxKA4* zN*5evd2V|ko$K~Cp~s(!>eud;`hSln>wfL8x03%2E7mYrv@L&Ph1LpWc7E{b?2_L% z<>!^B2Qk!qT>Sgp)!XZ=_s=MKy!o-s-hWg4@3>oTu%ET(NBgeaPy2T)`Fo_M^6T&4 zni<_oBN#Wh8t9%vO{IH8Sk9eOzx#Ht+JDpE_K$=P+oTHBcAVcj_v`W4{U<*xSe0`{ zLW}X+S^E)-!yX$P&R=pu&IZDq1np-ojw~Kfq6xS-`8|W5k!uT1{?EI3bAO38!?*sO-e?B8_aET5 zzf=1D-rS>W>UDnCGd^dqdA87Z<+oRNR-dRib!eY>>2;=_##p{o6&qj0KQfmWyp`lS zaxIwKdMaaN-mRJ6HMe#C5590aHcp$NtbMI2YB|(6+4aG{b*}@MYW{wWEUz|ysdvOm zJ(RP+$N1ImRoULxiZkolw%T{8+7 zJ*mGmH+=VxPW?=e{+Z!*osqTXALDy37BAbt^uY3B`AyXH@W4ZG$4`@2dh1Tz`&2!# zUhjtbYDR8rQvR zyII~8hMiUmP9z`Oe>t?n{>gtQO}#_MY*!1+2)8SZO!fH_u2>@RF^oaxSaE?aTFDux z_~GI0!tZV_pPtuO-T(Vz`QmqrBVJw27Q9z2=oitpY-;>0A%)JWNq?P=wV(d7-1y51 zcCLqdEPHj%tJj4IHpmB^&#_SwHOrsg=;>zw_5S^-*tHxp`+&c>s>>dZ+dZln98yE#{Uj~=0i#TH+W9k ztH^BPQ%nz=ce9e?S4ro;8Hgs&$<*+fFNNfmsmw|w*7XWh0l+9#bk4@~R3-s{w`t6-wpHZ~87ub!?9 zd9xoo9pGwsTot!&Et(rSSS(lyln&K@jy!$U_1k;X-{)h#M(BLLIyG(Ec~{3`Ziid! zfuG-oHi;!G+`er4E4ALv`0HiWU#ZjPO=ZyF@bJE;a@q4(v6-Au-|U$c9@bT&A{+vB z9sjp)3S?Ojld#lLJJ?fxMhM%2iV0C_9DjQ6%n$9}wDf`9t6z?)f#0N;&In|A;dowy zY0C7fNI?aGzB3Vw1u6VzuA;SB+8Y?=Gw%7hX6EzT>wXLT{-^kN@w-1kT#cuHZ}@n> zSVJM_yt>9?%&L;ktPYUnu$E_iRXt*c?t6pd(( zPa7PxnZg+A5-x@@$lPEqEJe$$h6)FY>gRr49?G!z-QV(C@7ISih)=iT`Ov$M?L!z# zaPXP$bC?y%PA3-LR=RWhK$>)Erl+|V!?Xv^AA%VfJpadS{_^H}`ZBxkFPxv<7G>Dd zKC@)nQ|ANrC;xh03Se>AakJS!@<}=?!zYCoKR$2yzlM9$HN)JhDGVnZ1t)y{uTieW z)Mb>kYRUq?aIgF8I2uBpWwD+5eyyQ&-l5M+He&7I><|>_=22RC`)==v_2(FV{0XeS z|JBxE8*9y^v(p(5O$fVg*6}^q@phVQhJE`d(4SsMu}a8jgfzvdjmrBfL+Sc*yy z%?=2d@@uJ5LoScR6v-XWwi*fj__l^4g7L$e54#Ic8&(BJI67WBepC4Veb&e43I}dy zPxR1adH3Fh#q_Rk%!GO&J7euTYCoT^+&IPV`+w&JGacI(O#l1;XXU<6tPE3FJpVN= zGCdH)VUbxd|LCV05iZX)GgqEp&zaNwXZzFi+6~L!Cb}M|ab@u0o5HX&v@w+N&+dRa zj%DZBGA`QcY!_u{|7sH>jpm>d4u>!Aw~96tGg|NzC|UDy?8yvcToHPHCs)GlC-d7` z63?mr75E|@81GRX_anbl^{4+L-+R}#JY31KqkE4)!56h(M;5({nG)PlrJY#)Zpz%Q zhD}Nhq8y9Yt>M`5+U{rvkjug>jG55wNsC^vlO`IOU;e(h%t{|w=YDXa%NZ9L4; zTDmssOcSbo{L`eLU7z&6R-5tGCU4&Pb?TCrdzyg>&bWb{s){Ci~S9J9MxGy8j&_XPQAO1HYK~rjxD^`m#KL4uC z`1@G8_!Ilv6I5(Ei*^ewn2?zEX0l8Ay034h%#CK7&$Mryvd6L-&DLao-{$dq+Y^(}=oc+A;!QCfMIZg|avQJfm?89XQo)P(iM6XQ zPKjMt6p^6C^v*5y+yAm45joe$3u1G#c>aprO4vQ0l~J2v9&4F+77I#7_hV-~@og>N zU+em-rPIST7Hm~H{gqm+|LoPCS5?lN{DVJx zMi;{in>@Ra6I~3lj2G{Eb2fZpK5V;wW036YgAF^ks!EkInQJrnJy6`miP{E9c+Vj+ zPyFbnC;y#{|A*)AdUsWN;$Q7)f3rm!4jIaDR4hOH=KCh~2`+q`I)NLV7!Jv;X5G@I zFoo^JwO5R1mZj8P{<3t++4nd9tXw;lKT9N*e9o> ztHvV3CARp76T=Oe$(E*{_`iiQ$XwRHP>NO#vo|rg*z$i#KKXxX$N#J1K@5B5mWW5O zGW=BES0l9HwO!|zepi9_&VmY$B080h)YqsjTJa_Q`QlAQ3x0JTUgQ1hx^MUryMKHK zTTdma-*mmsc+hse_&cHX>y=u(IsMKwFt&>(*{%FKvmRJ!7rFg3YNPm#K;!0O!RWKkl4pFZ|9f;vbu-h0ttaA-l-@m?E_h`2 zB9)#m8@$I-E#uO$rXTMe#!;>dkO`%WfLTf@w*v(5s zCd91cj-6h3w|)17_-|+CZ`1T@@T`$+h(8jsy?A5B6vc$5S~XY4NWp>|5p#@wvR7&| z@csV&{1)0sMzc#p?Z3&@XLGw5EvwvN9zU#ju2JhZ~Is4@K@tWNy*==`x~LD;nKUd&0CY~+9Hn=VilxEH{% z;?hcnie9FK68ZTjwB?Ukzn#jkW>)@G2Jxzd^E{8xX$i$Rki@70_7 zH~+7{`QKss$Y?_O6gC-&iptha35!CRgk{Ado*X^cFiC#frDro4ChmOZ|K0AbO3%`1 zsbl+UudmX+P8FvGD}=xnD8q)msjEL+H>3q)eeC?9vcf5-YnJA z2Zo4?PSzBuNZyneg!eAW7? zcN`PL7~U|1bfa}Lm-jKS|4wvEp7wUSq7cqPH|AxYR zJevdF#B(~xp1${cQx{XItClK<<|$59sTtoYr>^*PM!s#ki`>o2p$zj|ed5fuRxY--_04z3lQ}*7;v2ReF=98I1ovH|ROkF#Xc* z>ZQ5qpA^$H81r5$HqE#9+V~-|<)d3m&_jRKJpZ%uy>pA5Cr6&h}5i=PipFgP+5p{Mwuw~ulU)quP#qNCeb!28`ZkLZc z?Z$XuCdVA!g5_2L-->gXZ(Pk!u;Xi&%)-^h%VB)MIrWB8-nz}Z_Ww7W$}gF;xI9Yz z{Hmtc=NDbPN)#8yFMx&sMNi2-izUt>s*EZ zZ;qzR+uhcCcZFfvi{pu{j^|e9EB@BdyX1S<@MhbW=@*L5Z=1Y(N8!}-@=m|(SL^V( z%!y^Z;B{kfwfz3hyW1bVRE=Q#P{N~&HpaWhf+b?w{4_buGdohh-3et#n%}ZLoqdf` z{_025uO?33q4-k%nXl5Bp5K)d-a5?*WD*E}Q93*OyBEW$lxy;j{+AVrdoiTlx6Eh! z^gpm#%kI>_B_SFt3U97#UBji(#XT=S@~p$%^yt7_YmB9o+P*5Nx<)>VkE&Z85yrHH zsX>$>HPuCnXTomj&Fk+U%gfqdyE2R+M?M&R2t>W#VZy(*pUXdQPJ0{wl3{jKx zLnfw4I?udrDclQvvXAqw)+PVY_O}aHrQWPvcvjUeoaxN6b}Q$ecB2WuMVj|Go%-p- zX#8Jz;{V<6=IY&&vYynOqvn)nC*YMuk^KD zo?B1JXG-)LSgMG|M++z(xi;gT;6JmScRXfiyo{E3RPy)N`oD`GeTPl#9uQPAFqYf? z_}&IxLq0y{<^QY=4;e38vAVIKcy8y)g5J^-2{W=%cg5a%J)!PY{_2+90=I&UIZWCv z{tue6T_CIM!1R(MQ*Dmg+sgFM$d&NYGyXi`@BY;H3=9eko-U3d`@HvR#GU-_W}2YQ zaAmgbFY#R-H+|3TieAgMW8!`dhEqMY=dMk!nm(1`@^|GJ)%rtZ#dEW^xDF`K`)K&J?E*MRFlK=a6;0wd+{gBmoNPxko`{Bw4);9bBQX$zobob zzO3J5Y%A0yt?CfSVz7U{c;b{Z3tQJed1PGse9!U>RfeA{;w`u6r@vYF*)=VijlXr% z1aIj~?mV7{CmMfD|0Y)Ic#yN)tLsVhPTx<_lY%+6D}4`XiC`?y^1t-9Vj{-*L4>izVYzpAIp zMEd0iPh+z<5|Gz1`Izl}j$3=mV8x+@8cWd{>1&p3yG?I~_jJ!vyk^b2n&HP0`6d4! z1sPuppZxCA)NhwgpATz@75IPrR8L~;TRo9o6Jk7cKN|?#ElIEO)K^;L$#7>v{=3zWzhA(zZt?52A`I)FP8VtjWzb;XcJQg3_pi;WSLUu3DD5ax+$!+eX#;nqUyy7{ zoTS%2mAk6->$rAY*v(Y^A+pY2TU?W|WA3abH|c44NkXdwyk6{W`TOt8C*gC6^*5#* zUd7DE_(x+Z!^fIU>s9}|GCHhuo!GG2bm<(chYLH_FlT1OEB?E=Y^Bj6U-w(fXKDV_ zpVU>O&D6FdiqXL3NS$(l3&)+8w|5w>@DOB(d^dGo@vVZM)eI|&X9ch=aW8v6eX+d5 zlZYp3*+;f!{yLy0pSU+u__={sN^sizu#Z~{bUf_;ZRiS4H}Mf=d{e#!vYCKUx!?@P zkqCEYi66_tKJqYSP0G9@6aMaJ{nur$*WG)0U{`q%$DV6)rEA$F=69Yrs3w`GniDLv zKl7L6)oz7b2U!dCHa~xQz~+Sg607~?@qT;6CyIUSE8i;F*vhhe6N9CP?CQiT!ap5v ziTYVe9J;h6?@-r%UvoL}tp&t8MgmC>tFlC|y6 z;i8GXigP}BS$8Wnd{DCIXF5|QwAn+bu;1AE(|s?^rICUYW<)^dtK2&nPCtF&tawT{ z((cf*DUA6Baw?U5-!$~B3uJ09Rlbvw413)dBh~k7!@Y~nVa`?c%htX=A=ma@F}SFo z=heC1=Ko2o4S#OR<;-Wiz?=?UxFw^>WOyz0uH^TWRieppoRRPA^ui8_HE^H(wqNXL z{qL!7^tW(1a5a1mU=VSdc}b&MbY;Bg{7u)kW=e;9|5N-UP;a-8y)uo>)^6qU$zO|I z8CvB~EPR&|POlYh_U5852sU!Dyam%Lr*BR=3{V#HBvR=pE zNS%NBmOHkWIuuTPDioe&sk^zWCSl^XCF;3>4oiv}f1RIo^;6nq{cpO;{|?7o(SIez zcQvv4s)ShSg*t5pzF!}A6uBi>GL@UZ+IgjOBd@|fh6%QBn)r0X7zMT~)KzBw?(Z#o zI$>Gaw7%%CEBZDV?crU#O3;o+#ll#`&>=8*;%W(|Ho@FQi7}IPj~-{RQ~6(Iry6ss zz|9pt7IVC(;n>!HSC#MU-uhUScsosa?)>a+yC(hDp7^i)z6dMBYK9w31!a0pk?H@V zCw`v7a9izfWZX50tl3XwHuW$)sEtYAbbgn7$s{|jhV!cm&Mi{!^p9MssX1}xH>X3< zt&BU;ERO{1SsI0J6fSXXQJk{#N0EfQ;~J&~ay#W3ti+Ep2zB2H3e(h|Dtct%_9r^$ zEl<0>GYU3HdS?Gwk=OI-*REent7py$Eu1~!e^^*%`zryyt1YMYC?vBU;I6un_v)qM z0mcTNIvw@-FJu~C953mv%ZW@E<7_>?$%LKZdhLd%FB9CEH}~Fb;aEAZy)dhVX?bS1 z{cN`i`RmqMZ!XNAx#9Vdz^ey>%R-{fn*z=}NUvs#W_Y($L_z72@@d$5gaZ?m1fuyR z-=vs4v^{?1gr%WmNts&GiapP#Tgk>h`OiJ^zj^%q^877K54@f;2<&^q;Bf46ZOx|{ zztkqCGpa3-`gDHHfBr>R?q_D&KKWl8>*Zf_(>nfzo`;Imp1Q)R=B$=ayf?+46INKa z=lW75h0|)Kr!w!h#)l^v+nEG#9(mS8i z`@BM}^q&K~WgI@cJp;b|(02N$;`zycYT;%kUC^dz-vB5 zw!Cv6`m~q6{M5)ti2ld}lOW_iOe8waYoP zM5b~sbAD{XCN80v&$e2}q0Gwj_VqyKn3n556#hR9v)HySf>&T>4P+@lqjJF!jys(P zvSPTOt#|&F#(w7M+oYTI=l-bw{Qv3r_aKH0)`k=HbN-xv{y$+}sY0B~ua$=v?RdI1 z!hTv>k>i2W4{L9|U!Tgq^Uwe0w13Gj_pi`B)fnUDKd&-PBJRobHnC54_oa&{`RRmv zT5E4T;@fHeM0V5MZ&M1UPxAKMZ1mymsfQ;HY-&b zN4Bi%RLslyo-ND!9p>5md4ITIxCa+~8%I8{F?yy?+dt)qw0C6Nc^(_%k81=pq8Vr8C~TAXG;ND3 zTlF8sf0c^UH%wZ0L-qNdYE9vro>vrmer(o!gi-oC1JmtKHcB(9LdH>XJ@}>o^Ui@w0KRoNiv75`Yqb)99(@E}|TXZS! zbLx%eoS7XL<+rb^aO~pQCAiJtGjk>%Z1}cd0>>0i4#BX!5k3m9_ar=#uvmU<(BjR|9Sn*|LC{>`+lEuPr{T zpY!Pah5ed8&!otG}>JG3&cbe@@wRZ*|sVdr9w<5T$d z?0CG-V9~V8DtA{;?pl?1b=Jy?b!7|e-j;Q+e?7g;wnKxFe?!Kl)R?W zc_qIH&FyFYOyA5Dl+pS0TxiWKJm4g!Ly*Z4>i!{ba&-l=;d3 zsS~Oezh3KMFaB;5(}FdAC$@=d^1uJ6C!IRU$h&ez-fYF?e*X@h;%dnKm!xx=h)f}6JGx6 zuuE_}shJSEi}j|lgrVl59hco@O*2lPzR-L2%n6Ua3O~&Qu%W<4W!Hx90^7D33i*9m zxo_P%CXL5;N^IVo+&|;^QjUMwZ$GB*{6F1(C;x2W|C9gB&%9r6?RPKp*4(Mg=TmRR zR`-04F_Bz!-tPY+y?+f!+@fc%iQS5x!Z0QJt9Bs!pQ9q;m8U{Q*k0=AE2^fRS}XZH zDp%^xl#@NSYJYFse3xmf1me{-i7bFZkxx17~#_#MFYLa;sNNx@m;zrVF7 zda-bYBv0>ZnC|ee@iG@fzy?Dm_b!J>#s%jB_I_~Tv9wNn%fxY+Z^6>bAq6FiROf{< ze{^kN-J5?(`D?SvMNV+^1{+^a+aIUx%hwCE+B}&bS$E?9bm7<=K}>rl&rN5Tqxn4Iy3%HW zYS9T@3^9wAlOL z?n&Do6>M+6kt$>M_|G<(q|_*R8|^Ss70M?`C>nH-*!6qCqtKyqi&KQp@f~E;%o?W@>TbqWFFP z*S>qby?%qizbQ&<7%Y}9f4Oas1OJh|3|H%F?AzQvvbj6E| zou70Xd_@?4Gwj~O;-de5!496@ZM@0GMu)Q(B^n$!VrO-;k+n3ilY94H2C+ zCoZkkl`mi7Jns(AVGV(#4L#2nG6w&A>@ZJYg6Ni97RWT#gC7DHSn_?G48CpD`sf$U z^Q(QO4jpK!{r~3s ze=mE!6aTLl8UH@t#lXj?!_II{OKZYLj{j5aulKd(xeFHj%(}8yM72Sbp}5|c&xGlC z;{n^ve_z#pW;meo;bP~i;GT0)+i%&o?Z2}u@#3XRtJ6bLdTd<2_5DpY3i%d%HnDco z*~r}ZN*(t4dcW2@n)@aqGSGdi!XKr7I*BsbVa&ay)4Lc_d&Rj^ z9{SCExqu<|Oq57(<;P&zb4(lHW$+n}BV0$U;-+0?kh;Bv>%ptJZr;ZnDrf%P|K!4c z{oU{8+I?&nV)!(_`d?>!x<^lLw;@M<+YK$%18PSmKjOal_LceD&jHqU+2(w%3Rb}i=gbL~bWU`6cakTbV^N)!^=gr;Ck{j{mwfMYNUiZua>FsPpZj-TOs`#6 zI_rJu#>!64rCpCI4I6)awtckOdu>k7OfFs{rJq;yPhIAa*mmi4{heRwjx+Sy&Qyyq zYf0?=z9DyO*)~WbI=~^r%jDx^@Zn{>#`(Y{`|Ym3%bW62>W_r<`4YVYPo<~*&W`+1 zaDM->8y+gz`)=N?*s1xl<%e5!N&As$!S7Bdmak_y^8Di77kcc>NdbT6w{?D>y-(BT z48y_|A7cx%G+M)T{Ywt0G@T zz4QLG=YWPbL)-)B^2z?}j8=Yr%X|4k=Ejv&^jI9!6LnngbAI~X?Kyky7;!9;`e#|F z()Fd|g)GO7Ns$VZUtL}nxSwT#+8VJ?xmhBn!gf9$O0g5eEbiXz_)>rEd$oP(-RJz9 z?E7}j_IDMW5Fa7&db8VerGMhH_EszvpK<#7tdkY8BKxGhH7^MNj1s%%()b{B3d5x- z=`*<$0)o-LG z-c$JJE5U5KWXkHZ@-LsaPBd34w7K|&)yq%0*lSXDg0Q)c;i4!@(}O+}gjnOMJQL?X znw$1V@t^#D?d!|GFaEGuN+B*~$~;|$=T_p zi!gklA*t^?ah7V|spEajd6n;)YRq7BX??p2uk6j&v;JrAov`T)XtX%<|Bi$0Q-xxl_(u9yip_4A`BhJK z^5&lh^#n^^c`;}+OtYzRmuz%)SLmn@Wnzg8+i#{iZ|S#^(wmGzm&$94QYr+(|8RBu z+4OtIEX_Zr2B}Y0G5ncX_e$ZhvX5xro|Q}qzLvGB%U*8o6I8mnG090^Rp)#ApZXtV zclQ22y5jdk@yC3u2YSPpKYVH`Vr^z>c-lRGz13QQ9sM(TTY9!$;TMu$F7$jRgV*}- zd6W3Jzha)ZQOcoABjba1&EsvYA@|{VQj94zH(E0Oc+iIXS*3S>_PROumdpG*{>Fa( zKj+4CTvo?I!hRU;vpaTVhgJHXcs1>Nxmiuid-hL=IHAHaLzE%BX!Dc*erD@=m*zeH zsC8te<1InKJiD3d7JTbsP@>W9Xu{-Qc=$@aXw`GZ2u6cH3vcAJ^l>tNjWt}6XuQKEK5V!7otw@28Nn** zeteU@vA;PXe{=SqiQATO7j|`T_+awRah8;=?}ZafE=cJ7cG=w5%buwfqTPB`Of-Y zTknL&e!uGfZkPQ3ou1zx+t=T({kwXW;xwU#whTsi-CZ4RyrynNO zWlc)->^eQ+>a{@4tVI%6R_)=qv{v3^`N=ew)Lmgp?xtwjriS{K>rYKPUQyPk1xS zK3&R#`Q-Br`~C0t@A|%9r~1D=`_J$=5zfO!6I3U*{>j#EV0ch{bb9#WcUPlhXT9Aq zL5M;4#ucNJm&5EIl`7A9?WmFnFD4-AKcSr?f^ma$f$lAiH&TrXlcxqc#jM_3;Jxv@ z!UC4IX6bqD%lM~G@KAl~c*9q04$C)|$afsUA58u)SmEp!mW3>Z45xb}D+C38 z|D1VM{NwY>wdIDv>whiaa4=S2{@H)C@@C7%GxCT2e`JphVk+Qc_${iuHzm!mc6Qf{ z4D+XVUX>(&stKxla;L`d)w(TK3Q|kXXfPho5LG?l9G1iD;V&G2^fuZmcWd_pTn%%b z-!SzYcqia-Novd1N#9ehIXYQxbyefYm~>t!gz56#8#>YH^Q&d@+}&oLi29s7wINc_ zvqIVXtoy-(erst|``g*RHVhmCo1> z?P5SjHf|^~g)zJli0L+C`t7iwhABX`GnI{VX@KB)g&8-_)O;6h?DDHM&6Jns`!r$I zt%=LhxK|4{8sE&FW~;KTHdC{F*3$FcGggFg@Z5hi`w7d>>pAwu-_2)T+<)!l-!sRY z-+jFArFdXpEf4#bx$&EP_RCn6eBRl8^Z)r-2i0?R-s*c^-*wqfgy+Q0e=Dp`=%ur- zuv}Gtzi#R4ll8k&)#F~9l&vuns{_kbgF7=$+`mzKPioryOhw(a z3AQW>^Cf@(_WF18^!c2B?e9-*s!MyS_;e?ef+)lE^`|+H3e;UX-uYkY)89Asnni1? zb68)5%T5tx57aO4;w*abPM$OGk;i3qr31&%7A>(eYBPLm-t2A2WbN2+^Z&GhV2>Y( zvmA{|l^s?ye41Rc;rzryO+9?sraW(+hU{D$@kz_hBk#^K*JU>n?>-Z}zwN{|S))a~ znz~)xGyhu8eNwMGX+HbU+V%cFYk!o<82>hp;&rg$V%W5qsp;u|nJeWVSIxP?|5JbS z|KOX_J3|6R*w6gAf9xjn9K{a{z9|}ssGDldS}eWe%;BWPRu&sk1N4Rfqc(#X%bAnC z2OJdxI#UHswbiqI^qZu4Xyy@N>q)BGs(y^V*D~UMIr}R3KRYg3DA~3r?uB#8vY%ct zs|7l=G%POJocU$Y(o|~rd!G8w`U^h)zVE;A)wuSQzc#~->Gj9|)$9I0zeyu~O+Mdd z-v^I2&Ea&gd3odfe~IQd5v>RA)j!#AcR`ZSY6+ETua=z*O7dn9l$^kcwo$3kRw04) zfSf~_pj$#X#}<{zMp2LaWm-1RW0sg>%$f0U!Gxa+TW-!W>R#u6Z+eJV)XRE-8=v+v zaA{UP*s_v`qi%Kdq=KN72v6JI*VzkLmK>DNG)_!b=Kpl=VD9DV}Y$|?r?e>$y z>uU zll5*#7B(ENcoHVO=?S0Z;R8}~q5`|mRs}3pJlVfy<^nF>^?46-4{w@tOppD2;i>vS zhJr`+6Y6yj>od(d!aXNi@xhf~@y-7pWgaL<@@`=#gq3IFQEqHH7&@fxbj_&*73O7&vsFh70EFlBbS z(>x`mc}@i{>n*ZbmGlm;nh+v1q3_2Aj6ua)<6BF=NkON1mdQzSHJr+HBIwvoNUk7W%*h2NLhZGshAOpm4uT$~ZQ zZqpN8<1-df*DO7zS3Xm9q3sny7<(#N$J!T4pXkyJo|Opa@^_Qw&C0i_YJ& z?wFB$VqG!AJIl)X!GA)RuZo^Ax#GCvD(BKZ!vcngi(6!`U0H-0O%B&186U(q3R)zw*wxP~ z5f`5t#&&pJ@4>rqUQSv~8z%n{p75?!o6%!^iQ>9t?jCKLRqGUMXZg%7Rj5Cr?B8k9 z9yjUQDFHJR7uTJpLYHa<+`e{P<%nW6xTr4dW>qTqslL$kk|o0~3xN+oUJQ?xuynA= zyBv+>L=J_<>1_<_7lX8tWSHjn zVE?tU25nu-{KzzcbCzp@SN=+QxQ9U0Paxr15O^ng;Sl#Hp$_tKi#MhnTE!lixa!Q8ZQndj|3Cix)q|_Y0+?0=_y5|~Iq&w` zZ%4!#O+MGJef_LBkYj`Eg8awD*DpSmZWMNX@caD!yW4d{`)V6x{oNnb-RZU4|H{q& z|1#;n7w5k|_WybOn`8gK=a)RT|66#y_EMv|;RKt#GvW^YST}pm-y6PlzmDJi8~@|* zyMN~Y=I4D{U4O@S-_KO@%C9SD&&jTz%BH!k_v0S&Z&z*&25<(`BRg-(k*Q#Ffj9rBa@ zpZUYSKmLThOMS)1z8#!D{bw%EP<;{vS{q@8yp9H z-8&Dy`+L8_KKn_qP6tzwR%#YVXa3?f_RWroE1#^t z|FxR^&&zqAvj2yCJHPAXZuycmTdelx&h8Z9yDonB#oyg|U+#+EebK(%^!^Eu zFRBm6->rBgFWB?sp?aXFcDUh@?QK>jUnMH4KiMx<$oL#?UYhv-|IT}VcLXq{{C%cU zzfZw*g6e+_#vA|Z&v*C#nXw|j@K+vaOxnVU<;uZ@6;q8CSYKWm`O9zhW~Cf)u1Jr4 zVR9wkU;Q~eEjn@Gq_B<7#_Aa}RE{m)ddc?8%L(oZ1{c+fB!!(B6CTJnKA4!E8DG=( zzP)+b+KzYorU)gt%`xgZ^6zo*=`Mx5khjMt{onuldtGh7>dT*_7z?V-U(u~9=vCAfxH%NJ=-(0TUx373@;lty;hcAA`BDi zr!Xk5bG7|0?Cs3hkTLN@-LZPVz~ZKBdOtKPuj@TwRd4yxE_BC1{^)v#`b_S#n|8F$ zWE0%WV|i(AnVRe`W0~LG`o{`4Zkhl6(6>{%40AX?h!lf|q~?8kT@VL4Bjw41uC=e* z-+Mc->95g~U7>WF&)maS(rDdA;uOvKlj~Ck9d($Z0Gak@b~X` z-~T!HROe^-wA_91b2kYc;A&{!uh}lq_}E$DMDbf4_9s7gzc(@7+^1+gH+}N93BT3$ z980%2y~g0^B%uYnq9u)u(v_65D-|WK>^x?(;e_2a?)2SE4Z4iRQ|l(YmSlQVxgxX4 zF3s+i)|#8w%)0M_#ta*qofudh>>uxM_gky@Px;PkiO_6*)9B@D`gXoO%{}eU-_yxZlzHW2Z1A@9o%jo1yNx{{CBBH`MC|5&Nm+@Xj?5C6aBsX{<@Vc3nX79-2P{NvQ9qk@$V0}O8%^MQuxDpIv}mh z-0W-adbO-$op&tQA1qqOGJz=}V){&;^G`hgw4Z-5bJgP{aD{i%5VAH{a$PH@XzUn537})_?CZl`?_K^&&AggM>a7%&8j^h=NUWn8BL1Bp5Ke- zx!Sp_iPiRPqUtcA z?#Zh2OKO0eWr*IV-cUH(pb^W(4PpY?xNhcT%HgfXZHZR!?zwiH& zyW0v^do?Tz=6j@FKcSB6$l3iJ8Na^yIN$RK&e^16G%-ZKrS*^aZvlJO8_5k!4PKD3 z>^@P(6MMh?ntrohuuhY~O+Nm$6JtRnAIlu`6FH0bUVQ2NZ|2|YqT9GuuU`F2sVuZE zzCpI%wZXmP(Y(TY&svo>Ji2+l``z?^=euK=kJWtt^~^n8He5=Z@yqua382E@L5qOI z9uD3;#=LhUI2ZKoc-y_X*)?O*J&gs+UO)bLJT#2CW%souQ^T95MLp?lW-xteVmJRt zw`=^lOLKnrrW|XYKJU`Izti4Aj);kNTrmG{c>1!Lb!q<<|KF{S)nHurbboNVjj>VA z(kEIemwadZyl!f_KAPdzVTRW)rZvxbQ!?$$=6$)>PHnp8t`K%G*XqK0{d=0*I~eK> zKkIef__6*ar+(W0A3OhDGi<)^Td|Y(kn+np28S-!eD)1x(zyHn-`DATWgFyf9|N6c z?$Xd#6&Ek@u-Rh@Lwx<-M!SHfnKh0)ZFY8dOcj3BJn{^mCp78o%tpyyW3uRS$wR@Uwz0Z_mteN+?rjN`@Sz?E%NyM z8MNeOeuc)*h4yvPrhoU;o33#CFbZb2`xD(JnVZ(hL={+Cc zZ%+c9rq!scIAQNsu0rXxEDqDGZf~nUcDH=f!3)LRvQJ9wJyug~t)E%#j|8I?EavNZkimZ<(;TKFJd=Wo6K zr~m)fhB0J_^*S@WFJHnCaB=dT-{;@#pZ5QF76Tv4lc=;=8~M{8>+Y0e(Gh;OW4VIB zV=JzY%;rC>HO)%OFNW6nZ+^*d{3b59`tM0yHeHHd@_CKl9v4=RGpW5=h z=()7-Zicj@-kKg#DSwV6E%naiFQ7cu+A>-FbNUWSG-=M<|t zL?2tYdoR<23-c$uPG=EQ_#pp(?*3g0Z3$H_rDt>B_f-42d%iO9kL7HTv5Mn+$R)jh z-52-TSw9~2i=^m=PTTJHX37T3@|5Rd4aT5;yMvE%mfyC$Y=QItIbHR-n*$!(b8lzR z-gc$&?u)60eE)ZM-TWWH`XTaNv?fED;ct11OoK*?XD|P6WOeXrQ2Eaz_N)Kks&gOG zBi_#xzJKiI-e?xSN{%!4ef@JnZ+@!Q+Ip@+Kua;zY|r=WEU&k0oGRLJ-G~2>a?#)D zYqfEFDa-#XVwn*CbeVK3!^b_FQ>>l@nEpG$(XQA3)yO=|;f&n%f+D5vEi<-s=NIH( z`pP+*r~cRZcUy8d`EH4k`x-SbDd69MZlQ*&47X!A4KyAl>A&&`!-Y|JnH%?tJ|8f8Qx7 z9Si0MHrp8tey>0ACgN$%@%eVQmDrR0g|F|LonXDa)4^{2vzfWUf09$5ZuVE2vt)+l z3x%Vr^b7f)FIjGXa0dVKSfOospEun(GvVLM+fJE*ZRfM^Z?d?we2s_r+Zo$hH+05% zoI2GYbuZjbR_T|Q#WmhT_3NhZG~T;muJ@;zcM@9V*)4C#Ot5^)d-->@`!Sm>|8LH} zlKS6E`s8h!wY$^qUi*E;JCrGc@xur67Xr!&EG-AzRx`fXkUS+(V1{YQB@M<)V+o-_7bkdp6OsI|p;aatgg$p3{Q=f8qiLaym$ zIQ={F-+9J{H{Y)>|KIed{!%1^b=*JsX69&yPfmgd-qg!6?I=^8^WmnT#R5esolmi> zx2o3f5;cmMzU#WdK8N#@zN?(lZ7ZD-&gD5_!^FIsN4DJl5*gPfYQHmeisIwoQ&;9& zPP;u*F7b29q9Z4^wdvMx(Y_V_XqnL$^<_Uc78Sf)AIH`3`<;`1vG}Rdh5HXy?+j#{ zv-)oOChxtQznwbJeQ#FV6#JhqBfl@N=X&(p{B2o7?p)3d|HE>^7Kt*?@J)fepSLqIK6}pnHl_df+827iAKVm{FKg)+J^y~?l3eab z=^S^Lbu2$D4fKnB}i@R(vYxUgI%y*=ZBW{@##bD~h-SDl(eU;V^hFBT&szr}#Jh zuKHP(nk(t8b}xVFm_IaM^lc5F$D}#$b+$A;`*1BN$7#~B$Mf<}>2DJ#3VNU)&dB~V z(<`dRH^J@Hykq8#rhAS|Et+ui*TT1*j?(wM79QEeny~B7|IGnAuHFB0H$^5|*-De~ zQLMXu=@*uq<_ql3%#*{ycKr_f(kFHKclYDj@-GYa#eXR2dN{Xm{%)HkDb3lmY#mmj^v6FJ*t|U)oSgX_3r*$HbZEn!qHDYsXYNQO5 zZ=Ye_ek}Fu8gJ{^sSG?e{dspBzFpoc6&1RD#o}9Cvd<>ou-|Jp4Kf(P!er2XLm~DY zLq}x&KDGv|t9O*!^3?#h~+ea^gXYhUeeNi{A?5i1hRi7wKW*KtFA5F|4{umFzvp$EtK#jwkdcG8|H5?6a?CMd>JMa6QQ(=v zbPpZsTlXB!^85C~|u zdBoH3N2p=izy2jG5^s~g?N5*R^7i#?JJY^UUx|%D}~RX`AsgP4zd9b3Z?~nw-{{ezDq*`()Fa;wE;{ z%%C;O`7@TyJ?vg&souc)|4`F($+AZVjK%SMOiy|misBl!rD|El9sk6iUwC!VwC+Xw z|2x6rrD$-jntOBF%?Ym;u>{1OC==PBb9~;T3}*4tRoCZvl^KFF$Xi7L9oM;%De>O_ zehN9*|6ZSZ;MK!z;n$2juQYd8nXKkZdXw=vQ%91=Fn7(}^Q{d0OYLS%`*H41RU3bv z+NYPI`k@ziOzoBb=6yb}|Gd(l3ID#I`FCBE!T5>&tH5cO)~`7_?X^#(b41v+L~hQu zRI&Ple(Xg@g8mx^{^Q=eC6?=Kc-6(77bY>RWP6&-dSK1V#EHsxGtV!Z^L3-h|J(27 zv=}G-S#CR9yY@=b+#sXBNz$qZ^q2NnEY)YZPz~zK6s+RdqWo6uc8Ab|i_0V#g4`yg z{>pr`YHnfon=^|GciS^3c-Q`2q;#Eo{oCdr?sso+3A~l!>wMi=tOYJBH!BG&k$$xH z+_pNtg8b9}ZyWNI?^VmKXj-gyZEsFfVT9RvRlRwE?^h;Dny)FEoG0-$!d|KPTYcJ3 z`_um(uloJZG-I<8Sm_JE;Ea)L(NAJaji5zIflO;{Dx;%KYqiCjQvly_G59{e;~P$^}v!InkU9 zS^`h6>Fr}JUpjZvn@vIq7a2A=9D3IjI&ssV`1O2WHtFOp*tc8z;-uaN!4(`S_DK%g z8XP8pPLbnfC~wPO*l|_qN^#Jk<{bUEa5w=&U@@-Mve^`&!q>8`g4V zrTRe}XBeiO|2(mO?fGN=o=u8hf>|5RF-+KI$NyK`MeI_1+TY)Mj76(v&TEPdWcsl3 zNcP?rN3u9|fAtp&tvb|VfBqpizhkkl{6%Xym1vp8&vzbYFY)qXi1URU+uQH-;G`GB z*H?%8Y~${=H+E;a*L_=<8LH*7d%|1S&hO%W(kr~@F&gwwsQLVj|691?^c0pj4yMol zuElv=F28=J;&pq?bWw)XZ~G^GxI5Kq>Y7iA{~Z4X+8q&VP>cHb*~3B4<({(rjIdMd zBw5s|9KI+0t@JIp{`^>CkKf75=BV;YQ^x zd*eHv|E7D_RBl{Y?#+{W+_CGBp+R=RW1dFI%T<@>e)BoBa(VARuV_YtkLBl_WoB^X zA8Pxj_Uh!h5T-xx;`di=TJv0F!MrQSI3yUAKUA>HTf(v+;_Ihe_xR>tR~b%c9Xnk& z>CF$32LTs0ow4reuA1x1uYROnA@p|QYTa8LGJH&b&fc^UY@Bgya?hOHeo+R`1K&9e zo;v^0w9lFADzKU%?e_K0P4@yTlve&)aL;h|^?i4h7!|Gp z>@7kK^C!Edcx1<&`8E4T{x@llRxUGbt!4k7z0Y+uHx#ygys|X&(7rQk8GIw6AIDDm zw@v1b2BX38H7pyL6yz4>yFEA}c;ln@dA%tNtLJefGwA<(vpJoW;hW-yHxjc;xg9xMR4P)&_3`{)G`80p8t}c?On&j@oBA}?&Gq^yE@8K7+wWfHY;pru-SA+g0I|0 z&2CfH^4Y!>_dEYM|JnHU=Z}?245^(3gC3Ts-{l{<* z9m!K(jjWOJAs^J%>)K{j8D@X}`tIJx3Xc7MvMh6-e&49?dSIhA<22=;KhmGfaXY}V z$AD$qB9;pb8&66YUb^?oBBTFi*kxlu zhBfa^9@|&HoEVmRfO)CIW-Em-?gc6n1h#Q6nR|+%uKTCX#`H6XI&Rv0EarN2|MCq< z!*4b&3`-OyKF<0q-YG3Tx$NWA>b9kG3!UrR^}7ER?N#d{-v<3W`d#6gR-Y(CC7;8VuLq+KBuPg12mTFond04?_?OFJ z%I4+IH+(gV1f5~7FU$Mm^1veD`x^iNYfA+D- zjm)!6il6WV-TckMqVRe`O#$1hMIzUKblB@TU5uZS5^Xa{rRY1CB2UzC zp5O4{wY=~hpCCUI`GBJK2=nuoWL@#t>OQ-c@6UVcPG4` z@wdHYy6TS!9|JgS9KX0lzPuF7*`UPmeUW2Q-1q(GDuhyVLbTQIF*F7+Y&f(3+?(lB z8C*35qM60k@ST{-`1V@k?zG(w>-b)Tv%Rohgk4_oze z{VEMsvy6M)o~y2}Js_}0Z_DTZK?%=Wl^9eHhZ|j*o7XQCZf|H-hX7Y<5{Df{+fvgy%>5{9h!SvX0t|(-z9Z6+1Ww| zq8aA>I577vheYE~j+|8M12q?o7f$$hgXsVl!xRQ7;TuZ33T$Sa+*`}2c_1sGs~)btC_#WKky14~jR>?7IKzgKg|zb%yUZSF`?nu9)?-@s$y$ zD??rE>N9)3|F2A3{lwy*CkKNiSA&6#73+sD6)moo=U(lVl1)5nEbVq{Qr`zb^Cu6& zu2~d>Gfr&ZAkgQlvgv6+#F-%P#D+=xCPb!feD9L=RnsAL-}<>n_ufgVU8$z9x|iL# zzDy_F*&)wnOaXP+K03@j z!Xcx>RFcPT<76Agd7J8}^+!+sWHQZn_&{Mx)C#_>69J`T~;Zywjt!_s`drS9# zV>X`SNZoI*U-?&0-i!0#Y*@SDPV@fHyRMj5oY;SA&ZK%#9&OG^;nmeTO=WTF;vXbf zemxJ8jrhqiar)!BjoypQ*6c9d_gX!0-AW?`k+;8eU8Ej4&rA7|SEuzUk6M^LXu>?VAqv zhl+?hz4GColFO8QbEdh&WOjSCw~wm-%zb`1tl|6n;LRcPBSj_mw;u1d|2Zd&Va^}r zGG>3VMn`?C*SgMOEoa@{$o3uAV!XCeL)J!o)}KvW3k2RvB+g5|vdnH(MUHF2xA?D4 zj0wpsJqJE3IoMC!>~cPOva+VF!~}=#oBuyM{mEDOzpIF?&fmAw`Th$3X|v4|*B)G5 zw?8WPOwo6TGoOz1)#@DJFT&usctiYt%#_x#ql{`A1vN&o9g9p`&~M z^V9oTZ@rWE(|^Bj(uwXrj=qSC)_T|cr}?K^+TAA~f6tiwA)fwD&bzyOWb_ z_N4!ZUQC;Q>cNSKrn`JoOm!Ad<1Tz-CcyAIf_M3IfqtbNCqt?AtIPU!ROl6Ln5KW} zm7T9;EaQbq{~{O{OmA2C6Ln91o6*uHg};+yiUf?WD6Q3cA9QKGON!!uN98~rjhZ!F z_g^G=FLaqUE7kRhcB%58N}u4V?%@eqixYTk7U*$2>N@<-<;~2W?JxF=`Mo!J4RT}b zkNA^)H~-IS{}a5E_4JAaX%C0@?`0>xG2CvRf9&q@{?GG0wD>O7_52AwlgxTR(=K%T zNe&qWCTUH^kb1T^Q{6H>jz73RpIKn@JFXO!`Sx;aM1D_U`M7A|FA-IT+~Zccm0k=BfT)63cQL946#`jh#?`_E*2lzd(kP>!FMcocC{wFK=Z2fc_;bSg2u@{aS-CN8tVL$);bpkWay$>r|`N#0utF~UF2Fcnd zec2J6;lI>$?WH-i(mk^-?XnJ@_t|(YL%>4ePpA7tTQ}KfnKi1u-7Zw1?RsGEr=whr zT{FD+#Es@>iFGsdoIR^lDNy6HD$L{fQJwl5TjJ|F>MbP#kHqJl^Qh2ebE9d#4F8?5td?Xw6p6vHf0XAX87N;J28zO_hxc>{7!PNlvoi zv%Q{NxYJGH7wg`|x7IW>@OYkH;(q3v@$dTD$Q%(S4Tfj?GS(~qD9lWfb~y8IbyLB_nS5p*F3en*4`=lag(yWq|3eJIpQCC z${Ac1Pr3BJ`p_3+#hWwUGO!$1^}KPyaj}Ec#Hd;q4H2e4PbS)5D*1mj;`FWa=XRZ! zI$dM{(jng3npLrA6usB$>*C*+v~&W;4Ul9 z{F#k6VFUlAUM7Xk?OEHNu3Ddy9Wv9*rM9crnrEt_<1N)Ipf!BkIu5A)Jto#|s~ae= zamG{qC-XxY=87;ZWI18X@a=BWE0O73>&h&p9qN8v{Xc(idFRe`C*SQpSE={@>F-}@ zIlHX$j(hEHo+Eg~@0ibo05=Xri3vOtBxW#9R%qko5a{3(W@}&x7Exj2P*j|7;GGHw z8^?Cuk4t5j@Akb^cI&NKS$X~a-}}zb{hz-!s`~o9^!LTz?xoMKzWVu1@YdIxvaYUr z9kq2;+3hv5f3CA_Q=Ix;Qo~{Yo@+52&fgaOD!$Fi*zmnPRP|wG>#d6oA+dtTp9TDM zjX$0?&o!qZH|xLVoG-lUbHtD|}PpzxApI_B%2tY;F3j9m}WT`H#83 z!T#oBan@U$Gg)jFX6z_8J-*9B&bVLL$EuElLn=}9t#bRR!!nh3Y*gAgQ$uW;vp=wM zMen^`{_iW_<@0=YXKFYY3XVUm<6!hrP+0Vl)8U<;!LfMB&X}Zs2lY#oWF~W&TON|# zc3k4Ww{*uZmC}EGzZdsU>s`!HdFSKKx#e9-3>NQy=`P*P!L`NhNU5?;;_E}jRfhB4 zpU4qnT5xJRPvIvinKc%(DrS6HpEvE7P=lJX?X+nJWT!3U*FCJtsp!M(Ab48kiu>9} z@fsVXxh_195D+t-$W&l{=bL`peTn)j|1H@X+#22>9OR%HaYX8wthZwdKfebchHyyBA z^J($i?7f9c*E8(NI9oWog&};_o}D+|O?~5DUBbf<%{gDx|N7mTW(^M&?cYR1OLEKq zd>Aj;Eqd|Hw~T3rTI5|=qrCDo56hOZo|EAdPM5nU#vt&_iQ!Ss$Blt+7z48^dZ#Rovub5HbXhI! zY{-q~o=2H+>-I5S*uf#7;C#whV=?1Ip??n^PiM&5lzQzbk8b~Qz5T6BtxVPn8hAN> z%LtbRw9Rc=Q+D07fc10z_o|Ion#CGonKIlN%DPPyLm6D(uh7D8sK0|DVyV`L%voiO|UztUhb&bDrO?xqJU_&8x4K7H|Iv zyMK7w&9r9rmrRE**Qa-tES0Udk6^+GmE+xJEbXndh)Dqe!{NDw%e8E+aG@@`2DzYV%$|l`?7y?XQr##u&bKCdnHo$&XGss6Lw&0#DI zyBFs+#%OF1=X&BS_3qDIfryVU9KD%;DHw~~V@SwVWSIQh$lBhXp+!w`>BTcgA2IPZ z%nqNm#3Z`#TYq=sx6A`aXV%|5#J>HZx$@a>k@F^nFLYRVfHg?r-2cVz_%G)_|G$&j z;r%yOhKoxcm3;G%f4t3P#OGb(QV&@mJJ8)Cw_T4jom$4$LIaCzWYr7 z%=Ctpmk#{dKaFd?*{ZxRF?+>re1FAuH!&utyIp+ZX=xHYYwjr%!3fVVjR1`etgJ7Z zf4}`7tx&Dw`7rIq!}?2~F0e4{VwiCEzx7?l1?L%VO=q+U|5mNR@Hr&upJnbH>)cev zX-j&e#P0EFz2CjCA!_QgviB3dc&?rvV)<=dRq1TI*FE;uzkWy_Ub$q?V$OybdAGZ~ zx{MVJhbOd0e_JJ=FvEO9k@-pwpA8Ac|L!-e{P{TT&jWVHhP@}`kKKQiFx$S6gYW;B zc?qXhEqeUyXba<}%d6X)!;P+O+Wg@IzcuU8*HPA0o>SFC1?&GjV)XdoIHl%i=ud6G zAK@Q7Iu`y(G)k{{TBf|?MSwVrn?O?tjp) z$;%zgvP-7AGHWKky!Ek!nS*(^m_zun$A1Kv3>^MHv9El(>d&@jdxniI;?{3Dc=O_4 z7n|mP-BTHP=dM@id(ZCHEgK}-FMhdU@P8p|LRR~O9m&6Zk8fL|BcdUqA(9cOaPI%{ zqxA;=m$5EzoVMY?tf-S^zjmqlr*(bH+4!<{`3|uMt3@ub@bBkg<`vHSs+`B$#%pfI zSM6WC?d^@z=Vug`Et`7p?u}WuRarKaJXvPaa@+dj8Grj}ZQ|xB!o95Jx&j4lHy))s z%s8xlu;Ees^1Jn))h9Rj@0?`)p~qm0h?7HtXUFm-V)JglYwdq1ab~xB*?Z0X)54oN zQ!TbIgjO#7&>?=A?F~Wy zE-!638{=d@|Dwc|FgCO93$f=+9S<;G*`;yUVfn9pI{%*d%Zt}P+bqQNVx8u><-CSw zg31gN*bb~!*|*-lYU6Xi`OTG8SGK5m?yHr{;Aib*by)HLxL||gQ;k9{RxZ|W&WyiS zuKoCZ^4*tDm?rZoe_eBN`se>Kzsg0P{}<-uwcokXaFaXl>#jM+&)?k# zQ>6VBC-(a7t$|E(;(WJ{9u@85U}o}XPHy0>|K!0Jz$nhjLV8=w%X#|p*QGNL|Nr`W_0hk3`6jHGDDn0=Llv7r7sCS{t&JiN z4{09IxHZRoj)IRvu*YPfnM>zqHN`P^@AxURRV^!B;AP^I#2Np8^vjFK|Gb&~dy7x{ z6Fz^n``NXu47?53<@Lq$?SF6DQLoQeJPRu{t?R3J$@&b!Pd|#`> z;UyKk`#%MNa;-4eh7Ekr64WK>+==@p%<;k5PIg(;cG8AQUk8Jboe`&Mbn!cynnz|CAF6g976iRKPd;o0@K z&)@qhyzTLeGd2r+Bog?Zvdg_(!El;~d-B<;mJMEy4<7P(<6mm2_@0f$y7lzB4{A0u zPi1zT-2ACS;_(~DlhG5S*3V0PH*@#(g%L+r%RHVC{w70w;)cI+{}S`L`YWcVh%+8g zy;`RE`etB5XH%oDnwY+Vv4@%c62oo9E8c$b$=qx($MF4@PKk@xj%F^8tPD?@eP!vd z^QsN^e;;l?dcH1o1|P%ELnXHb8CL$=|MN%c#}Afw!%`4&I zMf1-dKE-fZ|4OXDg;m`*i?kX*NsWs&Z5hKEk2(L-zsLL3m;Q@?&u;tQKk#7wlZrt;2k=9}U+ZBng{Pkm8j^8?V-TYjGb@SZaoYyB>AAP<;{@A0_eOm>~ z@^tRp>Zs$G+}c_4@7a5{!%Ua0KdLM>nDC1;vEgar`#xzV&O;G-3Oovo7Htg*kA(ZK zG?!PedGIXt{e!eZ-FSgQ=S>H0*PJi3)=&StaDPQSW3SWouia=!`35@!w|? z_gv1T&HFNE!PfbCN)a-xx9_Z&zri~Bd4Wz+`kJ%znwZb6_^`S8zjXcgw2#g2>r!4G zNT0hgy3zEdo&C!@`z8LiR~!EM{wr^NP7A}2;Er!9`}xx3*o^Cy@9c>AaCP?4M}PZe zuU%%IE_Cwjb{tS=Q&o(&v{IKhqC$Y~h?DiRZUWcct*F{b&KfL19hr`=e`S4Y| zsA!+Lnbjw0j_->8*%o4%w$B9H&vPf$+$&SNb0{coG3d-}Hnz5Bwx{z`UgpFZ(MEZdK8Dbn}X*IPVK+>PqRj`^9woIcryh0 zfLbsAG#vK7l{Ws?ezfyx3eQB2<8J5Wwyhv(X{&3c@?+2>e zKK{GlYW@39XzA3G%bvHDS8>|sm|0Hnj`h4NCwQLXj}Jh!tC8^Jz13=vadM9!m}w!x$Ve1GyZaQo8uhJZ(bxESX5IqIb6hZ z{kOamkK`>Ron9{e)Z?(ddXH{FY=p4aH!%;@^;~XGS3EAOxZ1eG%q_!B{&(5x(+izB z49wo{JgU#sP`vtL(7f)&4Zb`-7wm6jvI|?^x5-X(9aC2CThT8wT(tQuj~$VnbS`~| zP1H&WWVaotc_*g=We{dmnrFu{QF3c7yB49nf6p^pJiA(S}LxY9=pAquIn}H*Z-|~f877ZoBwZTV|eGzTjawp^_wqg z*Qd9ivX#>#BK~*; z+zbqA7SQ*4eBklq=4pHDj&U&GdhCASgK1|r!-H#H2R`hNRXUmU!d4iRRLD$RTGW)z0|8J-4_3{hQTNbb&AfaDmf&aH&-)fh~ zJ2p2hZrI#(ar@{0LI0;S9B5(KBOIptoIgb5;fb3cN|()ASrDTCI%vv<#S0wb)~+&- zTf1td^Inq{#!s7z|4(ysVl?%Amh#Bee*HCWvEvV2Ejx=<8EzQ-k(kW>LiS*T4r|4X z;|KS~88=kqHqU=-=p*59=jwV+3!X!N3M1TvE8qA?On4!dnziSc_YId*cPGB^$XRXO zG2JJF@yb_W#p$Wyj0aM$mTSIk4OEc+ET#H>)*30nP2%l={PP5#7|hyyZ^j?9qgy}l z{MmKT>eOX+j2kcrI+r(2t6bp|V zGTw1+Wjs=Q@q9p{!#)2gS9&d1ZU1og(33Mw#_8{3kFGy-_~N$kVAIccKHk>Oy>lm9 zxBTQX4hFrQ-@I??Ph;|th*gt#xo*R@`G+%@x;(d9=iR=perH?0w0S~X{JXs6kMADZ z%`_{c?C6WH%xe5v|K_}}-}8CJx046A*NHToW?cW_I%~^=S@wGyyd6NL#v752jY(w( zp7VWh)tONCfBMy@^-2GBvOhS%!musHpQ*ce{iL9MYOFa@*Za3K&QGuPO|UcbUmkGw zpwE#%>d)@SOEcv9&tJ04@xf=C-ABt_F8EWN$nZ~5;>NQX3>+5c9xU@Yp#3m%XK^Bf zJEvoy$JN(d`oVwsdaU+@OE4%%valw;@H%O|XW8v!hOLjb#Vvnqprq>5;JuH30SAMd z$uyy@0S|OECh-1y`^jM87T(EM10KH&Z?xzMb$Iq3(yYEq znVK4N`t0LJPq(V9oqs(&V&9j)M?cU1-QImP{>R;;pRe!R98vRBUO#T%2j{ytR^1L? zZ<6pl=G?pschsb+Evp_HSRS(P@7~SrX6?7fx`(T% zLS4c)Me65Lg(dIJ7Jr`Ic+mP@am_0KkAmU-jVB+4aqyHd+fbEVCllZE$gT5)tIGnd1E{kn~_pLT4k(kv~>c{+z#UfS?D?`-Rg)Z>grd{yrj ztK8jNC~rC422|>Qb7u72!{hPIqv%|Dac+ZGo!L*dw5wOnsH{Amf4MbfHppUWRr1%BtwWgMA zAH0q;tXj{Q;gY)i@Qe0SacTk|iq@WA)*{9w!X-10X`z^xz1!l1xhsz^FWuPI+S@2v z`1{z@-sHK@8dZJl#Qz*ktzY<#|M30PqM#@5*6rB+A-Q_$-C9mYvF%blO9d17|EX21 zEj?B?v9@uiG?z>C-7Cw=Cs#M_(q&zAZ(D2drT5dBTp2dRS53de#rn;QQ7ug3dO%`* z+GUsQ<>I!>icY-i74ti`CCm8vuPF0ZSs^?2wN-`&B&8i!xN9!?MK|R32HV=byLw9A zt!LWW$}mMx;oIZ|tN(_$QWpOe|s5lKr1f&)2K_sJ}O|=G*3TBF1iQH<#t-Pd58> zJTCm+xs82>^PfjHi!wEQS-Jlxdu&P*gF@NY+t$AgZnm2pdid09g-`P=2Iw6Dlc$&c zj2B>-A>hEgS@xFS)2zpH3*y|DJBzP=a(~Wr@7TF+-7~Uzta~rblbo;Cm5MWb z*?nm`lh`7|pB{_{J|5NE& zeCd;U9H1v4F`4%VYmec}U60u2987KVTxa)vxg)nCLli>>a|^=)?Zv0wJ2Xo=b!7Wy zWiTvwrO$Za^wv8+z8m}#Jymq(qFzzO(Y@AOJ$aXRJ3n2c$S-GXq_ttrN7<=oHe2}j zF}X4n6orNf=!r-;FkW+xQn$4&N{fw}C;#WsuHEIozMQPK-KGB0^ZCtA=EYTOjVBk* z`}@^BCU5x{t0+!q?-_E$Yr1`(^LO1c3Q0Y1!^LgqSCa=qnul$# zb=}x$Z*WcO==SrBUCX?K-;3v7GHkeR#rEOZvrvRa zfQErM>x=SWvF%U(Z?8W(^Z$$8`~UUsKC1uk>GkgN_awou>GdOjJkzsLt`R<6K%l5nf-^gIOv9wXClLb+>N@D144g4Gz#2 znc>2C&8aHqdHflBpZ~w*e}8`Ge)?#;e->jyeQ{Wio%pTJm-X6e-`+lt6O(`GXz}38 zw&cX^Ki*}2==a>e|BuL}i5pAfIT$ZJntFZ48kuSDZwX)TV|mbE`Tl%@D$A^00Y@ck z-gzf{Ki|jr!IZ&}b^Q{~0^MJS*pHl3{P}sp(}g@c#Dg^oGDSAjnQwYq|9AS)Kj}@@ z()KS73+R7+`u)ABpVy1@M9IM7M2360jSkj!g}Y|R{n>6f(f`YDH@OSW)1T|^ypaF& z&;Ays+UNh76_s7~yt$|rZ~cFM$p6oG>sL#(8msfH$bTWcLFlF6qSH|a&b>i`uW%7?@@v@-o(;BbA(iC@QO*1!GL{j>e$|0n)` zDwoT?;-CM@I5H^sxgEo!Tf4l(V;BDV@3{N_I@tjI2?;5j$*~@Hk`4A%B&SXkt0^kl zsmP{wH|MWJ?S{8Tc4ALlLS&}49*XV~Y;{UFlr&VcU+yz zP@{I?lZh|mQPzdFvo{^MYkbhVOx?e6{p&sT&4He>;@$sx5`7lB-+!51@?+1tpNqr` zZq-iMl6(2-^*-aTwh7@CGcJU9Y&rjb@xT4={?tn|YPYjp*gMPOzy8*G6NViO0k;@x zN{^mOFLq>atS)FV6OFBUB=TNYQ-SIHO|P(9pQpWut@@<+_I}ls4|%08Rcu#&5@$T% z85-`mEg)eklc8o5$Dg%^D-C{LdLy#=|H>Kv<^Mj&`grpH^C*TN#U=;Je_U<~JM*S_ zMpz%$hnc(6&+YWuD)el=GDG;Smwa2lHy3Pvo5XD!9kJnnz~lUQvxbewCmV2oaap#r zA$anQ&2?|Q*)?N4|IFFve)rGnl0r#^5_4UKyVDD_d86JjK9D$|T`M&~pT(x5?8wGn z7nQblE8dv%aECE-~lX9IhSCfeSbo_*{QZ%3pYZPa~mbZQYHf`^1g^+m-!4`lo)? z-Fk_dLp?vwe~QnN{kq1R@uw5REoO-sbrLschg)4g*V-VZ>tlMYng5sc(=Du9<05zh z)b6crWt@1)sd4M#w>M6oHao~Md1EU}chS-4?GHAb__eV{sJBN*cWKmnw&1jW7t3e=|L=`ij^1dHm126P zHt~;~#iVr`FP)W2a5>-fxo-Av_9ZuS+4fuf*MC-@8P70*i}~APE`t|;>ZNSb-Sc=I ztpBfXob~ztn?J?B|8JFJE1UddS?;blj)XEjyP1?y@uKr#@J6U+f9knw8_m2Hhx4v$@ zg>~L3X5&0Jx$rIr$>g^uX4$A6*>|$PK<<;_!RAW>*SDysC{!*r{W81%uhD_>Un&aX zEVCv!6zb@oK4LKAsrrYxtPzYs8U=158|>yE>nuHL^lZOA(_d4bS_|8Xqp|hZ)(6jV z|G0R@>@BNaNxR!zdzJs?`No%FifcbMsuli|pIZO+&u!I)9Y3`g(ii(U?P5Eo*tDYi z&!7D*3|HU&Z|heIFstscImeT$|9C-MLe9ndxTXKkn)Lh=`kP+dCA7Go>00rz^7(cJ zNB^JDJRr1V2B?WHywt&`uFY=pdbxAoijUnt_rLq&cJKd7?&YWdJGy6`@e=d5jGWx} z{#PV^XIJppaeX7B_xgh9l(o#89vcKOu+RSx_`hB8xkf`yi-b_ag0mNDlzbj`eP86N z_fod)F!vVi{U1)`csp0wN+f?!75TWH(S!Mb9&u4{8S6E9u-5#(Y zKp{}!mwR$fNW|~I)BlIR{j=WiOSrdk``6gNf9~%u3;#WH`Ekx0H)_-j?p<$q&l_d_ z?~9t0P(sgMfi21mlY$O>sZaPGe_YCftKpY@;_-|UnX?jgvWy=-|Cf64Q%0e!=xP7& zzJGU@opVbs>*Ksq@I39`@h`1G^_QhZoo8O;cQ+JwZd}AzU>F+9Rkcp!gu0zX@Rc8y z&+EVYz25Dga{Ju>SFItnUlK04ayabbk5b-0o#BD9wbcV3v+d8{pKjTeyDrG1GM8PB zO)gC)I<@WR`gcqR;ysQX*|z1VzTG=co;??IOcR;%xWCMgsCcraH{rDZ2jw#+3|q?D z9zGZDs_|^pXS$P>Tf0_pT0!^hbb$kIHyST@sHkQwJa9B=Q7$+OWGi;S8EC2I1eg1FOpdGxML98m>WIfxDhaRrKCFU(U(!%ufkBzzOu`jJJjALu-^Y-{j z#`(=(a8q;o@&|UkOs)(Dy?Lsk3lCfjVo3Y(@?hw{o$L*d84S++T(FOYBTBhu=mHTNp%^1&aOIxpvn^2U(9r2NDy$2(1MT8MHIS|DWoA zwO-OzpyQX{-jAKO9}nODWpDpya*W#ES@C8t+lB*PE`|CSn!Ne(d|6O2u zkj;?4gtvj=LDVhAvi}T)xz~7C%znG6;ik`Gp~V3S9IX5PX}{0elfd#(*87;?QW?Vq z7i<6D`~Ubj!y5hN|78BoI?udoLq9{kfRCT)=5O_$w*?Tx8fWp-b$#zdZ)dPZ zfX0O-41ZtbXFrd>-g2X%!F4)6FGKa!YP-H??<8KI(eJGmlq)kWT2hekOs$2XhdG(| z$Mv5*zH=W*7q2;UQ+K`H|KrQO;$CYUX!-o#;Hhou+>XS0BVmROzt?ki=repMkU6lA z!NEw;>E|PEw#BUycO#uY8?lvNPTO$G{_h&;BN_Ks{#E$px6)hQ{n@Jii=q)iGP0~) z3=dwcTA~o5VKA4;>}F<*d1=Mk$pUOXbANcSU;eL=%Vff6A=D71U3p{)*RtS;{JN=6 zM1`jt|J?VxU;5eotN-sF>vvVG;0(Qg<&u&RTf{Ns|3r3)2UT*V zDO(ucNF3M8hVcBany$NfCd_p_`n&LgCmQ#%tJabDZ0IuyJG38cv(z%d(HO8@m0CKYwW-Lj!|@ zkT(mH^ws~D7fcmj##rO7Z}9)lKl$hXlfU2J_u6YI*TO%Hy)Ca~Brb|As5R_lnoy(B zsQYful-tYXV~S$eNnd`pb|KT-DH;ZeT2@ORiNr~dY<=^yt>1Um2*2z;LZEND%#v0=EpblmPk?aO9wzrXg_ zgjmJM2XZ}3uFMY-mgq~0bDeQ+jN#bO!ym#NWxT=nP^Oxkwcw4EgcXIxoZrv)voDjvZMm6&HtCf$I zm&Ar$Sh6~1+YXQEj71_0x(qA~>r+1Ob9vmbr={EwG^DV5A;aT`|3B`3y?eRQm*6ea z1Q=$BIb1zix^m7tw}(l7_Vbj_%6|2CW4sjNbx+&+niAf9j@vKt))VHB))R_wvxTbN~0Zyt4l` zl`WU8)F&U1679Sm+SYJ zhN#yrF^&p9_dxr zw-wgqeykqLcH%nA4asCzgN#XuPbb*6MISOepWI>Xbx?f|({k~L!m}8De4N2)&F-_~ zo}k1I0f%W4O%_^#Z+}ECv3a=a_NVu!oCAB?Vhl9g9=T;_&-fpn|5&2okYwRvgVhVd zYuGMUs)l~l5ZMvKbtBwdg>}cSXP_{qI(8oo-QNN>%K?o|&JoJ=@sqFnhD(woqdL`BU zx|{wPaEb6XB$jAx)vQ5oQLP*0V zb7AwZ^%-I>)V8cz;wdp*4ypx6lk#fvZ#+g`TWoN-A8SD*{{F)UfB4Y_m;KLotd6JD#@=l z-^p={J}!H?Qg}sdL=U^6Sx(FPj~CDVFMc>b@85bk6D9#ZnZ=0$+dltaWpM8QeVdFq zVN1*2{)@gFa8hLw=k5Dxf4^=s(LV8*NiC``ULhEDaO_t}3oeDtvY5~}yArb&KVY`xQ-`AQBB z&G-7a8I##v7W=#Zmt(F=wvtGcoAHNTblvMe`$f;4wpM#T_xMv`U90!`)BoL6X9z9a z#ecy5?xd?uQ!eHtw(d9BA7t4# zyTEqpryMPJ&iSChUjuzx?k!G@%|Q*Ejj{R?zG8=xL(lD=kp3w_@$LnN4F4Zp&NgCK zWkd~*S#k2-=-eF2y5r!7Y)9U@ZPwws=S0;Ho>4b_mRQZRPwf5ye}4|GSRTRS`9B&%bUvFUj-QQvP>a)14W8g}t}`|33HsePg0r)HE%* zNfB}qb-Nh?cK_9L+gcCUNZL9Rjm1% zy|$*__wN_24GA`&fi8m%AJw3R2RZ{BCNuf$H@yDs<<2+TUU9l6F!8uaD?0386rHTn zvu5thtB+>rvwb*u;CS^u8HL%qnV*Pvhs?OI-D?%o#qQj*YhA4pe_CXPxmbCM(hZx5 z`AZ`g>^b8rQRp_KgWpG7EkIA~>%7>diL-n+1cqs|SAKosx#ySQ;q&Jf&FG4r`qeCx zA;3JjpRq)=zh;q6?8Bq$10D!z7MvDj_~H09-=yHiTlcr}jt5Mg7>-FwO4J^b*q!k8 z<@ElZ_?oXSb^1&TZkVYQYA)dBytG&ORmIi4ihS=D>^IX(eH_}#!(-S}D8%sNXFcz} zUt9;89y9zhNw^;ob}+-Dify0UoSAVJ#f+Ed+x<_U&RC?fKx)C}8jbV?+tL*oBIbOt z(AlNVcqIUbIdJE|qwD3@zn)7f z@8&$LeqhUQ{>y8Ri&?J`Z_vIiQMmT>kB|q=cKx;A^LFm2Uhh8taovt$M+cuvZyN3w z8O}R*bpJn(Z0nu*rG9d3l9$Dp9(YFu-`wtMX>mm9&fkLv3ye4p*XJA5OpBx4K5Bmpgu)O2r! zE*V4CEM5kAaS8o-N8T5mls{uD{?~PX;+v{T_GZaTIrTf!qkO*jOQihzxcS&J?XR(4 z6I(YL-o5&q>0QVthGMOrds||k|9|f)VEz68i{Zf=Kej!6uvIVm_TTF%#fO`}xVba> z{N1m7zU!xW(3PnVX0@^Xi#^m-`qPhR@wr{M4!acm_EuYBt+8wWpY&5Jx4%8lVE^m! z!q?^>B%+r%KeiRSAKX`;wMCDqAviCW^}AD}8EeGn4BvLE)pJ`@x9^lqe`4J%#hvn- z%ONOs`$-Q*v1O)G*8dFt%G*Wi-20ocv*Lg9op;9<&AMB5X@m5+vp@3f;&krSeM|j# z@i~jLkA=k|K?j+`*Xy3F+;dX-Is->z^H1NHy$qALCi02fNAn6!yLL2o^16r4cjAWBPQbM(@Q8ul{|pWnrB2-2HP~ zvPb`|w{i;(zlPJH$?`JOgS#_otklogN3niM?M<{fb(m%1 ztLyiFe*61qwY_>zF6UMiM-rwM9-dy(E z_wD_2|GhaD{ARc||G#}sWJa-ByNtB%?hk^M-%tK3{*rcm*~M?=6CyfW24<*YU;s~J7nBQ2LQxkNdk5S>l1-jQ6X zmUm^;x{tGb(l;s?oQ7<@O`hV{C{}=QBn}7YEmooi| zacb{!>s#k)m!I2g?XGj)LHPc@XIv8hXQVGYYdNF#>c)xLY_nMJu53?ww)}wR<*ghH z&+_?MlNKIu)I9L$dOyRDo!4?FCN^yD-YCFuqiMS9`UR(WKj&xtpC2cA`Tt}27~Q%r z$GtBzRs3l1TC0B``Q1iY6T^S}@>Bfo-*@{v&2`)3IV+E^=Ba;uzdDbJ*}tchh8Fw1dmRt&+A9)ewwRY*}8MGKmsQN_d<(liB1fLn&+eH*=4uSbD7eg zYRT+-ZQ5!UF)kTP)(hJ<+G(lDCO@A3t2H)d)xKP&2KVc1AB_J?>0iD7SmVHCHu2Z} ze+&dTdN@O#?%7!xcgKUZ!LH`;UpXPR8?Ez8HEZu~v2d(daOm;DNs$MP8;>lB>#M*g-8`1g9#-RrLP ziZ||=%dXnCzmLPX#r6K3(4S2Icvgfd^zDod^O!dwIlOegzmN#y0lSs4pR`17n6gH! z$%72|C>J=V0~yX>AV)eQ>{${C(LFj;yn!-HoVj!&DorHqHc zg6;C#)=%eWe)rqqHF>rSKQ~jFSmVj*Mv-$fuDCKk;F6Nqyzqcc(X_lZ#$tSyc8rhj z|IDv5opV%A#3GvO#*c@O45Z~PxE?ee*1maOh#}@>Wm#yw3DXt+w?+=Vx*I>A7iW5K zVCSFyy6VI0_Dj^={yJTHhK%x#iDrzM``0Ej*e_3JFk6;me<$j04)f_tOsGgS-RWJzNAmYq!5NPY#^9dtUNCx$ff^elW^Qi5mAZJ$Koy#4zI; zo7XC*#>Yz=o+St~9Y{IkW32w!N9K#t9ef|7W%?CvvU#&H(-QuR&eB$&LJ^_Z1GylJA(nvilVYkx8 zw8oG}#`Qq_#^g&mDtA64JvEbZbvY=!VCgGnMF#73|0E5IYhIQMo0oRJaL#>Y%5y@E z`P}3OtPM%xTyr#7*S$zz8NXoF{Hl*kYZr>Yt+Jmjz;G-!@9Tc`z4q$$WgdbYE4FL- zRIo@~bf1;)q5V;|Ybq8=O_Jf$mN711 zJYM#H>96|b2d8o~^#A>{pCjw}|I4fmci1-+{oC&tz_#a2W{d1I)mOT=4kvC1Sm&fL zTdJ&u?QhQ2kbP5=P0#7osC}Q!dE!jqdAE7CmpJC|-_ujS@N0tSxruSE3%`B%yCpm6#ppP3Cw_H!SE z*&fvYe%1R)Yx&G4#g9b3FAZq;_q4XxZmE6QyQ_vZcRuVB zR>cMVm54p*%{0wUAhtkzj+T3G`h!hk>-83ZTAoKV6V&Iu5SCKkvG=}}Jd;@|m)+~* zbCtjJrx#ZnoKc?sN6}{QwF=J3=Re9^R|}Z$d-2aEhw$Ie*EI@9yT}Fo*wEtF2;Y^Eo^ln% z^C@Va#`Re*e(Qa^cRX=w?e;VE^|v<){JkMl;!?U{y_I~_^~Jxx^l=GPMAW|3=nrP8 z=KP|;)DWCAll8e%qp3)O!}s+JOFn=3Tl`f@qg0@H$NeMco35*uB}WDJn({KpYKwk8 zznnpNkKf*VtaFZ6i!&{-Jy6TU=Kk-%BAv3&`|mK`{xCB$F|paETlAB6It(8w8EVh|lv=A@=VUKeZ+rDsz+v6P-4hPnJhiO+ zQOj<>$e329bg#xM@;)4^{;BB2@u<%2Zn(hm!7ee1@z}j$!Ix8i?G5?8RqK&(BZtMy zjT~<-Tr+$tTdMZD*uksz>KnKHy?aD5)r4!SL@eHZ`u($Bv0i=I|Kt%_p>*Yv}ZxLyJ*xPabW_=3-2eZJuZ!^1oF86u)vb);h|K8riSvuJ(wyLuJ z(w-ymY3rWy_5&J!)W6OSv@CI7cdUcYN`m$G$s4={{QIi2=T~c-Hj9k86y<5`2p()p zcV<)*v)%SXlv(=BvbD9_HB_3D3{L7t^?%IM+L(0jty_KVyYuJHmHAY>-o(43#*pFJ z|AThYE0{8PIh@Ze3CUz=Xx9C3&2f%ETEW!*Q>|VbRz8_*o~LUQSv_g(Klj-)d}97a zoNQd~v~?@PA3X-$JFBK1{Hhp*hOyzNyFx>~*}1C` z%WrKnI^EmLdHa6fGxJ-{XSg>jsR>nP&k@aHn)YHBo5|gm61`_zXJ5R}`RYpfm8}a4 z6l~hW@|M3X)(~Rv68~DV;0^zzTtNnzmN%-Gof_{3HdwYb+RX5|W4OWp?9_uBgAO0( z-MmJ6%TKNY%`FT!#OxA98FcpXd?;A%`dv1!{pdT3irEJovk%-ToE_Cx`m)FIx|mI6 zAm6n))8=2hu&p5=smrXjFIKqwYG=aj^dmcXCYbIt+OXrs>j}PzS2pYS81LcfV71uC zoTxhCsFsL@G}i_D2h1C9?mf=hT++PU?8w^nf*OL2cV{b^|NZF4)NosXVZk)z`aYor zk{@1Oy~M)!^{-Y>AlnhEhvoY|Z}{;l+>)(fW;h4KzKK&0$A8zJlkjQv=l_}C=W{a% z@;EeW`fL&{J@H}--}ZS15;bi1mi&u<`>$AK!Q`L*1&eeRi2D1B9e?C&8})lOw<6=> z7oVk9fB1Ruo#dk(`;7IA4*!0$=VuT_JtNjKC;^tSEm{Y|w?j7+yCJ!`a_8q@sy+!da426uIGzjVATdii>h5`)E~W09a`OJ0m@ zd3}s6x!Mm_9+=YCcxm2|6>QGjoB1B|UGBM`vUtmZic5>6XSXu@*t79A3fS#9zh}Q8 zXTt0><|u|JlWpy`OTB(eEdVT zr@h+p%io{UwXgV}{SS=t^siavGM7{B^o-iC!PZ<09y4&Tyx5+>F7Y|PfJf=T?Buqe zZ(g>an?L{mb-@PJ>Hm-ZtY=}~Ji}zwk%rBtJ_j#HYLxw}{XSoxAw%Hy5=Mu8W)H4z zxi2-|Yg63h+b=(?`6l*x z&Z$kj7rPh|q+d;6x|137SSExyXE0`zzW3SL9O3RgTc>lu@fY$F7tZ(DB=RD?J5ej) z&w3M~*#{J-27aH?&EVzJlrquofMrg?m7fv!o;XU$NhY)j9H>2&zwiKSU<2RceF@X* z5^8@QYM;4;v%&h8a5+PP?jpV1J91sCl+MR*dVA~WMx(#Zo>7n1EqG?zNHw~n<-3&0khXy+TPoK_KIYR?#eA{$qHN9*@9nh$z>0V-k)j^c{k+el0Vyy z)(2OeN^oiqQQMM{9C-eg(ThxNeSx^-2(O##_E-kFT>9{!o%PHSlY(zE-cJoqJM8!| z;?d1_d+%s^PCX~fP$+Srvr28&`+sQO#%Rf2V$QF>ZNzKVn&DrN8gB+vUrc_G~C=zV&kA#V0pzJ=i#5 zIR``EQZ+8QRwm=X1+yNQtT&Fh?Ns|+ z<$vy`|BL_BVBw?b>b&?PX@&X*}@?9P5<1*m26rSSvVNu?(r8V&Ix*R zKj6R@)&|w|e~JIz{@KsMSjhN5CPH)eO`Z)t%nm~0c7Kn*vu9RxYBc;g=ZAs2b=Ssy zzPA<6lv$ts_1(0^H+S#cIv&2*rw96t?a9?jWjaktE2%~pn*?NSxbw!b~JTG>{-;9zEc_vaZ}n?Gfo z?F?hiPCfVHahqmBaBo5MlCO-Zh0M2XmOS@-|5n9i>yEC&x3254gw&~Va8_yL-~YJr z1|QQ)=O)Pyx#C7oT~)N%JvXJy+wn(?D@KDgD1O23Cr%8t%nmFI4|gsMPuMzH-|k8a z;}^$$0!})ATN)I8Z4Iil=l;?4bMJdwy?uY4-ql;5q?2_;jn#S6K|lLf|Gv-p|NZzq zPHQjb#J_*`zyIf4Bg-04C@>|@WQsM(pTzZ(F ztEnV7@952GFZnkdPb>d6KiT=yiI17vuO>TQ|9xg-Lh+u8H)U;B_lm^NaIv17$F$Ai z?2JQex#x(9>9G_XyOVcP?C>7$$IUy!lunh)Gw;&n2$^t!sbOcIKGO`b1{R@h+5EDb zSc7)I*;aR{|DybC)9sbpk{&HTwDGrxjIhxH)&;IoJ0$F$96h}DU!u{CXQJ;TW0|FX zaz-Y9bF@Fd@(*~_;l6bJ#pWG9`nmtbiTQu2y|g4RX;Y@Wz~kT2g^-Fzm!-IM!vq5PGu zhfWua7VLZUIr#`X`{RJ7a|hJywmteR@UHZoJF^C}_3VB5n$mZ`%f(k{IEb%mWk~v> zd!(vdw7r_)O*iAK=JOeh8Z%11CHHB)Iw;c?EW&nVLWa$%!`aX8gWKhIe&jD@oWQog zZRhMSvs_r%E+6|@pUHIOXFa#~&vnf6xEVX#h5q;*F(?b}_YJN-^54!{W zJ^O#U|IrbiWaJ(Z;9eoNwP@St6--q!m46D{E2}2Gxhg%Uk8}QBvASbtn%V-78#l?Z zybAcq=k(4)S(Nd>#4sPn)d2}wtT_tT&g89H_3B}G6t~pm7n}cvYzVbti`p&WZT)}8 z=jB}{*Cy&FNqGwYX}ixCuhBiRGnt`kn$Dk}ItvY-YH9bFS(HBDzN@=8=T4bl{G7dp zFTJj4wisG)DbITl6n@HU=BtB#%L;WI>JBWavz@qR>a@Bw5x}7C&bY{Y>As_@zkB;9ADrjI`7Jp|X5r?~H-6R|{`ttt z5d8nT$^pw|5(3v2K0Uhr*u>Jn=bXYDf83E5|6j;_>pYr@a{==33tc**D)9-9Gn8!(;VC$%@2( zy@toG8P|1g z7RWao+YorH+feJ|k`p`uNx$MBeXD0-Eccz6B@D0Drb(9CEStN=Df8DE&efbhKi!L% zBnDc*Rp2Lbfu-!|xy^c0c3-{q{@d4X7KVKVJ&cuEg{wVdvQ1{6N&M%&?sC;r-x?a)>n9b;xJK?0hMSRl?WA0*}eC{VVw1@^Quk zg-dFRO@|A19Q(0+$27M><=naJkMk-X@erEwqLt~nKjZ6)SL#ztzN+W!V@aqr|Fz-f zN&TaX_diuT#`B|ITJFo|zwe7X4}3fJnMvyq$2_q!0$vB692aNsVRjH^Fe_*3vHUNe zn*IFpiL%@T<+S(Rp6aFtHoeYgYH+vzFYnF}#mT&O+V&HZT3f8&Og(Y@wP5av*W2}i zd*1q<;rwnPWBxfT{Cej>j(nkO57zuO`K)v(ZSwL$8S~|x5_$pOf13R1yC@gEE?MXB z#)ntrw3j~+&&~I`HEG#wCRgSKv-OT{4|tHGnQ)rv?}A_F-~C@}$9y)Bp^wETbMDjC zmp>luUfSyaq*IfxLeN4kC%r3qX3OeLYPk%0kNcAu=5{>RytVk(c|Sjc`v)%^ezIF) z!PHq^!a30|4(2%cn=tA`{R&-hu{HeDicf{*Ptz0k@n@#bYJ8}`6ZI3c2k3-`K&^k= zhn_uE@l6lgZ!Wuk)n|Jf(|do}+EZdH1@jszW}a4Y;f?9_ed$)KUxokd zul!$ba8&l`nvjXxbfsLAHW)KDs0j!EpU&$n?XTTGhbvUzDU-jpd|uMrd5J#x=V}A_ z*0-eX_+2_p=#$`tN#==V%U*n$GfR(M%)lb3UE%N3j-7pT(kdmps;jv!lo?)>`;+_m z{f!^96{kr!HY&gCYE0V5&C11kEU4k27$d{(|LgC)s#Ml(nEmw8M?dBd5eb6voZ4*> z;*V{O7rstxm{&Yuo^aR#yQ6$I8lSnj#r2qVQ zwmj|)xXXQL#)0T-8*^l)$TPM?TG$&)ekuxmuNJU>{sH|1(JvP5pWgoZ=+$O6&5-|= z|NDQ{$1qq3>wRtvjI{VaKa=5xb)B=X!EZH|29L<4JgtQ;9~b!^{quN5pxXNHWfezO zd+~AxRVwB9d|b99^YHtogEqfZS|!Ysm26I3^4tHud~vMnf!gPFkw0DMx=X*%{=4kM zzLKN$7OWAc;JMHxE$cy&&CHyO3_EI@f2S7KpLNwylb=3%H`k=lUS}&qQKRQpr`K$W zHEgd1)x4_{+*DdV%r&o!l079>?o=DF{Kw9@dcs#u>;FBz|K4=xkNP4SA{<;7ZoaUO z_~p62Or*gs?Xghpgt}=?$!j+4c=q1l%>4N*9mx#we;(O*>&Dv{x4E=EP&J^uqi5fwEbd<5 ze=$2$yY%jwv{N1NVxI2>*MC|oQ#wQS&Ckrn*PUB$?iTku#Qyg1a`v_IajWNgO??-! zkL^KiR`E}-o=Q!Dx7)b0@}pmM#r#nVPM8;&S@cacaiPP)1AZC{wlbxkU!OmH8Eb>u zfwS5nQKpRkXC^q_oDpC4PyY4okGUJpiOC8dpqfHIkd4eNvTFWyJ|I{2*pbnssx-}F7XJ_hR?Cw_e|*m-70>jnkRpB2}W z3pnOnT=4CEvWlgO^FARaog*LidwiY0p5exH1_7>&GxLs5h@bY{%t10DaD9h9L(4Dw zy5LU>F1_*ecxY!jdEuL{yQ3J^|4x%-5xzZjnd~*ubkpf)?Xn-Ld@0hIuX?|->VbsA zrA4>r9Q8|(~G8CJZV2JuFodScNTA{#!nZIBl`_nW6i|ekr#t?Tg($otcoF zr@bs-LBInR%@6-x>aRH-HCbjplgrop^5R@RvkFXCZ@$p-(tRrbZMmO@55N2VdM)^d zZ)<0QU&Gy-J)gG5+MeR#-O$goKd@DEBB%`7r8z;OIYB6A&6Vz2QHE%3HN9&kx9=A_ z^l)EY%pk4y<+HnSEw93P?K=j|-sfs;v+bAHvN$~dKfRDKL1o6lZAGe4zU=B6cfOrZ z|6j50sASlg{{}1CoX-8>_bwCJxT;La$Y-wqo_DiFH*$*QR=to)Q0_BnX{j&zcH!I6 zvj3K1?FtWO{w@jm`rGW{{O@z~Pp+TMba5Yt>}9>(3q|j56w#1kNY)H{B+fO5iS?4o z`CS+Gu`TFT$mwG}^6ub_q#IB89(VuRAM#_KN#k)9yX!7_l^>KJPmkUC`@(*opf^tf z&%N@jkdxXzsUDOA&WJS3Uvxg%u#ZXZw%+9_VxiZ*3$m3-b|vMu@}T4Hf2qzVn?9Z7 z^}C>G8T{g6gh}Vl-otCWd6cIc8SLI(qWp1D2l zcb2E0*(Px#Vog+l)M^Rsq;M0x3e{z`}g~4{id&Z^Vw9+ok?5$@aBwq zM}x2RW&bNpcFbaP@L@PCVCFV$MVOnGMs-``jm$N%#zv;f@}+Oy8l5-4mHBSE_^$K& zyOMiv%_@Dm_0@&zZE=zMo{o+E`|a*2Gh8raxXHn|?y5~>KTF=~56?c{H2qV#VGoan z^zBHuwq3F5^W2}k$&OAwRe3^5l<|P#%J@%uA~zISCFZ=jsB-$;e%o!`rh38BXSOgj z7=E{Ah~Yla&ybQHaJ(`1*f}u?i~c-@rGH*7yb~UkE*`A0L7&T}{@2~UH3?I;Op1FI zEZpsX^!uNP^YdT*?N9l?Z=U^y&+S$JgKy5)=nK2I&sFR9mb1G)HX8QN{;obdN2e(! zC+yda=kxz>HVl|&|J_tJMK0r)SQqo;@9xbvS$ACdKmGfz7f=7XcRyV&uRm>mjhnC2 zx4C}=xN?$N?CziBW!&Ux$}v0Xfb>}wJuQ(wefgH>uXi8az5k=UZ{so(g+;&l#qw3= z{M_@#e)(?ce?1wWL~q7Vy8m2coy{9J_Q-1EO9c^og8%=Xw=UzyG`$B`mA{{E`sX3- z+nbyJ!{>~~)#6Q64KGfc^Z$MNbN&Cj+q>g``QO*Qw<`1Ao+R5xzT4SnRK8zxf6eJH zJcs{%;NLF6-#<}qZQ8W$lWkUfIv(6R{oC)}_^BdY;Vu5pCd@sg(-*hJXPd+3Nw*iB z`ujHDcFER+UsgR#Np^?+ng8#7uWKfEp7n;{3?&AOCNB*Q5w15~OlBKqG8~v0_WKJT z^DU3b#`~v=HT>WY?mX{)XJUc$#m33=Bm$%#ve$jAX1Jt#KZ&94%fsiZ8~1Z>{l@Am zxIA{-y6^t>Ut>39F?AoAd6(~V`T9FHI(HJ8mG1b?-h8A~;`toqb@NSqg;TTa&u$Uh z-1J)W`On^(XN}wByf*7;tO#4FpQI%gFCfgQ{4ss2=g-ia_S*mTPyJi-h$VR<$7Z{3 zN#~b3D;{jvae2`Zi9h_C1lejG%2v8=lv z71!7EY++&V6M9?8-cqfbt8&q?_F?MEZ~s2U>Hcm0rTaF1*Yiaak6hby zdBL`z*}Fdl%=3PjQsE(>aQnCRj+kkU5C7}`{}r9QXUCKu#`Yig{5UzkHmc@jc7ON$ zKQosfJwE?>tZTlC#Eo*%*f7&M?wK>Qs@v{!WUY~Y()r(fU*Yq&+It_L{Hr(X#AJa3 z*ByS$-d?xmXlm!vtv{yCsP8#^?074~9^>~1{v_Xvn}19qhJ_(4_UZC~2Rxbwek^G} z*y(9{ya@@Y2zhM5)Gglu?_TN(d#MA2Wmdn3(t9Mw7G{}A|ipaG;KYfdd)bY+LzB>YG z1wSK~aMyRwd8Do0di|yHn=QFo9_P7z%z8}t&wQJ#!5Vzl>0YMZaXH^7p8wt$C8;Me z@LYK0SEmzpK)U{syOgE>6&Go{z%Sgltd}*oEx4ke`T63%jg`kQu-Ei#x<2>60mJK! zo68Hf**w|rFH;tG;-aKMy~Cs(K9}!(l;&NjvLk|PO{NZuY18G?rmr7}oY1RZbMbV8 zt1fIUK*a3{2h6M_oOR>`Ut8S&`K>v2Rj>T#3HJNc4!xiL?`wTeY0xqb2ESFixHh#i zJ=QoNP_{IB^_%ExnTL8A3qBR3f-9@_7k_u$QFWo)HrvAer zV_LSYgl_P)*DoG?ta18S!H`_!*_rD4>jSrB+Lqb03 z=Xn`4O79oh7k;N~a^#kicOCQt{AV*=JeT>MW8aO+`hfRSX4f4|C=)oWr}S(>@=-^w zeRjbU4?j`5(Q5KKGt{YC(;%hS;q#*ZmW$V)?YZ*I;6!74O=7NK(ll~puf275lwUEs+`PW-*hN8{O zy3QWeWU#(;qu^BENx{Aq51##Kl)LPD`HApFt1q^39(}xv7`whqoc8^E-M6fdkL7o( zIkcD;$JQ$Uy`;9b>iE2fck#Dt>nx9)*qrM=N9Ot+{YUNhMXLEEfTQ)t3i}lQRK|? z?mMQLNJqyiV zWY!*4XIL+{v}BFxR8GdA8wMWINjDj)m*{j0Dqdv#E;V_w#I91werH|FGa6qfY_YU? z@I3R=2D|cjsdnZ=ec~@a?^wtxklI!A*&?pbs#cz__8;SB{hIoJ*P5rq8vM#&Fi35i zYyAK6>D{rFE3~B;di)K3TYl#MBEtS$QsS2Tmi@*Wewv5Yh%8vUT3+WWd)$#fuPx4W z=Uir5@$2})Us*lsiRYs}TxMMM=yLnpivn3^#AgeO`%SyN@__JRlkD(g7r1M4ZcA)7 zNdFScA&|JTHYnui&-(iJ2m4n4*dyG;u$(!2QLyPxu4f^q13u`9Xoy5OGpdDIXD`=h zJfd)XhxxS|zBdg1URqIeD6My^_Ps|Q$FDeKpP3=wJ-77BHw!aq(?t*e?>zt0V6Wc! zvKjlWw^c^GJNNO>U6Zq0Dy<&5{@L((%RBKYr<||t_PoxTU%M){-AUpF|K;=N_OmeP z-`FE8)<37(e9^|tDwef^3@d`o<_T~$#2h&s>$C8{&cKFmXAjSnkYRkVj?aYQ&pE#R z>W>3z9|Zhd_2YPwgqHE)cl+=A9$Drh7BHukiCNQN$=!-MR}Q2ct&P~XJKp$@4F7|| z-pF!c^LM-k+n3e8xzn3=V5L-iLa{DOs z?6>9L#pIj4=8w&vC>J&sCi{7e7x{%%A6m3d-?VFi-L(t%9v85!mCWoASTI|`DS~a+ zv!9QTtU6%!)_uyN*7J{~KOc zA3cSC+CCXZ3yGKB$6A@H7c{Wxh%l{pRwfHRO44C9v@NKWFP*BH74n!pY2v(>$oMEw->(i z|8;eP-i<|PZ_d!@HvU=nGX4^Sfi6RB@tt>U7AcLH!ZrtQ*u3OrY`FK<$>EN~BavW@ z0#1<*JICAWw=#Tbt=juo{Ncs@-<^fuH%{EX|E>D-$ES}z6PkEmLO)a0=+LdXrgyjt zYF>!-_|0J2m-jL3sQ&wJZFA)&v!3WRIB@M$+HQvii~ZkaWfdpAJtn*7_b-h<{+IQb z8ZNKd-c-8qfC866jA6va&-|bJ&k8rsGoC)%G16vj^bVE@bL&mG=E?unx$^AF<>WtK z>_vUfq)F6&*e#OtJ?-4nXxohj3rilqE1cGSzW!g;$HVenCxiFc#9D{SJu75oYSQ#a>JbU1^br&J2)=b-+lR==|cRs%qjC_FEgt9Jdxk_ zJMPx{vx-tqzRH1@x9yFW67;J4?$sEvI3hY(cFCQ)xxW}r_Qs$6<9;V%_Q$x{Pannq z6W<@bf8K)bsXpMPI?p{CkIdfDHCgSp^xYlR+MT=4>6o%_N^CVRtzVn$!|mYIu!A`v z+&d^SYl{X_9>hd)QI ze>r`5e@rH4ucQ%^-xWXE6+vI!nHA3cZ)bQA;MyJ6e)jtLxj)U1wR2xs_1)&)!UEl& zVq9+~Gi|B-)tt?sGi?|1gQtPYlev%1;k^IcLiER$R)*h8PELHP`ssF_wiAQx+nrBO zY|wonqsV$}i)6R=?9G~c(|$y*dvKj+{ogb3sr=R_Cgj((+}FIdCaDWNx)98Dqq$jwKesum5?+7U_t*SnhCFJp>b>6L?-{-fCgZ1L$B@WepC!RlV795_d ze=DK*bMw~;vaB8-_kGUo<6Ao`;`W-hIn(?F8Rmr5iso>$9t&(}?73aGbQAyM`o+9H z!MkVQ_?-CV4L3su!;z>i)3Y&ZynBiptxGLpg?XJCY8G`HZF|hNxWD&fLHYIf5BF!e z%jEbR@PAPC=hZO*C&uoIBKr%S>Jqgx{_S99Xgr`e^Zx?FvK_*o_orMpmY5q`640o> zEa1Tj%?(w83QY|2_MCsSSfKL%k=lc`Mr|R1jmH1WWC9PrFshwl8!^#!NSbT3Bf=U<9-=dprLLAh?l zm2jLPoU6vi_h|B?0f2M9=gu~H6-RRnS6E&KhnIf!9hosbp=cEr(3H%Yd4F#BWWn0M&+_k>mVMj%cWe3o*QGu!^NnLQq+{350M#JI%N+iSHi!#@ zreU`*&Ej5`$kK4r_-efgLy2O7!Q#U~<;RmYm@41iAMily`NO+&Um5HZUDtl{-bs~1 zH4nMhu?865_eqrd8;=Uy$j{i~~5 zT&>`OcMKkx?aSiXZP{KNxXSjrl#@?_ZC!AS`t3z`mT|f>)_qz0oXuFSu*mw(lk?ki z4nL4j%&U&Ld_KASr=ZY3M&mbsgqt3gTa{hlm_0Sq;O~v9xJMies$DyFe9vq;Inh_0 zPq*R7hbzY!nr?Dd&$pPihl`cZmGPGK-zNX$BE|%n-h=h=wThn(vGu=LzH@(*-iad_ zC-*#b7oIs;h*9Z7(~H0^t6rws*L@A!g#2z#O5b#+Oh5kc1-WSd16Jv~IT+6EEc3p} z#p=SyW;S_SF^|Km|K?>p3wAEHo)VxFoAAfC;6N2yza>wzJ`?9W6M^%LWpxr-8$R4# z-Y8eAcIcK#_Al#(JNy;%ma*OA>$lk1E8ToydDM=b*Ju895)WGzzAEp{y3hYj-+qg( zu#$aia8oo{P>SJ3aoM@Q)7Cu+(=eFHRKodsTIKzYIzeIa3#&UOZ*HcT5<<Gscc<$oKVy$#Sf0Bgwe0uj+y9fl z&tEzDgR|5NX&%;cMwZ2k@A_TlQuuS_^@9mtbSvkpu&ydp|K*SWiD%`w5e&$FTsXi+{T+3^c}cZtuzAGrf1YtJ(9JqS64V>bzsKzoh$wa&sfBG zA^h~w{Q(bpGz4CinQ#9!;ik6lzDq0-hZI)zBu{rK<7p^Sk(ph=>nmB&YiP#5=^K-Ji@k1_a(MC#IZKzmF3Klw;T#_|w6N{a_-azoCFt6hQ*^w}NoFfiG; zT7rjddT*9o@2a1wryU~`R4sNwaT9g=(cYWO`rhWxDnR^hE4Kgh+0z04m+x7V2JuNTm%+Y+5%HbvoyiQ>J?<~>V=(?C zYWKxTuV(o@wx`N#_z(MjnI*j6+6Mz3*LX?4(^uByloI} zbk;`6_u1BKmR=28#4c@Qak4HIm{Irp&HOu4*%%T($}q)S%{Mk($QrQv-{Bk;#fH1A z1ss38=Cv|aFKgg0-8(bO3*WVBk-Z<^T+xi)T7q1!q ztGr`2$HV@bT=enSkGJcVE3+hIrChhSV_c!kpvK~%ea(xZU_~33^295Dd^rSo+&Gvy zjNiGJ8MZP__i8jLSiQf>|89DHuidQgXSv@^U#T@?{-?!tleY@!Z}psB)W4`_@dv+k7xAb$$3F|8M&KX{~+5OsjKm)%~oNe;ohtN>ll2f7^A&xyx!|?4 zS$oddSI<*qL-eT%`>&5JzMN*aJ@`kstWxcnNtSBg<(q~KEK}Phy!6*|`RzM$vF#Uk zkh#jEy3gC+t<9XdzV4IhEv~6kJf- ze4YK6)+0ult2h6fc*vh_I-t%e*s`0`B?R9@Hts_ z=1uG+USh3G?p}=lr!4=K^Cf-r_g0U(6K&H z8rPZ zJ9~=zn)!#+qV1z1+uuq|UCeU+MT8G%(oi)(!FOL7`+?O*ABFKZF$5pAF8Rr8&U?&L zBC)%b`LW1k*E!*9Ohh8Q`wU`JPyU^icjfXd?VHzLcg%U-Z8c}%`}3Rmk1cFvxLdJO zagkome8wkC2ND#5m~B_ASS7~tL6jlfxb5Y1v4)j0!hM{#@9VvsZgzED_`Tb8(_JQ? z*2?Z#_$6HKYy9O$2lwhvW-0bQ_rEhCPRquU&K3#eI$l1%S(z*@p?V(a`7F+I^^*3DIwmYHx=S04? zw-suM)3`e`4UYYH+x>5rR=fa{z_DTt=h#mNVpP}`2N{=zCMTP{InB_1=wrmEwXF=5 zw-@oY-3-0W|Kq5g3hRr*_xc|*`MbUU`{n+N#RmTh*%|(t{#rjrJZ;hX#KV7XJAZw% z+DotJ-t(|K8TPSHyEbf4?laZ3`RV`mOx)$_9reGrzf* z=f>^V@7qMB)c^SRTzbdN2eW@ZdB4-Td()5X{|6WI-ul^OduaC`C7#`~_olnQyI*1) zeMOC*`#!r_nc0kWC6$wGY|?`|CbvJ$Jhsc6ldJaefmI>bpT2WnW>4!p<+wZ9#NhU=#I>9SCzJp0b2}`Y@5TBTRJ$6AbhMT(iTr+# zuiNBCY+`KP>`PA`wwFAg?0fm_myp>uYrfs>%@(%Zes(MG{=f4Mub13FQBV3Gm#DE^ zc;2y-{eb1>WVbyJ%6dd@Y;jY%Q)Ru)cI$`h_wU*tjnaIy^Zmcz2a6at1id}FIN-q! z%@6ng^4lA89dzbN;n|?GY~$fA_YeOMDC@heSCDb|{QcSQdOVy|_-Avk_l;t3ew~)J zXW>hYe1r7d-j1Ca8|C~i&Zytb&hVY};sTM;Dx0FA$5!Rrr6j{_E4D&HFBV__F3`|21141@r5ZUcah&z54p;quI9W z<38%u|BTiCGyh+Aehyd0;aksY*CozoWqVo?Ryi-l-uBg=&1MC1XQxF!-!%W-I&uB^ zHCuN4dMGZozV5@*qp#opKlA9U{NI~LU)%qD^yt^$bg}UBvu@nl9_a4u-GFSx`z zdTM<4+2^-^AN`yDFXiLE<^L`|x;wo-|KmUP{kwPk|HCiFzux|8taZ(#F4k9-GgjT1 z>bzumM&?opZny8N_vl*uv8k$6yLxZ6yiBQ8z4hDsU1~}W)d${cNq+1UFAJCX!}RXT zhkYgOpYn}&I%kw>#3GMa>p8v1wyq-b&dL9OtHl{+C@63; z@B3I^yCHwhf8+fI^A#GF9lEe@ZD->Iu^00lJj=4y%sV|l^Xk?U%jUWxYn zZ|@IpWoV4ay1e#!?!|SNwf{f8eD=|+e_tQDRm6P0vp+V*c3+fE{{7YeS{x27^eeH` zTb#YmD&*pw^?CB41*=-Bwx4_{@UdAd^v{PGr~Q7OXU*f1IpsF{xI=r*#JBtY%|3qm z@8P|jZnFU`QfFE@6!w- zbM>DbW`2C&@;%!l`k<*vX4zZ(Obim;H!^wDnCs;p#V`B#G35s1pXIbuC z7JDzO=)aX)p{y`#NVSu?FoTH+!?(tjEna0m=gVYA5rsnZE z236>;eAv6eRpY_rD%+j$-qH=R^^b}!a`?v|{gzTb=bpi(v>oMleD?`>#;p!>@jLl= zY6oMX>BUw4^VV^h`a4eC`@}f%l1qf$%BGb4Hm}d<)JX_4l{kI)ApG-gNYm6`CxjpL zmEY7ZJbpppfyP-cS+@wWfXdcnpE&D|*FE*Z8@@kY7QbifVY7>Q!4(H=)vEa%58wE7 zMwKPwy1%^K+lsf}_m%AYKgFc-S7Dx&pufTYO}XDEeCOcqh-~LxKlgS?M*2J7(^@P4 zU2kHj6$@~Byi_pv`3ad^wl%^6>vl`V`!8v2nNeoH_OI=pKXS^f5$!*I*1!Akq1xty z^nI~qQ~Qoh=6+@|Pxx)2)RAESqr2{yGHh{s&e3q~^R{#LUz^&-c~%^8btq6(bU3nbljrew|8LIlk}z20 z^0Q`gRMk6EiJ)|)ixFr32{AUCwCgP7 z+iNPW2d~Yw_DI?!?s{xr5^oWMuyy8_!v=2rADI3>nZNt?$4}o2%5NU95EXu!_xSen z`+em;?_*1^x5it?{hPOY_oZF(qH|1_{Of3TKC%72LEpy%e-8gRoy%|W#NWQTrEi)}`PC+uU8cu4Md87s z6#-nu^OoyT8+Oi;GjgB3 z&tZ~$;KY^EYk9Sw*^4v0VLtm}@t3oI_!=^*e;;`G~j zy}151$1)!&z7P5K`!?7ubb8NlRauPTz@5#9*E2fraz3riE5##MR9x4wwNICeb9%u6 zE$h`!WG`gtDV$#Rb1Qffu-?G?|j#czbAxm=p_WiAMoAhqNa0mn$|&6#)jM& zuY_fFMW5$+v>X3CWL5rLV(sVik4txYMxUwR$`NAXX}u9%{`O1k$6bGJz5MijxFUPST?28-sAFsW5pxDE4vcS#N zKj;5D?ys}I{@?l%UlbCwBSyOqoKSS7{smN=}>5DbitgN~Pn~ z{&%XA1oHp8GrVZOsQz;Cmg&3B`sm#8ROjYp$l1;8;O+J+2sHg0n6On)ax;Gb>rCm{ z*LAX<-O>9k>{mO7i6P4^d1+|OrkhXe1sC&Q&Yylpv+1^!k3_(i84DUt1^n7yq4es% zq3RRv_L_MeAKavk&#ix0yg*#gYVPmtj~R~LmE)Kio8~ROL@D7wrOEvG%)`CD+n4IC zD7pRj?Abf=#ry8WZC|&SY1XkXj|G0Nsmr`=k?}q8lTD%fy+mgD$(JNwuI=aW{rc*8 zw5DR#(ec=>rgYv3*S8GCA5 zq!ph6yVoV}pddZGR}=nNn)7 z*ieN{NxH|Ot?_{U|MpuOkJMG!YfNHa=x6Xh#n1M6>D{Z_4xN9y;Cct&BrnhVylWY< zImA?GNYTL|1&nC~|U|iJCHF55 znH{7nqh`k}KhL1IW#jhkS(ar?qJPwa73AX!qy3L>JAQ9fnONQQb^rJ`_6IXeFlAn? zvv%*a^HTdJi!q$3v)j3=je)6Q#Rr}PoR*7y%zTf;2%2&4ujpIq^T;YUXzdRFP=@FW z&$`7N6zX+2`j0SAn#{5+x_GDIzp|C<)izlBrUb2zf3@@2wLqmA|Fth4n;Out)Bf6{ z36A~&i-i~-@b27DnKZ{sF!2{>hQa?|zg+iB?o+#{@W0niapl)@ldswOuiyITqp#tj zcUN7am;Fzw;NSk+q~5&MJlT5Bw)-=_m+s(c49+a&>8$CnSjlU;>6rdi_J6atFdVz) zsk~lLedU5+tunA36HV^6y{$B_jB z%-qdE>;9cz;5^60W9PZMPkQP%uldTxcs4cSul3zMwt4Fw%d9g$8FgZIHfuxp6Z?fP z&ALPHu?0B%EnoTX_aaXL#s=GcdXf_=+B7cuC;offSyyRUyV=)6m|;WY@>LI+94^1e zb=P{|%A~Au!FpcSk2IG4z&RBQRr4MwC%D8tmzWxQu24$r%qoAL{$oCD+_JKl`m-4e z)E#_QnN0{-SS7%A;TwFJV~ZW1rTdB6NxV!DSbIp}RAcX5PlY8r{+wqqiPFd~ z^*`8n`trGXYAlP{5A!DH_uDyFesw(iVeh zwwCScy1nxzueH&Y@V7noCYf3LVN-76w1B+0#>FSUMouafX6X1?e?@l2`nop{+y8xS z+;vm4cA@T`%|$X&=kNV#O>SK#!(X2DeNpM{E$U0YS%18J#!>p%wfCztt}1Y5hdIk` zYt?>LB;2vDVrTukcTL+h_snhkak%Hzl^K6;d`++7DK`*s+_RzG@t&R-Ylb}!)7N*8 zf-br5uh8M;Te;OwbVg45`?{d-#{UhMJrUi%bKk7DT9@+tuIuU6?#p1^vU1b<^03}D z&M$Va`1f0oLHtGU`qM8XlzSd8?01_#hwrUS(5Bb&@r(`}4Y#MPJ-4u6DUZ7|qaK4x z@||mzuRir0-^j=P-Ojyfv7!&V(s6Bu6BD+c+U#}ZL0%L?X1V3;#fg8u=097a6`tCW z)UapgVSOfzfMZ`<9S(3+ub6+}>?d=U)|y2%H`)*7_SI<4f0lbf?#%zK=Pn=qa=&Jk zyY*}H`LANNzL^WLDTwTFvQS`T_`HvkA?Y4}l&bZK^xw4l6}!67 zmYq_iLKWh7k7lg;zv93BzN-?TGy%^Gu|?w>?8zKTOl_ znSy!K9Pvyg+tqdV>o>*J{PFiWnR`4_=$>=&%wX;XtNV6;c+oBX)l2lt(ZULmO?MN+ zin%IQE55Et3hk0*YKZV%E~tflV?tydR399RaGFt-(bc*QQ?-B2|We|2~9s3J^qNP)G;I-YVdP&@|n?au))!( z!XdeN!UBO~p;P}(|7p7YVeP$+t^RXrzh}O;``cChy|d2si1gXMt&48{_Izw!_qgnn zd|f2-JEp7K=3nBINX`gfde=od+Tl=~YlG0+!phmNFP}co`AzUo=R8 zeEZMz>mWD7j0vBG%!=0=&Y8YbKP7DHr%;BF=#4X+O^+4a+U+;bYu)TMA?-$iEB{3t zd1)B`@*6{p(Z|c(Di(*^j_m8XtJg3oF!ixOV7%~LrrOBD^r!Q4|0VrP{FA?L%DT|6 z>GM7L6&cRd+cG_vTJ`MNmCU8ie*;r3wyrwoYQ22J?yADIg1271`)#>NaeZ#9U6X)= zJEP7Ti-z@cc4%JiJGl5_tc&HgTC+ntVwmlJ+?FrO-*+)Q z_$)8KfMLPWWv1*27fnBMZ|+IvVpLkW{KZAKMeA;V6D&Eb|Hl71ql(;&)>D6~RVU8W zsypan^5A5td6yUWGr76O$6oN5*<>wHRPAYWUblQn!k_TKi)K#hem&Mp%h{)vzTWsY zB$YjBf3Dx<%*#BVP3qJ$Lc)Ii?76daA1Bk5OhE=86$TCda)t}#pZ3qwK9#TF zoz}ZoTF?K7Dz6gyKEHJL!=22PX;0;)lEs}Cd~=bRCHlK@)xw$Sk0x`m@I^B?*k;~& z6Sr#9=1cG2mde>I(|`Es=l<@K=l?Ojt+q=reQ$cfm+2Sd2Z8IyyZjUXeGPiKox$JoRoAT_mjC{iRHXfR?Y6(s(;Z%1zQ1G6pKJ5^nAjI=&s}V~ zJ@Rm^=iDs^%?;NFy}uA^8q?xBf9>&H5w?OaNu8ff?k@kIAXgC(&9*_s=!17(Tly2)youpSauVGT#nYtPEZ#=)MA1>ty%lpNu-(<7NlGk|l%NY{qciCNJi&J9E z-S&0%$Ni#{_1Wed|9iis`p~YjiaoWuyT6okFhBYKv%g8PCQ0sC$Gt;0XNg}_i@7dv z{4VQ-_1`ORMu_B{;NKpwbnX`}!FkfJ8JzZhisG?7^Mf^E;pt5EuA*=9Y;#{4r<$Dz zXgTWhyY1rL(s|yu{Qusa^09y0CH=A;llA{B`zFA)rdv2d+-h~gon?`qmTj+4Gz@ls z$o95QvcTK4g`w1af9lcr=>PH&JdZdSm>OgIu3!9rp^~vZ_Ly;4_?>_2yZ2ad9mr$Q zzctrTF7k`6;sJvN%d_tOkbInx_kaGQx*tpoS%Ht$r?NXAw&*)Ik%52pj>kIe?F(}( zWIBr^v*MCN8O+7`_7)ZKTZQ~v@bpf*wyhl(!{`0$f_Q}GJJORr+pr({KDTe~$MsJQ zc?|yBtXa@~^Kp;;^S_Z_pJ&djU%%n|{g1poy&L;)guS__R`XGz^Su>wvA5{%Qa)v8 zpA82!B>wlk6kq)R+3W6;(N}-YUccmY-%Tb4PL?F|1KD>O4Z3ErAJ=;FyHNh-YUe#a zPZ;&So2H#=`!P38p8`)G-M>n?JSQmM6qU zc5~pT6Z!i+PrS^yvg}NK^a0nmDt{JLi&S^t$ccR{pQzj$xxK?$TK|yVrG?V(>#Z_o z`#qWbW9@IHs^_ns`pvbG7+B zzn2KiFc&Mcm37`Ku+3)f`H2l|4@)&%8H`}4Eyu4pXB;i zc6NRY(bvwIoudBhm|CIyQ9-o}%|G{Ft^Akp=l+Vg#2@!-N-ZlF@0N?(f2fCH!5bz8 zndkp^vN!CI;jfq!Bqz4&!~5`r9or}V&SR8#cTs@jJ!44Kj>p^Dx^~5=o?4YC-WvVH z{OsYj)|o;RI43+xTsmPp_v*Ges(Rm6?w|8*k%l@mFaMeSU)~*>n6+L0VSrXY+ooih zdB+p}aIsxe_uk8|NpT-yVV%=`-1yAxT!Wrs5pAz_KA8-3h zzjj*g|EGWcx9T%5;eR|oYd(hpgGPTDqXI*R*6s9VMsFuO9f)VRApR&L`fYJgtIS4& zdq&N9hHq6vZp#+D{w-Q9d@xrbiU0NHw}oc!*4%&m z&2zwN&_N5R6U&x*3Qy!jn)@wwA|cR4;~ z-#&(zSKJH+|K~D1FxWJ0r$rG<5|7LB4Y8lI`xvIU?`AZ){w=k> zbf4{xU1jqo=;jE@O$mQ7AvS*9l|}J7D*L+BV_o|7zg*U`Tm374>#qD||BGM7Pf0)Z zWBTcTJAU5xvCj;VIz8$2ECXD{5%6!z@%Ee{ouEl$Vxo33}-zVxTd zXP=w%J+cc+xPD$al)2=|r~Q5m0_N??92|-V9>wHbpKf&Mfwx4?L;dCpZ-V!68La)# zWWU4bZi=PHR_$l|<0}lDz8;sm^Q-Qt+-@eB(;t;&^gfFuE}K4Y?ftNm_ctjsIj7E; zKL2tt`(-5tjrspqyEFU|<^OZ-c#TYtQvBlp>ol#6%nzg-4=D1iJkFE$?5`kGPyM^6 zf36(Q+j0GQ;1c6<3pqvx(HBu`^K(pil|Fv@d-HyL{{Q8V`aPyzx}saZ>BvTgJG;*x z-|*=C&;PHh*c(_FI9NHXV`6r8Ih_7eU6ifJAbeNT!6Np+(-RwoSp@c;iI~%!`64k` zFeGG=?#G7@*k5PqaDQlWX8RlckLixV|4TPZv%gE}aW$7loc%7zS1+~hqJDCa)LBio zM=S5Hu-7U%QvYP*y5VhE4fj`A3<&QJ%5O2_H zlv0(y$Z~5@TePoofmY|Q?SIa6UT)Et*%Ieme2k~}oIjh;;d__zIQn*SE4ft?MO44l0Hf2m$__{XX+5D^Zyk2#uB<_W5 zx#RrSX#K=zS-D$|PQH!VSx%!hy(|qRK zXWZo(^QUK>|L?EQkkaKn|6cndA+F`8W7eFxc5Byt_j%u@FVklXDLwM)zvZ@ze;3wE zX`bIU^PwZ(^>-5$AGOp;dGrK#Jr-oR@@blQoUF^mEa?@uELP++p1SkL^gXlmS79r* z_1_M>iGRt*pzC-){`JJTG6n<9lufs^mM*D?dwIRI!yM$?18{ z_1~hgBVA4R?eS*f&u1n>NHOBKkMNPR^ z%VzNB$sVl+7Fl1{rA7*^k%tlt|6TTH2s`;CBQtOQg@p$H|4zEp=k!&*_o4W^qjtNs z6&{_tym+pdtRpg>bIuhGk+K=f5^z`Ua0UT%Hq)9>HpWf z-Lo=Hz`}~rVRm(R-5&eser1E>CVgu@ZR!)>*4?~UyV)o0%;{JAXV!Bv)~GWyHCo5% zek_{kS1_Z-_`eXtox?xOt2h`u91c$K{v679Ug*b`rX33JTTGvOKjS!lKKW|;znc>a zjJyI`xK8Bomwyq~%9~QEvsZS;X_xY8MX&GwarVpu&DhY|FQdL><=|eYs_ejZha<^xT{Ol z@C*lIMaBjj4#o?IZ4aIH%qqVz{Y%(S+mK`R8t*UK{*E=e)7gCgirk@w(%W2L#lCK} z$(x;a^7e;y4GTK&=`-goU;JXZPx|Sn^{&q)_-iZ9cdfF`{SeMH!~g$JZw7<^aT!sX zQEXPpEZ5$e^~|aJ;(Vv{@qFnk$5j~?q?yh*rq?jz&Yyet&3FHupU}SM&#LF{{bx-# z&vR*!-Zg!;>DJ3aUs|{Q{rzYEdxivYhTj)OS0p6~Z9BCv`CsW|Q>KRM61((Pg$9m~ z8J85K#M6G6cGg^I7I5gA%P@m$a{lDI?Dfw$IM@!$H7{12kl`W`A;IK-fH_{lUXDF7 zNG$aDO|AEGfiF)p*tlx{%8{2ith%?B=^@HeQ!7abdZhOv;Dfc8IgPUw?m;9#0@@7?P2LF|{SZd~87&_|}{(dYWRstv2AeU1KpP(;;uQ##A7 zLfuV5@eCTg+EL**B~3-_9?jic7sJGm)m3$Mhm=#px=)MtS+^fH)HxGX>we_)&1=UF zt+JYIFVC3p`+u(<WK~tdQ?ho&n zeC5tQoD>{3nPJ8hORfXoZ*M$*c(Yi8h5I^$}OhVadBSqdVLq4R6Ck&3d&pm@A~;ah0o@H{3fmPEa>J`07%!W>XXY)FGv7}#ZvUoO|0VLy4C%=mq;pHT?Z2>Q`6wP}N^$#Y zbj;k9kvz2}}A)PKUf9}=)FZy&f{7U6Q@rN6e-KLhj zsu1oJ)BnG%Q0lp|X;6ki{o04`ylv;d{2B8tpTm-c@k=t>!B~w~uZ}+X^sssrORxGY zhdc2v5+4q)jxkq&2)di*L==L`TsM1etx;~eQkdICzZ~6Zz zE%mFW#s3cd=)UQ^o%rPWzh0&bx3DMgUz%b5W!kZr_bt^F6nVzHUqp;yNI@6W&QJYMlcef*x> z_CLz}rZU5YWJiWM+RPD*J#YV~eW^XU;M~fWzh@@>^nR7GreStwLq+NImm62@)J>7E zmY>{x%3-2rp27d}S^|K9u%^x4FV&13tjI!W*UD#2U-n7+Anrhamp zw%G3bMK3Nd_ujuPxjeRv!R31XT|@nV{HxcF2d#dzSL2S-{!F`*pC>i>GM{#-P|M4| z@;zSjS-R2w`1#_Wt{!m`{?XpOsXNPSw-1|WL3fvl*RM4hb}u%kiGP=xpcnT_u(|l- z#5?KkA=L@3%Vt`^DY=*Vq3)$9wv~lYhas|L=aR|70#+>zowb`K`YG z%Wktpzw_%n?>r-l@P4k5Z1kVK zI6m=O&7K{h8eS{C>zah8O&bD{j_^4m;HTr2-RGZ%cK8-BO%L*s(|Z`Eg4 zW&hEyDw&cUao>6W1Rj4H;5FoZ=&nN!R^}p{Oei9Y* zdbjzZW__kBR!NHIRP81tSxax_x%DIP)6VC!9vr=HB)@j%ny-K7&x(C<_r7Ps;;Kj2 z{;yZP@ie$TzeJ?L`2WE__NH_BDPTm5!?;P?H}8*jsJ zEnLN`+h;ni=hkvg?>n*5UXqc8^R&b+b@ffkO!aU2_s@};EReu4?f>_y(g=|k>aWji&tl&vbU9APN9n0XZ}9e6refcv_7Bh6`#T;&(J?+;A&Cjax zFK4eSh@NnOvG|$OaJ)o-uG|vd_LvVYx&LdW{5-_ zeYc?jc>!a zoAT`im^C%u%Qi9WEY>;D#8h>0ao4@r&TM0?t1V}aRqFo?{`$^U(L}3h@zImNWi6G; zjxllWVKJ_`)bIcQ;1BU<`*)Pf<`iD*yHq|~c>ZD*72~-aZv+}soo^cbmreVsGs#K8 zYFoe;od)YqPVe@d%RZh~*c@8@g#LQ!sm9%SE{Cc+up~p=Jdr?^DVDk{lD;BAr4Se^PB?NhJraQ_~E{eiN_{K97!|1}h2c+qzPhx`zx!<8$}m?yOPHc@Ne(gx&`df91l+ay1}|Y znPJVpVjc%~h8;2&PFXW-`J{jBuK${Urwa#SYYiy}2B0TqB?E23=m78PFbZ^zL8P)H+FIaBVmOZ=s ziq>b<<4hr^crt9yL~f?N<0Uk26Gh%g;$SnHauk6+9@2;9wSDD)9Lc#?FobIfAF{6PyZkJ@p)r6uinI1rp^8BUGIK4+~qvL$M|9ad;7^3M($g0|BwDW z=K=eBo;Pu!+Zh@}OF0=;YSOR%f9rnB@1Ja}+V|L8-Rb|H-4>s`{r)8D-ONwUA1-8k z&-dYIW7q2Fm6h)sOJl z$@8DgOPZT9Q>f7;;Xj80i^aFQ3_FDrww7(_t@?M^{!AuJw4uN^g=e|hT`ike_geoNi*Mu#y3>#(t zhyR;A&AEI*-Lv#G{r|TeCoNXJ`1RzufM4sZ3zl5^@$iWmqpWc1(@XnL{W*Lf`^e1g7X1zf_UvtCU|D;{-kRY|>nXj@%%_(dCQV!z;CQ3% zvQKn|U}B$dc%;n&CfPGPT{pQFd2@1a<_lgg%dm_8ftUE%joc5s`t>)~LJ$P+*gYloIxvmkHjyLhGdvT)R(ZqrSX)P=}Ha_a#aG;5mll6+}4aN_CPTksb zo9|DLN2PhR!NwPuD4!bEwUahLFzIQ+R+EYoJD(_9E zkN-aiJi54(O~UZ+h0lx6GiOctnA))Dsm(Ec!PkdR)kpr-SB(1Qo+-9WuTx>8z=2kc zt*5SOv%SfV6*^J&Tifv7^j}sEHlGUi3gvX)yy0|mQVKL!Jvd}G3n=t6^<3d_Q+r&=e){jM zRD=7O{Y(b+pJiM=+n)(Dlw4UAA;?s5n}Kh}%;VO6hSN_xovxX+lgFk*XxEa9J8k-| zO|tO#eB-n6=g49&tFox#NtPDrx6XxKFzzbG^$U z9y4*qSKbV}*dIJ}<1c3@I1xSZ%$m))^OG42-W9a-NaZT^clgOF&FSYT_`N?PVueDV z@r?f`zMF`t33a4jd;TJKRSv&Y+JRKJcE;zg84PY4+%>p$zC>@e@#*-qcm<7Tm&IAU z(wEL_f3LGEOKbWnsUXv<#}Ahoinqxxi!W=}l$!A<>BPmHm1Va&T7_5fuj()P`o`Dw zUX|pG!nlpK-#m1-FwLAv*MXy!{immbdF3^+|c^) zjUkh@=aa%s%U?7JBuGaeEpH5!W4*z8>h;ote-^#5sHqWQNObV|s+XD|XJRa_r1>@X z*_^r?_w*APtpjSm#dCX@otD3QoGB|Jg{3dpW6Dd#ybCr3qBFjH-MIPg^82@r`@N2M zad1+OuOiEhHiZOfljAH81DA_^JlH2OSIqxR$|0HOCN*16`R|J|dUk35OFf3WHp^uh zcvNK=cbI(ES8T8h-C24^v1Ph;d-)wD294ufS6m*%_^zJD<97My!AP|w>~EXzZ(P01 zW6iD27Z0ueDb*5r^ZCc6^^^9;WX-lMlF(!N@;R(v&*hH{Z;Xmf4)~kKXKz1nHQM%# z)P!^I7;hK8wtx6NYV{4H`0VheK&j;uiZV_S>9K*|$s2n(RsVR7X?9!6qY2vf)kZC z+x9FKcyJ>tXX~H5#c}l?<1-GKy0ZpL9_PE5_$U3%tR*fM{#~z*bYupcnR@2T>7--# z&e%Qsq2zE;){U{N!J+VJ!|cu(0Vh+^-|!S0?Pq?jQNH@U!cCtfJ|^o(d7ievclue+ ztYo&FJ-6(5?>}$#vh+Nqvv-&u=rd%PGt5~z^M*){Lyn=t3X8yyM{97~q% zX0Tv75Xj)R&dl$uZd2!t^Y^OcS4SQ#GGx{D**CL#MyBEO>q$p;{`~)H>YcL<;=8y1 z*XHRd=U{SjU@$TB)-Px3u*x%@s$2bF>BWnm#NHI~Z2r0-`0R|+ZoKbJK76Zxr#j)l zK_|{WnKyxfa<>ec|86O`%=0kks^p=EoVzk2x$2khx^%R2&AW<%KFVYO zL7S;W?d@p(%WD=s5c?^9`24p2?7I5ZzxPY#m)0A;xcBe9XbrE9X_S7o_u907k~0>B z%d0MFS)B6Xs*lpfr!mhq2`6LbREe>UZJsohwBi*PreBt-UjG zn!tmgx>V8qZS5bg6)*JH+EtbCE&0Q;xLN7}Z>5-Dm`uHXu+Q2{u;ZOi(z;Lc*zLSm z+HKS^vRF{@fFdpB_q`4oVX^Y$O?b19^hQVqV#PdbekNc$LwdZjK{e9}PK~KG`+6 zn(m6WpAj4Hu%^;5SYP6w_p=kP4xI6{xj#X=_$kNfn)8dixY} zm#4?SO%b_kaeBFcAq(U2plN&f6Y6|(7wd&vvN15<$@}YWkg)rin$D%qGd$PrGFhF# z+NAzLjWO(-sr-|j*AEHZ{`cPC^k2W^=J(7SViRrB41}lew0maC^>gjNpm`PBW(5ez zvo^kc!>~a0@+Yws2~YY<-5vIKT&xrqseE<3$J(Rp=C)~D5;sKtOrO19 z;@9l+M`P->jtQ#8r`@?BdSKfBzLo0xRxMe5U`6|d`4Q{fziRE8ux-C5UuEj6Ac$Q--EetZu74gyOq2b$C1&3Y8GoAR%wX0>`$Laoyh9TEm~OK5tEvzO8rZ+?i5b=?|YGF@1}(}e>@0eP|JL} z#;!Ya*78cG!nY`Wee_$ft3CFX^`?XjYf1f>?w(@fQqsZw@b2shY zvUrxa|Ir}%%-W-Z4AWZVD;|813ETPMg<)9fwV=?0O_|R3Gas}sx}I^NsIH4)!EW{k zg3F_lWWMMhRcz*&bs}s_*7;Mr^lvu*yq;ynzxwYRmJeS0%h;xT{-)|z^J)F+{j6Ut z#Kg8P>(WvC6xS+lE)-Yb_+a1F3lF5$u4vfTDx<}CDRt`quJw#Bm<~LDKlL=j{QV(& zU!CUt!TU6qd#C3laJKdld~kPz$4UDc|D(hHebuX4JN5s1yWKNtetwL2|I<~{W50s} z3uB_ct>BDqhq)6B*K4>lny?3!zYY68bMl81XXBYR#LsNE@bjKw=umcyktgo2_~ZC} z3=39frLPlb)H-vex1wl$;cm;!{<`eDS8Sfita@zo5L=L9g4g6hyAd8{oiNxzw>shtr=d4 z)&JQwwf@lujemBcTOVsJuv#V15X;lP!0U8j^4-`nk3R9Wx0bzUzEH>@QNNF`L3V#| z`0-6urLVqDcxqkDa!sa<^Ih(~q<{HG|Lp&{YR#W|#b^J!`%h<7J?l89`%g`r;hbui zZJ#U01b4=1SD%#qeL3@Bz_v4Q&IB@eGTd6saK>5hiP*#2ncF1mdD#p;ePC8((WsJC zzM*)<=-&*^*A`db>?ktcE5>xkEF`whyhr|G6JOP;yGjKC!4E=N8F#m4+_{n^Z*p;6 zaMI-V-;cheTO<}%#AW91^fmr3dWw;a~;TRZFB zyN24Q>$WYJv`6Py1^>*4N0U0OcQYROQT=rO^mjgN-zRMJF%tA(Ip%)geZa)8zrALa z_|KTB;calL_`1!*YcE@(KRLX=xY)utZ^`aQ!j-P`pM5{{Gv)UG>+x|uakWa%{vW?& zfA_kFRb8m8uxks$aRm+!#RHGSw)R#@?_qa{y?mLg#5V3Je{t%cZUcoDhD)pWm-8fq zeXIO&vEV`bd_Rtc$Z4B|6-th+DN}EFWawrYC&+Om;)x;KFaH4l)N7sc=Y=;-44mI_ zpzIw(MbfgQrT-(|v(E^xvHHBl-F)Gbi$7fjtW6SEP4tU#78f^uepN$j@u#~}KW=AG zIOBDyiLEFw{NLk%xum^uK7kGd>coH~24Dw`0~5 zt2Z01T|DB?uXvky_s(x!w`xm_lwVpF*9~&{rT;)|IV++liT_Kh|US#9`oJxN0lW*=Lw~yoboSk2Jd=a&*grh zOsUQKaewl|$i>1rGrN{dYkmDYUuykQW47LD_jb;97iGATW-hgigUN|Qz^Ui@Z(L(G(-tO1mH?Dn}%HJ|`O>DPJW&aDUOQv7*_qob>u}*YB z3`c~-|CfCXXWdN%47Yzf#Pa)Z>Nk(T_HLs9&x*_{DfTCICj%MS1T8o9GZ^>SZ!_W( zHQvJU`#@#$s+?I-$pu{R1HVjazv{78xXiRmGE0)_wlIT^_s=_j77MSw(|ghE_Rr3l zCv0*gWd8^>%+tOZmoCmYry@;w!r|bMC6T2bopn1I0-pb0e@d3YRpNk#N!BC(lRv5o zPi~XTPg)>h@TY1AKf_${+qyig4p%*9WilPdyQDoB4d}o1EF{rhj8a8Gcwa*iH4C z|Ni^$e-T%2zTUldb9hTm`hvti32P4aWZmg<{`r+?^%=8%EbjUAEjCN}9mH7Yuzgcac`z!YU(Ly_HSLD9A^+2w{{_FDl z(t5tK?7JR1$j+YY88`9zp1DWa`)zw1eV!J6eiD^-jKS7$ZrTowt^=VQ3o2LjGbwOh zaClTAvT%k#+_Wi@`8qE`r2b8*;LI#)DX?n&k+I)!+FGZAxf{A)xK@g{zWn`hDa#eL z!rxo^F51mvSYWa>xg}wHWmtGf|K<{W|w$Onc34>lNw-iM*cC74~YS?!~$@$-M7g zKilUkZmfU%^y==DTc0VMk9#$_;r;82fBD{TiM_$Zz$m7j{dMk!yh)OFf*ve<42*fF zp2vQ9b@}v3?OL<`tHoukGdjPWs!v^X^?CT)*Qquy_i9#M+v%zvvq$W&&_w2MjX&P* zV6{CjJmZBo!`t0F9pYO!CTIypG#!X=YVe)$Pc_my^8JfX*H*Xg>zz2i(w*_e`?xhL z?%0sXVVC~B`Al0B78IP3OEB}y_AhMMZU1a1S5~2yBhV}Z; zYl}mV^*3Jqu*yeD`Kon=!T*c)KZCX#UcDq(mKXTE>J5)n(F5JoQ``IX-sn87P;PZCVVum$#1#$nK?(CIJbNwbE$lUtH zh<|$fGi^JrhWTeS#8^e6mmT`y-0aVOtY@E${ek@&vzJ|)6p`KEQ2Zry#;?#r4t6vD zSt{fotSn(<$W^=bLhMtukjg=J&3JRp3C(wBT`H~Xo!$E=U@!NBe_qYZcUH#S4RrP2 zWi6SvSX;2)C+Q1o!!3VJMTf+HH(OlfwoUr+VyUFki#f`oS3fg+UjO#d_wy!|S9TV@ z;b7Xq&+sfi(eOJ<?e)>PlzcTY*!%CZ$j zZL#xOQXd|wpS9U)k4*NTgjLCWM`F^}{ALK7d4H{#+f2W$!7Og#3}>Fq`!#3VRmt_m zTS@{-+M4{YFN`kVQ}vB+^A6?*e%6cz!sldO?%{|%!^`75H|XVoAHOxHGemJbkp8l5 zVmt4qy?G*Ck&@}_|8!UGt6t~cvryi!ZTc;xb6vX@_HC4s zO8321`t;<(YMx*Iekra@c}EXDe-%~1q2hhwX@~5y|37~l@Z8z7wwtjua7HV`FPZ-M zReK^B!%h`+u^ehj4zA>Ra3f3S^KMS2JHPz*_i}$Ovt`kfEu7AFW62eD5%!u>1-ru* zequWCw1AhB@!Qca@3X}Z6ispCaQwaY?;W?lC7<0Y*H(!*1dClZbk?sbl}g&4Cz03? z%%Nbh?BtG5dTe2by31qyZtpcTQ?^fA zvzPDGq4u=SBY&N?|Np#FcH6;1{R6%4SSuD*Jqu2Jf3KtP!Yal2T)V?%j~|WZzh@VI zVZr--m%cp;>2y#ksNg8*IbQrIHt)B+jYOZd`yQR*j=Nd1@47$cbC>ElF-)In=@I;6 zYadgFL-M~TKW1It+TAwqQRRWvP7J^J+}SzSdiozvC{JS*Fns3ha{E{nHo8{)ZuX|F82g)G`U^&Cq9zcyIB@FzBW(?_>U+B!Sw0`{#-7|Lfov^>e>SaK%E= zM6Iq3ca}-b=i1WDd4gHis_KnM*`5OThs&Q&|M&I!Wcz>WB?`88y7PbXR;`WBUT0FE z<;49`D5m0R{F(o2PwWf6C;8<2>Nc+J%VjjRpBxi^%^}gk7=C^FKbZ$>%NX~pi2naR z^n4-9f#=U!64{eY_xyQaaBAyhwL@vZ?H7}m~~vO(D>Xx!5=T8!zcUOJ5~jM zE|PG5`>#<_ll={og!kUpYq{>n$k(O5eLR;_>*5?+&WTHtUp(FUMT6lxV@K2S8(jHO zjsaDMNdX#VI$E}TPiI}+?)yz;MBc60vj-?3M7 z*L%hU@dMkg-1B0}gr;B5V#CL`qec{_$cXaM1{JW~H7vWmJ zaQ36Gcb|5~71{k>@AxUM`RUd_`tiyl0XuGRGWb;Kgsu%q{IqgLnEB?smj_cmwf}ol zEqqe6>wk`4n&kJJS_ZyNv&B9}e*J!Gf7p7#n2wpLU;oc7(<|saV|R50^EU}r!MI=R zofxhz)brGcXAii$E&5+&=c?jue>eO7yXn0`rY*_oa(K>n|EU~vw3)u#uByOJ zj=NbG%RFTyb_wu+%pcPKz4_h$aFO73!-H;rD*~69y_?$4 z)WP=IGK`|W#~BkJ@Q*DuqK%6?h@HE`=eh3AiEFg4g-{c?t-b(+L^pSmjF zkTd_6?yw8{r?1MeV^8g}_E?63bv7mIzFOb#nPlsI((!D}gzE~2R@sBsO0Y@ryUQh1 zx%3@ewW(5JNzc@o-yWQFVrgEvq4nqYZ&ijj!{fUPuap&*u`9@YXvp5c^)JLVgp~4^=0qP6l4OuOeB}M9KXi)?NMOeT%Wah%N^^kPTslY!@Hf^)?b%pc*FGI(1{RR z7A=(wk9#ZUd$Xt>x{$j-yyisJTC;)^S@QxE-ZNS}i8{TfxADNL+KQenzf5e*zROmB z3qAB@(VV%WX^(~9GQGGL#~AgzplrgNl16_=4ukDY8JjQGajI0`?nyio+3H?+Jz(cT z`R;!+=T{h=d=s_NWXDwQe^2_aPW+*HDp@}9L(08Z5k{Za@7&4CzC+VjBD?-u#6lZ> zrJ}>R##7ZZ|6Xq~$XRzS_G|v8O_hrTFFW)G^(?3m`n7|JAsR)+Iing05mS=66a_B+a?c484>tv4o^1455Uso){dy@rG9t$d1)YiN> z@F3cZS=V-BkUSHk$~vA8VWN-u4sk7g>%2i|-kwQpTLc+ibSg7^f5UQN^Z8&&`Muv) zZ!K7zJ%9hdl~w`(p7om`g4^r>iSi`c~kAVC6`1;ERQPZ1V zw?Bv9Nl7<5b+eBB!ksNTJg1zQRgzWstr@QE;!kk2{=8%NfqK#Ph8b%n@y(DiUB4+v zaXS00E{254P3baCeO`}O_fOmqo!d8qeTwyZR)(mz*Dt+WIvWmm7R zTK#|ag*aPr(wC!s5&F94p;A|^&kG8jQ?@kKBIY= zC3x-AWS0j~y-mVG;Gb5Z-#EWM;@pKOA7{~0}-(siVi(cp!_ zKZCQa2agqcO|F=r>(ub*-PQ$O_YW~VTixYS^J0T^LyE1sDdV5+u6^R)_SyAU+H*X+ zzvG4aRb`fAq6{5>c+MD4bI*K#_u=-M_t(G8Yd>rB;k|kHw2eZbS#%E;p+;f12Sszwbt8C@nu>5_O($;SOYSEy6u(YY# zZh}m{=WCvOJRCios*RbMcj|xMue-Z8>ClcP0uL%yTNmxqR&-dhJy_Ol*S7fO-qm?V z43GExSj~|7=hN~1iAA0HesM0R_ph|<^f>-Kxbkj%&E8|jZguMLtmvHGVihJMslb0n z@xZzUvwGjK+#0X?YOgzWb~)ug7hh;rytL6V!GzJl*|@h8GzF}}1g74|H1hBNZBY6C z@b8mfzdn89cARnFza*o|zgb3=%g=AS_j1Rzz26QM1#b)AIm6)GO#O4k^&tx^KmL9g z#&fNITA9Ftc^4APex+4^Fh0Gk=UmK$x>YU-E-V=v^Y&d>bGH0vV8bTvhL0zm{G?6R ztvon=y;SI;Pwz8MznoX#!CmlV!~R3cLK_SiWOsiKI3xG}i*rZmR8}ExrKww{u|!?H z{WHe2KzJSNib6Z_WG;qtOP6h)19mfLm1C#!hll0wR2eD+KG)kKALC@U%f9I|~ zdE7qF?zzL?hV}{}Zl)#EXP#Yed?=+-LU~WTgWn-b-Eh$f#HUR_&7R8OzBz z7jMj+dD5Pz=gUe41wDV^Xoc@(qD3NY$>mF}Pfq#w?f$PF+Sl*@n0^1hRw6a;#6%+#MKZ@^P)x&+} z(i#H?Q!S=cS7V6i2rVO3QI}S{|b+ulgl`rpYEyIrWi=qzR z4*0RNc0$jhDc=@EwSN>}t6=V-E!*qB#jr^c5sL>r6$H-we>$~{(SxI4@!oak?_W-t zru)DAQu9ms9o!8D91J&fKm59S^vP9q@yYsj`{vaAe3|me?K{TAr?b&kmnCr)tHx#%9;C9a8L4YN2zuJ*`jdjpNFwRI_I6 zSbX7+(CMcGa&)4%VXA$5Is-G#@|uUgF}X4{Ihx34^Qg^vT& zO4=sCF{fMLz|{q5x3*nL`17&ZHNHy3!FR3&2aD5;2kREgzh1WZpVRZiH_7S_OFUV= z&tECfU|6W*Y87UxJaNAJm#N!#*8M%ewWH`p-5ulY%NZV=k#-QX7xZ8`C*EkoR(+hUo69Mnr?*uwEM6qRoY9&wu2|)P z>2VH|lVLY3#4Z>umd%uuQ@vibtWuHbit3I-<`I6EnKvK3^KeD}`V6OS983!W=P4<0 zeCOD2!2EJ&Ig69Rhw}gD($8@}|8_j2dN2EeaDnZg3l1x7{T9e@Oy|+T9j71Y3IBDo za@%9F=46gxV;QePR6xSN-R%=L2{0cw6j52aDop3=bzBR z#BgEJ#Ao3365x2Uh+~;`a$)#^U&Yt=?VWbz+^>f`YpGt@_pJv66J@KW<657*#G~N`* zOLadG!eMY%&>_V&C*(@t<0;3Oogb|K`!(NBfa%Yl^M4c6(r0t9wB0(*b1^nLqwnG} z!&C1zYJXbDCe^g|hG4+0zXt*tY+i`JvoQG9TBiEG#Nczu>fcM+y{Dhsa$jJX%*MtG zmqVtvyQduaasIo`!l(OnPAG5Ewvt#ZdU#&Y1`&oiLAhy>U=M;4qOse8xhl8T$oqc? zoB32QjDLGh{QW7RhHCq#hri*{h!?H+=vWgbpxCfaq(Pv;pZl6DrGj5bs zMVq%w?AmbDZ0qga?vESam(QK~>)Q79YV&Jq(%BAtRp$72b-#`{1Di;~jYOTzKjm57 z_D=~}ZeXodo$d2pZ4l&8beMfQl!fV{-mQum&v$-5{Pu|7?_ldUQ{LoG<~b%` z@3ySfol&Hzo3U2DLAqR3_RG@ti|&jj%Pe%ii=Vl?QU906^!0(f6T4YmX7ADC*t+q$ z<@etr3^{jljFP}>SdaHR$T3^|vpOTB<96V(&)+S=uj+d8v`!t7?rvcS=U`kCpS7&T zp+S~G-)@G_z28yaS@uk0aBye*lj-=LMPTyD>#R4TPAf~L890fbJSW%L9)ETBW0qMH zX8S#sGr3t=Fm2T}?=^jgt`svyJrL>HW4MkXQBSyrh4FIe**m-iyL4CR3;bx`Z(wV5 zVH>Z&2iB@f|Nq(lTRVCGC-ML14>laKSh_4aM0U$FS=NM*&tY|?Jg1x`|AsbLa0PHi z7KoWFEsr=c-%UNgoT<@&VW)WE1w^QBSXV+ZGLt(`&>#I0~e#9si zZv4#J6h2=g`1z_8+y#^QgzNR!{0ysVU%02KkVAIGfpa{)kDul-7+8jxZsAS{jQn>g z{>Q-{^D}l@x7=SCH-1YE{LRyL&F$}wz3z1;5<6v$^*SH+ZegcG0+;yuG;ClkvdLs}MgJGjPN5F@+lk<`! z5t`Y#X7f=ic|GAL+MLWYreq!SF={D}(3$0SyYFII<{Pd9_cYp%-#d2njC{%J-&f9f z-AnoO=4qv0y#23hSD#$=f5&xM=?2$l`=cjwx*fRh@Z_@EZg4BNowZTX<$r`j=l#4& zKSu_Ox$Azdu76sv?cevnWy`Oty(wg`|6cd^f}Se3MiT>jQqRJ_UhDrRREapejmZ<- z{+fU4yyFsOj1LxWT-Cz;Z2yZTe?2rUJgsZa8~26p`0rxD+OtJ=&WX<FEqr zEysmLza@QMbA5Go;``UV=}+b>n1x6ATnen2_uD`PS(S4j#47gM~ip>uwZr{B84U@%_BFlUpt*x_fub4kG_D9wUXLrU&aXkV|U;3G1 zHeB(S7pQ!3Q9Nf_^cyCJ4ucYThxVDuBGPUlU)J^&6u$d&=+?Kr1=UNg+t?PxUu4{~ zjQLB>64$!Tisuh6OVkeqmqXA-_VRXy$sztFxd)5_j=d6p*w!Sle(r&?!~*_FrPJQ! zzB*%O`&h^7%=0_$#)kLJ73Mx>t4rDU=rwcHvYpQ=zdd*!)6XFBs7u}A(3>Mi>kK|@ z=6}ApJG#3vB>0N4kG=NP7av>V*DUgTD`@@I*^xoT z@ge57_Ujugoqs{RfM1H&w`a>oiTeU93KGr_I^_N;9kR?YfABDB%5P4$pEKi3#qX=` zH}!K*_Wa9t6uW3rMU>Za&0+drG%75BC}W zJG>XtpD^$4@c*$#!63l%uYjP2?w)67a_g-2v0i>}&1h4nW5K0xGG$9?Qh0dl zSNuObi7cQtP%( z=j1J!Gkm6k)2<)q9k^@aX(?l>-16%>vx$U1v$E$<74ve>`v zGqZm49F>{zfREL>)LcS-iljoAWva$AC58@JhScQ_obC4hD^}QF-}p)|%;vD&Rm9=A71JFps{q{=vI>x1OE8?lmix;T8YVzvfnjd$kvQnY>QkVa=+H+Z(wR z!v4P$uYJ0qsK;WVJy*DFlhX@}?a%7=^uFd$y!<+Yq? z+VH~7n8jvgPTI8ILR%G)iJrNuqpGvNg-rX9`yflMNSed!&5&{7q%tl z|DPUx^HcmSyMMuq5s80x*E!Y{*8P3VaBLCtvccO`2J#^iH{b+5_P;#cEsp7gU4N zeGZ0}gt(@Q2kl~6b*)(r=^v68tx%tHvzD9DV%DZy)5~8s?pS;I-f8Aw``gzxhA(t5 z_u)m@hxn> zFEdvuBH-5d?e6yl*F3AR;j6l&r^#UP^3~Zxs*p~;3e)puhc!98(`Il!ov=#ytYg0A zxgFo%UYN~k;G59**~DSiwl;@&4gsH_i_&Zv3hb?pnz#QoN6x&u+@0y)L;afihC>@J z|NndOz0^04>x&&9Jg}H#L|E*p_k{d?>>*IRSD#P+a zOfN!b^+e{qzV)|A|JeU`Wkx@h>)#xG@@(0%V?W##)|_QXU;XCA>J@QcLKpRjFFX0Y z!ll3eQrznYKOUTtQ3pA^z=Gq?;`&X$o)kx}`#pKq|F5t27k`?(|L1=F?rHyEc^Wd7 z;ojoF#n886lhJBaaTxEwGL9#L4ZagkSHMId`e3{Rf{GKE8kAS9Ig^E41j3{pls0HG zX)@dp+1WFl1JT_>GDAj?Nt3~1(Wz5w)Id%LEf_>-2JvPqO<)@24*2k&QLFz+@$sd1 Sbr={J7(8A5T-G@yGywpY#*{e# literal 0 HcmV?d00001 diff --git a/examples/others/iqm_loader/riqm.h b/examples/others/iqm_loader/riqm.h new file mode 100644 index 000000000..6f2748363 --- /dev/null +++ b/examples/others/iqm_loader/riqm.h @@ -0,0 +1,1242 @@ +/********************************************************************************************** +* +* riqm - InterQuake Model format (IQM) loader for animated meshes +* +* CONFIGURATION: +* +* #define RIQM_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. +* +* +* LICENSE: zlib/libpng +* +* Copyright (c) 2018 Jonas Daeyaert (@culacant) and 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 RIQM_H +#define RIQM_H + +#include // 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