From 4871b500e5172d546550ac232851b61fe938c2a0 Mon Sep 17 00:00:00 2001 From: Zack Buhman Date: Wed, 17 Dec 2025 23:34:49 -0600 Subject: [PATCH] initial --- .gitignore | 9 + Makefile | 137 + include/KHR/khrplatform.h | 311 +++ include/glad/gl.h | 3293 +++++++++++++++++++++++++ include/make.h | 25 + include/math/constants.hpp | 5 + include/math/float_types.hpp | 15 + include/math/mat.hpp | 26 + include/math/mat2x2.hpp | 112 + include/math/mat3x3.hpp | 201 ++ include/math/mat4x4.hpp | 247 ++ include/math/transform.hpp | 167 ++ include/math/vec.hpp | 29 + include/math/vec2.hpp | 154 ++ include/math/vec3.hpp | 171 ++ include/math/vec4.hpp | 164 ++ include/mesh.h | 13 + include/model/test_scene.h | 982 ++++++++ include/model/test_scene_color.data.h | 18 + include/render.h | 19 + include/shader.h | 19 + include/shader/scene.fs.glsl.h | 18 + include/shader/scene.vs.glsl.h | 18 + include/state.h | 18 + model/test_scene.blend | Bin 0 -> 527218 bytes model/test_scene.obj | 1076 ++++++++ model/test_scene_color.data | Bin 0 -> 3072 bytes model/test_scene_color.png | Bin 0 -> 4694 bytes src/depth_decode.py | 22 + src/gl.c | 1512 ++++++++++++ src/make.c | 41 + src/render.cpp | 48 + src/shader.c | 66 + src/shader/scene.fs.glsl | 15 + src/shader/scene.vs.glsl | 17 + 35 files changed, 8968 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 include/KHR/khrplatform.h create mode 100644 include/glad/gl.h create mode 100644 include/make.h create mode 100644 include/math/constants.hpp create mode 100644 include/math/float_types.hpp create mode 100644 include/math/mat.hpp create mode 100644 include/math/mat2x2.hpp create mode 100644 include/math/mat3x3.hpp create mode 100644 include/math/mat4x4.hpp create mode 100644 include/math/transform.hpp create mode 100644 include/math/vec.hpp create mode 100644 include/math/vec2.hpp create mode 100644 include/math/vec3.hpp create mode 100644 include/math/vec4.hpp create mode 100644 include/mesh.h create mode 100644 include/model/test_scene.h create mode 100644 include/model/test_scene_color.data.h create mode 100644 include/render.h create mode 100644 include/shader.h create mode 100644 include/shader/scene.fs.glsl.h create mode 100644 include/shader/scene.vs.glsl.h create mode 100644 include/state.h create mode 100644 model/test_scene.blend create mode 100644 model/test_scene.obj create mode 100644 model/test_scene_color.data create mode 100644 model/test_scene_color.png create mode 100644 src/depth_decode.py create mode 100644 src/gl.c create mode 100644 src/make.c create mode 100644 src/render.cpp create mode 100644 src/shader.c create mode 100644 src/shader/scene.fs.glsl create mode 100644 src/shader/scene.vs.glsl diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..16f58b6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +*~ +.#* +*.o +*.d +*.s +*.blend1 +*.zip +main +main* diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..98801a4 --- /dev/null +++ b/Makefile @@ -0,0 +1,137 @@ +.SUFFIXES: +.INTERMEDIATE: +.SECONDARY: +.PHONY: all clean + +ifndef GLFW +$(error GLFW undefined) +endif + +MAKEFILE_PATH := $(patsubst %/,%,$(dir $(abspath $(firstword $(MAKEFILE_LIST))))) + +DEBUG = -g + +CSTD += -std=gnu23 +CXXSTD += -std=gnu++23 + +CFLAGS += -Wall -Werror -Wfatal-errors +CFLAGS += -Wno-error=unused-function +CFLAGS += -Wno-error=unused-variable +CFLAGS += -I$(MAKEFILE_PATH)/include +CFLAGS += -I$(dir $(GLFW))../include +CXXFLAGS += -fno-exceptions +LDFLAGS += -nostdlib++ -lm -Wl,-z noexecstack +ifeq ($(shell uname),Linux) +LDFLAGS += -static-libgcc +endif +ifeq ($(OS),Windows_NT) +LDFLAGS += -Wl,--subsystem,windows -mwindows +endif +ifeq ($(shell uname),Darwin) +LDFLAGS += -framework Foundation -framework IOKit -framework AppKit +endif + +DEPFLAGS = -MMD -MP + +OPT = -Og + +all: main + +makefile_path := $(dir $(abspath $(firstword $(MAKEFILE_LIST)))) +as_obj_binary = $(subst -,_,$(subst .,_,$(subst /,_,$(subst .h,,$(1))))) +as_obj_binary_p = _binary_$(call as_obj_binary,$(1)) + +define BUILD_BINARY_S + @echo build_binary_s $@ + @echo '.section .rodata.$(call as_obj_binary_p,$<)' > $@ + @echo '.global $(call as_obj_binary_p,$<)_start' >> $@ + @echo '.global $(call as_obj_binary_p,$<)_end' >> $@ + @echo '$(call as_obj_binary_p,$<)_start:' >> $@ + @printf '\t.incbin "$<"\n' >> $@ + @echo '$(call as_obj_binary_p,$<)_end:' >> $@ +endef + +define BUILD_BINARY_H + @echo build_binary_h $@ + @echo '#pragma once' > $@ + @echo '' >> $@ + @echo '#include ' >> $@ + @echo '' >> $@ + @echo '#ifdef __cplusplus' >> $@ + @echo 'extern "C" {' >> $@ + @echo '#endif' >> $@ + @echo '' >> $@ + @echo 'extern uint32_t $(call as_obj_binary_p,$<)_start __asm("$(call as_obj_binary_p,$<)_start");' >> $@ + @echo 'extern uint32_t $(call as_obj_binary_p,$<)_end __asm("$(call as_obj_binary_p,$<)_end");' >> $@ + @echo '' >> $@ + @echo '#define $(call as_obj_binary,$<)_start ((const char *)&$(call as_obj_binary_p,$<)_start)' >> $@ + @echo '#define $(call as_obj_binary,$<)_end ((const char *)&$(call as_obj_binary_p,$<)_end)' >> $@ + @echo '#define $(call as_obj_binary,$<)_size ((uintptr_t)$(call as_obj_binary,$<)_end - (uintptr_t)$(call as_obj_binary,$<)_start)' >> $@ + @echo '' >> $@ + @echo '#ifdef __cplusplus' >> $@ + @echo '}' >> $@ + @echo '#endif' >> $@ +endef + +%.glsl.s: %.glsl + $(BUILD_BINARY_S) + +%.data.s: %.data + $(BUILD_BINARY_S) + +%.data.pal.s: %.data.pal + $(BUILD_BINARY_S) + +include/%.glsl.h: src/%.glsl + $(BUILD_BINARY_H) + +include/%.data.h: %.data + $(BUILD_BINARY_H) + +include/%.data.pal.h: %.data.pal + $(BUILD_BINARY_H) + +clean: + rm -f *.o *.d *.gch + rm -f main + +%.o: %.s + $(AS) $(AFLAGS) $< -o $@ $(TARGET) + +%.o: %.cpp + $(CXX) $(CXXSTD) $(ARCH) $(CFLAGS) $(OPT) $(DEBUG) $(DEPFLAGS) -MF ${<}.d -c $< -o $@ + +%.o: %.c + $(CC) $(CSTD) $(ARCH) $(CFLAGS) $(CXXFLAGS) $(OPT) $(DEBUG) $(DEPFLAGS) -MF ${<}.d -c $< -o $@ + +SHADERS = $(shell find src/ -type f -name '*.glsl') +SHADER_OBJS = $(patsubst %,%.o,$(SHADERS)) +SHADER_HEADERS = $(subst src/,include/,$(patsubst %,%.h,$(SHADERS))) + +shaders: $(SHADER_HEADERS) + +MAIN_OBJS = \ + src/main.o \ + src/gl.o \ + src/make.o \ + src/shader.o \ + src/render.o \ + model/test_scene_color.data.o \ + $(SHADER_OBJS) \ + $(GLFW) + +main: $(MAIN_OBJS) | shaders + $(CXX) $^ $(CXXFLAGS) $(ARCH) -o $@ $(LDFLAGS) + +-include $(shell find src/ -type f -name '*.d') + +.SUFFIXES: +.INTERMEDIATE: +.SECONDARY: +.PHONY: all clean shaders + +%: RCS/%,v +%: RCS/% +%: %,v +%: s.% +%: SCCS/s.% diff --git a/include/KHR/khrplatform.h b/include/KHR/khrplatform.h new file mode 100644 index 0000000..0164644 --- /dev/null +++ b/include/KHR/khrplatform.h @@ -0,0 +1,311 @@ +#ifndef __khrplatform_h_ +#define __khrplatform_h_ + +/* +** Copyright (c) 2008-2018 The Khronos Group Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and/or associated documentation files (the +** "Materials"), to deal in the Materials without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Materials, and to +** permit persons to whom the Materials are furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be included +** in all copies or substantial portions of the Materials. +** +** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +*/ + +/* Khronos platform-specific types and definitions. + * + * The master copy of khrplatform.h is maintained in the Khronos EGL + * Registry repository at https://github.com/KhronosGroup/EGL-Registry + * The last semantic modification to khrplatform.h was at commit ID: + * 67a3e0864c2d75ea5287b9f3d2eb74a745936692 + * + * Adopters may modify this file to suit their platform. Adopters are + * encouraged to submit platform specific modifications to the Khronos + * group so that they can be included in future versions of this file. + * Please submit changes by filing pull requests or issues on + * the EGL Registry repository linked above. + * + * + * See the Implementer's Guidelines for information about where this file + * should be located on your system and for more details of its use: + * http://www.khronos.org/registry/implementers_guide.pdf + * + * This file should be included as + * #include + * by Khronos client API header files that use its types and defines. + * + * The types in khrplatform.h should only be used to define API-specific types. + * + * Types defined in khrplatform.h: + * khronos_int8_t signed 8 bit + * khronos_uint8_t unsigned 8 bit + * khronos_int16_t signed 16 bit + * khronos_uint16_t unsigned 16 bit + * khronos_int32_t signed 32 bit + * khronos_uint32_t unsigned 32 bit + * khronos_int64_t signed 64 bit + * khronos_uint64_t unsigned 64 bit + * khronos_intptr_t signed same number of bits as a pointer + * khronos_uintptr_t unsigned same number of bits as a pointer + * khronos_ssize_t signed size + * khronos_usize_t unsigned size + * khronos_float_t signed 32 bit floating point + * khronos_time_ns_t unsigned 64 bit time in nanoseconds + * khronos_utime_nanoseconds_t unsigned time interval or absolute time in + * nanoseconds + * khronos_stime_nanoseconds_t signed time interval in nanoseconds + * khronos_boolean_enum_t enumerated boolean type. This should + * only be used as a base type when a client API's boolean type is + * an enum. Client APIs which use an integer or other type for + * booleans cannot use this as the base type for their boolean. + * + * Tokens defined in khrplatform.h: + * + * KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values. + * + * KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0. + * KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0. + * + * Calling convention macros defined in this file: + * KHRONOS_APICALL + * KHRONOS_APIENTRY + * KHRONOS_APIATTRIBUTES + * + * These may be used in function prototypes as: + * + * KHRONOS_APICALL void KHRONOS_APIENTRY funcname( + * int arg1, + * int arg2) KHRONOS_APIATTRIBUTES; + */ + +#if defined(__SCITECH_SNAP__) && !defined(KHRONOS_STATIC) +# define KHRONOS_STATIC 1 +#endif + +/*------------------------------------------------------------------------- + * Definition of KHRONOS_APICALL + *------------------------------------------------------------------------- + * This precedes the return type of the function in the function prototype. + */ +#if defined(KHRONOS_STATIC) + /* If the preprocessor constant KHRONOS_STATIC is defined, make the + * header compatible with static linking. */ +# define KHRONOS_APICALL +#elif defined(_WIN32) +# define KHRONOS_APICALL __declspec(dllimport) +#elif defined (__SYMBIAN32__) +# define KHRONOS_APICALL IMPORT_C +#elif defined(__ANDROID__) +# define KHRONOS_APICALL __attribute__((visibility("default"))) +#else +# define KHRONOS_APICALL +#endif + +/*------------------------------------------------------------------------- + * Definition of KHRONOS_APIENTRY + *------------------------------------------------------------------------- + * This follows the return type of the function and precedes the function + * name in the function prototype. + */ +#if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__SCITECH_SNAP__) + /* Win32 but not WinCE */ +# define KHRONOS_APIENTRY __stdcall +#else +# define KHRONOS_APIENTRY +#endif + +/*------------------------------------------------------------------------- + * Definition of KHRONOS_APIATTRIBUTES + *------------------------------------------------------------------------- + * This follows the closing parenthesis of the function prototype arguments. + */ +#if defined (__ARMCC_2__) +#define KHRONOS_APIATTRIBUTES __softfp +#else +#define KHRONOS_APIATTRIBUTES +#endif + +/*------------------------------------------------------------------------- + * basic type definitions + *-----------------------------------------------------------------------*/ +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__) + + +/* + * Using + */ +#include +typedef int32_t khronos_int32_t; +typedef uint32_t khronos_uint32_t; +typedef int64_t khronos_int64_t; +typedef uint64_t khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 +/* + * To support platform where unsigned long cannot be used interchangeably with + * inptr_t (e.g. CHERI-extended ISAs), we can use the stdint.h intptr_t. + * Ideally, we could just use (u)intptr_t everywhere, but this could result in + * ABI breakage if khronos_uintptr_t is changed from unsigned long to + * unsigned long long or similar (this results in different C++ name mangling). + * To avoid changes for existing platforms, we restrict usage of intptr_t to + * platforms where the size of a pointer is larger than the size of long. + */ +#if defined(__SIZEOF_LONG__) && defined(__SIZEOF_POINTER__) +#if __SIZEOF_POINTER__ > __SIZEOF_LONG__ +#define KHRONOS_USE_INTPTR_T +#endif +#endif + +#elif defined(__VMS ) || defined(__sgi) + +/* + * Using + */ +#include +typedef int32_t khronos_int32_t; +typedef uint32_t khronos_uint32_t; +typedef int64_t khronos_int64_t; +typedef uint64_t khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif defined(_WIN32) && !defined(__SCITECH_SNAP__) + +/* + * Win32 + */ +typedef __int32 khronos_int32_t; +typedef unsigned __int32 khronos_uint32_t; +typedef __int64 khronos_int64_t; +typedef unsigned __int64 khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif defined(__sun__) || defined(__digital__) + +/* + * Sun or Digital + */ +typedef int khronos_int32_t; +typedef unsigned int khronos_uint32_t; +#if defined(__arch64__) || defined(_LP64) +typedef long int khronos_int64_t; +typedef unsigned long int khronos_uint64_t; +#else +typedef long long int khronos_int64_t; +typedef unsigned long long int khronos_uint64_t; +#endif /* __arch64__ */ +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif 0 + +/* + * Hypothetical platform with no float or int64 support + */ +typedef int khronos_int32_t; +typedef unsigned int khronos_uint32_t; +#define KHRONOS_SUPPORT_INT64 0 +#define KHRONOS_SUPPORT_FLOAT 0 + +#else + +/* + * Generic fallback + */ +#include +typedef int32_t khronos_int32_t; +typedef uint32_t khronos_uint32_t; +typedef int64_t khronos_int64_t; +typedef uint64_t khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#endif + + +/* + * Types that are (so far) the same on all platforms + */ +typedef signed char khronos_int8_t; +typedef unsigned char khronos_uint8_t; +typedef signed short int khronos_int16_t; +typedef unsigned short int khronos_uint16_t; + +/* + * Types that differ between LLP64 and LP64 architectures - in LLP64, + * pointers are 64 bits, but 'long' is still 32 bits. Win64 appears + * to be the only LLP64 architecture in current use. + */ +#ifdef KHRONOS_USE_INTPTR_T +typedef intptr_t khronos_intptr_t; +typedef uintptr_t khronos_uintptr_t; +#elif defined(_WIN64) +typedef signed long long int khronos_intptr_t; +typedef unsigned long long int khronos_uintptr_t; +#else +typedef signed long int khronos_intptr_t; +typedef unsigned long int khronos_uintptr_t; +#endif + +#if defined(_WIN64) +typedef signed long long int khronos_ssize_t; +typedef unsigned long long int khronos_usize_t; +#else +typedef signed long int khronos_ssize_t; +typedef unsigned long int khronos_usize_t; +#endif + +#if KHRONOS_SUPPORT_FLOAT +/* + * Float type + */ +typedef float khronos_float_t; +#endif + +#if KHRONOS_SUPPORT_INT64 +/* Time types + * + * These types can be used to represent a time interval in nanoseconds or + * an absolute Unadjusted System Time. Unadjusted System Time is the number + * of nanoseconds since some arbitrary system event (e.g. since the last + * time the system booted). The Unadjusted System Time is an unsigned + * 64 bit value that wraps back to 0 every 584 years. Time intervals + * may be either signed or unsigned. + */ +typedef khronos_uint64_t khronos_utime_nanoseconds_t; +typedef khronos_int64_t khronos_stime_nanoseconds_t; +#endif + +/* + * Dummy value used to pad enum types to 32 bits. + */ +#ifndef KHRONOS_MAX_ENUM +#define KHRONOS_MAX_ENUM 0x7FFFFFFF +#endif + +/* + * Enumerated boolean type + * + * Values other than zero should be considered to be true. Therefore + * comparisons should not be made against KHRONOS_TRUE. + */ +typedef enum { + KHRONOS_FALSE = 0, + KHRONOS_TRUE = 1, + KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM +} khronos_boolean_enum_t; + +#endif /* __khrplatform_h_ */ diff --git a/include/glad/gl.h b/include/glad/gl.h new file mode 100644 index 0000000..eec1966 --- /dev/null +++ b/include/glad/gl.h @@ -0,0 +1,3293 @@ +/** + * Loader generated by glad 2.0.8 on Thu Dec 18 03:17:42 2025 + * + * SPDX-License-Identifier: (WTFPL OR CC0-1.0) AND Apache-2.0 + * + * Generator: C/C++ + * Specification: gl + * Extensions: 0 + * + * APIs: + * - gl:core=3.0 + * + * Options: + * - ALIAS = False + * - DEBUG = False + * - HEADER_ONLY = False + * - LOADER = False + * - MX = False + * - ON_DEMAND = False + * + * Commandline: + * --api='gl:core=3.0' --extensions='' c + * + * Online: + * http://glad.sh/#api=gl%3Acore%3D3.0&extensions=&generator=c&options= + * + */ + +#ifndef GLAD_GL_H_ +#define GLAD_GL_H_ + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wreserved-id-macro" +#endif +#ifdef __gl_h_ + #error OpenGL (gl.h) header already included (API: gl), remove previous include! +#endif +#define __gl_h_ 1 +#ifdef __gl3_h_ + #error OpenGL (gl3.h) header already included (API: gl), remove previous include! +#endif +#define __gl3_h_ 1 +#ifdef __glext_h_ + #error OpenGL (glext.h) header already included (API: gl), remove previous include! +#endif +#define __glext_h_ 1 +#ifdef __gl3ext_h_ + #error OpenGL (gl3ext.h) header already included (API: gl), remove previous include! +#endif +#define __gl3ext_h_ 1 +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + +#define GLAD_GL + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef GLAD_PLATFORM_H_ +#define GLAD_PLATFORM_H_ + +#ifndef GLAD_PLATFORM_WIN32 + #if defined(_WIN32) || defined(__WIN32__) || defined(WIN32) || defined(__MINGW32__) + #define GLAD_PLATFORM_WIN32 1 + #else + #define GLAD_PLATFORM_WIN32 0 + #endif +#endif + +#ifndef GLAD_PLATFORM_APPLE + #ifdef __APPLE__ + #define GLAD_PLATFORM_APPLE 1 + #else + #define GLAD_PLATFORM_APPLE 0 + #endif +#endif + +#ifndef GLAD_PLATFORM_EMSCRIPTEN + #ifdef __EMSCRIPTEN__ + #define GLAD_PLATFORM_EMSCRIPTEN 1 + #else + #define GLAD_PLATFORM_EMSCRIPTEN 0 + #endif +#endif + +#ifndef GLAD_PLATFORM_UWP + #if defined(_MSC_VER) && !defined(GLAD_INTERNAL_HAVE_WINAPIFAMILY) + #ifdef __has_include + #if __has_include() + #define GLAD_INTERNAL_HAVE_WINAPIFAMILY 1 + #endif + #elif _MSC_VER >= 1700 && !_USING_V110_SDK71_ + #define GLAD_INTERNAL_HAVE_WINAPIFAMILY 1 + #endif + #endif + + #ifdef GLAD_INTERNAL_HAVE_WINAPIFAMILY + #include + #if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) && WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) + #define GLAD_PLATFORM_UWP 1 + #endif + #endif + + #ifndef GLAD_PLATFORM_UWP + #define GLAD_PLATFORM_UWP 0 + #endif +#endif + +#ifdef __GNUC__ + #define GLAD_GNUC_EXTENSION __extension__ +#else + #define GLAD_GNUC_EXTENSION +#endif + +#define GLAD_UNUSED(x) (void)(x) + +#ifndef GLAD_API_CALL + #if defined(GLAD_API_CALL_EXPORT) + #if GLAD_PLATFORM_WIN32 || defined(__CYGWIN__) + #if defined(GLAD_API_CALL_EXPORT_BUILD) + #if defined(__GNUC__) + #define GLAD_API_CALL __attribute__ ((dllexport)) extern + #else + #define GLAD_API_CALL __declspec(dllexport) extern + #endif + #else + #if defined(__GNUC__) + #define GLAD_API_CALL __attribute__ ((dllimport)) extern + #else + #define GLAD_API_CALL __declspec(dllimport) extern + #endif + #endif + #elif defined(__GNUC__) && defined(GLAD_API_CALL_EXPORT_BUILD) + #define GLAD_API_CALL __attribute__ ((visibility ("default"))) extern + #else + #define GLAD_API_CALL extern + #endif + #else + #define GLAD_API_CALL extern + #endif +#endif + +#ifdef APIENTRY + #define GLAD_API_PTR APIENTRY +#elif GLAD_PLATFORM_WIN32 + #define GLAD_API_PTR __stdcall +#else + #define GLAD_API_PTR +#endif + +#ifndef GLAPI +#define GLAPI GLAD_API_CALL +#endif + +#ifndef GLAPIENTRY +#define GLAPIENTRY GLAD_API_PTR +#endif + +#define GLAD_MAKE_VERSION(major, minor) (major * 10000 + minor) +#define GLAD_VERSION_MAJOR(version) (version / 10000) +#define GLAD_VERSION_MINOR(version) (version % 10000) + +#define GLAD_GENERATOR_VERSION "2.0.8" + +typedef void (*GLADapiproc)(void); + +typedef GLADapiproc (*GLADloadfunc)(const char *name); +typedef GLADapiproc (*GLADuserptrloadfunc)(void *userptr, const char *name); + +typedef void (*GLADprecallback)(const char *name, GLADapiproc apiproc, int len_args, ...); +typedef void (*GLADpostcallback)(void *ret, const char *name, GLADapiproc apiproc, int len_args, ...); + +#endif /* GLAD_PLATFORM_H_ */ + +#define GL_2D 0x0600 +#define GL_2_BYTES 0x1407 +#define GL_3D 0x0601 +#define GL_3D_COLOR 0x0602 +#define GL_3D_COLOR_TEXTURE 0x0603 +#define GL_3_BYTES 0x1408 +#define GL_4D_COLOR_TEXTURE 0x0604 +#define GL_4_BYTES 0x1409 +#define GL_ACCUM 0x0100 +#define GL_ACCUM_ALPHA_BITS 0x0D5B +#define GL_ACCUM_BLUE_BITS 0x0D5A +#define GL_ACCUM_BUFFER_BIT 0x00000200 +#define GL_ACCUM_CLEAR_VALUE 0x0B80 +#define GL_ACCUM_GREEN_BITS 0x0D59 +#define GL_ACCUM_RED_BITS 0x0D58 +#define GL_ACTIVE_ATTRIBUTES 0x8B89 +#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A +#define GL_ACTIVE_TEXTURE 0x84E0 +#define GL_ACTIVE_UNIFORMS 0x8B86 +#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 +#define GL_ADD 0x0104 +#define GL_ADD_SIGNED 0x8574 +#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E +#define GL_ALIASED_POINT_SIZE_RANGE 0x846D +#define GL_ALL_ATTRIB_BITS 0xFFFFFFFF +#define GL_ALPHA 0x1906 +#define GL_ALPHA12 0x803D +#define GL_ALPHA16 0x803E +#define GL_ALPHA4 0x803B +#define GL_ALPHA8 0x803C +#define GL_ALPHA_BIAS 0x0D1D +#define GL_ALPHA_BITS 0x0D55 +#define GL_ALPHA_INTEGER 0x8D97 +#define GL_ALPHA_SCALE 0x0D1C +#define GL_ALPHA_TEST 0x0BC0 +#define GL_ALPHA_TEST_FUNC 0x0BC1 +#define GL_ALPHA_TEST_REF 0x0BC2 +#define GL_ALWAYS 0x0207 +#define GL_AMBIENT 0x1200 +#define GL_AMBIENT_AND_DIFFUSE 0x1602 +#define GL_AND 0x1501 +#define GL_AND_INVERTED 0x1504 +#define GL_AND_REVERSE 0x1502 +#define GL_ARRAY_BUFFER 0x8892 +#define GL_ARRAY_BUFFER_BINDING 0x8894 +#define GL_ATTACHED_SHADERS 0x8B85 +#define GL_ATTRIB_STACK_DEPTH 0x0BB0 +#define GL_AUTO_NORMAL 0x0D80 +#define GL_AUX0 0x0409 +#define GL_AUX1 0x040A +#define GL_AUX2 0x040B +#define GL_AUX3 0x040C +#define GL_AUX_BUFFERS 0x0C00 +#define GL_BACK 0x0405 +#define GL_BACK_LEFT 0x0402 +#define GL_BACK_RIGHT 0x0403 +#define GL_BGR 0x80E0 +#define GL_BGRA 0x80E1 +#define GL_BGRA_INTEGER 0x8D9B +#define GL_BGR_INTEGER 0x8D9A +#define GL_BITMAP 0x1A00 +#define GL_BITMAP_TOKEN 0x0704 +#define GL_BLEND 0x0BE2 +#define GL_BLEND_COLOR 0x8005 +#define GL_BLEND_DST 0x0BE0 +#define GL_BLEND_DST_ALPHA 0x80CA +#define GL_BLEND_DST_RGB 0x80C8 +#define GL_BLEND_EQUATION 0x8009 +#define GL_BLEND_EQUATION_ALPHA 0x883D +#define GL_BLEND_EQUATION_RGB 0x8009 +#define GL_BLEND_SRC 0x0BE1 +#define GL_BLEND_SRC_ALPHA 0x80CB +#define GL_BLEND_SRC_RGB 0x80C9 +#define GL_BLUE 0x1905 +#define GL_BLUE_BIAS 0x0D1B +#define GL_BLUE_BITS 0x0D54 +#define GL_BLUE_INTEGER 0x8D96 +#define GL_BLUE_SCALE 0x0D1A +#define GL_BOOL 0x8B56 +#define GL_BOOL_VEC2 0x8B57 +#define GL_BOOL_VEC3 0x8B58 +#define GL_BOOL_VEC4 0x8B59 +#define GL_BUFFER_ACCESS 0x88BB +#define GL_BUFFER_ACCESS_FLAGS 0x911F +#define GL_BUFFER_MAPPED 0x88BC +#define GL_BUFFER_MAP_LENGTH 0x9120 +#define GL_BUFFER_MAP_OFFSET 0x9121 +#define GL_BUFFER_MAP_POINTER 0x88BD +#define GL_BUFFER_SIZE 0x8764 +#define GL_BUFFER_USAGE 0x8765 +#define GL_BYTE 0x1400 +#define GL_C3F_V3F 0x2A24 +#define GL_C4F_N3F_V3F 0x2A26 +#define GL_C4UB_V2F 0x2A22 +#define GL_C4UB_V3F 0x2A23 +#define GL_CCW 0x0901 +#define GL_CLAMP 0x2900 +#define GL_CLAMP_FRAGMENT_COLOR 0x891B +#define GL_CLAMP_READ_COLOR 0x891C +#define GL_CLAMP_TO_BORDER 0x812D +#define GL_CLAMP_TO_EDGE 0x812F +#define GL_CLAMP_VERTEX_COLOR 0x891A +#define GL_CLEAR 0x1500 +#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 +#define GL_CLIENT_ALL_ATTRIB_BITS 0xFFFFFFFF +#define GL_CLIENT_ATTRIB_STACK_DEPTH 0x0BB1 +#define GL_CLIENT_PIXEL_STORE_BIT 0x00000001 +#define GL_CLIENT_VERTEX_ARRAY_BIT 0x00000002 +#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_CLIP_PLANE0 0x3000 +#define GL_CLIP_PLANE1 0x3001 +#define GL_CLIP_PLANE2 0x3002 +#define GL_CLIP_PLANE3 0x3003 +#define GL_CLIP_PLANE4 0x3004 +#define GL_CLIP_PLANE5 0x3005 +#define GL_COEFF 0x0A00 +#define GL_COLOR 0x1800 +#define GL_COLOR_ARRAY 0x8076 +#define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898 +#define GL_COLOR_ARRAY_POINTER 0x8090 +#define GL_COLOR_ARRAY_SIZE 0x8081 +#define GL_COLOR_ARRAY_STRIDE 0x8083 +#define GL_COLOR_ARRAY_TYPE 0x8082 +#define GL_COLOR_ATTACHMENT0 0x8CE0 +#define GL_COLOR_ATTACHMENT1 0x8CE1 +#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_ATTACHMENT2 0x8CE2 +#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_ATTACHMENT3 0x8CE3 +#define GL_COLOR_ATTACHMENT30 0x8CFE +#define GL_COLOR_ATTACHMENT31 0x8CFF +#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_BUFFER_BIT 0x00004000 +#define GL_COLOR_CLEAR_VALUE 0x0C22 +#define GL_COLOR_INDEX 0x1900 +#define GL_COLOR_INDEXES 0x1603 +#define GL_COLOR_LOGIC_OP 0x0BF2 +#define GL_COLOR_MATERIAL 0x0B57 +#define GL_COLOR_MATERIAL_FACE 0x0B55 +#define GL_COLOR_MATERIAL_PARAMETER 0x0B56 +#define GL_COLOR_SUM 0x8458 +#define GL_COLOR_WRITEMASK 0x0C23 +#define GL_COMBINE 0x8570 +#define GL_COMBINE_ALPHA 0x8572 +#define GL_COMBINE_RGB 0x8571 +#define GL_COMPARE_REF_TO_TEXTURE 0x884E +#define GL_COMPARE_R_TO_TEXTURE 0x884E +#define GL_COMPILE 0x1300 +#define GL_COMPILE_AND_EXECUTE 0x1301 +#define GL_COMPILE_STATUS 0x8B81 +#define GL_COMPRESSED_ALPHA 0x84E9 +#define GL_COMPRESSED_INTENSITY 0x84EC +#define GL_COMPRESSED_LUMINANCE 0x84EA +#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB +#define GL_COMPRESSED_RED 0x8225 +#define GL_COMPRESSED_RED_RGTC1 0x8DBB +#define GL_COMPRESSED_RG 0x8226 +#define GL_COMPRESSED_RGB 0x84ED +#define GL_COMPRESSED_RGBA 0x84EE +#define GL_COMPRESSED_RG_RGTC2 0x8DBD +#define GL_COMPRESSED_SIGNED_RED_RGTC1 0x8DBC +#define GL_COMPRESSED_SIGNED_RG_RGTC2 0x8DBE +#define GL_COMPRESSED_SLUMINANCE 0x8C4A +#define GL_COMPRESSED_SLUMINANCE_ALPHA 0x8C4B +#define GL_COMPRESSED_SRGB 0x8C48 +#define GL_COMPRESSED_SRGB_ALPHA 0x8C49 +#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 +#define GL_CONSTANT 0x8576 +#define GL_CONSTANT_ALPHA 0x8003 +#define GL_CONSTANT_ATTENUATION 0x1207 +#define GL_CONSTANT_COLOR 0x8001 +#define GL_CONTEXT_FLAGS 0x821E +#define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x00000001 +#define GL_COORD_REPLACE 0x8862 +#define GL_COPY 0x1503 +#define GL_COPY_INVERTED 0x150C +#define GL_COPY_PIXEL_TOKEN 0x0706 +#define GL_CULL_FACE 0x0B44 +#define GL_CULL_FACE_MODE 0x0B45 +#define GL_CURRENT_BIT 0x00000001 +#define GL_CURRENT_COLOR 0x0B00 +#define GL_CURRENT_FOG_COORD 0x8453 +#define GL_CURRENT_FOG_COORDINATE 0x8453 +#define GL_CURRENT_INDEX 0x0B01 +#define GL_CURRENT_NORMAL 0x0B02 +#define GL_CURRENT_PROGRAM 0x8B8D +#define GL_CURRENT_QUERY 0x8865 +#define GL_CURRENT_RASTER_COLOR 0x0B04 +#define GL_CURRENT_RASTER_DISTANCE 0x0B09 +#define GL_CURRENT_RASTER_INDEX 0x0B05 +#define GL_CURRENT_RASTER_POSITION 0x0B07 +#define GL_CURRENT_RASTER_POSITION_VALID 0x0B08 +#define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F +#define GL_CURRENT_RASTER_TEXTURE_COORDS 0x0B06 +#define GL_CURRENT_SECONDARY_COLOR 0x8459 +#define GL_CURRENT_TEXTURE_COORDS 0x0B03 +#define GL_CURRENT_VERTEX_ATTRIB 0x8626 +#define GL_CW 0x0900 +#define GL_DECAL 0x2101 +#define GL_DECR 0x1E03 +#define GL_DECR_WRAP 0x8508 +#define GL_DELETE_STATUS 0x8B80 +#define GL_DEPTH 0x1801 +#define GL_DEPTH24_STENCIL8 0x88F0 +#define GL_DEPTH32F_STENCIL8 0x8CAD +#define GL_DEPTH_ATTACHMENT 0x8D00 +#define GL_DEPTH_BIAS 0x0D1F +#define GL_DEPTH_BITS 0x0D56 +#define GL_DEPTH_BUFFER_BIT 0x00000100 +#define GL_DEPTH_CLEAR_VALUE 0x0B73 +#define GL_DEPTH_COMPONENT 0x1902 +#define GL_DEPTH_COMPONENT16 0x81A5 +#define GL_DEPTH_COMPONENT24 0x81A6 +#define GL_DEPTH_COMPONENT32 0x81A7 +#define GL_DEPTH_COMPONENT32F 0x8CAC +#define GL_DEPTH_FUNC 0x0B74 +#define GL_DEPTH_RANGE 0x0B70 +#define GL_DEPTH_SCALE 0x0D1E +#define GL_DEPTH_STENCIL 0x84F9 +#define GL_DEPTH_STENCIL_ATTACHMENT 0x821A +#define GL_DEPTH_TEST 0x0B71 +#define GL_DEPTH_TEXTURE_MODE 0x884B +#define GL_DEPTH_WRITEMASK 0x0B72 +#define GL_DIFFUSE 0x1201 +#define GL_DITHER 0x0BD0 +#define GL_DOMAIN 0x0A02 +#define GL_DONT_CARE 0x1100 +#define GL_DOT3_RGB 0x86AE +#define GL_DOT3_RGBA 0x86AF +#define GL_DOUBLE 0x140A +#define GL_DOUBLEBUFFER 0x0C32 +#define GL_DRAW_BUFFER 0x0C01 +#define GL_DRAW_BUFFER0 0x8825 +#define GL_DRAW_BUFFER1 0x8826 +#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_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_FRAMEBUFFER 0x8CA9 +#define GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6 +#define GL_DRAW_PIXEL_TOKEN 0x0705 +#define GL_DST_ALPHA 0x0304 +#define GL_DST_COLOR 0x0306 +#define GL_DYNAMIC_COPY 0x88EA +#define GL_DYNAMIC_DRAW 0x88E8 +#define GL_DYNAMIC_READ 0x88E9 +#define GL_EDGE_FLAG 0x0B43 +#define GL_EDGE_FLAG_ARRAY 0x8079 +#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B +#define GL_EDGE_FLAG_ARRAY_POINTER 0x8093 +#define GL_EDGE_FLAG_ARRAY_STRIDE 0x808C +#define GL_ELEMENT_ARRAY_BUFFER 0x8893 +#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 +#define GL_EMISSION 0x1600 +#define GL_ENABLE_BIT 0x00002000 +#define GL_EQUAL 0x0202 +#define GL_EQUIV 0x1509 +#define GL_EVAL_BIT 0x00010000 +#define GL_EXP 0x0800 +#define GL_EXP2 0x0801 +#define GL_EXTENSIONS 0x1F03 +#define GL_EYE_LINEAR 0x2400 +#define GL_EYE_PLANE 0x2502 +#define GL_FALSE 0 +#define GL_FASTEST 0x1101 +#define GL_FEEDBACK 0x1C01 +#define GL_FEEDBACK_BUFFER_POINTER 0x0DF0 +#define GL_FEEDBACK_BUFFER_SIZE 0x0DF1 +#define GL_FEEDBACK_BUFFER_TYPE 0x0DF2 +#define GL_FILL 0x1B02 +#define GL_FIXED_ONLY 0x891D +#define GL_FLAT 0x1D00 +#define GL_FLOAT 0x1406 +#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD +#define GL_FLOAT_MAT2 0x8B5A +#define GL_FLOAT_MAT2x3 0x8B65 +#define GL_FLOAT_MAT2x4 0x8B66 +#define GL_FLOAT_MAT3 0x8B5B +#define GL_FLOAT_MAT3x2 0x8B67 +#define GL_FLOAT_MAT3x4 0x8B68 +#define GL_FLOAT_MAT4 0x8B5C +#define GL_FLOAT_MAT4x2 0x8B69 +#define GL_FLOAT_MAT4x3 0x8B6A +#define GL_FLOAT_VEC2 0x8B50 +#define GL_FLOAT_VEC3 0x8B51 +#define GL_FLOAT_VEC4 0x8B52 +#define GL_FOG 0x0B60 +#define GL_FOG_BIT 0x00000080 +#define GL_FOG_COLOR 0x0B66 +#define GL_FOG_COORD 0x8451 +#define GL_FOG_COORDINATE 0x8451 +#define GL_FOG_COORDINATE_ARRAY 0x8457 +#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D +#define GL_FOG_COORDINATE_ARRAY_POINTER 0x8456 +#define GL_FOG_COORDINATE_ARRAY_STRIDE 0x8455 +#define GL_FOG_COORDINATE_ARRAY_TYPE 0x8454 +#define GL_FOG_COORDINATE_SOURCE 0x8450 +#define GL_FOG_COORD_ARRAY 0x8457 +#define GL_FOG_COORD_ARRAY_BUFFER_BINDING 0x889D +#define GL_FOG_COORD_ARRAY_POINTER 0x8456 +#define GL_FOG_COORD_ARRAY_STRIDE 0x8455 +#define GL_FOG_COORD_ARRAY_TYPE 0x8454 +#define GL_FOG_COORD_SRC 0x8450 +#define GL_FOG_DENSITY 0x0B62 +#define GL_FOG_END 0x0B64 +#define GL_FOG_HINT 0x0C54 +#define GL_FOG_INDEX 0x0B61 +#define GL_FOG_MODE 0x0B65 +#define GL_FOG_START 0x0B63 +#define GL_FRAGMENT_DEPTH 0x8452 +#define GL_FRAGMENT_SHADER 0x8B30 +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B +#define GL_FRAMEBUFFER 0x8D40 +#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215 +#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214 +#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210 +#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211 +#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216 +#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 +#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212 +#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 +#define GL_FRAMEBUFFER_BINDING 0x8CA6 +#define GL_FRAMEBUFFER_COMPLETE 0x8CD5 +#define GL_FRAMEBUFFER_DEFAULT 0x8218 +#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 +#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB +#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56 +#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC +#define GL_FRAMEBUFFER_SRGB 0x8DB9 +#define GL_FRAMEBUFFER_UNDEFINED 0x8219 +#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD +#define GL_FRONT 0x0404 +#define GL_FRONT_AND_BACK 0x0408 +#define GL_FRONT_FACE 0x0B46 +#define GL_FRONT_LEFT 0x0400 +#define GL_FRONT_RIGHT 0x0401 +#define GL_FUNC_ADD 0x8006 +#define GL_FUNC_REVERSE_SUBTRACT 0x800B +#define GL_FUNC_SUBTRACT 0x800A +#define GL_GENERATE_MIPMAP 0x8191 +#define GL_GENERATE_MIPMAP_HINT 0x8192 +#define GL_GEQUAL 0x0206 +#define GL_GREATER 0x0204 +#define GL_GREEN 0x1904 +#define GL_GREEN_BIAS 0x0D19 +#define GL_GREEN_BITS 0x0D53 +#define GL_GREEN_INTEGER 0x8D95 +#define GL_GREEN_SCALE 0x0D18 +#define GL_HALF_FLOAT 0x140B +#define GL_HINT_BIT 0x00008000 +#define GL_INCR 0x1E02 +#define GL_INCR_WRAP 0x8507 +#define GL_INDEX 0x8222 +#define GL_INDEX_ARRAY 0x8077 +#define GL_INDEX_ARRAY_BUFFER_BINDING 0x8899 +#define GL_INDEX_ARRAY_POINTER 0x8091 +#define GL_INDEX_ARRAY_STRIDE 0x8086 +#define GL_INDEX_ARRAY_TYPE 0x8085 +#define GL_INDEX_BITS 0x0D51 +#define GL_INDEX_CLEAR_VALUE 0x0C20 +#define GL_INDEX_LOGIC_OP 0x0BF1 +#define GL_INDEX_MODE 0x0C30 +#define GL_INDEX_OFFSET 0x0D13 +#define GL_INDEX_SHIFT 0x0D12 +#define GL_INDEX_WRITEMASK 0x0C21 +#define GL_INFO_LOG_LENGTH 0x8B84 +#define GL_INT 0x1404 +#define GL_INTENSITY 0x8049 +#define GL_INTENSITY12 0x804C +#define GL_INTENSITY16 0x804D +#define GL_INTENSITY4 0x804A +#define GL_INTENSITY8 0x804B +#define GL_INTERLEAVED_ATTRIBS 0x8C8C +#define GL_INTERPOLATE 0x8575 +#define GL_INT_SAMPLER_1D 0x8DC9 +#define GL_INT_SAMPLER_1D_ARRAY 0x8DCE +#define GL_INT_SAMPLER_2D 0x8DCA +#define GL_INT_SAMPLER_2D_ARRAY 0x8DCF +#define GL_INT_SAMPLER_3D 0x8DCB +#define GL_INT_SAMPLER_CUBE 0x8DCC +#define GL_INT_VEC2 0x8B53 +#define GL_INT_VEC3 0x8B54 +#define GL_INT_VEC4 0x8B55 +#define GL_INVALID_ENUM 0x0500 +#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 +#define GL_INVALID_OPERATION 0x0502 +#define GL_INVALID_VALUE 0x0501 +#define GL_INVERT 0x150A +#define GL_KEEP 0x1E00 +#define GL_LEFT 0x0406 +#define GL_LEQUAL 0x0203 +#define GL_LESS 0x0201 +#define GL_LIGHT0 0x4000 +#define GL_LIGHT1 0x4001 +#define GL_LIGHT2 0x4002 +#define GL_LIGHT3 0x4003 +#define GL_LIGHT4 0x4004 +#define GL_LIGHT5 0x4005 +#define GL_LIGHT6 0x4006 +#define GL_LIGHT7 0x4007 +#define GL_LIGHTING 0x0B50 +#define GL_LIGHTING_BIT 0x00000040 +#define GL_LIGHT_MODEL_AMBIENT 0x0B53 +#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 +#define GL_LIGHT_MODEL_LOCAL_VIEWER 0x0B51 +#define GL_LIGHT_MODEL_TWO_SIDE 0x0B52 +#define GL_LINE 0x1B01 +#define GL_LINEAR 0x2601 +#define GL_LINEAR_ATTENUATION 0x1208 +#define GL_LINEAR_MIPMAP_LINEAR 0x2703 +#define GL_LINEAR_MIPMAP_NEAREST 0x2701 +#define GL_LINES 0x0001 +#define GL_LINE_BIT 0x00000004 +#define GL_LINE_LOOP 0x0002 +#define GL_LINE_RESET_TOKEN 0x0707 +#define GL_LINE_SMOOTH 0x0B20 +#define GL_LINE_SMOOTH_HINT 0x0C52 +#define GL_LINE_STIPPLE 0x0B24 +#define GL_LINE_STIPPLE_PATTERN 0x0B25 +#define GL_LINE_STIPPLE_REPEAT 0x0B26 +#define GL_LINE_STRIP 0x0003 +#define GL_LINE_TOKEN 0x0702 +#define GL_LINE_WIDTH 0x0B21 +#define GL_LINE_WIDTH_GRANULARITY 0x0B23 +#define GL_LINE_WIDTH_RANGE 0x0B22 +#define GL_LINK_STATUS 0x8B82 +#define GL_LIST_BASE 0x0B32 +#define GL_LIST_BIT 0x00020000 +#define GL_LIST_INDEX 0x0B33 +#define GL_LIST_MODE 0x0B30 +#define GL_LOAD 0x0101 +#define GL_LOGIC_OP 0x0BF1 +#define GL_LOGIC_OP_MODE 0x0BF0 +#define GL_LOWER_LEFT 0x8CA1 +#define GL_LUMINANCE 0x1909 +#define GL_LUMINANCE12 0x8041 +#define GL_LUMINANCE12_ALPHA12 0x8047 +#define GL_LUMINANCE12_ALPHA4 0x8046 +#define GL_LUMINANCE16 0x8042 +#define GL_LUMINANCE16_ALPHA16 0x8048 +#define GL_LUMINANCE4 0x803F +#define GL_LUMINANCE4_ALPHA4 0x8043 +#define GL_LUMINANCE6_ALPHA2 0x8044 +#define GL_LUMINANCE8 0x8040 +#define GL_LUMINANCE8_ALPHA8 0x8045 +#define GL_LUMINANCE_ALPHA 0x190A +#define GL_MAJOR_VERSION 0x821B +#define GL_MAP1_COLOR_4 0x0D90 +#define GL_MAP1_GRID_DOMAIN 0x0DD0 +#define GL_MAP1_GRID_SEGMENTS 0x0DD1 +#define GL_MAP1_INDEX 0x0D91 +#define GL_MAP1_NORMAL 0x0D92 +#define GL_MAP1_TEXTURE_COORD_1 0x0D93 +#define GL_MAP1_TEXTURE_COORD_2 0x0D94 +#define GL_MAP1_TEXTURE_COORD_3 0x0D95 +#define GL_MAP1_TEXTURE_COORD_4 0x0D96 +#define GL_MAP1_VERTEX_3 0x0D97 +#define GL_MAP1_VERTEX_4 0x0D98 +#define GL_MAP2_COLOR_4 0x0DB0 +#define GL_MAP2_GRID_DOMAIN 0x0DD2 +#define GL_MAP2_GRID_SEGMENTS 0x0DD3 +#define GL_MAP2_INDEX 0x0DB1 +#define GL_MAP2_NORMAL 0x0DB2 +#define GL_MAP2_TEXTURE_COORD_1 0x0DB3 +#define GL_MAP2_TEXTURE_COORD_2 0x0DB4 +#define GL_MAP2_TEXTURE_COORD_3 0x0DB5 +#define GL_MAP2_TEXTURE_COORD_4 0x0DB6 +#define GL_MAP2_VERTEX_3 0x0DB7 +#define GL_MAP2_VERTEX_4 0x0DB8 +#define GL_MAP_COLOR 0x0D10 +#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010 +#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008 +#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004 +#define GL_MAP_READ_BIT 0x0001 +#define GL_MAP_STENCIL 0x0D11 +#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020 +#define GL_MAP_WRITE_BIT 0x0002 +#define GL_MATRIX_MODE 0x0BA0 +#define GL_MAX 0x8008 +#define GL_MAX_3D_TEXTURE_SIZE 0x8073 +#define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF +#define GL_MAX_ATTRIB_STACK_DEPTH 0x0D35 +#define GL_MAX_CLIENT_ATTRIB_STACK_DEPTH 0x0D3B +#define GL_MAX_CLIP_DISTANCES 0x0D32 +#define GL_MAX_CLIP_PLANES 0x0D32 +#define GL_MAX_COLOR_ATTACHMENTS 0x8CDF +#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C +#define GL_MAX_DRAW_BUFFERS 0x8824 +#define GL_MAX_ELEMENTS_INDICES 0x80E9 +#define GL_MAX_ELEMENTS_VERTICES 0x80E8 +#define GL_MAX_EVAL_ORDER 0x0D30 +#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 +#define GL_MAX_LIGHTS 0x0D31 +#define GL_MAX_LIST_NESTING 0x0B31 +#define GL_MAX_MODELVIEW_STACK_DEPTH 0x0D36 +#define GL_MAX_NAME_STACK_DEPTH 0x0D37 +#define GL_MAX_PIXEL_MAP_TABLE 0x0D34 +#define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905 +#define GL_MAX_PROJECTION_STACK_DEPTH 0x0D38 +#define GL_MAX_RENDERBUFFER_SIZE 0x84E8 +#define GL_MAX_SAMPLES 0x8D57 +#define GL_MAX_TEXTURE_COORDS 0x8871 +#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 +#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD +#define GL_MAX_TEXTURE_SIZE 0x0D33 +#define GL_MAX_TEXTURE_STACK_DEPTH 0x0D39 +#define GL_MAX_TEXTURE_UNITS 0x84E2 +#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80 +#define GL_MAX_VARYING_COMPONENTS 0x8B4B +#define GL_MAX_VARYING_FLOATS 0x8B4B +#define GL_MAX_VERTEX_ATTRIBS 0x8869 +#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C +#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A +#define GL_MAX_VIEWPORT_DIMS 0x0D3A +#define GL_MIN 0x8007 +#define GL_MINOR_VERSION 0x821C +#define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904 +#define GL_MIRRORED_REPEAT 0x8370 +#define GL_MODELVIEW 0x1700 +#define GL_MODELVIEW_MATRIX 0x0BA6 +#define GL_MODELVIEW_STACK_DEPTH 0x0BA3 +#define GL_MODULATE 0x2100 +#define GL_MULT 0x0103 +#define GL_MULTISAMPLE 0x809D +#define GL_MULTISAMPLE_BIT 0x20000000 +#define GL_N3F_V3F 0x2A25 +#define GL_NAME_STACK_DEPTH 0x0D70 +#define GL_NAND 0x150E +#define GL_NEAREST 0x2600 +#define GL_NEAREST_MIPMAP_LINEAR 0x2702 +#define GL_NEAREST_MIPMAP_NEAREST 0x2700 +#define GL_NEVER 0x0200 +#define GL_NICEST 0x1102 +#define GL_NONE 0 +#define GL_NOOP 0x1505 +#define GL_NOR 0x1508 +#define GL_NORMALIZE 0x0BA1 +#define GL_NORMAL_ARRAY 0x8075 +#define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897 +#define GL_NORMAL_ARRAY_POINTER 0x808F +#define GL_NORMAL_ARRAY_STRIDE 0x807F +#define GL_NORMAL_ARRAY_TYPE 0x807E +#define GL_NORMAL_MAP 0x8511 +#define GL_NOTEQUAL 0x0205 +#define GL_NO_ERROR 0 +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 +#define GL_NUM_EXTENSIONS 0x821D +#define GL_OBJECT_LINEAR 0x2401 +#define GL_OBJECT_PLANE 0x2501 +#define GL_ONE 1 +#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 +#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 +#define GL_ONE_MINUS_DST_ALPHA 0x0305 +#define GL_ONE_MINUS_DST_COLOR 0x0307 +#define GL_ONE_MINUS_SRC_ALPHA 0x0303 +#define GL_ONE_MINUS_SRC_COLOR 0x0301 +#define GL_OPERAND0_ALPHA 0x8598 +#define GL_OPERAND0_RGB 0x8590 +#define GL_OPERAND1_ALPHA 0x8599 +#define GL_OPERAND1_RGB 0x8591 +#define GL_OPERAND2_ALPHA 0x859A +#define GL_OPERAND2_RGB 0x8592 +#define GL_OR 0x1507 +#define GL_ORDER 0x0A01 +#define GL_OR_INVERTED 0x150D +#define GL_OR_REVERSE 0x150B +#define GL_OUT_OF_MEMORY 0x0505 +#define GL_PACK_ALIGNMENT 0x0D05 +#define GL_PACK_IMAGE_HEIGHT 0x806C +#define GL_PACK_LSB_FIRST 0x0D01 +#define GL_PACK_ROW_LENGTH 0x0D02 +#define GL_PACK_SKIP_IMAGES 0x806B +#define GL_PACK_SKIP_PIXELS 0x0D04 +#define GL_PACK_SKIP_ROWS 0x0D03 +#define GL_PACK_SWAP_BYTES 0x0D00 +#define GL_PASS_THROUGH_TOKEN 0x0700 +#define GL_PERSPECTIVE_CORRECTION_HINT 0x0C50 +#define GL_PIXEL_MAP_A_TO_A 0x0C79 +#define GL_PIXEL_MAP_A_TO_A_SIZE 0x0CB9 +#define GL_PIXEL_MAP_B_TO_B 0x0C78 +#define GL_PIXEL_MAP_B_TO_B_SIZE 0x0CB8 +#define GL_PIXEL_MAP_G_TO_G 0x0C77 +#define GL_PIXEL_MAP_G_TO_G_SIZE 0x0CB7 +#define GL_PIXEL_MAP_I_TO_A 0x0C75 +#define GL_PIXEL_MAP_I_TO_A_SIZE 0x0CB5 +#define GL_PIXEL_MAP_I_TO_B 0x0C74 +#define GL_PIXEL_MAP_I_TO_B_SIZE 0x0CB4 +#define GL_PIXEL_MAP_I_TO_G 0x0C73 +#define GL_PIXEL_MAP_I_TO_G_SIZE 0x0CB3 +#define GL_PIXEL_MAP_I_TO_I 0x0C70 +#define GL_PIXEL_MAP_I_TO_I_SIZE 0x0CB0 +#define GL_PIXEL_MAP_I_TO_R 0x0C72 +#define GL_PIXEL_MAP_I_TO_R_SIZE 0x0CB2 +#define GL_PIXEL_MAP_R_TO_R 0x0C76 +#define GL_PIXEL_MAP_R_TO_R_SIZE 0x0CB6 +#define GL_PIXEL_MAP_S_TO_S 0x0C71 +#define GL_PIXEL_MAP_S_TO_S_SIZE 0x0CB1 +#define GL_PIXEL_MODE_BIT 0x00000020 +#define GL_PIXEL_PACK_BUFFER 0x88EB +#define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED +#define GL_PIXEL_UNPACK_BUFFER 0x88EC +#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF +#define GL_POINT 0x1B00 +#define GL_POINTS 0x0000 +#define GL_POINT_BIT 0x00000002 +#define GL_POINT_DISTANCE_ATTENUATION 0x8129 +#define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 +#define GL_POINT_SIZE 0x0B11 +#define GL_POINT_SIZE_GRANULARITY 0x0B13 +#define GL_POINT_SIZE_MAX 0x8127 +#define GL_POINT_SIZE_MIN 0x8126 +#define GL_POINT_SIZE_RANGE 0x0B12 +#define GL_POINT_SMOOTH 0x0B10 +#define GL_POINT_SMOOTH_HINT 0x0C51 +#define GL_POINT_SPRITE 0x8861 +#define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 +#define GL_POINT_TOKEN 0x0701 +#define GL_POLYGON 0x0009 +#define GL_POLYGON_BIT 0x00000008 +#define GL_POLYGON_MODE 0x0B40 +#define GL_POLYGON_OFFSET_FACTOR 0x8038 +#define GL_POLYGON_OFFSET_FILL 0x8037 +#define GL_POLYGON_OFFSET_LINE 0x2A02 +#define GL_POLYGON_OFFSET_POINT 0x2A01 +#define GL_POLYGON_OFFSET_UNITS 0x2A00 +#define GL_POLYGON_SMOOTH 0x0B41 +#define GL_POLYGON_SMOOTH_HINT 0x0C53 +#define GL_POLYGON_STIPPLE 0x0B42 +#define GL_POLYGON_STIPPLE_BIT 0x00000010 +#define GL_POLYGON_TOKEN 0x0703 +#define GL_POSITION 0x1203 +#define GL_PREVIOUS 0x8578 +#define GL_PRIMARY_COLOR 0x8577 +#define GL_PRIMITIVES_GENERATED 0x8C87 +#define GL_PROJECTION 0x1701 +#define GL_PROJECTION_MATRIX 0x0BA7 +#define GL_PROJECTION_STACK_DEPTH 0x0BA4 +#define GL_PROXY_TEXTURE_1D 0x8063 +#define GL_PROXY_TEXTURE_1D_ARRAY 0x8C19 +#define GL_PROXY_TEXTURE_2D 0x8064 +#define GL_PROXY_TEXTURE_2D_ARRAY 0x8C1B +#define GL_PROXY_TEXTURE_3D 0x8070 +#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B +#define GL_Q 0x2003 +#define GL_QUADRATIC_ATTENUATION 0x1209 +#define GL_QUADS 0x0007 +#define GL_QUAD_STRIP 0x0008 +#define GL_QUERY_BY_REGION_NO_WAIT 0x8E16 +#define GL_QUERY_BY_REGION_WAIT 0x8E15 +#define GL_QUERY_COUNTER_BITS 0x8864 +#define GL_QUERY_NO_WAIT 0x8E14 +#define GL_QUERY_RESULT 0x8866 +#define GL_QUERY_RESULT_AVAILABLE 0x8867 +#define GL_QUERY_WAIT 0x8E13 +#define GL_R 0x2002 +#define GL_R11F_G11F_B10F 0x8C3A +#define GL_R16 0x822A +#define GL_R16F 0x822D +#define GL_R16I 0x8233 +#define GL_R16UI 0x8234 +#define GL_R32F 0x822E +#define GL_R32I 0x8235 +#define GL_R32UI 0x8236 +#define GL_R3_G3_B2 0x2A10 +#define GL_R8 0x8229 +#define GL_R8I 0x8231 +#define GL_R8UI 0x8232 +#define GL_RASTERIZER_DISCARD 0x8C89 +#define GL_READ_BUFFER 0x0C02 +#define GL_READ_FRAMEBUFFER 0x8CA8 +#define GL_READ_FRAMEBUFFER_BINDING 0x8CAA +#define GL_READ_ONLY 0x88B8 +#define GL_READ_WRITE 0x88BA +#define GL_RED 0x1903 +#define GL_RED_BIAS 0x0D15 +#define GL_RED_BITS 0x0D52 +#define GL_RED_INTEGER 0x8D94 +#define GL_RED_SCALE 0x0D14 +#define GL_REFLECTION_MAP 0x8512 +#define GL_RENDER 0x1C00 +#define GL_RENDERBUFFER 0x8D41 +#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 +#define GL_RENDERBUFFER_BINDING 0x8CA7 +#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 +#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 +#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 +#define GL_RENDERBUFFER_HEIGHT 0x8D43 +#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 +#define GL_RENDERBUFFER_RED_SIZE 0x8D50 +#define GL_RENDERBUFFER_SAMPLES 0x8CAB +#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 +#define GL_RENDERBUFFER_WIDTH 0x8D42 +#define GL_RENDERER 0x1F01 +#define GL_RENDER_MODE 0x0C40 +#define GL_REPEAT 0x2901 +#define GL_REPLACE 0x1E01 +#define GL_RESCALE_NORMAL 0x803A +#define GL_RETURN 0x0102 +#define GL_RG 0x8227 +#define GL_RG16 0x822C +#define GL_RG16F 0x822F +#define GL_RG16I 0x8239 +#define GL_RG16UI 0x823A +#define GL_RG32F 0x8230 +#define GL_RG32I 0x823B +#define GL_RG32UI 0x823C +#define GL_RG8 0x822B +#define GL_RG8I 0x8237 +#define GL_RG8UI 0x8238 +#define GL_RGB 0x1907 +#define GL_RGB10 0x8052 +#define GL_RGB10_A2 0x8059 +#define GL_RGB12 0x8053 +#define GL_RGB16 0x8054 +#define GL_RGB16F 0x881B +#define GL_RGB16I 0x8D89 +#define GL_RGB16UI 0x8D77 +#define GL_RGB32F 0x8815 +#define GL_RGB32I 0x8D83 +#define GL_RGB32UI 0x8D71 +#define GL_RGB4 0x804F +#define GL_RGB5 0x8050 +#define GL_RGB5_A1 0x8057 +#define GL_RGB8 0x8051 +#define GL_RGB8I 0x8D8F +#define GL_RGB8UI 0x8D7D +#define GL_RGB9_E5 0x8C3D +#define GL_RGBA 0x1908 +#define GL_RGBA12 0x805A +#define GL_RGBA16 0x805B +#define GL_RGBA16F 0x881A +#define GL_RGBA16I 0x8D88 +#define GL_RGBA16UI 0x8D76 +#define GL_RGBA2 0x8055 +#define GL_RGBA32F 0x8814 +#define GL_RGBA32I 0x8D82 +#define GL_RGBA32UI 0x8D70 +#define GL_RGBA4 0x8056 +#define GL_RGBA8 0x8058 +#define GL_RGBA8I 0x8D8E +#define GL_RGBA8UI 0x8D7C +#define GL_RGBA_INTEGER 0x8D99 +#define GL_RGBA_MODE 0x0C31 +#define GL_RGB_INTEGER 0x8D98 +#define GL_RGB_SCALE 0x8573 +#define GL_RG_INTEGER 0x8228 +#define GL_RIGHT 0x0407 +#define GL_S 0x2000 +#define GL_SAMPLER_1D 0x8B5D +#define GL_SAMPLER_1D_ARRAY 0x8DC0 +#define GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3 +#define GL_SAMPLER_1D_SHADOW 0x8B61 +#define GL_SAMPLER_2D 0x8B5E +#define GL_SAMPLER_2D_ARRAY 0x8DC1 +#define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4 +#define GL_SAMPLER_2D_SHADOW 0x8B62 +#define GL_SAMPLER_3D 0x8B5F +#define GL_SAMPLER_CUBE 0x8B60 +#define GL_SAMPLER_CUBE_SHADOW 0x8DC5 +#define GL_SAMPLES 0x80A9 +#define GL_SAMPLES_PASSED 0x8914 +#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE 0x809F +#define GL_SAMPLE_BUFFERS 0x80A8 +#define GL_SAMPLE_COVERAGE 0x80A0 +#define GL_SAMPLE_COVERAGE_INVERT 0x80AB +#define GL_SAMPLE_COVERAGE_VALUE 0x80AA +#define GL_SCISSOR_BIT 0x00080000 +#define GL_SCISSOR_BOX 0x0C10 +#define GL_SCISSOR_TEST 0x0C11 +#define GL_SECONDARY_COLOR_ARRAY 0x845E +#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C +#define GL_SECONDARY_COLOR_ARRAY_POINTER 0x845D +#define GL_SECONDARY_COLOR_ARRAY_SIZE 0x845A +#define GL_SECONDARY_COLOR_ARRAY_STRIDE 0x845C +#define GL_SECONDARY_COLOR_ARRAY_TYPE 0x845B +#define GL_SELECT 0x1C02 +#define GL_SELECTION_BUFFER_POINTER 0x0DF3 +#define GL_SELECTION_BUFFER_SIZE 0x0DF4 +#define GL_SEPARATE_ATTRIBS 0x8C8D +#define GL_SEPARATE_SPECULAR_COLOR 0x81FA +#define GL_SET 0x150F +#define GL_SHADER_SOURCE_LENGTH 0x8B88 +#define GL_SHADER_TYPE 0x8B4F +#define GL_SHADE_MODEL 0x0B54 +#define GL_SHADING_LANGUAGE_VERSION 0x8B8C +#define GL_SHININESS 0x1601 +#define GL_SHORT 0x1402 +#define GL_SINGLE_COLOR 0x81F9 +#define GL_SLUMINANCE 0x8C46 +#define GL_SLUMINANCE8 0x8C47 +#define GL_SLUMINANCE8_ALPHA8 0x8C45 +#define GL_SLUMINANCE_ALPHA 0x8C44 +#define GL_SMOOTH 0x1D01 +#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 +#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 +#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 +#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 +#define GL_SOURCE0_ALPHA 0x8588 +#define GL_SOURCE0_RGB 0x8580 +#define GL_SOURCE1_ALPHA 0x8589 +#define GL_SOURCE1_RGB 0x8581 +#define GL_SOURCE2_ALPHA 0x858A +#define GL_SOURCE2_RGB 0x8582 +#define GL_SPECULAR 0x1202 +#define GL_SPHERE_MAP 0x2402 +#define GL_SPOT_CUTOFF 0x1206 +#define GL_SPOT_DIRECTION 0x1204 +#define GL_SPOT_EXPONENT 0x1205 +#define GL_SRC0_ALPHA 0x8588 +#define GL_SRC0_RGB 0x8580 +#define GL_SRC1_ALPHA 0x8589 +#define GL_SRC1_RGB 0x8581 +#define GL_SRC2_ALPHA 0x858A +#define GL_SRC2_RGB 0x8582 +#define GL_SRC_ALPHA 0x0302 +#define GL_SRC_ALPHA_SATURATE 0x0308 +#define GL_SRC_COLOR 0x0300 +#define GL_SRGB 0x8C40 +#define GL_SRGB8 0x8C41 +#define GL_SRGB8_ALPHA8 0x8C43 +#define GL_SRGB_ALPHA 0x8C42 +#define GL_STACK_OVERFLOW 0x0503 +#define GL_STACK_UNDERFLOW 0x0504 +#define GL_STATIC_COPY 0x88E6 +#define GL_STATIC_DRAW 0x88E4 +#define GL_STATIC_READ 0x88E5 +#define GL_STENCIL 0x1802 +#define GL_STENCIL_ATTACHMENT 0x8D20 +#define GL_STENCIL_BACK_FAIL 0x8801 +#define GL_STENCIL_BACK_FUNC 0x8800 +#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 +#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 +#define GL_STENCIL_BACK_REF 0x8CA3 +#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 +#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 +#define GL_STENCIL_BITS 0x0D57 +#define GL_STENCIL_BUFFER_BIT 0x00000400 +#define GL_STENCIL_CLEAR_VALUE 0x0B91 +#define GL_STENCIL_FAIL 0x0B94 +#define GL_STENCIL_FUNC 0x0B92 +#define GL_STENCIL_INDEX 0x1901 +#define GL_STENCIL_INDEX1 0x8D46 +#define GL_STENCIL_INDEX16 0x8D49 +#define GL_STENCIL_INDEX4 0x8D47 +#define GL_STENCIL_INDEX8 0x8D48 +#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 +#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 +#define GL_STENCIL_REF 0x0B97 +#define GL_STENCIL_TEST 0x0B90 +#define GL_STENCIL_VALUE_MASK 0x0B93 +#define GL_STENCIL_WRITEMASK 0x0B98 +#define GL_STEREO 0x0C33 +#define GL_STREAM_COPY 0x88E2 +#define GL_STREAM_DRAW 0x88E0 +#define GL_STREAM_READ 0x88E1 +#define GL_SUBPIXEL_BITS 0x0D50 +#define GL_SUBTRACT 0x84E7 +#define GL_T 0x2001 +#define GL_T2F_C3F_V3F 0x2A2A +#define GL_T2F_C4F_N3F_V3F 0x2A2C +#define GL_T2F_C4UB_V3F 0x2A29 +#define GL_T2F_N3F_V3F 0x2A2B +#define GL_T2F_V3F 0x2A27 +#define GL_T4F_C4F_N3F_V4F 0x2A2D +#define GL_T4F_V4F 0x2A28 +#define GL_TEXTURE 0x1702 +#define GL_TEXTURE0 0x84C0 +#define GL_TEXTURE1 0x84C1 +#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_TEXTURE2 0x84C2 +#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_TEXTURE3 0x84C3 +#define GL_TEXTURE30 0x84DE +#define GL_TEXTURE31 0x84DF +#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_TEXTURE_1D 0x0DE0 +#define GL_TEXTURE_1D_ARRAY 0x8C18 +#define GL_TEXTURE_2D 0x0DE1 +#define GL_TEXTURE_2D_ARRAY 0x8C1A +#define GL_TEXTURE_3D 0x806F +#define GL_TEXTURE_ALPHA_SIZE 0x805F +#define GL_TEXTURE_ALPHA_TYPE 0x8C13 +#define GL_TEXTURE_BASE_LEVEL 0x813C +#define GL_TEXTURE_BINDING_1D 0x8068 +#define GL_TEXTURE_BINDING_1D_ARRAY 0x8C1C +#define GL_TEXTURE_BINDING_2D 0x8069 +#define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D +#define GL_TEXTURE_BINDING_3D 0x806A +#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 +#define GL_TEXTURE_BIT 0x00040000 +#define GL_TEXTURE_BLUE_SIZE 0x805E +#define GL_TEXTURE_BLUE_TYPE 0x8C12 +#define GL_TEXTURE_BORDER 0x1005 +#define GL_TEXTURE_BORDER_COLOR 0x1004 +#define GL_TEXTURE_COMPARE_FUNC 0x884D +#define GL_TEXTURE_COMPARE_MODE 0x884C +#define GL_TEXTURE_COMPONENTS 0x1003 +#define GL_TEXTURE_COMPRESSED 0x86A1 +#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 +#define GL_TEXTURE_COMPRESSION_HINT 0x84EF +#define GL_TEXTURE_COORD_ARRAY 0x8078 +#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A +#define GL_TEXTURE_COORD_ARRAY_POINTER 0x8092 +#define GL_TEXTURE_COORD_ARRAY_SIZE 0x8088 +#define GL_TEXTURE_COORD_ARRAY_STRIDE 0x808A +#define GL_TEXTURE_COORD_ARRAY_TYPE 0x8089 +#define GL_TEXTURE_CUBE_MAP 0x8513 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 +#define GL_TEXTURE_DEPTH 0x8071 +#define GL_TEXTURE_DEPTH_SIZE 0x884A +#define GL_TEXTURE_DEPTH_TYPE 0x8C16 +#define GL_TEXTURE_ENV 0x2300 +#define GL_TEXTURE_ENV_COLOR 0x2201 +#define GL_TEXTURE_ENV_MODE 0x2200 +#define GL_TEXTURE_FILTER_CONTROL 0x8500 +#define GL_TEXTURE_GEN_MODE 0x2500 +#define GL_TEXTURE_GEN_Q 0x0C63 +#define GL_TEXTURE_GEN_R 0x0C62 +#define GL_TEXTURE_GEN_S 0x0C60 +#define GL_TEXTURE_GEN_T 0x0C61 +#define GL_TEXTURE_GREEN_SIZE 0x805D +#define GL_TEXTURE_GREEN_TYPE 0x8C11 +#define GL_TEXTURE_HEIGHT 0x1001 +#define GL_TEXTURE_INTENSITY_SIZE 0x8061 +#define GL_TEXTURE_INTENSITY_TYPE 0x8C15 +#define GL_TEXTURE_INTERNAL_FORMAT 0x1003 +#define GL_TEXTURE_LOD_BIAS 0x8501 +#define GL_TEXTURE_LUMINANCE_SIZE 0x8060 +#define GL_TEXTURE_LUMINANCE_TYPE 0x8C14 +#define GL_TEXTURE_MAG_FILTER 0x2800 +#define GL_TEXTURE_MATRIX 0x0BA8 +#define GL_TEXTURE_MAX_LEVEL 0x813D +#define GL_TEXTURE_MAX_LOD 0x813B +#define GL_TEXTURE_MIN_FILTER 0x2801 +#define GL_TEXTURE_MIN_LOD 0x813A +#define GL_TEXTURE_PRIORITY 0x8066 +#define GL_TEXTURE_RED_SIZE 0x805C +#define GL_TEXTURE_RED_TYPE 0x8C10 +#define GL_TEXTURE_RESIDENT 0x8067 +#define GL_TEXTURE_SHARED_SIZE 0x8C3F +#define GL_TEXTURE_STACK_DEPTH 0x0BA5 +#define GL_TEXTURE_STENCIL_SIZE 0x88F1 +#define GL_TEXTURE_WIDTH 0x1000 +#define GL_TEXTURE_WRAP_R 0x8072 +#define GL_TEXTURE_WRAP_S 0x2802 +#define GL_TEXTURE_WRAP_T 0x2803 +#define GL_TRANSFORM_BIT 0x00001000 +#define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E +#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F +#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F +#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85 +#define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84 +#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88 +#define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83 +#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76 +#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 +#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 +#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 +#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 +#define GL_TRIANGLES 0x0004 +#define GL_TRIANGLE_FAN 0x0006 +#define GL_TRIANGLE_STRIP 0x0005 +#define GL_TRUE 1 +#define GL_UNPACK_ALIGNMENT 0x0CF5 +#define GL_UNPACK_IMAGE_HEIGHT 0x806E +#define GL_UNPACK_LSB_FIRST 0x0CF1 +#define GL_UNPACK_ROW_LENGTH 0x0CF2 +#define GL_UNPACK_SKIP_IMAGES 0x806D +#define GL_UNPACK_SKIP_PIXELS 0x0CF4 +#define GL_UNPACK_SKIP_ROWS 0x0CF3 +#define GL_UNPACK_SWAP_BYTES 0x0CF0 +#define GL_UNSIGNED_BYTE 0x1401 +#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 +#define GL_UNSIGNED_BYTE_3_3_2 0x8032 +#define GL_UNSIGNED_INT 0x1405 +#define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B +#define GL_UNSIGNED_INT_10_10_10_2 0x8036 +#define GL_UNSIGNED_INT_24_8 0x84FA +#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 +#define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E +#define GL_UNSIGNED_INT_8_8_8_8 0x8035 +#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 +#define GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1 +#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6 +#define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2 +#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7 +#define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3 +#define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4 +#define GL_UNSIGNED_INT_VEC2 0x8DC6 +#define GL_UNSIGNED_INT_VEC3 0x8DC7 +#define GL_UNSIGNED_INT_VEC4 0x8DC8 +#define GL_UNSIGNED_NORMALIZED 0x8C17 +#define GL_UNSIGNED_SHORT 0x1403 +#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 +#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 +#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 +#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 +#define GL_UNSIGNED_SHORT_5_6_5 0x8363 +#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 +#define GL_UPPER_LEFT 0x8CA2 +#define GL_V2F 0x2A20 +#define GL_V3F 0x2A21 +#define GL_VALIDATE_STATUS 0x8B83 +#define GL_VENDOR 0x1F00 +#define GL_VERSION 0x1F02 +#define GL_VERTEX_ARRAY 0x8074 +#define GL_VERTEX_ARRAY_BINDING 0x85B5 +#define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896 +#define GL_VERTEX_ARRAY_POINTER 0x808E +#define GL_VERTEX_ARRAY_SIZE 0x807A +#define GL_VERTEX_ARRAY_STRIDE 0x807C +#define GL_VERTEX_ARRAY_TYPE 0x807B +#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F +#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 +#define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD +#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A +#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 +#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 +#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 +#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 +#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 +#define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643 +#define GL_VERTEX_SHADER 0x8B31 +#define GL_VIEWPORT 0x0BA2 +#define GL_VIEWPORT_BIT 0x00000800 +#define GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E +#define GL_WRITE_ONLY 0x88B9 +#define GL_XOR 0x1506 +#define GL_ZERO 0 +#define GL_ZOOM_X 0x0D16 +#define GL_ZOOM_Y 0x0D17 + + +#include +typedef unsigned int GLenum; +typedef unsigned char GLboolean; +typedef unsigned int GLbitfield; +typedef void GLvoid; +typedef khronos_int8_t GLbyte; +typedef khronos_uint8_t GLubyte; +typedef khronos_int16_t GLshort; +typedef khronos_uint16_t GLushort; +typedef int GLint; +typedef unsigned int GLuint; +typedef khronos_int32_t GLclampx; +typedef int GLsizei; +typedef khronos_float_t GLfloat; +typedef khronos_float_t GLclampf; +typedef double GLdouble; +typedef double GLclampd; +typedef void *GLeglClientBufferEXT; +typedef void *GLeglImageOES; +typedef char GLchar; +typedef char GLcharARB; +#ifdef __APPLE__ +typedef void *GLhandleARB; +#else +typedef unsigned int GLhandleARB; +#endif +typedef khronos_uint16_t GLhalf; +typedef khronos_uint16_t GLhalfARB; +typedef khronos_int32_t GLfixed; +#if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && (__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ > 1060) +typedef khronos_intptr_t GLintptr; +#else +typedef khronos_intptr_t GLintptr; +#endif +#if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && (__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ > 1060) +typedef khronos_intptr_t GLintptrARB; +#else +typedef khronos_intptr_t GLintptrARB; +#endif +#if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && (__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ > 1060) +typedef khronos_ssize_t GLsizeiptr; +#else +typedef khronos_ssize_t GLsizeiptr; +#endif +#if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && (__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ > 1060) +typedef khronos_ssize_t GLsizeiptrARB; +#else +typedef khronos_ssize_t GLsizeiptrARB; +#endif +typedef khronos_int64_t GLint64; +typedef khronos_int64_t GLint64EXT; +typedef khronos_uint64_t GLuint64; +typedef khronos_uint64_t GLuint64EXT; +typedef struct __GLsync *GLsync; +struct _cl_context; +struct _cl_event; +typedef void (GLAD_API_PTR *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +typedef void (GLAD_API_PTR *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +typedef void (GLAD_API_PTR *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +typedef void (GLAD_API_PTR *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,void *userParam); +typedef unsigned short GLhalfNV; +typedef GLintptr GLvdpauSurfaceNV; +typedef void (GLAD_API_PTR *GLVULKANPROCNV)(void); + + +#define GL_VERSION_1_0 1 +GLAD_API_CALL int GLAD_GL_VERSION_1_0; +#define GL_VERSION_1_1 1 +GLAD_API_CALL int GLAD_GL_VERSION_1_1; +#define GL_VERSION_1_2 1 +GLAD_API_CALL int GLAD_GL_VERSION_1_2; +#define GL_VERSION_1_3 1 +GLAD_API_CALL int GLAD_GL_VERSION_1_3; +#define GL_VERSION_1_4 1 +GLAD_API_CALL int GLAD_GL_VERSION_1_4; +#define GL_VERSION_1_5 1 +GLAD_API_CALL int GLAD_GL_VERSION_1_5; +#define GL_VERSION_2_0 1 +GLAD_API_CALL int GLAD_GL_VERSION_2_0; +#define GL_VERSION_2_1 1 +GLAD_API_CALL int GLAD_GL_VERSION_2_1; +#define GL_VERSION_3_0 1 +GLAD_API_CALL int GLAD_GL_VERSION_3_0; + + +typedef void (GLAD_API_PTR *PFNGLACCUMPROC)(GLenum op, GLfloat value); +typedef void (GLAD_API_PTR *PFNGLACTIVETEXTUREPROC)(GLenum texture); +typedef void (GLAD_API_PTR *PFNGLALPHAFUNCPROC)(GLenum func, GLfloat ref); +typedef GLboolean (GLAD_API_PTR *PFNGLARETEXTURESRESIDENTPROC)(GLsizei n, const GLuint * textures, GLboolean * residences); +typedef void (GLAD_API_PTR *PFNGLARRAYELEMENTPROC)(GLint i); +typedef void (GLAD_API_PTR *PFNGLATTACHSHADERPROC)(GLuint program, GLuint shader); +typedef void (GLAD_API_PTR *PFNGLBEGINPROC)(GLenum mode); +typedef void (GLAD_API_PTR *PFNGLBEGINCONDITIONALRENDERPROC)(GLuint id, GLenum mode); +typedef void (GLAD_API_PTR *PFNGLBEGINQUERYPROC)(GLenum target, GLuint id); +typedef void (GLAD_API_PTR *PFNGLBEGINTRANSFORMFEEDBACKPROC)(GLenum primitiveMode); +typedef void (GLAD_API_PTR *PFNGLBINDATTRIBLOCATIONPROC)(GLuint program, GLuint index, const GLchar * name); +typedef void (GLAD_API_PTR *PFNGLBINDBUFFERPROC)(GLenum target, GLuint buffer); +typedef void (GLAD_API_PTR *PFNGLBINDBUFFERBASEPROC)(GLenum target, GLuint index, GLuint buffer); +typedef void (GLAD_API_PTR *PFNGLBINDBUFFERRANGEPROC)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (GLAD_API_PTR *PFNGLBINDFRAGDATALOCATIONPROC)(GLuint program, GLuint color, const GLchar * name); +typedef void (GLAD_API_PTR *PFNGLBINDFRAMEBUFFERPROC)(GLenum target, GLuint framebuffer); +typedef void (GLAD_API_PTR *PFNGLBINDRENDERBUFFERPROC)(GLenum target, GLuint renderbuffer); +typedef void (GLAD_API_PTR *PFNGLBINDTEXTUREPROC)(GLenum target, GLuint texture); +typedef void (GLAD_API_PTR *PFNGLBINDVERTEXARRAYPROC)(GLuint array); +typedef void (GLAD_API_PTR *PFNGLBITMAPPROC)(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte * bitmap); +typedef void (GLAD_API_PTR *PFNGLBLENDCOLORPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +typedef void (GLAD_API_PTR *PFNGLBLENDEQUATIONPROC)(GLenum mode); +typedef void (GLAD_API_PTR *PFNGLBLENDEQUATIONSEPARATEPROC)(GLenum modeRGB, GLenum modeAlpha); +typedef void (GLAD_API_PTR *PFNGLBLENDFUNCPROC)(GLenum sfactor, GLenum dfactor); +typedef void (GLAD_API_PTR *PFNGLBLENDFUNCSEPARATEPROC)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +typedef void (GLAD_API_PTR *PFNGLBLITFRAMEBUFFERPROC)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +typedef void (GLAD_API_PTR *PFNGLBUFFERDATAPROC)(GLenum target, GLsizeiptr size, const void * data, GLenum usage); +typedef void (GLAD_API_PTR *PFNGLBUFFERSUBDATAPROC)(GLenum target, GLintptr offset, GLsizeiptr size, const void * data); +typedef void (GLAD_API_PTR *PFNGLCALLLISTPROC)(GLuint list); +typedef void (GLAD_API_PTR *PFNGLCALLLISTSPROC)(GLsizei n, GLenum type, const void * lists); +typedef GLenum (GLAD_API_PTR *PFNGLCHECKFRAMEBUFFERSTATUSPROC)(GLenum target); +typedef void (GLAD_API_PTR *PFNGLCLAMPCOLORPROC)(GLenum target, GLenum clamp); +typedef void (GLAD_API_PTR *PFNGLCLEARPROC)(GLbitfield mask); +typedef void (GLAD_API_PTR *PFNGLCLEARACCUMPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +typedef void (GLAD_API_PTR *PFNGLCLEARBUFFERFIPROC)(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); +typedef void (GLAD_API_PTR *PFNGLCLEARBUFFERFVPROC)(GLenum buffer, GLint drawbuffer, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLCLEARBUFFERIVPROC)(GLenum buffer, GLint drawbuffer, const GLint * value); +typedef void (GLAD_API_PTR *PFNGLCLEARBUFFERUIVPROC)(GLenum buffer, GLint drawbuffer, const GLuint * value); +typedef void (GLAD_API_PTR *PFNGLCLEARCOLORPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +typedef void (GLAD_API_PTR *PFNGLCLEARDEPTHPROC)(GLdouble depth); +typedef void (GLAD_API_PTR *PFNGLCLEARINDEXPROC)(GLfloat c); +typedef void (GLAD_API_PTR *PFNGLCLEARSTENCILPROC)(GLint s); +typedef void (GLAD_API_PTR *PFNGLCLIENTACTIVETEXTUREPROC)(GLenum texture); +typedef void (GLAD_API_PTR *PFNGLCLIPPLANEPROC)(GLenum plane, const GLdouble * equation); +typedef void (GLAD_API_PTR *PFNGLCOLOR3BPROC)(GLbyte red, GLbyte green, GLbyte blue); +typedef void (GLAD_API_PTR *PFNGLCOLOR3BVPROC)(const GLbyte * v); +typedef void (GLAD_API_PTR *PFNGLCOLOR3DPROC)(GLdouble red, GLdouble green, GLdouble blue); +typedef void (GLAD_API_PTR *PFNGLCOLOR3DVPROC)(const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLCOLOR3FPROC)(GLfloat red, GLfloat green, GLfloat blue); +typedef void (GLAD_API_PTR *PFNGLCOLOR3FVPROC)(const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLCOLOR3IPROC)(GLint red, GLint green, GLint blue); +typedef void (GLAD_API_PTR *PFNGLCOLOR3IVPROC)(const GLint * v); +typedef void (GLAD_API_PTR *PFNGLCOLOR3SPROC)(GLshort red, GLshort green, GLshort blue); +typedef void (GLAD_API_PTR *PFNGLCOLOR3SVPROC)(const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLCOLOR3UBPROC)(GLubyte red, GLubyte green, GLubyte blue); +typedef void (GLAD_API_PTR *PFNGLCOLOR3UBVPROC)(const GLubyte * v); +typedef void (GLAD_API_PTR *PFNGLCOLOR3UIPROC)(GLuint red, GLuint green, GLuint blue); +typedef void (GLAD_API_PTR *PFNGLCOLOR3UIVPROC)(const GLuint * v); +typedef void (GLAD_API_PTR *PFNGLCOLOR3USPROC)(GLushort red, GLushort green, GLushort blue); +typedef void (GLAD_API_PTR *PFNGLCOLOR3USVPROC)(const GLushort * v); +typedef void (GLAD_API_PTR *PFNGLCOLOR4BPROC)(GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha); +typedef void (GLAD_API_PTR *PFNGLCOLOR4BVPROC)(const GLbyte * v); +typedef void (GLAD_API_PTR *PFNGLCOLOR4DPROC)(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha); +typedef void (GLAD_API_PTR *PFNGLCOLOR4DVPROC)(const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLCOLOR4FPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +typedef void (GLAD_API_PTR *PFNGLCOLOR4FVPROC)(const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLCOLOR4IPROC)(GLint red, GLint green, GLint blue, GLint alpha); +typedef void (GLAD_API_PTR *PFNGLCOLOR4IVPROC)(const GLint * v); +typedef void (GLAD_API_PTR *PFNGLCOLOR4SPROC)(GLshort red, GLshort green, GLshort blue, GLshort alpha); +typedef void (GLAD_API_PTR *PFNGLCOLOR4SVPROC)(const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLCOLOR4UBPROC)(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha); +typedef void (GLAD_API_PTR *PFNGLCOLOR4UBVPROC)(const GLubyte * v); +typedef void (GLAD_API_PTR *PFNGLCOLOR4UIPROC)(GLuint red, GLuint green, GLuint blue, GLuint alpha); +typedef void (GLAD_API_PTR *PFNGLCOLOR4UIVPROC)(const GLuint * v); +typedef void (GLAD_API_PTR *PFNGLCOLOR4USPROC)(GLushort red, GLushort green, GLushort blue, GLushort alpha); +typedef void (GLAD_API_PTR *PFNGLCOLOR4USVPROC)(const GLushort * v); +typedef void (GLAD_API_PTR *PFNGLCOLORMASKPROC)(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); +typedef void (GLAD_API_PTR *PFNGLCOLORMASKIPROC)(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +typedef void (GLAD_API_PTR *PFNGLCOLORMATERIALPROC)(GLenum face, GLenum mode); +typedef void (GLAD_API_PTR *PFNGLCOLORPOINTERPROC)(GLint size, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAD_API_PTR *PFNGLCOMPILESHADERPROC)(GLuint shader); +typedef void (GLAD_API_PTR *PFNGLCOMPRESSEDTEXIMAGE1DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void * data); +typedef void (GLAD_API_PTR *PFNGLCOMPRESSEDTEXIMAGE2DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void * data); +typedef void (GLAD_API_PTR *PFNGLCOMPRESSEDTEXIMAGE3DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * data); +typedef void (GLAD_API_PTR *PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void * data); +typedef void (GLAD_API_PTR *PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * data); +typedef void (GLAD_API_PTR *PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * data); +typedef void (GLAD_API_PTR *PFNGLCOPYPIXELSPROC)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type); +typedef void (GLAD_API_PTR *PFNGLCOPYTEXIMAGE1DPROC)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +typedef void (GLAD_API_PTR *PFNGLCOPYTEXIMAGE2DPROC)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +typedef void (GLAD_API_PTR *PFNGLCOPYTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +typedef void (GLAD_API_PTR *PFNGLCOPYTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAD_API_PTR *PFNGLCOPYTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef GLuint (GLAD_API_PTR *PFNGLCREATEPROGRAMPROC)(void); +typedef GLuint (GLAD_API_PTR *PFNGLCREATESHADERPROC)(GLenum type); +typedef void (GLAD_API_PTR *PFNGLCULLFACEPROC)(GLenum mode); +typedef void (GLAD_API_PTR *PFNGLDELETEBUFFERSPROC)(GLsizei n, const GLuint * buffers); +typedef void (GLAD_API_PTR *PFNGLDELETEFRAMEBUFFERSPROC)(GLsizei n, const GLuint * framebuffers); +typedef void (GLAD_API_PTR *PFNGLDELETELISTSPROC)(GLuint list, GLsizei range); +typedef void (GLAD_API_PTR *PFNGLDELETEPROGRAMPROC)(GLuint program); +typedef void (GLAD_API_PTR *PFNGLDELETEQUERIESPROC)(GLsizei n, const GLuint * ids); +typedef void (GLAD_API_PTR *PFNGLDELETERENDERBUFFERSPROC)(GLsizei n, const GLuint * renderbuffers); +typedef void (GLAD_API_PTR *PFNGLDELETESHADERPROC)(GLuint shader); +typedef void (GLAD_API_PTR *PFNGLDELETETEXTURESPROC)(GLsizei n, const GLuint * textures); +typedef void (GLAD_API_PTR *PFNGLDELETEVERTEXARRAYSPROC)(GLsizei n, const GLuint * arrays); +typedef void (GLAD_API_PTR *PFNGLDEPTHFUNCPROC)(GLenum func); +typedef void (GLAD_API_PTR *PFNGLDEPTHMASKPROC)(GLboolean flag); +typedef void (GLAD_API_PTR *PFNGLDEPTHRANGEPROC)(GLdouble n, GLdouble f); +typedef void (GLAD_API_PTR *PFNGLDETACHSHADERPROC)(GLuint program, GLuint shader); +typedef void (GLAD_API_PTR *PFNGLDISABLEPROC)(GLenum cap); +typedef void (GLAD_API_PTR *PFNGLDISABLECLIENTSTATEPROC)(GLenum array); +typedef void (GLAD_API_PTR *PFNGLDISABLEVERTEXATTRIBARRAYPROC)(GLuint index); +typedef void (GLAD_API_PTR *PFNGLDISABLEIPROC)(GLenum target, GLuint index); +typedef void (GLAD_API_PTR *PFNGLDRAWARRAYSPROC)(GLenum mode, GLint first, GLsizei count); +typedef void (GLAD_API_PTR *PFNGLDRAWBUFFERPROC)(GLenum buf); +typedef void (GLAD_API_PTR *PFNGLDRAWBUFFERSPROC)(GLsizei n, const GLenum * bufs); +typedef void (GLAD_API_PTR *PFNGLDRAWELEMENTSPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices); +typedef void (GLAD_API_PTR *PFNGLDRAWPIXELSPROC)(GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels); +typedef void (GLAD_API_PTR *PFNGLDRAWRANGEELEMENTSPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices); +typedef void (GLAD_API_PTR *PFNGLEDGEFLAGPROC)(GLboolean flag); +typedef void (GLAD_API_PTR *PFNGLEDGEFLAGPOINTERPROC)(GLsizei stride, const void * pointer); +typedef void (GLAD_API_PTR *PFNGLEDGEFLAGVPROC)(const GLboolean * flag); +typedef void (GLAD_API_PTR *PFNGLENABLEPROC)(GLenum cap); +typedef void (GLAD_API_PTR *PFNGLENABLECLIENTSTATEPROC)(GLenum array); +typedef void (GLAD_API_PTR *PFNGLENABLEVERTEXATTRIBARRAYPROC)(GLuint index); +typedef void (GLAD_API_PTR *PFNGLENABLEIPROC)(GLenum target, GLuint index); +typedef void (GLAD_API_PTR *PFNGLENDPROC)(void); +typedef void (GLAD_API_PTR *PFNGLENDCONDITIONALRENDERPROC)(void); +typedef void (GLAD_API_PTR *PFNGLENDLISTPROC)(void); +typedef void (GLAD_API_PTR *PFNGLENDQUERYPROC)(GLenum target); +typedef void (GLAD_API_PTR *PFNGLENDTRANSFORMFEEDBACKPROC)(void); +typedef void (GLAD_API_PTR *PFNGLEVALCOORD1DPROC)(GLdouble u); +typedef void (GLAD_API_PTR *PFNGLEVALCOORD1DVPROC)(const GLdouble * u); +typedef void (GLAD_API_PTR *PFNGLEVALCOORD1FPROC)(GLfloat u); +typedef void (GLAD_API_PTR *PFNGLEVALCOORD1FVPROC)(const GLfloat * u); +typedef void (GLAD_API_PTR *PFNGLEVALCOORD2DPROC)(GLdouble u, GLdouble v); +typedef void (GLAD_API_PTR *PFNGLEVALCOORD2DVPROC)(const GLdouble * u); +typedef void (GLAD_API_PTR *PFNGLEVALCOORD2FPROC)(GLfloat u, GLfloat v); +typedef void (GLAD_API_PTR *PFNGLEVALCOORD2FVPROC)(const GLfloat * u); +typedef void (GLAD_API_PTR *PFNGLEVALMESH1PROC)(GLenum mode, GLint i1, GLint i2); +typedef void (GLAD_API_PTR *PFNGLEVALMESH2PROC)(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2); +typedef void (GLAD_API_PTR *PFNGLEVALPOINT1PROC)(GLint i); +typedef void (GLAD_API_PTR *PFNGLEVALPOINT2PROC)(GLint i, GLint j); +typedef void (GLAD_API_PTR *PFNGLFEEDBACKBUFFERPROC)(GLsizei size, GLenum type, GLfloat * buffer); +typedef void (GLAD_API_PTR *PFNGLFINISHPROC)(void); +typedef void (GLAD_API_PTR *PFNGLFLUSHPROC)(void); +typedef void (GLAD_API_PTR *PFNGLFLUSHMAPPEDBUFFERRANGEPROC)(GLenum target, GLintptr offset, GLsizeiptr length); +typedef void (GLAD_API_PTR *PFNGLFOGCOORDPOINTERPROC)(GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAD_API_PTR *PFNGLFOGCOORDDPROC)(GLdouble coord); +typedef void (GLAD_API_PTR *PFNGLFOGCOORDDVPROC)(const GLdouble * coord); +typedef void (GLAD_API_PTR *PFNGLFOGCOORDFPROC)(GLfloat coord); +typedef void (GLAD_API_PTR *PFNGLFOGCOORDFVPROC)(const GLfloat * coord); +typedef void (GLAD_API_PTR *PFNGLFOGFPROC)(GLenum pname, GLfloat param); +typedef void (GLAD_API_PTR *PFNGLFOGFVPROC)(GLenum pname, const GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLFOGIPROC)(GLenum pname, GLint param); +typedef void (GLAD_API_PTR *PFNGLFOGIVPROC)(GLenum pname, const GLint * params); +typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERRENDERBUFFERPROC)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERTEXTURE1DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERTEXTURE2DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERTEXTURE3DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +typedef void (GLAD_API_PTR *PFNGLFRAMEBUFFERTEXTURELAYERPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void (GLAD_API_PTR *PFNGLFRONTFACEPROC)(GLenum mode); +typedef void (GLAD_API_PTR *PFNGLFRUSTUMPROC)(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +typedef void (GLAD_API_PTR *PFNGLGENBUFFERSPROC)(GLsizei n, GLuint * buffers); +typedef void (GLAD_API_PTR *PFNGLGENFRAMEBUFFERSPROC)(GLsizei n, GLuint * framebuffers); +typedef GLuint (GLAD_API_PTR *PFNGLGENLISTSPROC)(GLsizei range); +typedef void (GLAD_API_PTR *PFNGLGENQUERIESPROC)(GLsizei n, GLuint * ids); +typedef void (GLAD_API_PTR *PFNGLGENRENDERBUFFERSPROC)(GLsizei n, GLuint * renderbuffers); +typedef void (GLAD_API_PTR *PFNGLGENTEXTURESPROC)(GLsizei n, GLuint * textures); +typedef void (GLAD_API_PTR *PFNGLGENVERTEXARRAYSPROC)(GLsizei n, GLuint * arrays); +typedef void (GLAD_API_PTR *PFNGLGENERATEMIPMAPPROC)(GLenum target); +typedef void (GLAD_API_PTR *PFNGLGETACTIVEATTRIBPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLchar * name); +typedef void (GLAD_API_PTR *PFNGLGETACTIVEUNIFORMPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLchar * name); +typedef void (GLAD_API_PTR *PFNGLGETATTACHEDSHADERSPROC)(GLuint program, GLsizei maxCount, GLsizei * count, GLuint * shaders); +typedef GLint (GLAD_API_PTR *PFNGLGETATTRIBLOCATIONPROC)(GLuint program, const GLchar * name); +typedef void (GLAD_API_PTR *PFNGLGETBOOLEANI_VPROC)(GLenum target, GLuint index, GLboolean * data); +typedef void (GLAD_API_PTR *PFNGLGETBOOLEANVPROC)(GLenum pname, GLboolean * data); +typedef void (GLAD_API_PTR *PFNGLGETBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETBUFFERPOINTERVPROC)(GLenum target, GLenum pname, void ** params); +typedef void (GLAD_API_PTR *PFNGLGETBUFFERSUBDATAPROC)(GLenum target, GLintptr offset, GLsizeiptr size, void * data); +typedef void (GLAD_API_PTR *PFNGLGETCLIPPLANEPROC)(GLenum plane, GLdouble * equation); +typedef void (GLAD_API_PTR *PFNGLGETCOMPRESSEDTEXIMAGEPROC)(GLenum target, GLint level, void * img); +typedef void (GLAD_API_PTR *PFNGLGETDOUBLEVPROC)(GLenum pname, GLdouble * data); +typedef GLenum (GLAD_API_PTR *PFNGLGETERRORPROC)(void); +typedef void (GLAD_API_PTR *PFNGLGETFLOATVPROC)(GLenum pname, GLfloat * data); +typedef GLint (GLAD_API_PTR *PFNGLGETFRAGDATALOCATIONPROC)(GLuint program, const GLchar * name); +typedef void (GLAD_API_PTR *PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)(GLenum target, GLenum attachment, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETINTEGERI_VPROC)(GLenum target, GLuint index, GLint * data); +typedef void (GLAD_API_PTR *PFNGLGETINTEGERVPROC)(GLenum pname, GLint * data); +typedef void (GLAD_API_PTR *PFNGLGETLIGHTFVPROC)(GLenum light, GLenum pname, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETLIGHTIVPROC)(GLenum light, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETMAPDVPROC)(GLenum target, GLenum query, GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLGETMAPFVPROC)(GLenum target, GLenum query, GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLGETMAPIVPROC)(GLenum target, GLenum query, GLint * v); +typedef void (GLAD_API_PTR *PFNGLGETMATERIALFVPROC)(GLenum face, GLenum pname, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETMATERIALIVPROC)(GLenum face, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETPIXELMAPFVPROC)(GLenum map, GLfloat * values); +typedef void (GLAD_API_PTR *PFNGLGETPIXELMAPUIVPROC)(GLenum map, GLuint * values); +typedef void (GLAD_API_PTR *PFNGLGETPIXELMAPUSVPROC)(GLenum map, GLushort * values); +typedef void (GLAD_API_PTR *PFNGLGETPOINTERVPROC)(GLenum pname, void ** params); +typedef void (GLAD_API_PTR *PFNGLGETPOLYGONSTIPPLEPROC)(GLubyte * mask); +typedef void (GLAD_API_PTR *PFNGLGETPROGRAMINFOLOGPROC)(GLuint program, GLsizei bufSize, GLsizei * length, GLchar * infoLog); +typedef void (GLAD_API_PTR *PFNGLGETPROGRAMIVPROC)(GLuint program, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETQUERYOBJECTIVPROC)(GLuint id, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETQUERYOBJECTUIVPROC)(GLuint id, GLenum pname, GLuint * params); +typedef void (GLAD_API_PTR *PFNGLGETQUERYIVPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETRENDERBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETSHADERINFOLOGPROC)(GLuint shader, GLsizei bufSize, GLsizei * length, GLchar * infoLog); +typedef void (GLAD_API_PTR *PFNGLGETSHADERSOURCEPROC)(GLuint shader, GLsizei bufSize, GLsizei * length, GLchar * source); +typedef void (GLAD_API_PTR *PFNGLGETSHADERIVPROC)(GLuint shader, GLenum pname, GLint * params); +typedef const GLubyte * (GLAD_API_PTR *PFNGLGETSTRINGPROC)(GLenum name); +typedef const GLubyte * (GLAD_API_PTR *PFNGLGETSTRINGIPROC)(GLenum name, GLuint index); +typedef void (GLAD_API_PTR *PFNGLGETTEXENVFVPROC)(GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETTEXENVIVPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETTEXGENDVPROC)(GLenum coord, GLenum pname, GLdouble * params); +typedef void (GLAD_API_PTR *PFNGLGETTEXGENFVPROC)(GLenum coord, GLenum pname, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETTEXGENIVPROC)(GLenum coord, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETTEXIMAGEPROC)(GLenum target, GLint level, GLenum format, GLenum type, void * pixels); +typedef void (GLAD_API_PTR *PFNGLGETTEXLEVELPARAMETERFVPROC)(GLenum target, GLint level, GLenum pname, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETTEXLEVELPARAMETERIVPROC)(GLenum target, GLint level, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETTEXPARAMETERIIVPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETTEXPARAMETERIUIVPROC)(GLenum target, GLenum pname, GLuint * params); +typedef void (GLAD_API_PTR *PFNGLGETTEXPARAMETERFVPROC)(GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETTEXPARAMETERIVPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETTRANSFORMFEEDBACKVARYINGPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLsizei * size, GLenum * type, GLchar * name); +typedef GLint (GLAD_API_PTR *PFNGLGETUNIFORMLOCATIONPROC)(GLuint program, const GLchar * name); +typedef void (GLAD_API_PTR *PFNGLGETUNIFORMFVPROC)(GLuint program, GLint location, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETUNIFORMIVPROC)(GLuint program, GLint location, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETUNIFORMUIVPROC)(GLuint program, GLint location, GLuint * params); +typedef void (GLAD_API_PTR *PFNGLGETVERTEXATTRIBIIVPROC)(GLuint index, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLGETVERTEXATTRIBIUIVPROC)(GLuint index, GLenum pname, GLuint * params); +typedef void (GLAD_API_PTR *PFNGLGETVERTEXATTRIBPOINTERVPROC)(GLuint index, GLenum pname, void ** pointer); +typedef void (GLAD_API_PTR *PFNGLGETVERTEXATTRIBDVPROC)(GLuint index, GLenum pname, GLdouble * params); +typedef void (GLAD_API_PTR *PFNGLGETVERTEXATTRIBFVPROC)(GLuint index, GLenum pname, GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLGETVERTEXATTRIBIVPROC)(GLuint index, GLenum pname, GLint * params); +typedef void (GLAD_API_PTR *PFNGLHINTPROC)(GLenum target, GLenum mode); +typedef void (GLAD_API_PTR *PFNGLINDEXMASKPROC)(GLuint mask); +typedef void (GLAD_API_PTR *PFNGLINDEXPOINTERPROC)(GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAD_API_PTR *PFNGLINDEXDPROC)(GLdouble c); +typedef void (GLAD_API_PTR *PFNGLINDEXDVPROC)(const GLdouble * c); +typedef void (GLAD_API_PTR *PFNGLINDEXFPROC)(GLfloat c); +typedef void (GLAD_API_PTR *PFNGLINDEXFVPROC)(const GLfloat * c); +typedef void (GLAD_API_PTR *PFNGLINDEXIPROC)(GLint c); +typedef void (GLAD_API_PTR *PFNGLINDEXIVPROC)(const GLint * c); +typedef void (GLAD_API_PTR *PFNGLINDEXSPROC)(GLshort c); +typedef void (GLAD_API_PTR *PFNGLINDEXSVPROC)(const GLshort * c); +typedef void (GLAD_API_PTR *PFNGLINDEXUBPROC)(GLubyte c); +typedef void (GLAD_API_PTR *PFNGLINDEXUBVPROC)(const GLubyte * c); +typedef void (GLAD_API_PTR *PFNGLINITNAMESPROC)(void); +typedef void (GLAD_API_PTR *PFNGLINTERLEAVEDARRAYSPROC)(GLenum format, GLsizei stride, const void * pointer); +typedef GLboolean (GLAD_API_PTR *PFNGLISBUFFERPROC)(GLuint buffer); +typedef GLboolean (GLAD_API_PTR *PFNGLISENABLEDPROC)(GLenum cap); +typedef GLboolean (GLAD_API_PTR *PFNGLISENABLEDIPROC)(GLenum target, GLuint index); +typedef GLboolean (GLAD_API_PTR *PFNGLISFRAMEBUFFERPROC)(GLuint framebuffer); +typedef GLboolean (GLAD_API_PTR *PFNGLISLISTPROC)(GLuint list); +typedef GLboolean (GLAD_API_PTR *PFNGLISPROGRAMPROC)(GLuint program); +typedef GLboolean (GLAD_API_PTR *PFNGLISQUERYPROC)(GLuint id); +typedef GLboolean (GLAD_API_PTR *PFNGLISRENDERBUFFERPROC)(GLuint renderbuffer); +typedef GLboolean (GLAD_API_PTR *PFNGLISSHADERPROC)(GLuint shader); +typedef GLboolean (GLAD_API_PTR *PFNGLISTEXTUREPROC)(GLuint texture); +typedef GLboolean (GLAD_API_PTR *PFNGLISVERTEXARRAYPROC)(GLuint array); +typedef void (GLAD_API_PTR *PFNGLLIGHTMODELFPROC)(GLenum pname, GLfloat param); +typedef void (GLAD_API_PTR *PFNGLLIGHTMODELFVPROC)(GLenum pname, const GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLLIGHTMODELIPROC)(GLenum pname, GLint param); +typedef void (GLAD_API_PTR *PFNGLLIGHTMODELIVPROC)(GLenum pname, const GLint * params); +typedef void (GLAD_API_PTR *PFNGLLIGHTFPROC)(GLenum light, GLenum pname, GLfloat param); +typedef void (GLAD_API_PTR *PFNGLLIGHTFVPROC)(GLenum light, GLenum pname, const GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLLIGHTIPROC)(GLenum light, GLenum pname, GLint param); +typedef void (GLAD_API_PTR *PFNGLLIGHTIVPROC)(GLenum light, GLenum pname, const GLint * params); +typedef void (GLAD_API_PTR *PFNGLLINESTIPPLEPROC)(GLint factor, GLushort pattern); +typedef void (GLAD_API_PTR *PFNGLLINEWIDTHPROC)(GLfloat width); +typedef void (GLAD_API_PTR *PFNGLLINKPROGRAMPROC)(GLuint program); +typedef void (GLAD_API_PTR *PFNGLLISTBASEPROC)(GLuint base); +typedef void (GLAD_API_PTR *PFNGLLOADIDENTITYPROC)(void); +typedef void (GLAD_API_PTR *PFNGLLOADMATRIXDPROC)(const GLdouble * m); +typedef void (GLAD_API_PTR *PFNGLLOADMATRIXFPROC)(const GLfloat * m); +typedef void (GLAD_API_PTR *PFNGLLOADNAMEPROC)(GLuint name); +typedef void (GLAD_API_PTR *PFNGLLOADTRANSPOSEMATRIXDPROC)(const GLdouble * m); +typedef void (GLAD_API_PTR *PFNGLLOADTRANSPOSEMATRIXFPROC)(const GLfloat * m); +typedef void (GLAD_API_PTR *PFNGLLOGICOPPROC)(GLenum opcode); +typedef void (GLAD_API_PTR *PFNGLMAP1DPROC)(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble * points); +typedef void (GLAD_API_PTR *PFNGLMAP1FPROC)(GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat * points); +typedef void (GLAD_API_PTR *PFNGLMAP2DPROC)(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble * points); +typedef void (GLAD_API_PTR *PFNGLMAP2FPROC)(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat * points); +typedef void * (GLAD_API_PTR *PFNGLMAPBUFFERPROC)(GLenum target, GLenum access); +typedef void * (GLAD_API_PTR *PFNGLMAPBUFFERRANGEPROC)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); +typedef void (GLAD_API_PTR *PFNGLMAPGRID1DPROC)(GLint un, GLdouble u1, GLdouble u2); +typedef void (GLAD_API_PTR *PFNGLMAPGRID1FPROC)(GLint un, GLfloat u1, GLfloat u2); +typedef void (GLAD_API_PTR *PFNGLMAPGRID2DPROC)(GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2); +typedef void (GLAD_API_PTR *PFNGLMAPGRID2FPROC)(GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2); +typedef void (GLAD_API_PTR *PFNGLMATERIALFPROC)(GLenum face, GLenum pname, GLfloat param); +typedef void (GLAD_API_PTR *PFNGLMATERIALFVPROC)(GLenum face, GLenum pname, const GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLMATERIALIPROC)(GLenum face, GLenum pname, GLint param); +typedef void (GLAD_API_PTR *PFNGLMATERIALIVPROC)(GLenum face, GLenum pname, const GLint * params); +typedef void (GLAD_API_PTR *PFNGLMATRIXMODEPROC)(GLenum mode); +typedef void (GLAD_API_PTR *PFNGLMULTMATRIXDPROC)(const GLdouble * m); +typedef void (GLAD_API_PTR *PFNGLMULTMATRIXFPROC)(const GLfloat * m); +typedef void (GLAD_API_PTR *PFNGLMULTTRANSPOSEMATRIXDPROC)(const GLdouble * m); +typedef void (GLAD_API_PTR *PFNGLMULTTRANSPOSEMATRIXFPROC)(const GLfloat * m); +typedef void (GLAD_API_PTR *PFNGLMULTIDRAWARRAYSPROC)(GLenum mode, const GLint * first, const GLsizei * count, GLsizei drawcount); +typedef void (GLAD_API_PTR *PFNGLMULTIDRAWELEMENTSPROC)(GLenum mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei drawcount); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD1DPROC)(GLenum target, GLdouble s); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD1DVPROC)(GLenum target, const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD1FPROC)(GLenum target, GLfloat s); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD1FVPROC)(GLenum target, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD1IPROC)(GLenum target, GLint s); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD1IVPROC)(GLenum target, const GLint * v); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD1SPROC)(GLenum target, GLshort s); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD1SVPROC)(GLenum target, const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD2DPROC)(GLenum target, GLdouble s, GLdouble t); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD2DVPROC)(GLenum target, const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD2FPROC)(GLenum target, GLfloat s, GLfloat t); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD2FVPROC)(GLenum target, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD2IPROC)(GLenum target, GLint s, GLint t); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD2IVPROC)(GLenum target, const GLint * v); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD2SPROC)(GLenum target, GLshort s, GLshort t); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD2SVPROC)(GLenum target, const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD3DPROC)(GLenum target, GLdouble s, GLdouble t, GLdouble r); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD3DVPROC)(GLenum target, const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD3FPROC)(GLenum target, GLfloat s, GLfloat t, GLfloat r); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD3FVPROC)(GLenum target, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD3IPROC)(GLenum target, GLint s, GLint t, GLint r); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD3IVPROC)(GLenum target, const GLint * v); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD3SPROC)(GLenum target, GLshort s, GLshort t, GLshort r); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD3SVPROC)(GLenum target, const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD4DPROC)(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD4DVPROC)(GLenum target, const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD4FPROC)(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD4FVPROC)(GLenum target, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD4IPROC)(GLenum target, GLint s, GLint t, GLint r, GLint q); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD4IVPROC)(GLenum target, const GLint * v); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD4SPROC)(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +typedef void (GLAD_API_PTR *PFNGLMULTITEXCOORD4SVPROC)(GLenum target, const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLNEWLISTPROC)(GLuint list, GLenum mode); +typedef void (GLAD_API_PTR *PFNGLNORMAL3BPROC)(GLbyte nx, GLbyte ny, GLbyte nz); +typedef void (GLAD_API_PTR *PFNGLNORMAL3BVPROC)(const GLbyte * v); +typedef void (GLAD_API_PTR *PFNGLNORMAL3DPROC)(GLdouble nx, GLdouble ny, GLdouble nz); +typedef void (GLAD_API_PTR *PFNGLNORMAL3DVPROC)(const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLNORMAL3FPROC)(GLfloat nx, GLfloat ny, GLfloat nz); +typedef void (GLAD_API_PTR *PFNGLNORMAL3FVPROC)(const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLNORMAL3IPROC)(GLint nx, GLint ny, GLint nz); +typedef void (GLAD_API_PTR *PFNGLNORMAL3IVPROC)(const GLint * v); +typedef void (GLAD_API_PTR *PFNGLNORMAL3SPROC)(GLshort nx, GLshort ny, GLshort nz); +typedef void (GLAD_API_PTR *PFNGLNORMAL3SVPROC)(const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLNORMALPOINTERPROC)(GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAD_API_PTR *PFNGLORTHOPROC)(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +typedef void (GLAD_API_PTR *PFNGLPASSTHROUGHPROC)(GLfloat token); +typedef void (GLAD_API_PTR *PFNGLPIXELMAPFVPROC)(GLenum map, GLsizei mapsize, const GLfloat * values); +typedef void (GLAD_API_PTR *PFNGLPIXELMAPUIVPROC)(GLenum map, GLsizei mapsize, const GLuint * values); +typedef void (GLAD_API_PTR *PFNGLPIXELMAPUSVPROC)(GLenum map, GLsizei mapsize, const GLushort * values); +typedef void (GLAD_API_PTR *PFNGLPIXELSTOREFPROC)(GLenum pname, GLfloat param); +typedef void (GLAD_API_PTR *PFNGLPIXELSTOREIPROC)(GLenum pname, GLint param); +typedef void (GLAD_API_PTR *PFNGLPIXELTRANSFERFPROC)(GLenum pname, GLfloat param); +typedef void (GLAD_API_PTR *PFNGLPIXELTRANSFERIPROC)(GLenum pname, GLint param); +typedef void (GLAD_API_PTR *PFNGLPIXELZOOMPROC)(GLfloat xfactor, GLfloat yfactor); +typedef void (GLAD_API_PTR *PFNGLPOINTPARAMETERFPROC)(GLenum pname, GLfloat param); +typedef void (GLAD_API_PTR *PFNGLPOINTPARAMETERFVPROC)(GLenum pname, const GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLPOINTPARAMETERIPROC)(GLenum pname, GLint param); +typedef void (GLAD_API_PTR *PFNGLPOINTPARAMETERIVPROC)(GLenum pname, const GLint * params); +typedef void (GLAD_API_PTR *PFNGLPOINTSIZEPROC)(GLfloat size); +typedef void (GLAD_API_PTR *PFNGLPOLYGONMODEPROC)(GLenum face, GLenum mode); +typedef void (GLAD_API_PTR *PFNGLPOLYGONOFFSETPROC)(GLfloat factor, GLfloat units); +typedef void (GLAD_API_PTR *PFNGLPOLYGONSTIPPLEPROC)(const GLubyte * mask); +typedef void (GLAD_API_PTR *PFNGLPOPATTRIBPROC)(void); +typedef void (GLAD_API_PTR *PFNGLPOPCLIENTATTRIBPROC)(void); +typedef void (GLAD_API_PTR *PFNGLPOPMATRIXPROC)(void); +typedef void (GLAD_API_PTR *PFNGLPOPNAMEPROC)(void); +typedef void (GLAD_API_PTR *PFNGLPRIORITIZETEXTURESPROC)(GLsizei n, const GLuint * textures, const GLfloat * priorities); +typedef void (GLAD_API_PTR *PFNGLPUSHATTRIBPROC)(GLbitfield mask); +typedef void (GLAD_API_PTR *PFNGLPUSHCLIENTATTRIBPROC)(GLbitfield mask); +typedef void (GLAD_API_PTR *PFNGLPUSHMATRIXPROC)(void); +typedef void (GLAD_API_PTR *PFNGLPUSHNAMEPROC)(GLuint name); +typedef void (GLAD_API_PTR *PFNGLRASTERPOS2DPROC)(GLdouble x, GLdouble y); +typedef void (GLAD_API_PTR *PFNGLRASTERPOS2DVPROC)(const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLRASTERPOS2FPROC)(GLfloat x, GLfloat y); +typedef void (GLAD_API_PTR *PFNGLRASTERPOS2FVPROC)(const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLRASTERPOS2IPROC)(GLint x, GLint y); +typedef void (GLAD_API_PTR *PFNGLRASTERPOS2IVPROC)(const GLint * v); +typedef void (GLAD_API_PTR *PFNGLRASTERPOS2SPROC)(GLshort x, GLshort y); +typedef void (GLAD_API_PTR *PFNGLRASTERPOS2SVPROC)(const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLRASTERPOS3DPROC)(GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAD_API_PTR *PFNGLRASTERPOS3DVPROC)(const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLRASTERPOS3FPROC)(GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAD_API_PTR *PFNGLRASTERPOS3FVPROC)(const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLRASTERPOS3IPROC)(GLint x, GLint y, GLint z); +typedef void (GLAD_API_PTR *PFNGLRASTERPOS3IVPROC)(const GLint * v); +typedef void (GLAD_API_PTR *PFNGLRASTERPOS3SPROC)(GLshort x, GLshort y, GLshort z); +typedef void (GLAD_API_PTR *PFNGLRASTERPOS3SVPROC)(const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLRASTERPOS4DPROC)(GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAD_API_PTR *PFNGLRASTERPOS4DVPROC)(const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLRASTERPOS4FPROC)(GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAD_API_PTR *PFNGLRASTERPOS4FVPROC)(const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLRASTERPOS4IPROC)(GLint x, GLint y, GLint z, GLint w); +typedef void (GLAD_API_PTR *PFNGLRASTERPOS4IVPROC)(const GLint * v); +typedef void (GLAD_API_PTR *PFNGLRASTERPOS4SPROC)(GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (GLAD_API_PTR *PFNGLRASTERPOS4SVPROC)(const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLREADBUFFERPROC)(GLenum src); +typedef void (GLAD_API_PTR *PFNGLREADPIXELSPROC)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void * pixels); +typedef void (GLAD_API_PTR *PFNGLRECTDPROC)(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2); +typedef void (GLAD_API_PTR *PFNGLRECTDVPROC)(const GLdouble * v1, const GLdouble * v2); +typedef void (GLAD_API_PTR *PFNGLRECTFPROC)(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2); +typedef void (GLAD_API_PTR *PFNGLRECTFVPROC)(const GLfloat * v1, const GLfloat * v2); +typedef void (GLAD_API_PTR *PFNGLRECTIPROC)(GLint x1, GLint y1, GLint x2, GLint y2); +typedef void (GLAD_API_PTR *PFNGLRECTIVPROC)(const GLint * v1, const GLint * v2); +typedef void (GLAD_API_PTR *PFNGLRECTSPROC)(GLshort x1, GLshort y1, GLshort x2, GLshort y2); +typedef void (GLAD_API_PTR *PFNGLRECTSVPROC)(const GLshort * v1, const GLshort * v2); +typedef GLint (GLAD_API_PTR *PFNGLRENDERMODEPROC)(GLenum mode); +typedef void (GLAD_API_PTR *PFNGLRENDERBUFFERSTORAGEPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAD_API_PTR *PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAD_API_PTR *PFNGLROTATEDPROC)(GLdouble angle, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAD_API_PTR *PFNGLROTATEFPROC)(GLfloat angle, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAD_API_PTR *PFNGLSAMPLECOVERAGEPROC)(GLfloat value, GLboolean invert); +typedef void (GLAD_API_PTR *PFNGLSCALEDPROC)(GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAD_API_PTR *PFNGLSCALEFPROC)(GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAD_API_PTR *PFNGLSCISSORPROC)(GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAD_API_PTR *PFNGLSECONDARYCOLOR3BPROC)(GLbyte red, GLbyte green, GLbyte blue); +typedef void (GLAD_API_PTR *PFNGLSECONDARYCOLOR3BVPROC)(const GLbyte * v); +typedef void (GLAD_API_PTR *PFNGLSECONDARYCOLOR3DPROC)(GLdouble red, GLdouble green, GLdouble blue); +typedef void (GLAD_API_PTR *PFNGLSECONDARYCOLOR3DVPROC)(const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLSECONDARYCOLOR3FPROC)(GLfloat red, GLfloat green, GLfloat blue); +typedef void (GLAD_API_PTR *PFNGLSECONDARYCOLOR3FVPROC)(const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLSECONDARYCOLOR3IPROC)(GLint red, GLint green, GLint blue); +typedef void (GLAD_API_PTR *PFNGLSECONDARYCOLOR3IVPROC)(const GLint * v); +typedef void (GLAD_API_PTR *PFNGLSECONDARYCOLOR3SPROC)(GLshort red, GLshort green, GLshort blue); +typedef void (GLAD_API_PTR *PFNGLSECONDARYCOLOR3SVPROC)(const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLSECONDARYCOLOR3UBPROC)(GLubyte red, GLubyte green, GLubyte blue); +typedef void (GLAD_API_PTR *PFNGLSECONDARYCOLOR3UBVPROC)(const GLubyte * v); +typedef void (GLAD_API_PTR *PFNGLSECONDARYCOLOR3UIPROC)(GLuint red, GLuint green, GLuint blue); +typedef void (GLAD_API_PTR *PFNGLSECONDARYCOLOR3UIVPROC)(const GLuint * v); +typedef void (GLAD_API_PTR *PFNGLSECONDARYCOLOR3USPROC)(GLushort red, GLushort green, GLushort blue); +typedef void (GLAD_API_PTR *PFNGLSECONDARYCOLOR3USVPROC)(const GLushort * v); +typedef void (GLAD_API_PTR *PFNGLSECONDARYCOLORPOINTERPROC)(GLint size, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAD_API_PTR *PFNGLSELECTBUFFERPROC)(GLsizei size, GLuint * buffer); +typedef void (GLAD_API_PTR *PFNGLSHADEMODELPROC)(GLenum mode); +typedef void (GLAD_API_PTR *PFNGLSHADERSOURCEPROC)(GLuint shader, GLsizei count, const GLchar *const* string, const GLint * length); +typedef void (GLAD_API_PTR *PFNGLSTENCILFUNCPROC)(GLenum func, GLint ref, GLuint mask); +typedef void (GLAD_API_PTR *PFNGLSTENCILFUNCSEPARATEPROC)(GLenum face, GLenum func, GLint ref, GLuint mask); +typedef void (GLAD_API_PTR *PFNGLSTENCILMASKPROC)(GLuint mask); +typedef void (GLAD_API_PTR *PFNGLSTENCILMASKSEPARATEPROC)(GLenum face, GLuint mask); +typedef void (GLAD_API_PTR *PFNGLSTENCILOPPROC)(GLenum fail, GLenum zfail, GLenum zpass); +typedef void (GLAD_API_PTR *PFNGLSTENCILOPSEPARATEPROC)(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD1DPROC)(GLdouble s); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD1DVPROC)(const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD1FPROC)(GLfloat s); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD1FVPROC)(const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD1IPROC)(GLint s); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD1IVPROC)(const GLint * v); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD1SPROC)(GLshort s); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD1SVPROC)(const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD2DPROC)(GLdouble s, GLdouble t); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD2DVPROC)(const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD2FPROC)(GLfloat s, GLfloat t); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD2FVPROC)(const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD2IPROC)(GLint s, GLint t); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD2IVPROC)(const GLint * v); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD2SPROC)(GLshort s, GLshort t); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD2SVPROC)(const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD3DPROC)(GLdouble s, GLdouble t, GLdouble r); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD3DVPROC)(const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD3FPROC)(GLfloat s, GLfloat t, GLfloat r); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD3FVPROC)(const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD3IPROC)(GLint s, GLint t, GLint r); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD3IVPROC)(const GLint * v); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD3SPROC)(GLshort s, GLshort t, GLshort r); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD3SVPROC)(const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD4DPROC)(GLdouble s, GLdouble t, GLdouble r, GLdouble q); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD4DVPROC)(const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD4FPROC)(GLfloat s, GLfloat t, GLfloat r, GLfloat q); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD4FVPROC)(const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD4IPROC)(GLint s, GLint t, GLint r, GLint q); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD4IVPROC)(const GLint * v); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD4SPROC)(GLshort s, GLshort t, GLshort r, GLshort q); +typedef void (GLAD_API_PTR *PFNGLTEXCOORD4SVPROC)(const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLTEXCOORDPOINTERPROC)(GLint size, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAD_API_PTR *PFNGLTEXENVFPROC)(GLenum target, GLenum pname, GLfloat param); +typedef void (GLAD_API_PTR *PFNGLTEXENVFVPROC)(GLenum target, GLenum pname, const GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLTEXENVIPROC)(GLenum target, GLenum pname, GLint param); +typedef void (GLAD_API_PTR *PFNGLTEXENVIVPROC)(GLenum target, GLenum pname, const GLint * params); +typedef void (GLAD_API_PTR *PFNGLTEXGENDPROC)(GLenum coord, GLenum pname, GLdouble param); +typedef void (GLAD_API_PTR *PFNGLTEXGENDVPROC)(GLenum coord, GLenum pname, const GLdouble * params); +typedef void (GLAD_API_PTR *PFNGLTEXGENFPROC)(GLenum coord, GLenum pname, GLfloat param); +typedef void (GLAD_API_PTR *PFNGLTEXGENFVPROC)(GLenum coord, GLenum pname, const GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLTEXGENIPROC)(GLenum coord, GLenum pname, GLint param); +typedef void (GLAD_API_PTR *PFNGLTEXGENIVPROC)(GLenum coord, GLenum pname, const GLint * params); +typedef void (GLAD_API_PTR *PFNGLTEXIMAGE1DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void * pixels); +typedef void (GLAD_API_PTR *PFNGLTEXIMAGE2DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void * pixels); +typedef void (GLAD_API_PTR *PFNGLTEXIMAGE3DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * pixels); +typedef void (GLAD_API_PTR *PFNGLTEXPARAMETERIIVPROC)(GLenum target, GLenum pname, const GLint * params); +typedef void (GLAD_API_PTR *PFNGLTEXPARAMETERIUIVPROC)(GLenum target, GLenum pname, const GLuint * params); +typedef void (GLAD_API_PTR *PFNGLTEXPARAMETERFPROC)(GLenum target, GLenum pname, GLfloat param); +typedef void (GLAD_API_PTR *PFNGLTEXPARAMETERFVPROC)(GLenum target, GLenum pname, const GLfloat * params); +typedef void (GLAD_API_PTR *PFNGLTEXPARAMETERIPROC)(GLenum target, GLenum pname, GLint param); +typedef void (GLAD_API_PTR *PFNGLTEXPARAMETERIVPROC)(GLenum target, GLenum pname, const GLint * params); +typedef void (GLAD_API_PTR *PFNGLTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void * pixels); +typedef void (GLAD_API_PTR *PFNGLTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels); +typedef void (GLAD_API_PTR *PFNGLTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels); +typedef void (GLAD_API_PTR *PFNGLTRANSFORMFEEDBACKVARYINGSPROC)(GLuint program, GLsizei count, const GLchar *const* varyings, GLenum bufferMode); +typedef void (GLAD_API_PTR *PFNGLTRANSLATEDPROC)(GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAD_API_PTR *PFNGLTRANSLATEFPROC)(GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAD_API_PTR *PFNGLUNIFORM1FPROC)(GLint location, GLfloat v0); +typedef void (GLAD_API_PTR *PFNGLUNIFORM1FVPROC)(GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM1IPROC)(GLint location, GLint v0); +typedef void (GLAD_API_PTR *PFNGLUNIFORM1IVPROC)(GLint location, GLsizei count, const GLint * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM1UIPROC)(GLint location, GLuint v0); +typedef void (GLAD_API_PTR *PFNGLUNIFORM1UIVPROC)(GLint location, GLsizei count, const GLuint * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM2FPROC)(GLint location, GLfloat v0, GLfloat v1); +typedef void (GLAD_API_PTR *PFNGLUNIFORM2FVPROC)(GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM2IPROC)(GLint location, GLint v0, GLint v1); +typedef void (GLAD_API_PTR *PFNGLUNIFORM2IVPROC)(GLint location, GLsizei count, const GLint * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM2UIPROC)(GLint location, GLuint v0, GLuint v1); +typedef void (GLAD_API_PTR *PFNGLUNIFORM2UIVPROC)(GLint location, GLsizei count, const GLuint * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM3FPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (GLAD_API_PTR *PFNGLUNIFORM3FVPROC)(GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM3IPROC)(GLint location, GLint v0, GLint v1, GLint v2); +typedef void (GLAD_API_PTR *PFNGLUNIFORM3IVPROC)(GLint location, GLsizei count, const GLint * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM3UIPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (GLAD_API_PTR *PFNGLUNIFORM3UIVPROC)(GLint location, GLsizei count, const GLuint * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM4FPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (GLAD_API_PTR *PFNGLUNIFORM4FVPROC)(GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM4IPROC)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (GLAD_API_PTR *PFNGLUNIFORM4IVPROC)(GLint location, GLsizei count, const GLint * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORM4UIPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (GLAD_API_PTR *PFNGLUNIFORM4UIVPROC)(GLint location, GLsizei count, const GLuint * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORMMATRIX2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORMMATRIX2X3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORMMATRIX2X4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORMMATRIX3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORMMATRIX3X2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORMMATRIX3X4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORMMATRIX4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORMMATRIX4X2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAD_API_PTR *PFNGLUNIFORMMATRIX4X3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef GLboolean (GLAD_API_PTR *PFNGLUNMAPBUFFERPROC)(GLenum target); +typedef void (GLAD_API_PTR *PFNGLUSEPROGRAMPROC)(GLuint program); +typedef void (GLAD_API_PTR *PFNGLVALIDATEPROGRAMPROC)(GLuint program); +typedef void (GLAD_API_PTR *PFNGLVERTEX2DPROC)(GLdouble x, GLdouble y); +typedef void (GLAD_API_PTR *PFNGLVERTEX2DVPROC)(const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLVERTEX2FPROC)(GLfloat x, GLfloat y); +typedef void (GLAD_API_PTR *PFNGLVERTEX2FVPROC)(const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLVERTEX2IPROC)(GLint x, GLint y); +typedef void (GLAD_API_PTR *PFNGLVERTEX2IVPROC)(const GLint * v); +typedef void (GLAD_API_PTR *PFNGLVERTEX2SPROC)(GLshort x, GLshort y); +typedef void (GLAD_API_PTR *PFNGLVERTEX2SVPROC)(const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLVERTEX3DPROC)(GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAD_API_PTR *PFNGLVERTEX3DVPROC)(const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLVERTEX3FPROC)(GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAD_API_PTR *PFNGLVERTEX3FVPROC)(const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLVERTEX3IPROC)(GLint x, GLint y, GLint z); +typedef void (GLAD_API_PTR *PFNGLVERTEX3IVPROC)(const GLint * v); +typedef void (GLAD_API_PTR *PFNGLVERTEX3SPROC)(GLshort x, GLshort y, GLshort z); +typedef void (GLAD_API_PTR *PFNGLVERTEX3SVPROC)(const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLVERTEX4DPROC)(GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAD_API_PTR *PFNGLVERTEX4DVPROC)(const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLVERTEX4FPROC)(GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAD_API_PTR *PFNGLVERTEX4FVPROC)(const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLVERTEX4IPROC)(GLint x, GLint y, GLint z, GLint w); +typedef void (GLAD_API_PTR *PFNGLVERTEX4IVPROC)(const GLint * v); +typedef void (GLAD_API_PTR *PFNGLVERTEX4SPROC)(GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (GLAD_API_PTR *PFNGLVERTEX4SVPROC)(const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB1DPROC)(GLuint index, GLdouble x); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB1DVPROC)(GLuint index, const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB1FPROC)(GLuint index, GLfloat x); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB1FVPROC)(GLuint index, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB1SPROC)(GLuint index, GLshort x); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB1SVPROC)(GLuint index, const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB2DPROC)(GLuint index, GLdouble x, GLdouble y); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB2DVPROC)(GLuint index, const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB2FPROC)(GLuint index, GLfloat x, GLfloat y); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB2FVPROC)(GLuint index, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB2SPROC)(GLuint index, GLshort x, GLshort y); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB2SVPROC)(GLuint index, const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB3DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB3DVPROC)(GLuint index, const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB3FPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB3FVPROC)(GLuint index, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB3SPROC)(GLuint index, GLshort x, GLshort y, GLshort z); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB3SVPROC)(GLuint index, const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4NBVPROC)(GLuint index, const GLbyte * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4NIVPROC)(GLuint index, const GLint * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4NSVPROC)(GLuint index, const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4NUBPROC)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4NUBVPROC)(GLuint index, const GLubyte * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4NUIVPROC)(GLuint index, const GLuint * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4NUSVPROC)(GLuint index, const GLushort * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4BVPROC)(GLuint index, const GLbyte * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4DVPROC)(GLuint index, const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4FPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4FVPROC)(GLuint index, const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4IVPROC)(GLuint index, const GLint * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4SPROC)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4SVPROC)(GLuint index, const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4UBVPROC)(GLuint index, const GLubyte * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4UIVPROC)(GLuint index, const GLuint * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIB4USVPROC)(GLuint index, const GLushort * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI1IPROC)(GLuint index, GLint x); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI1IVPROC)(GLuint index, const GLint * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI1UIPROC)(GLuint index, GLuint x); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI1UIVPROC)(GLuint index, const GLuint * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI2IPROC)(GLuint index, GLint x, GLint y); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI2IVPROC)(GLuint index, const GLint * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI2UIPROC)(GLuint index, GLuint x, GLuint y); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI2UIVPROC)(GLuint index, const GLuint * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI3IPROC)(GLuint index, GLint x, GLint y, GLint z); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI3IVPROC)(GLuint index, const GLint * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI3UIPROC)(GLuint index, GLuint x, GLuint y, GLuint z); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI3UIVPROC)(GLuint index, const GLuint * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI4BVPROC)(GLuint index, const GLbyte * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI4IPROC)(GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI4IVPROC)(GLuint index, const GLint * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI4SVPROC)(GLuint index, const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI4UBVPROC)(GLuint index, const GLubyte * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI4UIPROC)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI4UIVPROC)(GLuint index, const GLuint * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBI4USVPROC)(GLuint index, const GLushort * v); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBIPOINTERPROC)(GLuint index, GLint size, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAD_API_PTR *PFNGLVERTEXATTRIBPOINTERPROC)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void * pointer); +typedef void (GLAD_API_PTR *PFNGLVERTEXPOINTERPROC)(GLint size, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAD_API_PTR *PFNGLVIEWPORTPROC)(GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS2DPROC)(GLdouble x, GLdouble y); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS2DVPROC)(const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS2FPROC)(GLfloat x, GLfloat y); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS2FVPROC)(const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS2IPROC)(GLint x, GLint y); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS2IVPROC)(const GLint * v); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS2SPROC)(GLshort x, GLshort y); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS2SVPROC)(const GLshort * v); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS3DPROC)(GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS3DVPROC)(const GLdouble * v); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS3FPROC)(GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS3FVPROC)(const GLfloat * v); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS3IPROC)(GLint x, GLint y, GLint z); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS3IVPROC)(const GLint * v); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS3SPROC)(GLshort x, GLshort y, GLshort z); +typedef void (GLAD_API_PTR *PFNGLWINDOWPOS3SVPROC)(const GLshort * v); + +GLAD_API_CALL PFNGLACCUMPROC glad_glAccum; +#define glAccum glad_glAccum +GLAD_API_CALL PFNGLACTIVETEXTUREPROC glad_glActiveTexture; +#define glActiveTexture glad_glActiveTexture +GLAD_API_CALL PFNGLALPHAFUNCPROC glad_glAlphaFunc; +#define glAlphaFunc glad_glAlphaFunc +GLAD_API_CALL PFNGLARETEXTURESRESIDENTPROC glad_glAreTexturesResident; +#define glAreTexturesResident glad_glAreTexturesResident +GLAD_API_CALL PFNGLARRAYELEMENTPROC glad_glArrayElement; +#define glArrayElement glad_glArrayElement +GLAD_API_CALL PFNGLATTACHSHADERPROC glad_glAttachShader; +#define glAttachShader glad_glAttachShader +GLAD_API_CALL PFNGLBEGINPROC glad_glBegin; +#define glBegin glad_glBegin +GLAD_API_CALL PFNGLBEGINCONDITIONALRENDERPROC glad_glBeginConditionalRender; +#define glBeginConditionalRender glad_glBeginConditionalRender +GLAD_API_CALL PFNGLBEGINQUERYPROC glad_glBeginQuery; +#define glBeginQuery glad_glBeginQuery +GLAD_API_CALL PFNGLBEGINTRANSFORMFEEDBACKPROC glad_glBeginTransformFeedback; +#define glBeginTransformFeedback glad_glBeginTransformFeedback +GLAD_API_CALL PFNGLBINDATTRIBLOCATIONPROC glad_glBindAttribLocation; +#define glBindAttribLocation glad_glBindAttribLocation +GLAD_API_CALL PFNGLBINDBUFFERPROC glad_glBindBuffer; +#define glBindBuffer glad_glBindBuffer +GLAD_API_CALL PFNGLBINDBUFFERBASEPROC glad_glBindBufferBase; +#define glBindBufferBase glad_glBindBufferBase +GLAD_API_CALL PFNGLBINDBUFFERRANGEPROC glad_glBindBufferRange; +#define glBindBufferRange glad_glBindBufferRange +GLAD_API_CALL PFNGLBINDFRAGDATALOCATIONPROC glad_glBindFragDataLocation; +#define glBindFragDataLocation glad_glBindFragDataLocation +GLAD_API_CALL PFNGLBINDFRAMEBUFFERPROC glad_glBindFramebuffer; +#define glBindFramebuffer glad_glBindFramebuffer +GLAD_API_CALL PFNGLBINDRENDERBUFFERPROC glad_glBindRenderbuffer; +#define glBindRenderbuffer glad_glBindRenderbuffer +GLAD_API_CALL PFNGLBINDTEXTUREPROC glad_glBindTexture; +#define glBindTexture glad_glBindTexture +GLAD_API_CALL PFNGLBINDVERTEXARRAYPROC glad_glBindVertexArray; +#define glBindVertexArray glad_glBindVertexArray +GLAD_API_CALL PFNGLBITMAPPROC glad_glBitmap; +#define glBitmap glad_glBitmap +GLAD_API_CALL PFNGLBLENDCOLORPROC glad_glBlendColor; +#define glBlendColor glad_glBlendColor +GLAD_API_CALL PFNGLBLENDEQUATIONPROC glad_glBlendEquation; +#define glBlendEquation glad_glBlendEquation +GLAD_API_CALL PFNGLBLENDEQUATIONSEPARATEPROC glad_glBlendEquationSeparate; +#define glBlendEquationSeparate glad_glBlendEquationSeparate +GLAD_API_CALL PFNGLBLENDFUNCPROC glad_glBlendFunc; +#define glBlendFunc glad_glBlendFunc +GLAD_API_CALL PFNGLBLENDFUNCSEPARATEPROC glad_glBlendFuncSeparate; +#define glBlendFuncSeparate glad_glBlendFuncSeparate +GLAD_API_CALL PFNGLBLITFRAMEBUFFERPROC glad_glBlitFramebuffer; +#define glBlitFramebuffer glad_glBlitFramebuffer +GLAD_API_CALL PFNGLBUFFERDATAPROC glad_glBufferData; +#define glBufferData glad_glBufferData +GLAD_API_CALL PFNGLBUFFERSUBDATAPROC glad_glBufferSubData; +#define glBufferSubData glad_glBufferSubData +GLAD_API_CALL PFNGLCALLLISTPROC glad_glCallList; +#define glCallList glad_glCallList +GLAD_API_CALL PFNGLCALLLISTSPROC glad_glCallLists; +#define glCallLists glad_glCallLists +GLAD_API_CALL PFNGLCHECKFRAMEBUFFERSTATUSPROC glad_glCheckFramebufferStatus; +#define glCheckFramebufferStatus glad_glCheckFramebufferStatus +GLAD_API_CALL PFNGLCLAMPCOLORPROC glad_glClampColor; +#define glClampColor glad_glClampColor +GLAD_API_CALL PFNGLCLEARPROC glad_glClear; +#define glClear glad_glClear +GLAD_API_CALL PFNGLCLEARACCUMPROC glad_glClearAccum; +#define glClearAccum glad_glClearAccum +GLAD_API_CALL PFNGLCLEARBUFFERFIPROC glad_glClearBufferfi; +#define glClearBufferfi glad_glClearBufferfi +GLAD_API_CALL PFNGLCLEARBUFFERFVPROC glad_glClearBufferfv; +#define glClearBufferfv glad_glClearBufferfv +GLAD_API_CALL PFNGLCLEARBUFFERIVPROC glad_glClearBufferiv; +#define glClearBufferiv glad_glClearBufferiv +GLAD_API_CALL PFNGLCLEARBUFFERUIVPROC glad_glClearBufferuiv; +#define glClearBufferuiv glad_glClearBufferuiv +GLAD_API_CALL PFNGLCLEARCOLORPROC glad_glClearColor; +#define glClearColor glad_glClearColor +GLAD_API_CALL PFNGLCLEARDEPTHPROC glad_glClearDepth; +#define glClearDepth glad_glClearDepth +GLAD_API_CALL PFNGLCLEARINDEXPROC glad_glClearIndex; +#define glClearIndex glad_glClearIndex +GLAD_API_CALL PFNGLCLEARSTENCILPROC glad_glClearStencil; +#define glClearStencil glad_glClearStencil +GLAD_API_CALL PFNGLCLIENTACTIVETEXTUREPROC glad_glClientActiveTexture; +#define glClientActiveTexture glad_glClientActiveTexture +GLAD_API_CALL PFNGLCLIPPLANEPROC glad_glClipPlane; +#define glClipPlane glad_glClipPlane +GLAD_API_CALL PFNGLCOLOR3BPROC glad_glColor3b; +#define glColor3b glad_glColor3b +GLAD_API_CALL PFNGLCOLOR3BVPROC glad_glColor3bv; +#define glColor3bv glad_glColor3bv +GLAD_API_CALL PFNGLCOLOR3DPROC glad_glColor3d; +#define glColor3d glad_glColor3d +GLAD_API_CALL PFNGLCOLOR3DVPROC glad_glColor3dv; +#define glColor3dv glad_glColor3dv +GLAD_API_CALL PFNGLCOLOR3FPROC glad_glColor3f; +#define glColor3f glad_glColor3f +GLAD_API_CALL PFNGLCOLOR3FVPROC glad_glColor3fv; +#define glColor3fv glad_glColor3fv +GLAD_API_CALL PFNGLCOLOR3IPROC glad_glColor3i; +#define glColor3i glad_glColor3i +GLAD_API_CALL PFNGLCOLOR3IVPROC glad_glColor3iv; +#define glColor3iv glad_glColor3iv +GLAD_API_CALL PFNGLCOLOR3SPROC glad_glColor3s; +#define glColor3s glad_glColor3s +GLAD_API_CALL PFNGLCOLOR3SVPROC glad_glColor3sv; +#define glColor3sv glad_glColor3sv +GLAD_API_CALL PFNGLCOLOR3UBPROC glad_glColor3ub; +#define glColor3ub glad_glColor3ub +GLAD_API_CALL PFNGLCOLOR3UBVPROC glad_glColor3ubv; +#define glColor3ubv glad_glColor3ubv +GLAD_API_CALL PFNGLCOLOR3UIPROC glad_glColor3ui; +#define glColor3ui glad_glColor3ui +GLAD_API_CALL PFNGLCOLOR3UIVPROC glad_glColor3uiv; +#define glColor3uiv glad_glColor3uiv +GLAD_API_CALL PFNGLCOLOR3USPROC glad_glColor3us; +#define glColor3us glad_glColor3us +GLAD_API_CALL PFNGLCOLOR3USVPROC glad_glColor3usv; +#define glColor3usv glad_glColor3usv +GLAD_API_CALL PFNGLCOLOR4BPROC glad_glColor4b; +#define glColor4b glad_glColor4b +GLAD_API_CALL PFNGLCOLOR4BVPROC glad_glColor4bv; +#define glColor4bv glad_glColor4bv +GLAD_API_CALL PFNGLCOLOR4DPROC glad_glColor4d; +#define glColor4d glad_glColor4d +GLAD_API_CALL PFNGLCOLOR4DVPROC glad_glColor4dv; +#define glColor4dv glad_glColor4dv +GLAD_API_CALL PFNGLCOLOR4FPROC glad_glColor4f; +#define glColor4f glad_glColor4f +GLAD_API_CALL PFNGLCOLOR4FVPROC glad_glColor4fv; +#define glColor4fv glad_glColor4fv +GLAD_API_CALL PFNGLCOLOR4IPROC glad_glColor4i; +#define glColor4i glad_glColor4i +GLAD_API_CALL PFNGLCOLOR4IVPROC glad_glColor4iv; +#define glColor4iv glad_glColor4iv +GLAD_API_CALL PFNGLCOLOR4SPROC glad_glColor4s; +#define glColor4s glad_glColor4s +GLAD_API_CALL PFNGLCOLOR4SVPROC glad_glColor4sv; +#define glColor4sv glad_glColor4sv +GLAD_API_CALL PFNGLCOLOR4UBPROC glad_glColor4ub; +#define glColor4ub glad_glColor4ub +GLAD_API_CALL PFNGLCOLOR4UBVPROC glad_glColor4ubv; +#define glColor4ubv glad_glColor4ubv +GLAD_API_CALL PFNGLCOLOR4UIPROC glad_glColor4ui; +#define glColor4ui glad_glColor4ui +GLAD_API_CALL PFNGLCOLOR4UIVPROC glad_glColor4uiv; +#define glColor4uiv glad_glColor4uiv +GLAD_API_CALL PFNGLCOLOR4USPROC glad_glColor4us; +#define glColor4us glad_glColor4us +GLAD_API_CALL PFNGLCOLOR4USVPROC glad_glColor4usv; +#define glColor4usv glad_glColor4usv +GLAD_API_CALL PFNGLCOLORMASKPROC glad_glColorMask; +#define glColorMask glad_glColorMask +GLAD_API_CALL PFNGLCOLORMASKIPROC glad_glColorMaski; +#define glColorMaski glad_glColorMaski +GLAD_API_CALL PFNGLCOLORMATERIALPROC glad_glColorMaterial; +#define glColorMaterial glad_glColorMaterial +GLAD_API_CALL PFNGLCOLORPOINTERPROC glad_glColorPointer; +#define glColorPointer glad_glColorPointer +GLAD_API_CALL PFNGLCOMPILESHADERPROC glad_glCompileShader; +#define glCompileShader glad_glCompileShader +GLAD_API_CALL PFNGLCOMPRESSEDTEXIMAGE1DPROC glad_glCompressedTexImage1D; +#define glCompressedTexImage1D glad_glCompressedTexImage1D +GLAD_API_CALL PFNGLCOMPRESSEDTEXIMAGE2DPROC glad_glCompressedTexImage2D; +#define glCompressedTexImage2D glad_glCompressedTexImage2D +GLAD_API_CALL PFNGLCOMPRESSEDTEXIMAGE3DPROC glad_glCompressedTexImage3D; +#define glCompressedTexImage3D glad_glCompressedTexImage3D +GLAD_API_CALL PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glad_glCompressedTexSubImage1D; +#define glCompressedTexSubImage1D glad_glCompressedTexSubImage1D +GLAD_API_CALL PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glad_glCompressedTexSubImage2D; +#define glCompressedTexSubImage2D glad_glCompressedTexSubImage2D +GLAD_API_CALL PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glad_glCompressedTexSubImage3D; +#define glCompressedTexSubImage3D glad_glCompressedTexSubImage3D +GLAD_API_CALL PFNGLCOPYPIXELSPROC glad_glCopyPixels; +#define glCopyPixels glad_glCopyPixels +GLAD_API_CALL PFNGLCOPYTEXIMAGE1DPROC glad_glCopyTexImage1D; +#define glCopyTexImage1D glad_glCopyTexImage1D +GLAD_API_CALL PFNGLCOPYTEXIMAGE2DPROC glad_glCopyTexImage2D; +#define glCopyTexImage2D glad_glCopyTexImage2D +GLAD_API_CALL PFNGLCOPYTEXSUBIMAGE1DPROC glad_glCopyTexSubImage1D; +#define glCopyTexSubImage1D glad_glCopyTexSubImage1D +GLAD_API_CALL PFNGLCOPYTEXSUBIMAGE2DPROC glad_glCopyTexSubImage2D; +#define glCopyTexSubImage2D glad_glCopyTexSubImage2D +GLAD_API_CALL PFNGLCOPYTEXSUBIMAGE3DPROC glad_glCopyTexSubImage3D; +#define glCopyTexSubImage3D glad_glCopyTexSubImage3D +GLAD_API_CALL PFNGLCREATEPROGRAMPROC glad_glCreateProgram; +#define glCreateProgram glad_glCreateProgram +GLAD_API_CALL PFNGLCREATESHADERPROC glad_glCreateShader; +#define glCreateShader glad_glCreateShader +GLAD_API_CALL PFNGLCULLFACEPROC glad_glCullFace; +#define glCullFace glad_glCullFace +GLAD_API_CALL PFNGLDELETEBUFFERSPROC glad_glDeleteBuffers; +#define glDeleteBuffers glad_glDeleteBuffers +GLAD_API_CALL PFNGLDELETEFRAMEBUFFERSPROC glad_glDeleteFramebuffers; +#define glDeleteFramebuffers glad_glDeleteFramebuffers +GLAD_API_CALL PFNGLDELETELISTSPROC glad_glDeleteLists; +#define glDeleteLists glad_glDeleteLists +GLAD_API_CALL PFNGLDELETEPROGRAMPROC glad_glDeleteProgram; +#define glDeleteProgram glad_glDeleteProgram +GLAD_API_CALL PFNGLDELETEQUERIESPROC glad_glDeleteQueries; +#define glDeleteQueries glad_glDeleteQueries +GLAD_API_CALL PFNGLDELETERENDERBUFFERSPROC glad_glDeleteRenderbuffers; +#define glDeleteRenderbuffers glad_glDeleteRenderbuffers +GLAD_API_CALL PFNGLDELETESHADERPROC glad_glDeleteShader; +#define glDeleteShader glad_glDeleteShader +GLAD_API_CALL PFNGLDELETETEXTURESPROC glad_glDeleteTextures; +#define glDeleteTextures glad_glDeleteTextures +GLAD_API_CALL PFNGLDELETEVERTEXARRAYSPROC glad_glDeleteVertexArrays; +#define glDeleteVertexArrays glad_glDeleteVertexArrays +GLAD_API_CALL PFNGLDEPTHFUNCPROC glad_glDepthFunc; +#define glDepthFunc glad_glDepthFunc +GLAD_API_CALL PFNGLDEPTHMASKPROC glad_glDepthMask; +#define glDepthMask glad_glDepthMask +GLAD_API_CALL PFNGLDEPTHRANGEPROC glad_glDepthRange; +#define glDepthRange glad_glDepthRange +GLAD_API_CALL PFNGLDETACHSHADERPROC glad_glDetachShader; +#define glDetachShader glad_glDetachShader +GLAD_API_CALL PFNGLDISABLEPROC glad_glDisable; +#define glDisable glad_glDisable +GLAD_API_CALL PFNGLDISABLECLIENTSTATEPROC glad_glDisableClientState; +#define glDisableClientState glad_glDisableClientState +GLAD_API_CALL PFNGLDISABLEVERTEXATTRIBARRAYPROC glad_glDisableVertexAttribArray; +#define glDisableVertexAttribArray glad_glDisableVertexAttribArray +GLAD_API_CALL PFNGLDISABLEIPROC glad_glDisablei; +#define glDisablei glad_glDisablei +GLAD_API_CALL PFNGLDRAWARRAYSPROC glad_glDrawArrays; +#define glDrawArrays glad_glDrawArrays +GLAD_API_CALL PFNGLDRAWBUFFERPROC glad_glDrawBuffer; +#define glDrawBuffer glad_glDrawBuffer +GLAD_API_CALL PFNGLDRAWBUFFERSPROC glad_glDrawBuffers; +#define glDrawBuffers glad_glDrawBuffers +GLAD_API_CALL PFNGLDRAWELEMENTSPROC glad_glDrawElements; +#define glDrawElements glad_glDrawElements +GLAD_API_CALL PFNGLDRAWPIXELSPROC glad_glDrawPixels; +#define glDrawPixels glad_glDrawPixels +GLAD_API_CALL PFNGLDRAWRANGEELEMENTSPROC glad_glDrawRangeElements; +#define glDrawRangeElements glad_glDrawRangeElements +GLAD_API_CALL PFNGLEDGEFLAGPROC glad_glEdgeFlag; +#define glEdgeFlag glad_glEdgeFlag +GLAD_API_CALL PFNGLEDGEFLAGPOINTERPROC glad_glEdgeFlagPointer; +#define glEdgeFlagPointer glad_glEdgeFlagPointer +GLAD_API_CALL PFNGLEDGEFLAGVPROC glad_glEdgeFlagv; +#define glEdgeFlagv glad_glEdgeFlagv +GLAD_API_CALL PFNGLENABLEPROC glad_glEnable; +#define glEnable glad_glEnable +GLAD_API_CALL PFNGLENABLECLIENTSTATEPROC glad_glEnableClientState; +#define glEnableClientState glad_glEnableClientState +GLAD_API_CALL PFNGLENABLEVERTEXATTRIBARRAYPROC glad_glEnableVertexAttribArray; +#define glEnableVertexAttribArray glad_glEnableVertexAttribArray +GLAD_API_CALL PFNGLENABLEIPROC glad_glEnablei; +#define glEnablei glad_glEnablei +GLAD_API_CALL PFNGLENDPROC glad_glEnd; +#define glEnd glad_glEnd +GLAD_API_CALL PFNGLENDCONDITIONALRENDERPROC glad_glEndConditionalRender; +#define glEndConditionalRender glad_glEndConditionalRender +GLAD_API_CALL PFNGLENDLISTPROC glad_glEndList; +#define glEndList glad_glEndList +GLAD_API_CALL PFNGLENDQUERYPROC glad_glEndQuery; +#define glEndQuery glad_glEndQuery +GLAD_API_CALL PFNGLENDTRANSFORMFEEDBACKPROC glad_glEndTransformFeedback; +#define glEndTransformFeedback glad_glEndTransformFeedback +GLAD_API_CALL PFNGLEVALCOORD1DPROC glad_glEvalCoord1d; +#define glEvalCoord1d glad_glEvalCoord1d +GLAD_API_CALL PFNGLEVALCOORD1DVPROC glad_glEvalCoord1dv; +#define glEvalCoord1dv glad_glEvalCoord1dv +GLAD_API_CALL PFNGLEVALCOORD1FPROC glad_glEvalCoord1f; +#define glEvalCoord1f glad_glEvalCoord1f +GLAD_API_CALL PFNGLEVALCOORD1FVPROC glad_glEvalCoord1fv; +#define glEvalCoord1fv glad_glEvalCoord1fv +GLAD_API_CALL PFNGLEVALCOORD2DPROC glad_glEvalCoord2d; +#define glEvalCoord2d glad_glEvalCoord2d +GLAD_API_CALL PFNGLEVALCOORD2DVPROC glad_glEvalCoord2dv; +#define glEvalCoord2dv glad_glEvalCoord2dv +GLAD_API_CALL PFNGLEVALCOORD2FPROC glad_glEvalCoord2f; +#define glEvalCoord2f glad_glEvalCoord2f +GLAD_API_CALL PFNGLEVALCOORD2FVPROC glad_glEvalCoord2fv; +#define glEvalCoord2fv glad_glEvalCoord2fv +GLAD_API_CALL PFNGLEVALMESH1PROC glad_glEvalMesh1; +#define glEvalMesh1 glad_glEvalMesh1 +GLAD_API_CALL PFNGLEVALMESH2PROC glad_glEvalMesh2; +#define glEvalMesh2 glad_glEvalMesh2 +GLAD_API_CALL PFNGLEVALPOINT1PROC glad_glEvalPoint1; +#define glEvalPoint1 glad_glEvalPoint1 +GLAD_API_CALL PFNGLEVALPOINT2PROC glad_glEvalPoint2; +#define glEvalPoint2 glad_glEvalPoint2 +GLAD_API_CALL PFNGLFEEDBACKBUFFERPROC glad_glFeedbackBuffer; +#define glFeedbackBuffer glad_glFeedbackBuffer +GLAD_API_CALL PFNGLFINISHPROC glad_glFinish; +#define glFinish glad_glFinish +GLAD_API_CALL PFNGLFLUSHPROC glad_glFlush; +#define glFlush glad_glFlush +GLAD_API_CALL PFNGLFLUSHMAPPEDBUFFERRANGEPROC glad_glFlushMappedBufferRange; +#define glFlushMappedBufferRange glad_glFlushMappedBufferRange +GLAD_API_CALL PFNGLFOGCOORDPOINTERPROC glad_glFogCoordPointer; +#define glFogCoordPointer glad_glFogCoordPointer +GLAD_API_CALL PFNGLFOGCOORDDPROC glad_glFogCoordd; +#define glFogCoordd glad_glFogCoordd +GLAD_API_CALL PFNGLFOGCOORDDVPROC glad_glFogCoorddv; +#define glFogCoorddv glad_glFogCoorddv +GLAD_API_CALL PFNGLFOGCOORDFPROC glad_glFogCoordf; +#define glFogCoordf glad_glFogCoordf +GLAD_API_CALL PFNGLFOGCOORDFVPROC glad_glFogCoordfv; +#define glFogCoordfv glad_glFogCoordfv +GLAD_API_CALL PFNGLFOGFPROC glad_glFogf; +#define glFogf glad_glFogf +GLAD_API_CALL PFNGLFOGFVPROC glad_glFogfv; +#define glFogfv glad_glFogfv +GLAD_API_CALL PFNGLFOGIPROC glad_glFogi; +#define glFogi glad_glFogi +GLAD_API_CALL PFNGLFOGIVPROC glad_glFogiv; +#define glFogiv glad_glFogiv +GLAD_API_CALL PFNGLFRAMEBUFFERRENDERBUFFERPROC glad_glFramebufferRenderbuffer; +#define glFramebufferRenderbuffer glad_glFramebufferRenderbuffer +GLAD_API_CALL PFNGLFRAMEBUFFERTEXTURE1DPROC glad_glFramebufferTexture1D; +#define glFramebufferTexture1D glad_glFramebufferTexture1D +GLAD_API_CALL PFNGLFRAMEBUFFERTEXTURE2DPROC glad_glFramebufferTexture2D; +#define glFramebufferTexture2D glad_glFramebufferTexture2D +GLAD_API_CALL PFNGLFRAMEBUFFERTEXTURE3DPROC glad_glFramebufferTexture3D; +#define glFramebufferTexture3D glad_glFramebufferTexture3D +GLAD_API_CALL PFNGLFRAMEBUFFERTEXTURELAYERPROC glad_glFramebufferTextureLayer; +#define glFramebufferTextureLayer glad_glFramebufferTextureLayer +GLAD_API_CALL PFNGLFRONTFACEPROC glad_glFrontFace; +#define glFrontFace glad_glFrontFace +GLAD_API_CALL PFNGLFRUSTUMPROC glad_glFrustum; +#define glFrustum glad_glFrustum +GLAD_API_CALL PFNGLGENBUFFERSPROC glad_glGenBuffers; +#define glGenBuffers glad_glGenBuffers +GLAD_API_CALL PFNGLGENFRAMEBUFFERSPROC glad_glGenFramebuffers; +#define glGenFramebuffers glad_glGenFramebuffers +GLAD_API_CALL PFNGLGENLISTSPROC glad_glGenLists; +#define glGenLists glad_glGenLists +GLAD_API_CALL PFNGLGENQUERIESPROC glad_glGenQueries; +#define glGenQueries glad_glGenQueries +GLAD_API_CALL PFNGLGENRENDERBUFFERSPROC glad_glGenRenderbuffers; +#define glGenRenderbuffers glad_glGenRenderbuffers +GLAD_API_CALL PFNGLGENTEXTURESPROC glad_glGenTextures; +#define glGenTextures glad_glGenTextures +GLAD_API_CALL PFNGLGENVERTEXARRAYSPROC glad_glGenVertexArrays; +#define glGenVertexArrays glad_glGenVertexArrays +GLAD_API_CALL PFNGLGENERATEMIPMAPPROC glad_glGenerateMipmap; +#define glGenerateMipmap glad_glGenerateMipmap +GLAD_API_CALL PFNGLGETACTIVEATTRIBPROC glad_glGetActiveAttrib; +#define glGetActiveAttrib glad_glGetActiveAttrib +GLAD_API_CALL PFNGLGETACTIVEUNIFORMPROC glad_glGetActiveUniform; +#define glGetActiveUniform glad_glGetActiveUniform +GLAD_API_CALL PFNGLGETATTACHEDSHADERSPROC glad_glGetAttachedShaders; +#define glGetAttachedShaders glad_glGetAttachedShaders +GLAD_API_CALL PFNGLGETATTRIBLOCATIONPROC glad_glGetAttribLocation; +#define glGetAttribLocation glad_glGetAttribLocation +GLAD_API_CALL PFNGLGETBOOLEANI_VPROC glad_glGetBooleani_v; +#define glGetBooleani_v glad_glGetBooleani_v +GLAD_API_CALL PFNGLGETBOOLEANVPROC glad_glGetBooleanv; +#define glGetBooleanv glad_glGetBooleanv +GLAD_API_CALL PFNGLGETBUFFERPARAMETERIVPROC glad_glGetBufferParameteriv; +#define glGetBufferParameteriv glad_glGetBufferParameteriv +GLAD_API_CALL PFNGLGETBUFFERPOINTERVPROC glad_glGetBufferPointerv; +#define glGetBufferPointerv glad_glGetBufferPointerv +GLAD_API_CALL PFNGLGETBUFFERSUBDATAPROC glad_glGetBufferSubData; +#define glGetBufferSubData glad_glGetBufferSubData +GLAD_API_CALL PFNGLGETCLIPPLANEPROC glad_glGetClipPlane; +#define glGetClipPlane glad_glGetClipPlane +GLAD_API_CALL PFNGLGETCOMPRESSEDTEXIMAGEPROC glad_glGetCompressedTexImage; +#define glGetCompressedTexImage glad_glGetCompressedTexImage +GLAD_API_CALL PFNGLGETDOUBLEVPROC glad_glGetDoublev; +#define glGetDoublev glad_glGetDoublev +GLAD_API_CALL PFNGLGETERRORPROC glad_glGetError; +#define glGetError glad_glGetError +GLAD_API_CALL PFNGLGETFLOATVPROC glad_glGetFloatv; +#define glGetFloatv glad_glGetFloatv +GLAD_API_CALL PFNGLGETFRAGDATALOCATIONPROC glad_glGetFragDataLocation; +#define glGetFragDataLocation glad_glGetFragDataLocation +GLAD_API_CALL PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetFramebufferAttachmentParameteriv; +#define glGetFramebufferAttachmentParameteriv glad_glGetFramebufferAttachmentParameteriv +GLAD_API_CALL PFNGLGETINTEGERI_VPROC glad_glGetIntegeri_v; +#define glGetIntegeri_v glad_glGetIntegeri_v +GLAD_API_CALL PFNGLGETINTEGERVPROC glad_glGetIntegerv; +#define glGetIntegerv glad_glGetIntegerv +GLAD_API_CALL PFNGLGETLIGHTFVPROC glad_glGetLightfv; +#define glGetLightfv glad_glGetLightfv +GLAD_API_CALL PFNGLGETLIGHTIVPROC glad_glGetLightiv; +#define glGetLightiv glad_glGetLightiv +GLAD_API_CALL PFNGLGETMAPDVPROC glad_glGetMapdv; +#define glGetMapdv glad_glGetMapdv +GLAD_API_CALL PFNGLGETMAPFVPROC glad_glGetMapfv; +#define glGetMapfv glad_glGetMapfv +GLAD_API_CALL PFNGLGETMAPIVPROC glad_glGetMapiv; +#define glGetMapiv glad_glGetMapiv +GLAD_API_CALL PFNGLGETMATERIALFVPROC glad_glGetMaterialfv; +#define glGetMaterialfv glad_glGetMaterialfv +GLAD_API_CALL PFNGLGETMATERIALIVPROC glad_glGetMaterialiv; +#define glGetMaterialiv glad_glGetMaterialiv +GLAD_API_CALL PFNGLGETPIXELMAPFVPROC glad_glGetPixelMapfv; +#define glGetPixelMapfv glad_glGetPixelMapfv +GLAD_API_CALL PFNGLGETPIXELMAPUIVPROC glad_glGetPixelMapuiv; +#define glGetPixelMapuiv glad_glGetPixelMapuiv +GLAD_API_CALL PFNGLGETPIXELMAPUSVPROC glad_glGetPixelMapusv; +#define glGetPixelMapusv glad_glGetPixelMapusv +GLAD_API_CALL PFNGLGETPOINTERVPROC glad_glGetPointerv; +#define glGetPointerv glad_glGetPointerv +GLAD_API_CALL PFNGLGETPOLYGONSTIPPLEPROC glad_glGetPolygonStipple; +#define glGetPolygonStipple glad_glGetPolygonStipple +GLAD_API_CALL PFNGLGETPROGRAMINFOLOGPROC glad_glGetProgramInfoLog; +#define glGetProgramInfoLog glad_glGetProgramInfoLog +GLAD_API_CALL PFNGLGETPROGRAMIVPROC glad_glGetProgramiv; +#define glGetProgramiv glad_glGetProgramiv +GLAD_API_CALL PFNGLGETQUERYOBJECTIVPROC glad_glGetQueryObjectiv; +#define glGetQueryObjectiv glad_glGetQueryObjectiv +GLAD_API_CALL PFNGLGETQUERYOBJECTUIVPROC glad_glGetQueryObjectuiv; +#define glGetQueryObjectuiv glad_glGetQueryObjectuiv +GLAD_API_CALL PFNGLGETQUERYIVPROC glad_glGetQueryiv; +#define glGetQueryiv glad_glGetQueryiv +GLAD_API_CALL PFNGLGETRENDERBUFFERPARAMETERIVPROC glad_glGetRenderbufferParameteriv; +#define glGetRenderbufferParameteriv glad_glGetRenderbufferParameteriv +GLAD_API_CALL PFNGLGETSHADERINFOLOGPROC glad_glGetShaderInfoLog; +#define glGetShaderInfoLog glad_glGetShaderInfoLog +GLAD_API_CALL PFNGLGETSHADERSOURCEPROC glad_glGetShaderSource; +#define glGetShaderSource glad_glGetShaderSource +GLAD_API_CALL PFNGLGETSHADERIVPROC glad_glGetShaderiv; +#define glGetShaderiv glad_glGetShaderiv +GLAD_API_CALL PFNGLGETSTRINGPROC glad_glGetString; +#define glGetString glad_glGetString +GLAD_API_CALL PFNGLGETSTRINGIPROC glad_glGetStringi; +#define glGetStringi glad_glGetStringi +GLAD_API_CALL PFNGLGETTEXENVFVPROC glad_glGetTexEnvfv; +#define glGetTexEnvfv glad_glGetTexEnvfv +GLAD_API_CALL PFNGLGETTEXENVIVPROC glad_glGetTexEnviv; +#define glGetTexEnviv glad_glGetTexEnviv +GLAD_API_CALL PFNGLGETTEXGENDVPROC glad_glGetTexGendv; +#define glGetTexGendv glad_glGetTexGendv +GLAD_API_CALL PFNGLGETTEXGENFVPROC glad_glGetTexGenfv; +#define glGetTexGenfv glad_glGetTexGenfv +GLAD_API_CALL PFNGLGETTEXGENIVPROC glad_glGetTexGeniv; +#define glGetTexGeniv glad_glGetTexGeniv +GLAD_API_CALL PFNGLGETTEXIMAGEPROC glad_glGetTexImage; +#define glGetTexImage glad_glGetTexImage +GLAD_API_CALL PFNGLGETTEXLEVELPARAMETERFVPROC glad_glGetTexLevelParameterfv; +#define glGetTexLevelParameterfv glad_glGetTexLevelParameterfv +GLAD_API_CALL PFNGLGETTEXLEVELPARAMETERIVPROC glad_glGetTexLevelParameteriv; +#define glGetTexLevelParameteriv glad_glGetTexLevelParameteriv +GLAD_API_CALL PFNGLGETTEXPARAMETERIIVPROC glad_glGetTexParameterIiv; +#define glGetTexParameterIiv glad_glGetTexParameterIiv +GLAD_API_CALL PFNGLGETTEXPARAMETERIUIVPROC glad_glGetTexParameterIuiv; +#define glGetTexParameterIuiv glad_glGetTexParameterIuiv +GLAD_API_CALL PFNGLGETTEXPARAMETERFVPROC glad_glGetTexParameterfv; +#define glGetTexParameterfv glad_glGetTexParameterfv +GLAD_API_CALL PFNGLGETTEXPARAMETERIVPROC glad_glGetTexParameteriv; +#define glGetTexParameteriv glad_glGetTexParameteriv +GLAD_API_CALL PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glad_glGetTransformFeedbackVarying; +#define glGetTransformFeedbackVarying glad_glGetTransformFeedbackVarying +GLAD_API_CALL PFNGLGETUNIFORMLOCATIONPROC glad_glGetUniformLocation; +#define glGetUniformLocation glad_glGetUniformLocation +GLAD_API_CALL PFNGLGETUNIFORMFVPROC glad_glGetUniformfv; +#define glGetUniformfv glad_glGetUniformfv +GLAD_API_CALL PFNGLGETUNIFORMIVPROC glad_glGetUniformiv; +#define glGetUniformiv glad_glGetUniformiv +GLAD_API_CALL PFNGLGETUNIFORMUIVPROC glad_glGetUniformuiv; +#define glGetUniformuiv glad_glGetUniformuiv +GLAD_API_CALL PFNGLGETVERTEXATTRIBIIVPROC glad_glGetVertexAttribIiv; +#define glGetVertexAttribIiv glad_glGetVertexAttribIiv +GLAD_API_CALL PFNGLGETVERTEXATTRIBIUIVPROC glad_glGetVertexAttribIuiv; +#define glGetVertexAttribIuiv glad_glGetVertexAttribIuiv +GLAD_API_CALL PFNGLGETVERTEXATTRIBPOINTERVPROC glad_glGetVertexAttribPointerv; +#define glGetVertexAttribPointerv glad_glGetVertexAttribPointerv +GLAD_API_CALL PFNGLGETVERTEXATTRIBDVPROC glad_glGetVertexAttribdv; +#define glGetVertexAttribdv glad_glGetVertexAttribdv +GLAD_API_CALL PFNGLGETVERTEXATTRIBFVPROC glad_glGetVertexAttribfv; +#define glGetVertexAttribfv glad_glGetVertexAttribfv +GLAD_API_CALL PFNGLGETVERTEXATTRIBIVPROC glad_glGetVertexAttribiv; +#define glGetVertexAttribiv glad_glGetVertexAttribiv +GLAD_API_CALL PFNGLHINTPROC glad_glHint; +#define glHint glad_glHint +GLAD_API_CALL PFNGLINDEXMASKPROC glad_glIndexMask; +#define glIndexMask glad_glIndexMask +GLAD_API_CALL PFNGLINDEXPOINTERPROC glad_glIndexPointer; +#define glIndexPointer glad_glIndexPointer +GLAD_API_CALL PFNGLINDEXDPROC glad_glIndexd; +#define glIndexd glad_glIndexd +GLAD_API_CALL PFNGLINDEXDVPROC glad_glIndexdv; +#define glIndexdv glad_glIndexdv +GLAD_API_CALL PFNGLINDEXFPROC glad_glIndexf; +#define glIndexf glad_glIndexf +GLAD_API_CALL PFNGLINDEXFVPROC glad_glIndexfv; +#define glIndexfv glad_glIndexfv +GLAD_API_CALL PFNGLINDEXIPROC glad_glIndexi; +#define glIndexi glad_glIndexi +GLAD_API_CALL PFNGLINDEXIVPROC glad_glIndexiv; +#define glIndexiv glad_glIndexiv +GLAD_API_CALL PFNGLINDEXSPROC glad_glIndexs; +#define glIndexs glad_glIndexs +GLAD_API_CALL PFNGLINDEXSVPROC glad_glIndexsv; +#define glIndexsv glad_glIndexsv +GLAD_API_CALL PFNGLINDEXUBPROC glad_glIndexub; +#define glIndexub glad_glIndexub +GLAD_API_CALL PFNGLINDEXUBVPROC glad_glIndexubv; +#define glIndexubv glad_glIndexubv +GLAD_API_CALL PFNGLINITNAMESPROC glad_glInitNames; +#define glInitNames glad_glInitNames +GLAD_API_CALL PFNGLINTERLEAVEDARRAYSPROC glad_glInterleavedArrays; +#define glInterleavedArrays glad_glInterleavedArrays +GLAD_API_CALL PFNGLISBUFFERPROC glad_glIsBuffer; +#define glIsBuffer glad_glIsBuffer +GLAD_API_CALL PFNGLISENABLEDPROC glad_glIsEnabled; +#define glIsEnabled glad_glIsEnabled +GLAD_API_CALL PFNGLISENABLEDIPROC glad_glIsEnabledi; +#define glIsEnabledi glad_glIsEnabledi +GLAD_API_CALL PFNGLISFRAMEBUFFERPROC glad_glIsFramebuffer; +#define glIsFramebuffer glad_glIsFramebuffer +GLAD_API_CALL PFNGLISLISTPROC glad_glIsList; +#define glIsList glad_glIsList +GLAD_API_CALL PFNGLISPROGRAMPROC glad_glIsProgram; +#define glIsProgram glad_glIsProgram +GLAD_API_CALL PFNGLISQUERYPROC glad_glIsQuery; +#define glIsQuery glad_glIsQuery +GLAD_API_CALL PFNGLISRENDERBUFFERPROC glad_glIsRenderbuffer; +#define glIsRenderbuffer glad_glIsRenderbuffer +GLAD_API_CALL PFNGLISSHADERPROC glad_glIsShader; +#define glIsShader glad_glIsShader +GLAD_API_CALL PFNGLISTEXTUREPROC glad_glIsTexture; +#define glIsTexture glad_glIsTexture +GLAD_API_CALL PFNGLISVERTEXARRAYPROC glad_glIsVertexArray; +#define glIsVertexArray glad_glIsVertexArray +GLAD_API_CALL PFNGLLIGHTMODELFPROC glad_glLightModelf; +#define glLightModelf glad_glLightModelf +GLAD_API_CALL PFNGLLIGHTMODELFVPROC glad_glLightModelfv; +#define glLightModelfv glad_glLightModelfv +GLAD_API_CALL PFNGLLIGHTMODELIPROC glad_glLightModeli; +#define glLightModeli glad_glLightModeli +GLAD_API_CALL PFNGLLIGHTMODELIVPROC glad_glLightModeliv; +#define glLightModeliv glad_glLightModeliv +GLAD_API_CALL PFNGLLIGHTFPROC glad_glLightf; +#define glLightf glad_glLightf +GLAD_API_CALL PFNGLLIGHTFVPROC glad_glLightfv; +#define glLightfv glad_glLightfv +GLAD_API_CALL PFNGLLIGHTIPROC glad_glLighti; +#define glLighti glad_glLighti +GLAD_API_CALL PFNGLLIGHTIVPROC glad_glLightiv; +#define glLightiv glad_glLightiv +GLAD_API_CALL PFNGLLINESTIPPLEPROC glad_glLineStipple; +#define glLineStipple glad_glLineStipple +GLAD_API_CALL PFNGLLINEWIDTHPROC glad_glLineWidth; +#define glLineWidth glad_glLineWidth +GLAD_API_CALL PFNGLLINKPROGRAMPROC glad_glLinkProgram; +#define glLinkProgram glad_glLinkProgram +GLAD_API_CALL PFNGLLISTBASEPROC glad_glListBase; +#define glListBase glad_glListBase +GLAD_API_CALL PFNGLLOADIDENTITYPROC glad_glLoadIdentity; +#define glLoadIdentity glad_glLoadIdentity +GLAD_API_CALL PFNGLLOADMATRIXDPROC glad_glLoadMatrixd; +#define glLoadMatrixd glad_glLoadMatrixd +GLAD_API_CALL PFNGLLOADMATRIXFPROC glad_glLoadMatrixf; +#define glLoadMatrixf glad_glLoadMatrixf +GLAD_API_CALL PFNGLLOADNAMEPROC glad_glLoadName; +#define glLoadName glad_glLoadName +GLAD_API_CALL PFNGLLOADTRANSPOSEMATRIXDPROC glad_glLoadTransposeMatrixd; +#define glLoadTransposeMatrixd glad_glLoadTransposeMatrixd +GLAD_API_CALL PFNGLLOADTRANSPOSEMATRIXFPROC glad_glLoadTransposeMatrixf; +#define glLoadTransposeMatrixf glad_glLoadTransposeMatrixf +GLAD_API_CALL PFNGLLOGICOPPROC glad_glLogicOp; +#define glLogicOp glad_glLogicOp +GLAD_API_CALL PFNGLMAP1DPROC glad_glMap1d; +#define glMap1d glad_glMap1d +GLAD_API_CALL PFNGLMAP1FPROC glad_glMap1f; +#define glMap1f glad_glMap1f +GLAD_API_CALL PFNGLMAP2DPROC glad_glMap2d; +#define glMap2d glad_glMap2d +GLAD_API_CALL PFNGLMAP2FPROC glad_glMap2f; +#define glMap2f glad_glMap2f +GLAD_API_CALL PFNGLMAPBUFFERPROC glad_glMapBuffer; +#define glMapBuffer glad_glMapBuffer +GLAD_API_CALL PFNGLMAPBUFFERRANGEPROC glad_glMapBufferRange; +#define glMapBufferRange glad_glMapBufferRange +GLAD_API_CALL PFNGLMAPGRID1DPROC glad_glMapGrid1d; +#define glMapGrid1d glad_glMapGrid1d +GLAD_API_CALL PFNGLMAPGRID1FPROC glad_glMapGrid1f; +#define glMapGrid1f glad_glMapGrid1f +GLAD_API_CALL PFNGLMAPGRID2DPROC glad_glMapGrid2d; +#define glMapGrid2d glad_glMapGrid2d +GLAD_API_CALL PFNGLMAPGRID2FPROC glad_glMapGrid2f; +#define glMapGrid2f glad_glMapGrid2f +GLAD_API_CALL PFNGLMATERIALFPROC glad_glMaterialf; +#define glMaterialf glad_glMaterialf +GLAD_API_CALL PFNGLMATERIALFVPROC glad_glMaterialfv; +#define glMaterialfv glad_glMaterialfv +GLAD_API_CALL PFNGLMATERIALIPROC glad_glMateriali; +#define glMateriali glad_glMateriali +GLAD_API_CALL PFNGLMATERIALIVPROC glad_glMaterialiv; +#define glMaterialiv glad_glMaterialiv +GLAD_API_CALL PFNGLMATRIXMODEPROC glad_glMatrixMode; +#define glMatrixMode glad_glMatrixMode +GLAD_API_CALL PFNGLMULTMATRIXDPROC glad_glMultMatrixd; +#define glMultMatrixd glad_glMultMatrixd +GLAD_API_CALL PFNGLMULTMATRIXFPROC glad_glMultMatrixf; +#define glMultMatrixf glad_glMultMatrixf +GLAD_API_CALL PFNGLMULTTRANSPOSEMATRIXDPROC glad_glMultTransposeMatrixd; +#define glMultTransposeMatrixd glad_glMultTransposeMatrixd +GLAD_API_CALL PFNGLMULTTRANSPOSEMATRIXFPROC glad_glMultTransposeMatrixf; +#define glMultTransposeMatrixf glad_glMultTransposeMatrixf +GLAD_API_CALL PFNGLMULTIDRAWARRAYSPROC glad_glMultiDrawArrays; +#define glMultiDrawArrays glad_glMultiDrawArrays +GLAD_API_CALL PFNGLMULTIDRAWELEMENTSPROC glad_glMultiDrawElements; +#define glMultiDrawElements glad_glMultiDrawElements +GLAD_API_CALL PFNGLMULTITEXCOORD1DPROC glad_glMultiTexCoord1d; +#define glMultiTexCoord1d glad_glMultiTexCoord1d +GLAD_API_CALL PFNGLMULTITEXCOORD1DVPROC glad_glMultiTexCoord1dv; +#define glMultiTexCoord1dv glad_glMultiTexCoord1dv +GLAD_API_CALL PFNGLMULTITEXCOORD1FPROC glad_glMultiTexCoord1f; +#define glMultiTexCoord1f glad_glMultiTexCoord1f +GLAD_API_CALL PFNGLMULTITEXCOORD1FVPROC glad_glMultiTexCoord1fv; +#define glMultiTexCoord1fv glad_glMultiTexCoord1fv +GLAD_API_CALL PFNGLMULTITEXCOORD1IPROC glad_glMultiTexCoord1i; +#define glMultiTexCoord1i glad_glMultiTexCoord1i +GLAD_API_CALL PFNGLMULTITEXCOORD1IVPROC glad_glMultiTexCoord1iv; +#define glMultiTexCoord1iv glad_glMultiTexCoord1iv +GLAD_API_CALL PFNGLMULTITEXCOORD1SPROC glad_glMultiTexCoord1s; +#define glMultiTexCoord1s glad_glMultiTexCoord1s +GLAD_API_CALL PFNGLMULTITEXCOORD1SVPROC glad_glMultiTexCoord1sv; +#define glMultiTexCoord1sv glad_glMultiTexCoord1sv +GLAD_API_CALL PFNGLMULTITEXCOORD2DPROC glad_glMultiTexCoord2d; +#define glMultiTexCoord2d glad_glMultiTexCoord2d +GLAD_API_CALL PFNGLMULTITEXCOORD2DVPROC glad_glMultiTexCoord2dv; +#define glMultiTexCoord2dv glad_glMultiTexCoord2dv +GLAD_API_CALL PFNGLMULTITEXCOORD2FPROC glad_glMultiTexCoord2f; +#define glMultiTexCoord2f glad_glMultiTexCoord2f +GLAD_API_CALL PFNGLMULTITEXCOORD2FVPROC glad_glMultiTexCoord2fv; +#define glMultiTexCoord2fv glad_glMultiTexCoord2fv +GLAD_API_CALL PFNGLMULTITEXCOORD2IPROC glad_glMultiTexCoord2i; +#define glMultiTexCoord2i glad_glMultiTexCoord2i +GLAD_API_CALL PFNGLMULTITEXCOORD2IVPROC glad_glMultiTexCoord2iv; +#define glMultiTexCoord2iv glad_glMultiTexCoord2iv +GLAD_API_CALL PFNGLMULTITEXCOORD2SPROC glad_glMultiTexCoord2s; +#define glMultiTexCoord2s glad_glMultiTexCoord2s +GLAD_API_CALL PFNGLMULTITEXCOORD2SVPROC glad_glMultiTexCoord2sv; +#define glMultiTexCoord2sv glad_glMultiTexCoord2sv +GLAD_API_CALL PFNGLMULTITEXCOORD3DPROC glad_glMultiTexCoord3d; +#define glMultiTexCoord3d glad_glMultiTexCoord3d +GLAD_API_CALL PFNGLMULTITEXCOORD3DVPROC glad_glMultiTexCoord3dv; +#define glMultiTexCoord3dv glad_glMultiTexCoord3dv +GLAD_API_CALL PFNGLMULTITEXCOORD3FPROC glad_glMultiTexCoord3f; +#define glMultiTexCoord3f glad_glMultiTexCoord3f +GLAD_API_CALL PFNGLMULTITEXCOORD3FVPROC glad_glMultiTexCoord3fv; +#define glMultiTexCoord3fv glad_glMultiTexCoord3fv +GLAD_API_CALL PFNGLMULTITEXCOORD3IPROC glad_glMultiTexCoord3i; +#define glMultiTexCoord3i glad_glMultiTexCoord3i +GLAD_API_CALL PFNGLMULTITEXCOORD3IVPROC glad_glMultiTexCoord3iv; +#define glMultiTexCoord3iv glad_glMultiTexCoord3iv +GLAD_API_CALL PFNGLMULTITEXCOORD3SPROC glad_glMultiTexCoord3s; +#define glMultiTexCoord3s glad_glMultiTexCoord3s +GLAD_API_CALL PFNGLMULTITEXCOORD3SVPROC glad_glMultiTexCoord3sv; +#define glMultiTexCoord3sv glad_glMultiTexCoord3sv +GLAD_API_CALL PFNGLMULTITEXCOORD4DPROC glad_glMultiTexCoord4d; +#define glMultiTexCoord4d glad_glMultiTexCoord4d +GLAD_API_CALL PFNGLMULTITEXCOORD4DVPROC glad_glMultiTexCoord4dv; +#define glMultiTexCoord4dv glad_glMultiTexCoord4dv +GLAD_API_CALL PFNGLMULTITEXCOORD4FPROC glad_glMultiTexCoord4f; +#define glMultiTexCoord4f glad_glMultiTexCoord4f +GLAD_API_CALL PFNGLMULTITEXCOORD4FVPROC glad_glMultiTexCoord4fv; +#define glMultiTexCoord4fv glad_glMultiTexCoord4fv +GLAD_API_CALL PFNGLMULTITEXCOORD4IPROC glad_glMultiTexCoord4i; +#define glMultiTexCoord4i glad_glMultiTexCoord4i +GLAD_API_CALL PFNGLMULTITEXCOORD4IVPROC glad_glMultiTexCoord4iv; +#define glMultiTexCoord4iv glad_glMultiTexCoord4iv +GLAD_API_CALL PFNGLMULTITEXCOORD4SPROC glad_glMultiTexCoord4s; +#define glMultiTexCoord4s glad_glMultiTexCoord4s +GLAD_API_CALL PFNGLMULTITEXCOORD4SVPROC glad_glMultiTexCoord4sv; +#define glMultiTexCoord4sv glad_glMultiTexCoord4sv +GLAD_API_CALL PFNGLNEWLISTPROC glad_glNewList; +#define glNewList glad_glNewList +GLAD_API_CALL PFNGLNORMAL3BPROC glad_glNormal3b; +#define glNormal3b glad_glNormal3b +GLAD_API_CALL PFNGLNORMAL3BVPROC glad_glNormal3bv; +#define glNormal3bv glad_glNormal3bv +GLAD_API_CALL PFNGLNORMAL3DPROC glad_glNormal3d; +#define glNormal3d glad_glNormal3d +GLAD_API_CALL PFNGLNORMAL3DVPROC glad_glNormal3dv; +#define glNormal3dv glad_glNormal3dv +GLAD_API_CALL PFNGLNORMAL3FPROC glad_glNormal3f; +#define glNormal3f glad_glNormal3f +GLAD_API_CALL PFNGLNORMAL3FVPROC glad_glNormal3fv; +#define glNormal3fv glad_glNormal3fv +GLAD_API_CALL PFNGLNORMAL3IPROC glad_glNormal3i; +#define glNormal3i glad_glNormal3i +GLAD_API_CALL PFNGLNORMAL3IVPROC glad_glNormal3iv; +#define glNormal3iv glad_glNormal3iv +GLAD_API_CALL PFNGLNORMAL3SPROC glad_glNormal3s; +#define glNormal3s glad_glNormal3s +GLAD_API_CALL PFNGLNORMAL3SVPROC glad_glNormal3sv; +#define glNormal3sv glad_glNormal3sv +GLAD_API_CALL PFNGLNORMALPOINTERPROC glad_glNormalPointer; +#define glNormalPointer glad_glNormalPointer +GLAD_API_CALL PFNGLORTHOPROC glad_glOrtho; +#define glOrtho glad_glOrtho +GLAD_API_CALL PFNGLPASSTHROUGHPROC glad_glPassThrough; +#define glPassThrough glad_glPassThrough +GLAD_API_CALL PFNGLPIXELMAPFVPROC glad_glPixelMapfv; +#define glPixelMapfv glad_glPixelMapfv +GLAD_API_CALL PFNGLPIXELMAPUIVPROC glad_glPixelMapuiv; +#define glPixelMapuiv glad_glPixelMapuiv +GLAD_API_CALL PFNGLPIXELMAPUSVPROC glad_glPixelMapusv; +#define glPixelMapusv glad_glPixelMapusv +GLAD_API_CALL PFNGLPIXELSTOREFPROC glad_glPixelStoref; +#define glPixelStoref glad_glPixelStoref +GLAD_API_CALL PFNGLPIXELSTOREIPROC glad_glPixelStorei; +#define glPixelStorei glad_glPixelStorei +GLAD_API_CALL PFNGLPIXELTRANSFERFPROC glad_glPixelTransferf; +#define glPixelTransferf glad_glPixelTransferf +GLAD_API_CALL PFNGLPIXELTRANSFERIPROC glad_glPixelTransferi; +#define glPixelTransferi glad_glPixelTransferi +GLAD_API_CALL PFNGLPIXELZOOMPROC glad_glPixelZoom; +#define glPixelZoom glad_glPixelZoom +GLAD_API_CALL PFNGLPOINTPARAMETERFPROC glad_glPointParameterf; +#define glPointParameterf glad_glPointParameterf +GLAD_API_CALL PFNGLPOINTPARAMETERFVPROC glad_glPointParameterfv; +#define glPointParameterfv glad_glPointParameterfv +GLAD_API_CALL PFNGLPOINTPARAMETERIPROC glad_glPointParameteri; +#define glPointParameteri glad_glPointParameteri +GLAD_API_CALL PFNGLPOINTPARAMETERIVPROC glad_glPointParameteriv; +#define glPointParameteriv glad_glPointParameteriv +GLAD_API_CALL PFNGLPOINTSIZEPROC glad_glPointSize; +#define glPointSize glad_glPointSize +GLAD_API_CALL PFNGLPOLYGONMODEPROC glad_glPolygonMode; +#define glPolygonMode glad_glPolygonMode +GLAD_API_CALL PFNGLPOLYGONOFFSETPROC glad_glPolygonOffset; +#define glPolygonOffset glad_glPolygonOffset +GLAD_API_CALL PFNGLPOLYGONSTIPPLEPROC glad_glPolygonStipple; +#define glPolygonStipple glad_glPolygonStipple +GLAD_API_CALL PFNGLPOPATTRIBPROC glad_glPopAttrib; +#define glPopAttrib glad_glPopAttrib +GLAD_API_CALL PFNGLPOPCLIENTATTRIBPROC glad_glPopClientAttrib; +#define glPopClientAttrib glad_glPopClientAttrib +GLAD_API_CALL PFNGLPOPMATRIXPROC glad_glPopMatrix; +#define glPopMatrix glad_glPopMatrix +GLAD_API_CALL PFNGLPOPNAMEPROC glad_glPopName; +#define glPopName glad_glPopName +GLAD_API_CALL PFNGLPRIORITIZETEXTURESPROC glad_glPrioritizeTextures; +#define glPrioritizeTextures glad_glPrioritizeTextures +GLAD_API_CALL PFNGLPUSHATTRIBPROC glad_glPushAttrib; +#define glPushAttrib glad_glPushAttrib +GLAD_API_CALL PFNGLPUSHCLIENTATTRIBPROC glad_glPushClientAttrib; +#define glPushClientAttrib glad_glPushClientAttrib +GLAD_API_CALL PFNGLPUSHMATRIXPROC glad_glPushMatrix; +#define glPushMatrix glad_glPushMatrix +GLAD_API_CALL PFNGLPUSHNAMEPROC glad_glPushName; +#define glPushName glad_glPushName +GLAD_API_CALL PFNGLRASTERPOS2DPROC glad_glRasterPos2d; +#define glRasterPos2d glad_glRasterPos2d +GLAD_API_CALL PFNGLRASTERPOS2DVPROC glad_glRasterPos2dv; +#define glRasterPos2dv glad_glRasterPos2dv +GLAD_API_CALL PFNGLRASTERPOS2FPROC glad_glRasterPos2f; +#define glRasterPos2f glad_glRasterPos2f +GLAD_API_CALL PFNGLRASTERPOS2FVPROC glad_glRasterPos2fv; +#define glRasterPos2fv glad_glRasterPos2fv +GLAD_API_CALL PFNGLRASTERPOS2IPROC glad_glRasterPos2i; +#define glRasterPos2i glad_glRasterPos2i +GLAD_API_CALL PFNGLRASTERPOS2IVPROC glad_glRasterPos2iv; +#define glRasterPos2iv glad_glRasterPos2iv +GLAD_API_CALL PFNGLRASTERPOS2SPROC glad_glRasterPos2s; +#define glRasterPos2s glad_glRasterPos2s +GLAD_API_CALL PFNGLRASTERPOS2SVPROC glad_glRasterPos2sv; +#define glRasterPos2sv glad_glRasterPos2sv +GLAD_API_CALL PFNGLRASTERPOS3DPROC glad_glRasterPos3d; +#define glRasterPos3d glad_glRasterPos3d +GLAD_API_CALL PFNGLRASTERPOS3DVPROC glad_glRasterPos3dv; +#define glRasterPos3dv glad_glRasterPos3dv +GLAD_API_CALL PFNGLRASTERPOS3FPROC glad_glRasterPos3f; +#define glRasterPos3f glad_glRasterPos3f +GLAD_API_CALL PFNGLRASTERPOS3FVPROC glad_glRasterPos3fv; +#define glRasterPos3fv glad_glRasterPos3fv +GLAD_API_CALL PFNGLRASTERPOS3IPROC glad_glRasterPos3i; +#define glRasterPos3i glad_glRasterPos3i +GLAD_API_CALL PFNGLRASTERPOS3IVPROC glad_glRasterPos3iv; +#define glRasterPos3iv glad_glRasterPos3iv +GLAD_API_CALL PFNGLRASTERPOS3SPROC glad_glRasterPos3s; +#define glRasterPos3s glad_glRasterPos3s +GLAD_API_CALL PFNGLRASTERPOS3SVPROC glad_glRasterPos3sv; +#define glRasterPos3sv glad_glRasterPos3sv +GLAD_API_CALL PFNGLRASTERPOS4DPROC glad_glRasterPos4d; +#define glRasterPos4d glad_glRasterPos4d +GLAD_API_CALL PFNGLRASTERPOS4DVPROC glad_glRasterPos4dv; +#define glRasterPos4dv glad_glRasterPos4dv +GLAD_API_CALL PFNGLRASTERPOS4FPROC glad_glRasterPos4f; +#define glRasterPos4f glad_glRasterPos4f +GLAD_API_CALL PFNGLRASTERPOS4FVPROC glad_glRasterPos4fv; +#define glRasterPos4fv glad_glRasterPos4fv +GLAD_API_CALL PFNGLRASTERPOS4IPROC glad_glRasterPos4i; +#define glRasterPos4i glad_glRasterPos4i +GLAD_API_CALL PFNGLRASTERPOS4IVPROC glad_glRasterPos4iv; +#define glRasterPos4iv glad_glRasterPos4iv +GLAD_API_CALL PFNGLRASTERPOS4SPROC glad_glRasterPos4s; +#define glRasterPos4s glad_glRasterPos4s +GLAD_API_CALL PFNGLRASTERPOS4SVPROC glad_glRasterPos4sv; +#define glRasterPos4sv glad_glRasterPos4sv +GLAD_API_CALL PFNGLREADBUFFERPROC glad_glReadBuffer; +#define glReadBuffer glad_glReadBuffer +GLAD_API_CALL PFNGLREADPIXELSPROC glad_glReadPixels; +#define glReadPixels glad_glReadPixels +GLAD_API_CALL PFNGLRECTDPROC glad_glRectd; +#define glRectd glad_glRectd +GLAD_API_CALL PFNGLRECTDVPROC glad_glRectdv; +#define glRectdv glad_glRectdv +GLAD_API_CALL PFNGLRECTFPROC glad_glRectf; +#define glRectf glad_glRectf +GLAD_API_CALL PFNGLRECTFVPROC glad_glRectfv; +#define glRectfv glad_glRectfv +GLAD_API_CALL PFNGLRECTIPROC glad_glRecti; +#define glRecti glad_glRecti +GLAD_API_CALL PFNGLRECTIVPROC glad_glRectiv; +#define glRectiv glad_glRectiv +GLAD_API_CALL PFNGLRECTSPROC glad_glRects; +#define glRects glad_glRects +GLAD_API_CALL PFNGLRECTSVPROC glad_glRectsv; +#define glRectsv glad_glRectsv +GLAD_API_CALL PFNGLRENDERMODEPROC glad_glRenderMode; +#define glRenderMode glad_glRenderMode +GLAD_API_CALL PFNGLRENDERBUFFERSTORAGEPROC glad_glRenderbufferStorage; +#define glRenderbufferStorage glad_glRenderbufferStorage +GLAD_API_CALL PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glRenderbufferStorageMultisample; +#define glRenderbufferStorageMultisample glad_glRenderbufferStorageMultisample +GLAD_API_CALL PFNGLROTATEDPROC glad_glRotated; +#define glRotated glad_glRotated +GLAD_API_CALL PFNGLROTATEFPROC glad_glRotatef; +#define glRotatef glad_glRotatef +GLAD_API_CALL PFNGLSAMPLECOVERAGEPROC glad_glSampleCoverage; +#define glSampleCoverage glad_glSampleCoverage +GLAD_API_CALL PFNGLSCALEDPROC glad_glScaled; +#define glScaled glad_glScaled +GLAD_API_CALL PFNGLSCALEFPROC glad_glScalef; +#define glScalef glad_glScalef +GLAD_API_CALL PFNGLSCISSORPROC glad_glScissor; +#define glScissor glad_glScissor +GLAD_API_CALL PFNGLSECONDARYCOLOR3BPROC glad_glSecondaryColor3b; +#define glSecondaryColor3b glad_glSecondaryColor3b +GLAD_API_CALL PFNGLSECONDARYCOLOR3BVPROC glad_glSecondaryColor3bv; +#define glSecondaryColor3bv glad_glSecondaryColor3bv +GLAD_API_CALL PFNGLSECONDARYCOLOR3DPROC glad_glSecondaryColor3d; +#define glSecondaryColor3d glad_glSecondaryColor3d +GLAD_API_CALL PFNGLSECONDARYCOLOR3DVPROC glad_glSecondaryColor3dv; +#define glSecondaryColor3dv glad_glSecondaryColor3dv +GLAD_API_CALL PFNGLSECONDARYCOLOR3FPROC glad_glSecondaryColor3f; +#define glSecondaryColor3f glad_glSecondaryColor3f +GLAD_API_CALL PFNGLSECONDARYCOLOR3FVPROC glad_glSecondaryColor3fv; +#define glSecondaryColor3fv glad_glSecondaryColor3fv +GLAD_API_CALL PFNGLSECONDARYCOLOR3IPROC glad_glSecondaryColor3i; +#define glSecondaryColor3i glad_glSecondaryColor3i +GLAD_API_CALL PFNGLSECONDARYCOLOR3IVPROC glad_glSecondaryColor3iv; +#define glSecondaryColor3iv glad_glSecondaryColor3iv +GLAD_API_CALL PFNGLSECONDARYCOLOR3SPROC glad_glSecondaryColor3s; +#define glSecondaryColor3s glad_glSecondaryColor3s +GLAD_API_CALL PFNGLSECONDARYCOLOR3SVPROC glad_glSecondaryColor3sv; +#define glSecondaryColor3sv glad_glSecondaryColor3sv +GLAD_API_CALL PFNGLSECONDARYCOLOR3UBPROC glad_glSecondaryColor3ub; +#define glSecondaryColor3ub glad_glSecondaryColor3ub +GLAD_API_CALL PFNGLSECONDARYCOLOR3UBVPROC glad_glSecondaryColor3ubv; +#define glSecondaryColor3ubv glad_glSecondaryColor3ubv +GLAD_API_CALL PFNGLSECONDARYCOLOR3UIPROC glad_glSecondaryColor3ui; +#define glSecondaryColor3ui glad_glSecondaryColor3ui +GLAD_API_CALL PFNGLSECONDARYCOLOR3UIVPROC glad_glSecondaryColor3uiv; +#define glSecondaryColor3uiv glad_glSecondaryColor3uiv +GLAD_API_CALL PFNGLSECONDARYCOLOR3USPROC glad_glSecondaryColor3us; +#define glSecondaryColor3us glad_glSecondaryColor3us +GLAD_API_CALL PFNGLSECONDARYCOLOR3USVPROC glad_glSecondaryColor3usv; +#define glSecondaryColor3usv glad_glSecondaryColor3usv +GLAD_API_CALL PFNGLSECONDARYCOLORPOINTERPROC glad_glSecondaryColorPointer; +#define glSecondaryColorPointer glad_glSecondaryColorPointer +GLAD_API_CALL PFNGLSELECTBUFFERPROC glad_glSelectBuffer; +#define glSelectBuffer glad_glSelectBuffer +GLAD_API_CALL PFNGLSHADEMODELPROC glad_glShadeModel; +#define glShadeModel glad_glShadeModel +GLAD_API_CALL PFNGLSHADERSOURCEPROC glad_glShaderSource; +#define glShaderSource glad_glShaderSource +GLAD_API_CALL PFNGLSTENCILFUNCPROC glad_glStencilFunc; +#define glStencilFunc glad_glStencilFunc +GLAD_API_CALL PFNGLSTENCILFUNCSEPARATEPROC glad_glStencilFuncSeparate; +#define glStencilFuncSeparate glad_glStencilFuncSeparate +GLAD_API_CALL PFNGLSTENCILMASKPROC glad_glStencilMask; +#define glStencilMask glad_glStencilMask +GLAD_API_CALL PFNGLSTENCILMASKSEPARATEPROC glad_glStencilMaskSeparate; +#define glStencilMaskSeparate glad_glStencilMaskSeparate +GLAD_API_CALL PFNGLSTENCILOPPROC glad_glStencilOp; +#define glStencilOp glad_glStencilOp +GLAD_API_CALL PFNGLSTENCILOPSEPARATEPROC glad_glStencilOpSeparate; +#define glStencilOpSeparate glad_glStencilOpSeparate +GLAD_API_CALL PFNGLTEXCOORD1DPROC glad_glTexCoord1d; +#define glTexCoord1d glad_glTexCoord1d +GLAD_API_CALL PFNGLTEXCOORD1DVPROC glad_glTexCoord1dv; +#define glTexCoord1dv glad_glTexCoord1dv +GLAD_API_CALL PFNGLTEXCOORD1FPROC glad_glTexCoord1f; +#define glTexCoord1f glad_glTexCoord1f +GLAD_API_CALL PFNGLTEXCOORD1FVPROC glad_glTexCoord1fv; +#define glTexCoord1fv glad_glTexCoord1fv +GLAD_API_CALL PFNGLTEXCOORD1IPROC glad_glTexCoord1i; +#define glTexCoord1i glad_glTexCoord1i +GLAD_API_CALL PFNGLTEXCOORD1IVPROC glad_glTexCoord1iv; +#define glTexCoord1iv glad_glTexCoord1iv +GLAD_API_CALL PFNGLTEXCOORD1SPROC glad_glTexCoord1s; +#define glTexCoord1s glad_glTexCoord1s +GLAD_API_CALL PFNGLTEXCOORD1SVPROC glad_glTexCoord1sv; +#define glTexCoord1sv glad_glTexCoord1sv +GLAD_API_CALL PFNGLTEXCOORD2DPROC glad_glTexCoord2d; +#define glTexCoord2d glad_glTexCoord2d +GLAD_API_CALL PFNGLTEXCOORD2DVPROC glad_glTexCoord2dv; +#define glTexCoord2dv glad_glTexCoord2dv +GLAD_API_CALL PFNGLTEXCOORD2FPROC glad_glTexCoord2f; +#define glTexCoord2f glad_glTexCoord2f +GLAD_API_CALL PFNGLTEXCOORD2FVPROC glad_glTexCoord2fv; +#define glTexCoord2fv glad_glTexCoord2fv +GLAD_API_CALL PFNGLTEXCOORD2IPROC glad_glTexCoord2i; +#define glTexCoord2i glad_glTexCoord2i +GLAD_API_CALL PFNGLTEXCOORD2IVPROC glad_glTexCoord2iv; +#define glTexCoord2iv glad_glTexCoord2iv +GLAD_API_CALL PFNGLTEXCOORD2SPROC glad_glTexCoord2s; +#define glTexCoord2s glad_glTexCoord2s +GLAD_API_CALL PFNGLTEXCOORD2SVPROC glad_glTexCoord2sv; +#define glTexCoord2sv glad_glTexCoord2sv +GLAD_API_CALL PFNGLTEXCOORD3DPROC glad_glTexCoord3d; +#define glTexCoord3d glad_glTexCoord3d +GLAD_API_CALL PFNGLTEXCOORD3DVPROC glad_glTexCoord3dv; +#define glTexCoord3dv glad_glTexCoord3dv +GLAD_API_CALL PFNGLTEXCOORD3FPROC glad_glTexCoord3f; +#define glTexCoord3f glad_glTexCoord3f +GLAD_API_CALL PFNGLTEXCOORD3FVPROC glad_glTexCoord3fv; +#define glTexCoord3fv glad_glTexCoord3fv +GLAD_API_CALL PFNGLTEXCOORD3IPROC glad_glTexCoord3i; +#define glTexCoord3i glad_glTexCoord3i +GLAD_API_CALL PFNGLTEXCOORD3IVPROC glad_glTexCoord3iv; +#define glTexCoord3iv glad_glTexCoord3iv +GLAD_API_CALL PFNGLTEXCOORD3SPROC glad_glTexCoord3s; +#define glTexCoord3s glad_glTexCoord3s +GLAD_API_CALL PFNGLTEXCOORD3SVPROC glad_glTexCoord3sv; +#define glTexCoord3sv glad_glTexCoord3sv +GLAD_API_CALL PFNGLTEXCOORD4DPROC glad_glTexCoord4d; +#define glTexCoord4d glad_glTexCoord4d +GLAD_API_CALL PFNGLTEXCOORD4DVPROC glad_glTexCoord4dv; +#define glTexCoord4dv glad_glTexCoord4dv +GLAD_API_CALL PFNGLTEXCOORD4FPROC glad_glTexCoord4f; +#define glTexCoord4f glad_glTexCoord4f +GLAD_API_CALL PFNGLTEXCOORD4FVPROC glad_glTexCoord4fv; +#define glTexCoord4fv glad_glTexCoord4fv +GLAD_API_CALL PFNGLTEXCOORD4IPROC glad_glTexCoord4i; +#define glTexCoord4i glad_glTexCoord4i +GLAD_API_CALL PFNGLTEXCOORD4IVPROC glad_glTexCoord4iv; +#define glTexCoord4iv glad_glTexCoord4iv +GLAD_API_CALL PFNGLTEXCOORD4SPROC glad_glTexCoord4s; +#define glTexCoord4s glad_glTexCoord4s +GLAD_API_CALL PFNGLTEXCOORD4SVPROC glad_glTexCoord4sv; +#define glTexCoord4sv glad_glTexCoord4sv +GLAD_API_CALL PFNGLTEXCOORDPOINTERPROC glad_glTexCoordPointer; +#define glTexCoordPointer glad_glTexCoordPointer +GLAD_API_CALL PFNGLTEXENVFPROC glad_glTexEnvf; +#define glTexEnvf glad_glTexEnvf +GLAD_API_CALL PFNGLTEXENVFVPROC glad_glTexEnvfv; +#define glTexEnvfv glad_glTexEnvfv +GLAD_API_CALL PFNGLTEXENVIPROC glad_glTexEnvi; +#define glTexEnvi glad_glTexEnvi +GLAD_API_CALL PFNGLTEXENVIVPROC glad_glTexEnviv; +#define glTexEnviv glad_glTexEnviv +GLAD_API_CALL PFNGLTEXGENDPROC glad_glTexGend; +#define glTexGend glad_glTexGend +GLAD_API_CALL PFNGLTEXGENDVPROC glad_glTexGendv; +#define glTexGendv glad_glTexGendv +GLAD_API_CALL PFNGLTEXGENFPROC glad_glTexGenf; +#define glTexGenf glad_glTexGenf +GLAD_API_CALL PFNGLTEXGENFVPROC glad_glTexGenfv; +#define glTexGenfv glad_glTexGenfv +GLAD_API_CALL PFNGLTEXGENIPROC glad_glTexGeni; +#define glTexGeni glad_glTexGeni +GLAD_API_CALL PFNGLTEXGENIVPROC glad_glTexGeniv; +#define glTexGeniv glad_glTexGeniv +GLAD_API_CALL PFNGLTEXIMAGE1DPROC glad_glTexImage1D; +#define glTexImage1D glad_glTexImage1D +GLAD_API_CALL PFNGLTEXIMAGE2DPROC glad_glTexImage2D; +#define glTexImage2D glad_glTexImage2D +GLAD_API_CALL PFNGLTEXIMAGE3DPROC glad_glTexImage3D; +#define glTexImage3D glad_glTexImage3D +GLAD_API_CALL PFNGLTEXPARAMETERIIVPROC glad_glTexParameterIiv; +#define glTexParameterIiv glad_glTexParameterIiv +GLAD_API_CALL PFNGLTEXPARAMETERIUIVPROC glad_glTexParameterIuiv; +#define glTexParameterIuiv glad_glTexParameterIuiv +GLAD_API_CALL PFNGLTEXPARAMETERFPROC glad_glTexParameterf; +#define glTexParameterf glad_glTexParameterf +GLAD_API_CALL PFNGLTEXPARAMETERFVPROC glad_glTexParameterfv; +#define glTexParameterfv glad_glTexParameterfv +GLAD_API_CALL PFNGLTEXPARAMETERIPROC glad_glTexParameteri; +#define glTexParameteri glad_glTexParameteri +GLAD_API_CALL PFNGLTEXPARAMETERIVPROC glad_glTexParameteriv; +#define glTexParameteriv glad_glTexParameteriv +GLAD_API_CALL PFNGLTEXSUBIMAGE1DPROC glad_glTexSubImage1D; +#define glTexSubImage1D glad_glTexSubImage1D +GLAD_API_CALL PFNGLTEXSUBIMAGE2DPROC glad_glTexSubImage2D; +#define glTexSubImage2D glad_glTexSubImage2D +GLAD_API_CALL PFNGLTEXSUBIMAGE3DPROC glad_glTexSubImage3D; +#define glTexSubImage3D glad_glTexSubImage3D +GLAD_API_CALL PFNGLTRANSFORMFEEDBACKVARYINGSPROC glad_glTransformFeedbackVaryings; +#define glTransformFeedbackVaryings glad_glTransformFeedbackVaryings +GLAD_API_CALL PFNGLTRANSLATEDPROC glad_glTranslated; +#define glTranslated glad_glTranslated +GLAD_API_CALL PFNGLTRANSLATEFPROC glad_glTranslatef; +#define glTranslatef glad_glTranslatef +GLAD_API_CALL PFNGLUNIFORM1FPROC glad_glUniform1f; +#define glUniform1f glad_glUniform1f +GLAD_API_CALL PFNGLUNIFORM1FVPROC glad_glUniform1fv; +#define glUniform1fv glad_glUniform1fv +GLAD_API_CALL PFNGLUNIFORM1IPROC glad_glUniform1i; +#define glUniform1i glad_glUniform1i +GLAD_API_CALL PFNGLUNIFORM1IVPROC glad_glUniform1iv; +#define glUniform1iv glad_glUniform1iv +GLAD_API_CALL PFNGLUNIFORM1UIPROC glad_glUniform1ui; +#define glUniform1ui glad_glUniform1ui +GLAD_API_CALL PFNGLUNIFORM1UIVPROC glad_glUniform1uiv; +#define glUniform1uiv glad_glUniform1uiv +GLAD_API_CALL PFNGLUNIFORM2FPROC glad_glUniform2f; +#define glUniform2f glad_glUniform2f +GLAD_API_CALL PFNGLUNIFORM2FVPROC glad_glUniform2fv; +#define glUniform2fv glad_glUniform2fv +GLAD_API_CALL PFNGLUNIFORM2IPROC glad_glUniform2i; +#define glUniform2i glad_glUniform2i +GLAD_API_CALL PFNGLUNIFORM2IVPROC glad_glUniform2iv; +#define glUniform2iv glad_glUniform2iv +GLAD_API_CALL PFNGLUNIFORM2UIPROC glad_glUniform2ui; +#define glUniform2ui glad_glUniform2ui +GLAD_API_CALL PFNGLUNIFORM2UIVPROC glad_glUniform2uiv; +#define glUniform2uiv glad_glUniform2uiv +GLAD_API_CALL PFNGLUNIFORM3FPROC glad_glUniform3f; +#define glUniform3f glad_glUniform3f +GLAD_API_CALL PFNGLUNIFORM3FVPROC glad_glUniform3fv; +#define glUniform3fv glad_glUniform3fv +GLAD_API_CALL PFNGLUNIFORM3IPROC glad_glUniform3i; +#define glUniform3i glad_glUniform3i +GLAD_API_CALL PFNGLUNIFORM3IVPROC glad_glUniform3iv; +#define glUniform3iv glad_glUniform3iv +GLAD_API_CALL PFNGLUNIFORM3UIPROC glad_glUniform3ui; +#define glUniform3ui glad_glUniform3ui +GLAD_API_CALL PFNGLUNIFORM3UIVPROC glad_glUniform3uiv; +#define glUniform3uiv glad_glUniform3uiv +GLAD_API_CALL PFNGLUNIFORM4FPROC glad_glUniform4f; +#define glUniform4f glad_glUniform4f +GLAD_API_CALL PFNGLUNIFORM4FVPROC glad_glUniform4fv; +#define glUniform4fv glad_glUniform4fv +GLAD_API_CALL PFNGLUNIFORM4IPROC glad_glUniform4i; +#define glUniform4i glad_glUniform4i +GLAD_API_CALL PFNGLUNIFORM4IVPROC glad_glUniform4iv; +#define glUniform4iv glad_glUniform4iv +GLAD_API_CALL PFNGLUNIFORM4UIPROC glad_glUniform4ui; +#define glUniform4ui glad_glUniform4ui +GLAD_API_CALL PFNGLUNIFORM4UIVPROC glad_glUniform4uiv; +#define glUniform4uiv glad_glUniform4uiv +GLAD_API_CALL PFNGLUNIFORMMATRIX2FVPROC glad_glUniformMatrix2fv; +#define glUniformMatrix2fv glad_glUniformMatrix2fv +GLAD_API_CALL PFNGLUNIFORMMATRIX2X3FVPROC glad_glUniformMatrix2x3fv; +#define glUniformMatrix2x3fv glad_glUniformMatrix2x3fv +GLAD_API_CALL PFNGLUNIFORMMATRIX2X4FVPROC glad_glUniformMatrix2x4fv; +#define glUniformMatrix2x4fv glad_glUniformMatrix2x4fv +GLAD_API_CALL PFNGLUNIFORMMATRIX3FVPROC glad_glUniformMatrix3fv; +#define glUniformMatrix3fv glad_glUniformMatrix3fv +GLAD_API_CALL PFNGLUNIFORMMATRIX3X2FVPROC glad_glUniformMatrix3x2fv; +#define glUniformMatrix3x2fv glad_glUniformMatrix3x2fv +GLAD_API_CALL PFNGLUNIFORMMATRIX3X4FVPROC glad_glUniformMatrix3x4fv; +#define glUniformMatrix3x4fv glad_glUniformMatrix3x4fv +GLAD_API_CALL PFNGLUNIFORMMATRIX4FVPROC glad_glUniformMatrix4fv; +#define glUniformMatrix4fv glad_glUniformMatrix4fv +GLAD_API_CALL PFNGLUNIFORMMATRIX4X2FVPROC glad_glUniformMatrix4x2fv; +#define glUniformMatrix4x2fv glad_glUniformMatrix4x2fv +GLAD_API_CALL PFNGLUNIFORMMATRIX4X3FVPROC glad_glUniformMatrix4x3fv; +#define glUniformMatrix4x3fv glad_glUniformMatrix4x3fv +GLAD_API_CALL PFNGLUNMAPBUFFERPROC glad_glUnmapBuffer; +#define glUnmapBuffer glad_glUnmapBuffer +GLAD_API_CALL PFNGLUSEPROGRAMPROC glad_glUseProgram; +#define glUseProgram glad_glUseProgram +GLAD_API_CALL PFNGLVALIDATEPROGRAMPROC glad_glValidateProgram; +#define glValidateProgram glad_glValidateProgram +GLAD_API_CALL PFNGLVERTEX2DPROC glad_glVertex2d; +#define glVertex2d glad_glVertex2d +GLAD_API_CALL PFNGLVERTEX2DVPROC glad_glVertex2dv; +#define glVertex2dv glad_glVertex2dv +GLAD_API_CALL PFNGLVERTEX2FPROC glad_glVertex2f; +#define glVertex2f glad_glVertex2f +GLAD_API_CALL PFNGLVERTEX2FVPROC glad_glVertex2fv; +#define glVertex2fv glad_glVertex2fv +GLAD_API_CALL PFNGLVERTEX2IPROC glad_glVertex2i; +#define glVertex2i glad_glVertex2i +GLAD_API_CALL PFNGLVERTEX2IVPROC glad_glVertex2iv; +#define glVertex2iv glad_glVertex2iv +GLAD_API_CALL PFNGLVERTEX2SPROC glad_glVertex2s; +#define glVertex2s glad_glVertex2s +GLAD_API_CALL PFNGLVERTEX2SVPROC glad_glVertex2sv; +#define glVertex2sv glad_glVertex2sv +GLAD_API_CALL PFNGLVERTEX3DPROC glad_glVertex3d; +#define glVertex3d glad_glVertex3d +GLAD_API_CALL PFNGLVERTEX3DVPROC glad_glVertex3dv; +#define glVertex3dv glad_glVertex3dv +GLAD_API_CALL PFNGLVERTEX3FPROC glad_glVertex3f; +#define glVertex3f glad_glVertex3f +GLAD_API_CALL PFNGLVERTEX3FVPROC glad_glVertex3fv; +#define glVertex3fv glad_glVertex3fv +GLAD_API_CALL PFNGLVERTEX3IPROC glad_glVertex3i; +#define glVertex3i glad_glVertex3i +GLAD_API_CALL PFNGLVERTEX3IVPROC glad_glVertex3iv; +#define glVertex3iv glad_glVertex3iv +GLAD_API_CALL PFNGLVERTEX3SPROC glad_glVertex3s; +#define glVertex3s glad_glVertex3s +GLAD_API_CALL PFNGLVERTEX3SVPROC glad_glVertex3sv; +#define glVertex3sv glad_glVertex3sv +GLAD_API_CALL PFNGLVERTEX4DPROC glad_glVertex4d; +#define glVertex4d glad_glVertex4d +GLAD_API_CALL PFNGLVERTEX4DVPROC glad_glVertex4dv; +#define glVertex4dv glad_glVertex4dv +GLAD_API_CALL PFNGLVERTEX4FPROC glad_glVertex4f; +#define glVertex4f glad_glVertex4f +GLAD_API_CALL PFNGLVERTEX4FVPROC glad_glVertex4fv; +#define glVertex4fv glad_glVertex4fv +GLAD_API_CALL PFNGLVERTEX4IPROC glad_glVertex4i; +#define glVertex4i glad_glVertex4i +GLAD_API_CALL PFNGLVERTEX4IVPROC glad_glVertex4iv; +#define glVertex4iv glad_glVertex4iv +GLAD_API_CALL PFNGLVERTEX4SPROC glad_glVertex4s; +#define glVertex4s glad_glVertex4s +GLAD_API_CALL PFNGLVERTEX4SVPROC glad_glVertex4sv; +#define glVertex4sv glad_glVertex4sv +GLAD_API_CALL PFNGLVERTEXATTRIB1DPROC glad_glVertexAttrib1d; +#define glVertexAttrib1d glad_glVertexAttrib1d +GLAD_API_CALL PFNGLVERTEXATTRIB1DVPROC glad_glVertexAttrib1dv; +#define glVertexAttrib1dv glad_glVertexAttrib1dv +GLAD_API_CALL PFNGLVERTEXATTRIB1FPROC glad_glVertexAttrib1f; +#define glVertexAttrib1f glad_glVertexAttrib1f +GLAD_API_CALL PFNGLVERTEXATTRIB1FVPROC glad_glVertexAttrib1fv; +#define glVertexAttrib1fv glad_glVertexAttrib1fv +GLAD_API_CALL PFNGLVERTEXATTRIB1SPROC glad_glVertexAttrib1s; +#define glVertexAttrib1s glad_glVertexAttrib1s +GLAD_API_CALL PFNGLVERTEXATTRIB1SVPROC glad_glVertexAttrib1sv; +#define glVertexAttrib1sv glad_glVertexAttrib1sv +GLAD_API_CALL PFNGLVERTEXATTRIB2DPROC glad_glVertexAttrib2d; +#define glVertexAttrib2d glad_glVertexAttrib2d +GLAD_API_CALL PFNGLVERTEXATTRIB2DVPROC glad_glVertexAttrib2dv; +#define glVertexAttrib2dv glad_glVertexAttrib2dv +GLAD_API_CALL PFNGLVERTEXATTRIB2FPROC glad_glVertexAttrib2f; +#define glVertexAttrib2f glad_glVertexAttrib2f +GLAD_API_CALL PFNGLVERTEXATTRIB2FVPROC glad_glVertexAttrib2fv; +#define glVertexAttrib2fv glad_glVertexAttrib2fv +GLAD_API_CALL PFNGLVERTEXATTRIB2SPROC glad_glVertexAttrib2s; +#define glVertexAttrib2s glad_glVertexAttrib2s +GLAD_API_CALL PFNGLVERTEXATTRIB2SVPROC glad_glVertexAttrib2sv; +#define glVertexAttrib2sv glad_glVertexAttrib2sv +GLAD_API_CALL PFNGLVERTEXATTRIB3DPROC glad_glVertexAttrib3d; +#define glVertexAttrib3d glad_glVertexAttrib3d +GLAD_API_CALL PFNGLVERTEXATTRIB3DVPROC glad_glVertexAttrib3dv; +#define glVertexAttrib3dv glad_glVertexAttrib3dv +GLAD_API_CALL PFNGLVERTEXATTRIB3FPROC glad_glVertexAttrib3f; +#define glVertexAttrib3f glad_glVertexAttrib3f +GLAD_API_CALL PFNGLVERTEXATTRIB3FVPROC glad_glVertexAttrib3fv; +#define glVertexAttrib3fv glad_glVertexAttrib3fv +GLAD_API_CALL PFNGLVERTEXATTRIB3SPROC glad_glVertexAttrib3s; +#define glVertexAttrib3s glad_glVertexAttrib3s +GLAD_API_CALL PFNGLVERTEXATTRIB3SVPROC glad_glVertexAttrib3sv; +#define glVertexAttrib3sv glad_glVertexAttrib3sv +GLAD_API_CALL PFNGLVERTEXATTRIB4NBVPROC glad_glVertexAttrib4Nbv; +#define glVertexAttrib4Nbv glad_glVertexAttrib4Nbv +GLAD_API_CALL PFNGLVERTEXATTRIB4NIVPROC glad_glVertexAttrib4Niv; +#define glVertexAttrib4Niv glad_glVertexAttrib4Niv +GLAD_API_CALL PFNGLVERTEXATTRIB4NSVPROC glad_glVertexAttrib4Nsv; +#define glVertexAttrib4Nsv glad_glVertexAttrib4Nsv +GLAD_API_CALL PFNGLVERTEXATTRIB4NUBPROC glad_glVertexAttrib4Nub; +#define glVertexAttrib4Nub glad_glVertexAttrib4Nub +GLAD_API_CALL PFNGLVERTEXATTRIB4NUBVPROC glad_glVertexAttrib4Nubv; +#define glVertexAttrib4Nubv glad_glVertexAttrib4Nubv +GLAD_API_CALL PFNGLVERTEXATTRIB4NUIVPROC glad_glVertexAttrib4Nuiv; +#define glVertexAttrib4Nuiv glad_glVertexAttrib4Nuiv +GLAD_API_CALL PFNGLVERTEXATTRIB4NUSVPROC glad_glVertexAttrib4Nusv; +#define glVertexAttrib4Nusv glad_glVertexAttrib4Nusv +GLAD_API_CALL PFNGLVERTEXATTRIB4BVPROC glad_glVertexAttrib4bv; +#define glVertexAttrib4bv glad_glVertexAttrib4bv +GLAD_API_CALL PFNGLVERTEXATTRIB4DPROC glad_glVertexAttrib4d; +#define glVertexAttrib4d glad_glVertexAttrib4d +GLAD_API_CALL PFNGLVERTEXATTRIB4DVPROC glad_glVertexAttrib4dv; +#define glVertexAttrib4dv glad_glVertexAttrib4dv +GLAD_API_CALL PFNGLVERTEXATTRIB4FPROC glad_glVertexAttrib4f; +#define glVertexAttrib4f glad_glVertexAttrib4f +GLAD_API_CALL PFNGLVERTEXATTRIB4FVPROC glad_glVertexAttrib4fv; +#define glVertexAttrib4fv glad_glVertexAttrib4fv +GLAD_API_CALL PFNGLVERTEXATTRIB4IVPROC glad_glVertexAttrib4iv; +#define glVertexAttrib4iv glad_glVertexAttrib4iv +GLAD_API_CALL PFNGLVERTEXATTRIB4SPROC glad_glVertexAttrib4s; +#define glVertexAttrib4s glad_glVertexAttrib4s +GLAD_API_CALL PFNGLVERTEXATTRIB4SVPROC glad_glVertexAttrib4sv; +#define glVertexAttrib4sv glad_glVertexAttrib4sv +GLAD_API_CALL PFNGLVERTEXATTRIB4UBVPROC glad_glVertexAttrib4ubv; +#define glVertexAttrib4ubv glad_glVertexAttrib4ubv +GLAD_API_CALL PFNGLVERTEXATTRIB4UIVPROC glad_glVertexAttrib4uiv; +#define glVertexAttrib4uiv glad_glVertexAttrib4uiv +GLAD_API_CALL PFNGLVERTEXATTRIB4USVPROC glad_glVertexAttrib4usv; +#define glVertexAttrib4usv glad_glVertexAttrib4usv +GLAD_API_CALL PFNGLVERTEXATTRIBI1IPROC glad_glVertexAttribI1i; +#define glVertexAttribI1i glad_glVertexAttribI1i +GLAD_API_CALL PFNGLVERTEXATTRIBI1IVPROC glad_glVertexAttribI1iv; +#define glVertexAttribI1iv glad_glVertexAttribI1iv +GLAD_API_CALL PFNGLVERTEXATTRIBI1UIPROC glad_glVertexAttribI1ui; +#define glVertexAttribI1ui glad_glVertexAttribI1ui +GLAD_API_CALL PFNGLVERTEXATTRIBI1UIVPROC glad_glVertexAttribI1uiv; +#define glVertexAttribI1uiv glad_glVertexAttribI1uiv +GLAD_API_CALL PFNGLVERTEXATTRIBI2IPROC glad_glVertexAttribI2i; +#define glVertexAttribI2i glad_glVertexAttribI2i +GLAD_API_CALL PFNGLVERTEXATTRIBI2IVPROC glad_glVertexAttribI2iv; +#define glVertexAttribI2iv glad_glVertexAttribI2iv +GLAD_API_CALL PFNGLVERTEXATTRIBI2UIPROC glad_glVertexAttribI2ui; +#define glVertexAttribI2ui glad_glVertexAttribI2ui +GLAD_API_CALL PFNGLVERTEXATTRIBI2UIVPROC glad_glVertexAttribI2uiv; +#define glVertexAttribI2uiv glad_glVertexAttribI2uiv +GLAD_API_CALL PFNGLVERTEXATTRIBI3IPROC glad_glVertexAttribI3i; +#define glVertexAttribI3i glad_glVertexAttribI3i +GLAD_API_CALL PFNGLVERTEXATTRIBI3IVPROC glad_glVertexAttribI3iv; +#define glVertexAttribI3iv glad_glVertexAttribI3iv +GLAD_API_CALL PFNGLVERTEXATTRIBI3UIPROC glad_glVertexAttribI3ui; +#define glVertexAttribI3ui glad_glVertexAttribI3ui +GLAD_API_CALL PFNGLVERTEXATTRIBI3UIVPROC glad_glVertexAttribI3uiv; +#define glVertexAttribI3uiv glad_glVertexAttribI3uiv +GLAD_API_CALL PFNGLVERTEXATTRIBI4BVPROC glad_glVertexAttribI4bv; +#define glVertexAttribI4bv glad_glVertexAttribI4bv +GLAD_API_CALL PFNGLVERTEXATTRIBI4IPROC glad_glVertexAttribI4i; +#define glVertexAttribI4i glad_glVertexAttribI4i +GLAD_API_CALL PFNGLVERTEXATTRIBI4IVPROC glad_glVertexAttribI4iv; +#define glVertexAttribI4iv glad_glVertexAttribI4iv +GLAD_API_CALL PFNGLVERTEXATTRIBI4SVPROC glad_glVertexAttribI4sv; +#define glVertexAttribI4sv glad_glVertexAttribI4sv +GLAD_API_CALL PFNGLVERTEXATTRIBI4UBVPROC glad_glVertexAttribI4ubv; +#define glVertexAttribI4ubv glad_glVertexAttribI4ubv +GLAD_API_CALL PFNGLVERTEXATTRIBI4UIPROC glad_glVertexAttribI4ui; +#define glVertexAttribI4ui glad_glVertexAttribI4ui +GLAD_API_CALL PFNGLVERTEXATTRIBI4UIVPROC glad_glVertexAttribI4uiv; +#define glVertexAttribI4uiv glad_glVertexAttribI4uiv +GLAD_API_CALL PFNGLVERTEXATTRIBI4USVPROC glad_glVertexAttribI4usv; +#define glVertexAttribI4usv glad_glVertexAttribI4usv +GLAD_API_CALL PFNGLVERTEXATTRIBIPOINTERPROC glad_glVertexAttribIPointer; +#define glVertexAttribIPointer glad_glVertexAttribIPointer +GLAD_API_CALL PFNGLVERTEXATTRIBPOINTERPROC glad_glVertexAttribPointer; +#define glVertexAttribPointer glad_glVertexAttribPointer +GLAD_API_CALL PFNGLVERTEXPOINTERPROC glad_glVertexPointer; +#define glVertexPointer glad_glVertexPointer +GLAD_API_CALL PFNGLVIEWPORTPROC glad_glViewport; +#define glViewport glad_glViewport +GLAD_API_CALL PFNGLWINDOWPOS2DPROC glad_glWindowPos2d; +#define glWindowPos2d glad_glWindowPos2d +GLAD_API_CALL PFNGLWINDOWPOS2DVPROC glad_glWindowPos2dv; +#define glWindowPos2dv glad_glWindowPos2dv +GLAD_API_CALL PFNGLWINDOWPOS2FPROC glad_glWindowPos2f; +#define glWindowPos2f glad_glWindowPos2f +GLAD_API_CALL PFNGLWINDOWPOS2FVPROC glad_glWindowPos2fv; +#define glWindowPos2fv glad_glWindowPos2fv +GLAD_API_CALL PFNGLWINDOWPOS2IPROC glad_glWindowPos2i; +#define glWindowPos2i glad_glWindowPos2i +GLAD_API_CALL PFNGLWINDOWPOS2IVPROC glad_glWindowPos2iv; +#define glWindowPos2iv glad_glWindowPos2iv +GLAD_API_CALL PFNGLWINDOWPOS2SPROC glad_glWindowPos2s; +#define glWindowPos2s glad_glWindowPos2s +GLAD_API_CALL PFNGLWINDOWPOS2SVPROC glad_glWindowPos2sv; +#define glWindowPos2sv glad_glWindowPos2sv +GLAD_API_CALL PFNGLWINDOWPOS3DPROC glad_glWindowPos3d; +#define glWindowPos3d glad_glWindowPos3d +GLAD_API_CALL PFNGLWINDOWPOS3DVPROC glad_glWindowPos3dv; +#define glWindowPos3dv glad_glWindowPos3dv +GLAD_API_CALL PFNGLWINDOWPOS3FPROC glad_glWindowPos3f; +#define glWindowPos3f glad_glWindowPos3f +GLAD_API_CALL PFNGLWINDOWPOS3FVPROC glad_glWindowPos3fv; +#define glWindowPos3fv glad_glWindowPos3fv +GLAD_API_CALL PFNGLWINDOWPOS3IPROC glad_glWindowPos3i; +#define glWindowPos3i glad_glWindowPos3i +GLAD_API_CALL PFNGLWINDOWPOS3IVPROC glad_glWindowPos3iv; +#define glWindowPos3iv glad_glWindowPos3iv +GLAD_API_CALL PFNGLWINDOWPOS3SPROC glad_glWindowPos3s; +#define glWindowPos3s glad_glWindowPos3s +GLAD_API_CALL PFNGLWINDOWPOS3SVPROC glad_glWindowPos3sv; +#define glWindowPos3sv glad_glWindowPos3sv + + + + + +GLAD_API_CALL int gladLoadGLUserPtr( GLADuserptrloadfunc load, void *userptr); +GLAD_API_CALL int gladLoadGL( GLADloadfunc load); + + + +#ifdef __cplusplus +} +#endif +#endif diff --git a/include/make.h b/include/make.h new file mode 100644 index 0000000..3d90481 --- /dev/null +++ b/include/make.h @@ -0,0 +1,25 @@ +#pragma once + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + unsigned int make_buffer(unsigned int target, + const void * data, + size_t size); + + unsigned int make_texture(const void * data, + int internalformat, + int width, + int height, + int format, + int type); + +#define make_buffer_sizeof(target, data) \ + make_buffer(target, data, (sizeof (data))) + +#ifdef __cplusplus +} +#endif diff --git a/include/math/constants.hpp b/include/math/constants.hpp new file mode 100644 index 0000000..59f4482 --- /dev/null +++ b/include/math/constants.hpp @@ -0,0 +1,5 @@ +#pragma once + +#define PI (3.14159274101257324219f) +#define PI_2 (PI * 2.0f) +#define I_PI_2 (1.0f / (PI_2)) diff --git a/include/math/float_types.hpp b/include/math/float_types.hpp new file mode 100644 index 0000000..e88b9bb --- /dev/null +++ b/include/math/float_types.hpp @@ -0,0 +1,15 @@ +#pragma once + +#include "vec2.hpp" +#include "vec3.hpp" +#include "vec4.hpp" +#include "mat2x2.hpp" +#include "mat3x3.hpp" +#include "mat4x4.hpp" + +using vec2 = vec<2, float>; +using vec3 = vec<3, float>; +using vec4 = vec<4, float>; +using mat2x2 = mat<2, 2, float>; +using mat3x3 = mat<3, 3, float>; +using mat4x4 = mat<4, 4, float>; diff --git a/include/math/mat.hpp b/include/math/mat.hpp new file mode 100644 index 0000000..3fbeaea --- /dev/null +++ b/include/math/mat.hpp @@ -0,0 +1,26 @@ +#pragma once + +template +struct mat; + +template +inline constexpr typename mat::col_type +col(mat const& m, int c) +{ + typename mat::col_type v; + for (int r = 0; r < R; r++) { + v[r] = m[r][c]; + } + return v; +} + +template +inline constexpr vec<3, T> +col(mat const& m, int c) +{ + vec<3, T> v; + for (int r = 0; r < 3; r++) { + v[r] = m[r][c]; + } + return v; +} diff --git a/include/math/mat2x2.hpp b/include/math/mat2x2.hpp new file mode 100644 index 0000000..8b8aec7 --- /dev/null +++ b/include/math/mat2x2.hpp @@ -0,0 +1,112 @@ +#pragma once + +#include +#include "vec2.hpp" +#include "mat.hpp" + +// +// mat2x2 +// + +template +struct mat<2, 2, T> +{ + typedef vec<2, T> row_type; + typedef vec<2, T> col_type; + +private: + row_type value[2]; + +public: + inline constexpr mat(); + + inline constexpr mat + ( + T const& a00, T const& a01, + T const& a10, T const& a11 + ); + + inline static constexpr int length() { return 4; } + + inline constexpr typename mat<2, 2, T>::row_type & + operator[](int i); + + inline constexpr typename mat<2, 2, T>::row_type const & + operator[](int i) const; + + void operator=(const mat<2, 2, T>&) = delete; + +}; + + +template +inline constexpr mat<2, 2, T>::mat() + : value{std::move(row_type(1, 0)), + std::move(row_type(0, 1))} +{ } + +template +inline constexpr mat<2, 2, T>::mat +( + T const& a00, T const& a01, + T const& a10, T const& a11 +) + : value{std::move(row_type(a00, a01)), + std::move(row_type(a10, a11))} +{ } + +template +inline constexpr typename mat<2, 2, T>::row_type & +mat<2, 2, T>::operator[](int i) +{ + return value[i]; +} + +template +inline constexpr typename mat<2, 2, T>::row_type const & +mat<2, 2, T>::operator[](int i) const +{ + return value[i]; +} + +template +inline constexpr mat<2, 2, T> operator*(mat<2, 2, T> const& m1, mat<2, 2, T> const& m2) +{ +#define c(i, j) ( \ + m1[i][0] * m2[0][j] \ + + m1[i][1] * m2[1][j]) + + return mat<2, 2, T>(c(0,0), c(0,1), + c(1,0), c(1,1)); +#undef c +} + +template +inline constexpr typename mat<2, 2, T>::row_type operator* +( + mat<2, 2, T> const& m, + typename mat<2, 2, T>::col_type const& v +) +{ +#define c(i) ( \ + m[i][0] * v[0] \ + + m[i][1] * v[1]) + + return typename mat<2, 2, T>::row_type(c(0), c(1)); +#undef c +} + +template +inline constexpr mat<2, 2, T> transpose(mat<2, 2, T> const& m) +{ + return mat<2, 2, T>( + m[0][0], m[1][0], + m[0][1], m[1][1] + ); +} + +template +inline constexpr float determinant(mat<2, 2, T> const& a) +{ + return a[0][0] * a[1][1] - a[0][1] * a[1][0]; +} diff --git a/include/math/mat3x3.hpp b/include/math/mat3x3.hpp new file mode 100644 index 0000000..3bd64d9 --- /dev/null +++ b/include/math/mat3x3.hpp @@ -0,0 +1,201 @@ +#pragma once + +#include +#include "vec3.hpp" +#include "mat.hpp" + +// +// mat3x3 +// + +template +struct mat<3, 3, T> +{ + typedef vec<3, T> row_type; + typedef vec<3, T> col_type; + +private: + row_type value[3]; + +public: + inline constexpr mat(); + + inline constexpr mat + ( + T const& a00, T const& a01, T const& a02, + T const& a10, T const& a11, T const& a12, + T const& a20, T const& a21, T const& a22 + ); + + inline static constexpr int length() { return 3; } + + inline constexpr typename mat<3, 3, T>::row_type & + operator[](int i); + + inline constexpr typename mat<3, 3, T>::row_type const & + operator[](int i) const; + + //void operator=(const mat<3, 3, T>&) = delete; + +}; + + +template +inline constexpr mat<3, 3, T>::mat() + : value{std::move(row_type(1, 0, 0)), + std::move(row_type(0, 1, 0)), + std::move(row_type(0, 0, 1))} +{ } + +template +inline constexpr mat<3, 3, T>::mat +( + T const& a00, T const& a01, T const& a02, + T const& a10, T const& a11, T const& a12, + T const& a20, T const& a21, T const& a22 +) + : value{std::move(row_type(a00, a01, a02)), + std::move(row_type(a10, a11, a12)), + std::move(row_type(a20, a21, a22))} +{ } + +template +inline constexpr typename mat<3, 3, T>::row_type & +mat<3, 3, T>::operator[](int i) +{ + return value[i]; +} + +template +inline constexpr typename mat<3, 3, T>::row_type const & +mat<3, 3, T>::operator[](int i) const +{ + return value[i]; +} + +template +inline constexpr mat<3, 3, T> operator+(mat<3, 3, T> const& m1, mat<3, 3, T> const& m2) +{ +#define c(i, j) ( m1[i][j] + m2[i][j] ) + + return mat<3, 3, T>(c(0,0), c(0,1), c(0,2), + c(1,0), c(1,1), c(1,2), + c(2,0), c(2,1), c(2,2)); +#undef c +} + +template +inline constexpr mat<3, 3, T> operator*(mat<3, 3, T> const& m1, mat<3, 3, T> const& m2) +{ +#define c(i, j) ( \ + m1[i][0] * m2[0][j] \ + + m1[i][1] * m2[1][j] \ + + m1[i][2] * m2[2][j] ) + + return mat<3, 3, T>(c(0,0), c(0,1), c(0,2), + c(1,0), c(1,1), c(1,2), + c(2,0), c(2,1), c(2,2)); +#undef c +} + +template +inline constexpr mat<3, 3, T> operator*(mat<3, 3, T> const& m1, float s) +{ +#define c(i, j) ( m1[i][j] * s ) + + return mat<3, 3, T>(c(0,0), c(0,1), c(0,2), + c(1,0), c(1,1), c(1,2), + c(2,0), c(2,1), c(2,2)); +#undef c +} + +template +inline constexpr typename mat<3, 3, T>::row_type operator* +( + mat<3, 3, T> const& m, + typename mat<3, 3, T>::col_type const& v +) +{ +#define c(i) ( \ + m[i][0] * v[0] \ + + m[i][1] * v[1] \ + + m[i][2] * v[2] ) + + return typename mat<3, 3, T>::row_type(c(0), c(1), c(2)); +#undef c +} + +template +inline constexpr mat<3, 3, T> transpose(mat<3, 3, T> const& m) +{ + return mat<3, 3, T>( + m[0][0], m[1][0], m[2][0], + m[0][1], m[1][1], m[2][1], + m[0][2], m[1][2], m[2][2] + ); +} + +template +inline constexpr mat<2, 2, T> submatrix(mat<3, 3, T> const& a, int r, int c) +{ + mat<2, 2, T> b; + int row2 = 0; + for (int row3 = 0; row3 < 3; row3++) { + if (row3 == r) continue; + int col2 = 0; + for (int col3 = 0; col3 < 3; col3++) { + if (col3 == c) continue; + b[row2][col2] = a[row3][col3]; + col2++; + } + row2++; + } + return b; +} + +template +inline constexpr float minor(mat<3, 3, T> const& a, int r, int c) +{ + mat<2, 2, T> s = submatrix(a, r, c); + float ret = determinant(s); + return ret; +} + +template +inline constexpr float cofactor(mat<3, 3, T> const& a, int r, int c) +{ + float m = minor(a, r, c); + if ((r + c) & 1) + return -m; + else + return m; +} + +template +inline constexpr float determinant(mat<3, 3, T> const& a) +{ + float f0 = cofactor(a, 0, 0); + float f1 = cofactor(a, 0, 1); + float f2 = cofactor(a, 0, 2); + return + a[0][0] * f0 + + a[0][1] * f1 + + a[0][2] * f2; +} + +template +inline constexpr mat<3, 3, T> inverse(mat<3, 3, T> const& a) +{ + mat<3, 3, T> m; + float idet = 1.0f / determinant(a); + m[0][0] = cofactor(a, 0, 0) * idet; + m[1][0] = cofactor(a, 0, 1) * idet; + m[2][0] = cofactor(a, 0, 2) * idet; + m[0][1] = cofactor(a, 1, 0) * idet; + m[1][1] = cofactor(a, 1, 1) * idet; + m[2][1] = cofactor(a, 1, 2) * idet; + m[0][2] = cofactor(a, 2, 0) * idet; + m[1][2] = cofactor(a, 2, 1) * idet; + m[2][2] = cofactor(a, 2, 2) * idet; + return m; +} diff --git a/include/math/mat4x4.hpp b/include/math/mat4x4.hpp new file mode 100644 index 0000000..bcddf1f --- /dev/null +++ b/include/math/mat4x4.hpp @@ -0,0 +1,247 @@ +#pragma once + +#include +#include "vec4.hpp" +#include "mat.hpp" + +// +// mat4x4 +// + +template +struct mat<4, 4, T> +{ + typedef vec<4, T> row_type; + typedef vec<4, T> col_type; + +private: + row_type value[4]; + +public: + inline constexpr mat(); + + inline constexpr mat + ( + T const& a00, T const& a01, T const& a02, T const& a03, + T const& a10, T const& a11, T const& a12, T const& a13, + T const& a20, T const& a21, T const& a22, T const& a23, + T const& a30, T const& a31, T const& a32, T const& a33 + ); + + inline static constexpr int length() { return 4; } + + inline constexpr typename mat<4, 4, T>::row_type & + operator[](int i); + + inline constexpr typename mat<4, 4, T>::row_type const & + operator[](int i) const; + + //void operator=(const mat<4, 4, T>&) = delete; + +}; + + +template +inline constexpr mat<4, 4, T>::mat() + : value{std::move(row_type(1, 0, 0, 0)), + std::move(row_type(0, 1, 0, 0)), + std::move(row_type(0, 0, 1, 0)), + std::move(row_type(0, 0, 0, 1))} +{ } + +template +inline constexpr mat<4, 4, T>::mat +( + T const& a00, T const& a01, T const& a02, T const& a03, + T const& a10, T const& a11, T const& a12, T const& a13, + T const& a20, T const& a21, T const& a22, T const& a23, + T const& a30, T const& a31, T const& a32, T const& a33 +) + : value{std::move(row_type(a00, a01, a02, a03)), + std::move(row_type(a10, a11, a12, a13)), + std::move(row_type(a20, a21, a22, a23)), + std::move(row_type(a30, a31, a32, a33))} +{ } + + +template +inline constexpr typename mat<4, 4, T>::row_type & +mat<4, 4, T>::operator[](int i) +{ + return value[i]; +} + +template +inline constexpr typename mat<4, 4, T>::row_type const & +mat<4, 4, T>::operator[](int i) const +{ + return value[i]; +} + +template +inline constexpr mat<4, 4, T> operator+(mat<4, 4, T> const& m1, mat<4, 4, T> const& m2) +{ +#define c(i, j) ( m1[i][j] + m2[i][j] ) + + return mat<4, 4, T>(c(0,0), c(0,1), c(0,2), c(0,3), + c(1,0), c(1,1), c(1,2), c(1,3), + c(2,0), c(2,1), c(2,2), c(2,3), + c(3,0), c(3,1), c(3,2), c(3,3)); +#undef c +} + +template +inline constexpr mat<4, 4, T> operator*(mat<4, 4, T> const& m1, mat<4, 4, T> const& m2) +{ +#define c(i, j) ( \ + m1[i][0] * m2[0][j] \ + + m1[i][1] * m2[1][j] \ + + m1[i][2] * m2[2][j] \ + + m1[i][3] * m2[3][j] ) + + return mat<4, 4, T>(c(0,0), c(0,1), c(0,2), c(0,3), + c(1,0), c(1,1), c(1,2), c(1,3), + c(2,0), c(2,1), c(2,2), c(2,3), + c(3,0), c(3,1), c(3,2), c(3,3)); +#undef c +} + +template +inline constexpr mat<4, 4, T> operator*(mat<4, 4, T> const& m1, float s) +{ +#define c(i, j) ( m1[i][j] * s ) + + return mat<4, 4, T>(c(0,0), c(0,1), c(0,2), c(0,3), + c(1,0), c(1,1), c(1,2), c(1,3), + c(2,0), c(2,1), c(2,2), c(2,3), + c(3,0), c(3,1), c(3,2), c(3,3)); +#undef c +} + +template +inline constexpr typename mat<4, 4, T>::row_type operator* +( + mat<4, 4, T> const& m, + typename mat<4, 4, T>::col_type const& v +) +{ +#define c(i) ( \ + m[i][0] * v[0] \ + + m[i][1] * v[1] \ + + m[i][2] * v[2] \ + + m[i][3] * v[3] ) + + return typename mat<4, 4, T>::row_type(c(0), c(1), c(2), c(3)); +#undef c +} + +template +inline constexpr vec<3, T> operator* +( + mat<4, 4, T> const& m, + vec<3, T> const& v +) +{ +#define c(i) ( \ + m[i][0] * v[0] \ + + m[i][1] * v[1] \ + + m[i][2] * v[2] \ + + m[i][3] ) + + return vec<3, T>(c(0), c(1), c(2)); +#undef c +} + +template +inline constexpr mat<4, 4, T> transpose(mat<4, 4, T> const& m) +{ + return mat<4, 4, T>( + m[0][0], m[1][0], m[2][0], m[3][0], + m[0][1], m[1][1], m[2][1], m[3][1], + m[0][2], m[1][2], m[2][2], m[3][2], + m[0][3], m[1][3], m[2][3], m[3][3] + ); +} + +template +inline constexpr mat<3, 3, T> submatrix(mat<4, 4, T> const& a, int r, int c) +{ + mat<3, 3, T> b; + int row3 = 0; + for (int row4 = 0; row4 < 4; row4++) { + if (row4 == r) continue; + int col3 = 0; + for (int col4 = 0; col4 < 4; col4++) { + if (col4 == c) continue; + b[row3][col3] = a[row4][col4]; + col3++; + } + row3++; + } + return b; +} + +template +inline constexpr float minor(mat<4, 4, T> const& a, int r, int c) +{ + mat<3, 3, T> s = submatrix(a, r, c); + float ret = determinant(s); + return ret; +} + +template +inline constexpr float cofactor(mat<4, 4, T> const& a, int r, int c) +{ + float m = minor(a, r, c); + if ((r + c) & 1) + return -m; + else + return m; +} + +template +inline constexpr float determinant(mat<4, 4, T> const& a) +{ + float f0 = cofactor(a, 0, 0); + float f1 = cofactor(a, 0, 1); + float f2 = cofactor(a, 0, 2); + float f3 = cofactor(a, 0, 3); + return + a[0][0] * f0 + + a[0][1] * f1 + + a[0][2] * f2 + + a[0][3] * f3; +} + +template +inline constexpr mat<4, 4, T> inverse(mat<4, 4, T> const& a) +{ + mat<4, 4, T> m; + float idet = 1.0f / determinant(a); + m[0][0] = cofactor(a, 0, 0) * idet; + m[1][0] = cofactor(a, 0, 1) * idet; + m[2][0] = cofactor(a, 0, 2) * idet; + m[3][0] = cofactor(a, 0, 3) * idet; + m[0][1] = cofactor(a, 1, 0) * idet; + m[1][1] = cofactor(a, 1, 1) * idet; + m[2][1] = cofactor(a, 1, 2) * idet; + m[3][1] = cofactor(a, 1, 3) * idet; + m[0][2] = cofactor(a, 2, 0) * idet; + m[1][2] = cofactor(a, 2, 1) * idet; + m[2][2] = cofactor(a, 2, 2) * idet; + m[3][2] = cofactor(a, 2, 3) * idet; + m[0][3] = cofactor(a, 3, 0) * idet; + m[1][3] = cofactor(a, 3, 1) * idet; + m[2][3] = cofactor(a, 3, 2) * idet; + m[3][3] = cofactor(a, 3, 3) * idet; + return m; +} + +template +inline constexpr mat<4, 4, T> identity() +{ + return mat<4, 4, T>(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); +} diff --git a/include/math/transform.hpp b/include/math/transform.hpp new file mode 100644 index 0000000..34c7ed4 --- /dev/null +++ b/include/math/transform.hpp @@ -0,0 +1,167 @@ +#pragma once + +#include "vec.hpp" +#include "mat.hpp" + +template +inline constexpr mat<4, 4, T> translate(vec<3, T> t) +{ + return { + 1, 0, 0, t.x, + 0, 1, 0, t.y, + 0, 0, 1, t.z, + 0, 0, 0, 1 + }; +} + +template +inline constexpr mat<4, 4, T> scale(vec<3, T> s) +{ + return { + s.x, 0, 0, 0, + 0, s.y, 0, 0, + 0, 0, s.z, 0, + 0, 0, 0, 1 + }; +} + +template +inline constexpr mat<4, 4, T> scale(T s) +{ + return { + s, 0, 0, 0, + 0, s, 0, 0, + 0, 0, s, 0, + 0, 0, 0, 1 + }; +} + +template +inline constexpr mat<4, 4, T> rotate_x(T t) +{ + return { + 1, 0, 0, 0, + 0, cos(t), -sin(t), 0, + 0, sin(t), cos(t), 0, + 0, 0, 0, 1 + }; +} + +template +inline constexpr mat<4, 4, T> rotate_y(T t) +{ + return { + cos(t), 0, sin(t), 0, + 0, 1, 0, 0, + -sin(t), 0, cos(t), 0, + 0, 0, 0, 1 + }; +} + +template +inline constexpr mat<4, 4, T> rotate_z(T t) +{ + return { + cos(t), -sin(t), 0, 0, + sin(t), cos(t), 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1 + }; +} + +template +inline constexpr mat<4, 4, T> rotate_axis_angle(vec<3, T> u, T t) +{ + T st = sin(t); + T ct = cos(t); + T oct = 1.0 - ct; + + T xx = u.x * u.x; + T xy = u.x * u.y; + T xz = u.x * u.z; + T yy = u.y * u.y; + T yz = u.y * u.z; + T zz = u.z * u.z; + + return { + xx * oct + ct, xy * oct - u.z * st, xz * oct + u.y * st, 0, + xy * oct + u.z * st, yy * oct + ct, yz * oct - u.x * st, 0, + xz * oct - u.y * st, yz * oct + u.x * st, zz * oct + ct, 0, + 0, 0, 0, 0 + }; +} + +template +inline constexpr mat<4, 4, T> rotate_axis_angle(vec<4, T> u) +{ + return rotate_axis_angle({u.x, u.y, u.z}, u.w); +} + +template +inline constexpr mat<4, 4, T> rotate_quaternion(vec<4, T> r) +{ + T xx2 = 2 * r.x * r.x; + T xy2 = 2 * r.x * r.y; + T xz2 = 2 * r.x * r.z; + T xw2 = 2 * r.x * r.w; + T yy2 = 2 * r.y * r.y; + T yz2 = 2 * r.y * r.z; + T yw2 = 2 * r.y * r.w; + T zz2 = 2 * r.z * r.z; + T zw2 = 2 * r.z * r.w; + + return { + 1 - yy2 - zz2, xy2 - zw2, xz2 + yw2, 0, + xy2 + zw2, 1 - xx2 - zz2, yz2 - xw2, 0, + xz2 - yw2, yz2 + xw2, 1 - xx2 - yy2, 0, + 0, 0, 0, 1, + }; +} + +template +inline constexpr mat<4, 4, T> look_at(vec<3, T> eye, vec<3, T> center, vec<3, T> up) +{ + vec<3, T> z = normalize(eye - center); + vec<3, T> y = up; + vec<3, T> x = cross(y, z); + y = cross(z, x); + x = normalize(x); + y = normalize(y); + + mat<4, 4, T> mat = { + x.x, x.y, x.z, -dot(x, eye), + y.x, y.y, y.z, -dot(y, eye), + z.x, z.y, z.z, -dot(z, eye), + 0, 0, 0, 1, + }; + + return mat; +} + +template +inline constexpr vec<3, T> normal_multiply(mat<4, 4, T> m, vec<3, T> n) +{ + vec<4, T> n4 = m * (vec<4, T>){n.x, n.y, n.z, 0.0}; + return {n4.x, n4.y, n4.z}; +} + +template +inline constexpr T inverse_length(vec<3, T> v) +{ + float f = dot(v, v); + return 1.0f / sqrt(f); +} + +template +inline constexpr T screen_transform(T x, T y) +{ + T x2 = x / 2.0; + T y2 = y / 2.0; + + return { + y2, 0, 0, x2, + 0, y2, 0, y2, + 0, 0, 1, 0, + 0, 0, 0, 1 + }; +} diff --git a/include/math/vec.hpp b/include/math/vec.hpp new file mode 100644 index 0000000..3e4e704 --- /dev/null +++ b/include/math/vec.hpp @@ -0,0 +1,29 @@ +#pragma once + +template +struct vec; + +template +inline constexpr T magnitude(vec const& v) +{ + return sqrt(dot(v, v)); +} + +template +inline constexpr T magnitude_squared(vec const& v) +{ + return dot(v, v); +} + +template +inline constexpr vec normalize(vec const& v) +{ + T d = 1.0f / magnitude(v); + return v * d; +} + +template +inline constexpr vec reflect(vec const& i, vec const& n) +{ + return i - dot(n, i) * n * static_cast(2.0); +} diff --git a/include/math/vec2.hpp b/include/math/vec2.hpp new file mode 100644 index 0000000..b617964 --- /dev/null +++ b/include/math/vec2.hpp @@ -0,0 +1,154 @@ +#pragma once + +#include "vec.hpp" + +// +// vec3 +// + +template +struct vec<2, T> +{ + union { + T val[2]; + struct { T x, y; }; + struct { T u, v; }; + }; + + inline constexpr vec(); + inline constexpr vec(T scalar); + inline constexpr vec(T _x, T _y); + + constexpr inline vec<2, T> operator-() const; + inline constexpr T & operator[](int i); + inline constexpr T const& operator[](int i) const; + inline constexpr vec<2, T>& operator=(vec<2, T> const& v); + inline constexpr vec<2, T>& operator+=(vec<2, T> const& v); + inline constexpr vec<2, T>& operator-=(vec<2, T> const& v); +}; + +template +inline constexpr vec<2, T>::vec() + : x(0), y(0) +{} + +template +inline constexpr vec<2, T>::vec(T scalar) + : x(scalar), y(scalar) +{} + +template +inline constexpr vec<2, T>::vec(T _x, T _y) + : x(_x), y(_y) +{} + +template +constexpr inline vec<2, T> vec<2, T>::operator-() const +{ + return vec<2, T>(-x, -y); +} + +template +inline constexpr T & vec<2, T>::operator[](int i) +{ + return val[i]; +} + +template +inline constexpr T const& vec<2, T>::operator[](int i) const +{ + return val[i]; +} + +template +inline constexpr vec<2, T>& vec<2, T>::operator=(vec<2, T> const& v) +{ + this->x = static_cast(v.x); + this->y = static_cast(v.y); + return *this; +} + +template +inline constexpr vec<2, T>& vec<2, T>::operator+=(vec<2, T> const& v) +{ + *this = *this + vec<2, T>(v); + return *this; +} + +template +inline constexpr vec<2, T>& vec<2, T>::operator-=(vec<2, T> const& v) +{ + *this = *this - vec<2, T>(v); + return *this; +} + +template +inline constexpr vec<2, T> operator+(vec<2, T> const& v1, vec<2, T> const& v2) +{ + return vec<2, T>(v1.x + v2.x, + v1.y + v2.y); +} + +template +inline constexpr vec<2, T> operator-(vec<2, T> const& v1, vec<2, T> const& v2) +{ + return vec<2, T>(v1.x - v2.x, + v1.y - v2.y); +} + +template +inline constexpr vec<2, T> operator*(vec<2, T> const& v1, vec<2, T> const& v2) +{ + return vec<2, T>(v1.x * v2.x, + v1.y * v2.y); +} + +template +inline constexpr vec<2, T> operator*(vec<2, T> const& v1, T const& scalar) +{ + return v1 * vec<2, T>(scalar); +} + +template +inline constexpr vec<2, T> operator*(T const& scalar, vec<2, T> const& v1) +{ + return vec<2, T>(scalar) * v1; +} + +template +inline constexpr vec<2, T> operator/(vec<2, T> const& v1, vec<2, T> const& v2) +{ + return vec<2, T>(v1.x / v2.x, + v1.y / v2.y); +} + +template +inline constexpr vec<2, T> operator/(vec<2, T> const& v1, T const& scalar) +{ + return v1 / vec<2, T>(scalar); +} + +template +inline constexpr T dot(vec<2, T> const& v1, vec<2, T> const& v2) +{ + vec<2, T> tmp(v1 * v2); + return tmp.x + tmp.y; +} + +template +inline constexpr T cross(vec<2, T> const& v1, vec<2, T> const& v2) +{ + return v1.x * v2.y - v2.x * v1.y; +} + +template +inline constexpr vec<2, T> functor1(T (&func) (T const& x), vec<2, T> const& v) +{ + return vec<2, T>(func(v.x), func(v.y)); +} + +template +inline constexpr vec<2, U> functor1(U (&func) (T const& x), vec<2, T> const& v) +{ + return vec<2, U>(func(v.x), func(v.y)); +} diff --git a/include/math/vec3.hpp b/include/math/vec3.hpp new file mode 100644 index 0000000..38022de --- /dev/null +++ b/include/math/vec3.hpp @@ -0,0 +1,171 @@ +#pragma once + +#include "vec.hpp" + +// +// vec3 +// + +template +struct vec<3, T> +{ + union { + T val[3]; + struct { T x, y, z; }; + struct { T r, g, b; }; + }; + + inline constexpr vec(); + inline constexpr vec(T scalar); + inline constexpr vec(T _x, T _y, T _z); + + constexpr inline vec<3, T> operator-() const; + inline constexpr T & operator[](int i); + inline constexpr T const& operator[](int i) const; + inline constexpr vec<3, T>& operator=(vec<3, T> const& v); + inline constexpr vec<3, T>& operator+=(vec<3, T> const& v); + inline constexpr vec<3, T>& operator-=(vec<3, T> const& v); + inline constexpr vec<3, T>& operator*=(T const& scalar); +}; + +template +inline constexpr vec<3, T>::vec() + : x(0), y(0), z(0) +{} + +template +inline constexpr vec<3, T>::vec(T scalar) + : x(scalar), y(scalar), z(scalar) +{} + +template +inline constexpr vec<3, T>::vec(T _x, T _y, T _z) + : x(_x), y(_y), z(_z) +{} + +template +constexpr inline vec<3, T> vec<3, T>::operator-() const +{ + return vec<3, T>(-x, -y, -z); +} + +template +inline constexpr T & vec<3, T>::operator[](int i) +{ + return val[i]; +} + +template +inline constexpr T const& vec<3, T>::operator[](int i) const +{ + return val[i]; +} + +template +inline constexpr vec<3, T>& vec<3, T>::operator=(vec<3, T> const& v) +{ + this->x = static_cast(v.x); + this->y = static_cast(v.y); + this->z = static_cast(v.z); + return *this; +} + +template +inline constexpr vec<3, T>& vec<3, T>::operator+=(vec<3, T> const& v) +{ + *this = *this + vec<3, T>(v); + return *this; +} + +template +inline constexpr vec<3, T>& vec<3, T>::operator-=(vec<3, T> const& v) +{ + *this = *this - vec<3, T>(v); + return *this; +} + +template +inline constexpr vec<3, T>& vec<3, T>::operator*=(T const& scalar) +{ + *this = *this * scalar; + return *this; +} + +template +inline constexpr vec<3, T> operator+(vec<3, T> const& v1, vec<3, T> const& v2) +{ + return vec<3, T>(v1.x + v2.x, + v1.y + v2.y, + v1.z + v2.z); +} + +template +inline constexpr vec<3, T> operator-(vec<3, T> const& v1, vec<3, T> const& v2) +{ + return vec<3, T>(v1.x - v2.x, + v1.y - v2.y, + v1.z - v2.z); +} + +template +inline constexpr vec<3, T> operator*(vec<3, T> const& v1, vec<3, T> const& v2) +{ + return vec<3, T>(v1.x * v2.x, + v1.y * v2.y, + v1.z * v2.z); +} + +template +inline constexpr vec<3, T> operator*(vec<3, T> const& v1, T const& scalar) +{ + return v1 * vec<3, T>(scalar); +} + +template +inline constexpr vec<3, T> operator*(T const& scalar, vec<3, T> const& v1) +{ + return vec<3, T>(scalar) * v1; +} + +template +inline constexpr vec<3, T> operator/(vec<3, T> const& v1, vec<3, T> const& v2) +{ + return vec<3, T>(v1.x / v2.x, + v1.y / v2.y, + v1.z / v2.z); +} + +template +inline constexpr vec<3, T> operator/(vec<3, T> const& v1, T const& scalar) +{ + return v1 / vec<3, T>(scalar); +} + +template +inline constexpr T dot(vec<3, T> const& v1, vec<3, T> const& v2) +{ + return + v1.x * v2.x + + v1.y * v2.y + + v1.z * v2.z; +} + +template +inline constexpr vec<3, T> cross(vec<3, T> const& v1, vec<3, T> const& v2) +{ + return vec<3, T>(v1.y * v2.z - v2.y * v1.z, + v1.z * v2.x - v2.z * v1.x, + v1.x * v2.y - v2.x * v1.y); +} + +template +inline constexpr vec<3, T> functor1(T (&func) (T const& x), vec<3, T> const& v) +{ + return vec<3, T>(func(v.x), func(v.y), func(v.z)); +} + +template +inline constexpr vec<3, U> functor1(U (&func) (T const& x), vec<3, T> const& v) +{ + return vec<3, U>(func(v.x), func(v.y), func(v.z)); +} diff --git a/include/math/vec4.hpp b/include/math/vec4.hpp new file mode 100644 index 0000000..5f8bb52 --- /dev/null +++ b/include/math/vec4.hpp @@ -0,0 +1,164 @@ +#pragma once + +#include "vec.hpp" + +// +// vec4 +// + +template +struct vec<4, T> +{ + union { + T val[4]; + struct { T x, y, z, w; }; + struct { T a, r, g, b; }; + }; + + inline constexpr vec(); + inline constexpr vec(T scalar); + inline constexpr vec(T _x, T _y, T _z, T _w); + inline constexpr vec(const vec<3, T>& v); + + constexpr inline vec<4, T> operator-() const; + inline constexpr T & operator[](int i); + inline constexpr T const& operator[](int i) const; + inline constexpr vec<4, T>& operator=(vec<4, T> const& v); + inline constexpr vec<4, T>& operator+=(vec<4, T> const& v); + inline constexpr vec<4, T>& operator-=(vec<4, T> const& v); +}; + +template +inline constexpr vec<4, T>::vec() + : x(0), y(0), z(0), w(0) +{} + +template +inline constexpr vec<4, T>::vec(T scalar) + : x(scalar), y(scalar), z(scalar), w(scalar) +{} + +template +inline constexpr vec<4, T>::vec(T _x, T _y, T _z, T _w) + : x(_x), y(_y), z(_z), w(_w) +{} + +template +inline constexpr vec<4, T>::vec(const vec<3, T>& v) + : x(v.x), y(v.y), z(v.z), w(1.f) +{} + +template +constexpr inline vec<4, T> vec<4, T>::operator-() const +{ + return vec<4, T>(-x, -y, -z, -w); +} + +template +inline constexpr T & vec<4, T>::operator[](int i) +{ + return val[i]; +} + +template +inline constexpr T const& vec<4, T>::operator[](int i) const +{ + return val[i]; +} + +template +inline constexpr vec<4, T>& vec<4, T>::operator=(vec<4, T> const& v) +{ + this->x = static_cast(v.x); + this->y = static_cast(v.y); + this->z = static_cast(v.z); + this->w = static_cast(v.w); + return *this; +} + +template +inline constexpr vec<4, T>& vec<4, T>::operator+=(vec<4, T> const& v) +{ + *this = *this + vec<4, T>(v); + return *this; +} + +template +inline constexpr vec<4, T>& vec<4, T>::operator-=(vec<4, T> const& v) +{ + *this = *this - vec<4, T>(v); + return *this; +} + +template +inline constexpr vec<4, T> operator+(vec<4, T> const& v1, vec<4, T> const& v2) +{ + return vec<4, T>(v1.x + v2.x, + v1.y + v2.y, + v1.z + v2.z, + v1.w + v2.w); +} + +template +inline constexpr vec<4, T> operator-(vec<4, T> const& v1, vec<4, T> const& v2) +{ + return vec<4, T>(v1.x - v2.x, + v1.y - v2.y, + v1.z - v2.z, + v1.w - v2.w); +} + +template +inline constexpr vec<4, T> operator*(vec<4, T> const& v1, vec<4, T> const& v2) +{ + return vec<4, T>(v1.x * v2.x, + v1.y * v2.y, + v1.z * v2.z, + v1.w * v2.w); +} + +template +inline constexpr vec<4, T> operator*(vec<4, T> const& v1, T const& scalar) +{ + return v1 * vec<4, T>(scalar); +} + +template +inline constexpr vec<4, T> operator*(T const& scalar, vec<4, T> const& v1) +{ + return vec<4, T>(scalar) * v1; +} + +template +inline constexpr vec<4, T> operator/(vec<4, T> const& v1, vec<4, T> const& v2) +{ + return vec<4, T>(v1.x / v2.x, + v1.y / v2.y, + v1.z / v2.z, + v1.w / v2.w); +} + +template +inline constexpr vec<4, T> operator/(vec<4, T> const& v1, T const& scalar) +{ + return v1 / vec<4, T>(scalar); +} + +template +inline constexpr T dot(vec<4, T> const& v1, vec<4, T> const& v2) +{ + vec<4, T> tmp(v1 * v2); + return tmp.x + tmp.y + tmp.z + tmp.w; +} + +template +inline constexpr vec<4, T> functor1(T (&func) (T const& x), vec<4, T> const& v) +{ + return vec<4, T>(func(v.x), func(v.y), func(v.z), func(v.w)); +} + +template +inline constexpr vec<4, U> functor1(U (&func) (T const& x), vec<4, T> const& v) +{ + return vec<4, U>(func(v.x), func(v.y), func(v.z), func(v.w)); +} diff --git a/include/mesh.h b/include/mesh.h new file mode 100644 index 0000000..50f631d --- /dev/null +++ b/include/mesh.h @@ -0,0 +1,13 @@ +#ifdef __cplusplus +extern "C" { +#endif + + struct mesh { + unsigned int vtx; + unsigned int idx; + unsigned int length; + }; + +#ifdef __cplusplus +} +#endif diff --git a/include/model/test_scene.h b/include/model/test_scene.h new file mode 100644 index 0000000..838b501 --- /dev/null +++ b/include/model/test_scene.h @@ -0,0 +1,982 @@ +#pragma once + +const int test_scene_Plane_triangles[] = { + 0, 1, 2, + 3, 4, 5, + 6, 7, 8, + 9, 10, 11, + 12, 13, 14, + 15, 16, 17, + 18, 19, 20, + 21, 22, 23, + 24, 25, 26, + 27, 28, 29, + 30, 31, 32, + 33, 34, 35, + 36, 37, 38, + 39, 40, 41, + 42, 43, 44, + 45, 46, 47, + 48, 49, 50, + 51, 52, 53, + 54, 55, 56, + 57, 58, 59, + 60, 61, 62, + 63, 64, 65, + 66, 67, 68, + 69, 70, 71, + 72, 73, 74, + 75, 76, 77, + 78, 79, 80, + 81, 82, 83, + 84, 85, 86, + 87, 88, 89, + 90, 91, 92, + 93, 94, 95, + 96, 97, 98, + 99, 100, 101, + 102, 103, 104, + 105, 106, 107, + 108, 109, 110, + 111, 112, 113, + 114, 115, 116, + 117, 118, 119, + 120, 121, 122, + 123, 124, 125, + 126, 127, 128, + 129, 130, 131, + 132, 133, 134, + 135, 136, 137, + 138, 139, 140, + 141, 142, 143, + 144, 145, 146, + 147, 148, 149, + 150, 151, 152, + 153, 154, 155, + 156, 157, 158, + 159, 160, 161, + 162, 163, 164, + 165, 166, 167, + 168, 169, 170, + 171, 172, 173, + 174, 175, 176, + 177, 178, 179, + 180, 181, 182, + 183, 184, 185, + 186, 187, 188, + 189, 190, 191, + 192, 193, 194, + 195, 196, 197, + 198, 199, 200, + 201, 202, 203, + 204, 205, 206, + 207, 208, 209, + 210, 211, 212, + 213, 214, 215, + 216, 217, 218, + 219, 220, 221, + 222, 223, 224, + 225, 226, 227, + 228, 229, 230, + 231, 232, 233, + 234, 235, 236, + 237, 238, 239, + 240, 241, 242, + 243, 244, 245, + 246, 247, 248, + 249, 250, 251, + 252, 253, 254, + 255, 256, 257, + 258, 259, 260, + 261, 262, 263, + 264, 265, 266, + 267, 268, 269, + 270, 271, 272, + 273, 274, 275, + 276, 277, 278, + 279, 280, 281, + 282, 283, 284, + 285, 286, 287, + 288, 289, 290, + 291, 292, 293, + 294, 295, 296, + 297, 298, 299, + 300, 301, 302, + 303, 304, 305, + 306, 307, 308, + 0, 309, 1, + 3, 310, 4, + 6, 311, 7, + 9, 312, 10, + 12, 313, 13, + 15, 314, 16, + 18, 315, 19, + 21, 316, 22, + 24, 317, 25, + 27, 318, 28, + 30, 319, 31, + 33, 320, 34, + 36, 321, 37, + 39, 322, 40, + 42, 323, 43, + 45, 324, 46, + 48, 325, 49, + 51, 326, 52, + 54, 327, 55, + 57, 328, 58, + 60, 329, 61, + 63, 330, 64, + 66, 331, 67, + 69, 332, 70, + 72, 333, 73, + 75, 334, 76, + 78, 335, 79, + 81, 336, 82, + 84, 337, 85, + 87, 338, 88, + 90, 339, 91, + 95, 340, 341, + 341, 342, 343, + 343, 344, 345, + 345, 346, 347, + 347, 348, 349, + 349, 350, 351, + 351, 352, 353, + 353, 354, 93, + 93, 355, 356, + 356, 357, 358, + 358, 359, 360, + 360, 361, 94, + 94, 362, 363, + 363, 364, 365, + 365, 366, 367, + 367, 368, 95, + 95, 341, 343, + 343, 345, 347, + 347, 349, 351, + 351, 353, 93, + 93, 356, 358, + 358, 360, 94, + 94, 363, 365, + 365, 367, 95, + 95, 343, 347, + 347, 351, 93, + 93, 358, 94, + 94, 365, 95, + 95, 347, 93, + 96, 369, 97, + 99, 370, 100, + 104, 371, 372, + 372, 373, 374, + 374, 375, 376, + 376, 377, 378, + 378, 379, 380, + 380, 381, 382, + 382, 383, 384, + 384, 385, 102, + 102, 386, 387, + 387, 388, 389, + 389, 390, 391, + 391, 392, 103, + 103, 393, 394, + 394, 395, 396, + 396, 397, 398, + 398, 399, 104, + 104, 372, 374, + 374, 376, 378, + 378, 380, 382, + 382, 384, 102, + 102, 387, 389, + 389, 391, 103, + 103, 394, 396, + 396, 398, 104, + 104, 374, 378, + 378, 382, 102, + 102, 389, 103, + 103, 396, 104, + 104, 378, 102, + 105, 400, 106, + 108, 401, 109, + 111, 402, 112, + 114, 403, 115, + 117, 404, 118, + 120, 405, 121, + 123, 406, 124, + 126, 407, 127, + 129, 408, 130, + 132, 409, 133, + 135, 410, 136, + 138, 411, 139, + 141, 412, 142, + 144, 413, 145, + 147, 414, 148, + 150, 415, 151, + 153, 416, 154, + 156, 417, 157, + 159, 418, 160, + 162, 419, 163, + 165, 420, 166, + 168, 421, 169, + 171, 422, 172, + 174, 423, 175, + 177, 424, 178, + 180, 425, 181, + 183, 426, 184, + 186, 427, 187, + 189, 428, 190, + 192, 429, 193, + 197, 430, 431, + 431, 432, 433, + 433, 434, 435, + 435, 436, 437, + 438, 439, 440, + 441, 442, 443, + 444, 445, 446, + 446, 447, 195, + 195, 448, 449, + 449, 450, 451, + 451, 452, 453, + 453, 454, 196, + 455, 456, 457, + 458, 459, 460, + 461, 462, 463, + 463, 464, 197, + 197, 431, 433, + 433, 435, 437, + 437, 465, 444, + 444, 446, 195, + 195, 449, 451, + 451, 453, 196, + 196, 466, 461, + 461, 463, 197, + 197, 433, 437, + 437, 444, 195, + 195, 451, 196, + 196, 461, 197, + 197, 437, 195, + 198, 467, 199, + 201, 468, 202, + 206, 469, 470, + 470, 471, 472, + 472, 473, 474, + 474, 475, 476, + 476, 477, 478, + 478, 479, 480, + 480, 481, 482, + 482, 483, 204, + 204, 484, 485, + 485, 486, 487, + 487, 488, 489, + 489, 490, 205, + 205, 491, 492, + 492, 493, 494, + 494, 495, 496, + 496, 497, 206, + 206, 470, 472, + 472, 474, 476, + 476, 478, 480, + 480, 482, 204, + 204, 485, 487, + 487, 489, 205, + 205, 492, 494, + 494, 496, 206, + 206, 472, 476, + 476, 480, 204, + 204, 487, 205, + 205, 494, 206, + 206, 476, 204, + 207, 498, 208, + 210, 499, 211, + 213, 500, 214, + 216, 501, 217, + 219, 502, 220, + 222, 503, 223, + 225, 504, 226, + 228, 505, 229, + 231, 506, 232, + 234, 507, 235, + 237, 508, 238, + 240, 509, 241, + 243, 510, 244, + 246, 511, 247, + 249, 512, 250, + 252, 513, 253, + 255, 514, 256, + 258, 515, 259, + 261, 516, 262, + 264, 517, 265, + 267, 518, 268, + 270, 519, 271, + 273, 520, 274, + 276, 521, 277, + 279, 522, 280, + 282, 523, 283, + 285, 524, 286, + 288, 525, 289, + 291, 526, 292, + 294, 527, 295, + 528, 529, 530, + 531, 532, 533, + 534, 535, 536, + 536, 537, 538, + 538, 539, 540, + 540, 541, 542, + 542, 543, 544, + 544, 545, 297, + 546, 547, 548, + 549, 550, 551, + 552, 553, 554, + 554, 555, 298, + 298, 556, 557, + 557, 558, 559, + 559, 560, 561, + 561, 562, 299, + 299, 563, 534, + 534, 536, 538, + 538, 540, 542, + 542, 544, 297, + 297, 564, 552, + 552, 554, 298, + 298, 557, 559, + 559, 561, 299, + 299, 534, 538, + 538, 542, 297, + 297, 552, 298, + 298, 559, 299, + 299, 538, 297, + 300, 565, 301, + 303, 566, 304, + 308, 567, 568, + 568, 569, 570, + 570, 571, 572, + 572, 573, 574, + 574, 575, 576, + 576, 577, 578, + 578, 579, 580, + 580, 581, 306, + 306, 582, 583, + 583, 584, 585, + 585, 586, 587, + 587, 588, 307, + 307, 589, 590, + 590, 591, 592, + 592, 593, 594, + 594, 595, 308, + 308, 568, 570, + 570, 572, 574, + 574, 576, 578, + 578, 580, 306, + 306, 583, 585, + 585, 587, 307, + 307, 590, 592, + 592, 594, 308, + 308, 570, 574, + 574, 578, 306, + 306, 585, 307, + 307, 592, 308, + 308, 574, 306, +}; + +const int test_scene_Plane_triangles_length = (sizeof (test_scene_Plane_triangles)) / (sizeof (test_scene_Plane_triangles[0])); + +const float test_scene_vertices[] = { + 1.000000f, 0.000000f, 1.000000f, 0.093750f, 0.031250f, -0.0000f, 1.0000f, -0.0000f, + -1.000000f, 0.000000f, -1.000000f, 0.031250f, 0.093750f, -0.0000f, 1.0000f, -0.0000f, + -1.000000f, 0.000000f, 1.000000f, 0.031250f, 0.031250f, -0.0000f, 1.0000f, -0.0000f, + 0.000000f, 0.050000f, 0.000000f, 0.318803f, 0.919541f, 0.0980f, 0.9952f, -0.0000f, + 0.009755f, 0.049039f, -1.000000f, 0.312010f, 0.810852f, 0.0980f, 0.9952f, -0.0000f, + 0.000000f, 0.050000f, -1.000000f, 0.318803f, 0.810852f, 0.0980f, 0.9952f, -0.0000f, + 0.009755f, 0.049039f, 0.000000f, 0.312010f, 0.919541f, 0.2903f, 0.9569f, -0.0000f, + 0.019134f, 0.046194f, -1.000000f, 0.305217f, 0.810852f, 0.2903f, 0.9569f, -0.0000f, + 0.009755f, 0.049039f, -1.000000f, 0.312010f, 0.810852f, 0.2903f, 0.9569f, -0.0000f, + 0.019134f, 0.046194f, 0.000000f, 0.305217f, 0.919541f, 0.4714f, 0.8819f, -0.0000f, + 0.027779f, 0.041574f, -1.000000f, 0.298423f, 0.810852f, 0.4714f, 0.8819f, -0.0000f, + 0.019134f, 0.046194f, -1.000000f, 0.305217f, 0.810852f, 0.4714f, 0.8819f, -0.0000f, + 0.027779f, 0.041573f, 0.000000f, 0.298423f, 0.919541f, 0.6344f, 0.7730f, -0.0000f, + 0.035355f, 0.035355f, -1.000000f, 0.291630f, 0.810852f, 0.6344f, 0.7730f, -0.0000f, + 0.027779f, 0.041574f, -1.000000f, 0.298423f, 0.810852f, 0.6344f, 0.7730f, -0.0000f, + 0.035355f, 0.035355f, 0.000000f, 0.291630f, 0.919541f, 0.7730f, 0.6344f, -0.0000f, + 0.041573f, 0.027779f, -1.000000f, 0.284837f, 0.810852f, 0.7730f, 0.6344f, -0.0000f, + 0.035355f, 0.035355f, -1.000000f, 0.291630f, 0.810852f, 0.7730f, 0.6344f, -0.0000f, + 0.041573f, 0.027778f, 0.000000f, 0.284837f, 0.919541f, 0.8819f, 0.4714f, -0.0000f, + 0.046194f, 0.019134f, -1.000000f, 0.278044f, 0.810852f, 0.8819f, 0.4714f, -0.0000f, + 0.041573f, 0.027779f, -1.000000f, 0.284837f, 0.810852f, 0.8819f, 0.4714f, -0.0000f, + 0.046194f, 0.019134f, 0.000000f, 0.278044f, 0.919541f, 0.9569f, 0.2903f, -0.0000f, + 0.049039f, 0.009755f, -1.000000f, 0.271251f, 0.810852f, 0.9569f, 0.2903f, -0.0000f, + 0.046194f, 0.019134f, -1.000000f, 0.278044f, 0.810852f, 0.9569f, 0.2903f, -0.0000f, + 0.049039f, 0.009754f, 0.000000f, 0.271251f, 0.919541f, 0.9952f, 0.0980f, -0.0000f, + 0.050000f, 0.000000f, -1.000000f, 0.264458f, 0.810852f, 0.9952f, 0.0980f, -0.0000f, + 0.049039f, 0.009755f, -1.000000f, 0.271251f, 0.810852f, 0.9952f, 0.0980f, -0.0000f, + 0.050000f, -0.000000f, -0.000000f, 0.264458f, 0.919541f, 0.9952f, -0.0980f, -0.0000f, + 0.049039f, -0.009754f, -1.000000f, 0.257665f, 0.810852f, 0.9952f, -0.0980f, -0.0000f, + 0.050000f, 0.000000f, -1.000000f, 0.264458f, 0.810852f, 0.9952f, -0.0980f, -0.0000f, + 0.049039f, -0.009755f, -0.000000f, 0.257665f, 0.919541f, 0.9569f, -0.2903f, -0.0000f, + 0.046194f, -0.019134f, -1.000000f, 0.250872f, 0.810852f, 0.9569f, -0.2903f, -0.0000f, + 0.049039f, -0.009754f, -1.000000f, 0.257665f, 0.810852f, 0.9569f, -0.2903f, -0.0000f, + 0.046194f, -0.019134f, -0.000000f, 0.250872f, 0.919541f, 0.8819f, -0.4714f, -0.0000f, + 0.041573f, -0.027778f, -1.000000f, 0.244079f, 0.810852f, 0.8819f, -0.4714f, -0.0000f, + 0.046194f, -0.019134f, -1.000000f, 0.250872f, 0.810852f, 0.8819f, -0.4714f, -0.0000f, + 0.041573f, -0.027779f, -0.000000f, 0.244079f, 0.919541f, 0.7730f, -0.6344f, -0.0000f, + 0.035355f, -0.035355f, -1.000000f, 0.237286f, 0.810852f, 0.7730f, -0.6344f, -0.0000f, + 0.041573f, -0.027778f, -1.000000f, 0.244079f, 0.810852f, 0.7730f, -0.6344f, -0.0000f, + 0.035355f, -0.035355f, -0.000000f, 0.237286f, 0.919541f, 0.6344f, -0.7730f, -0.0000f, + 0.027779f, -0.041573f, -1.000000f, 0.230493f, 0.810852f, 0.6344f, -0.7730f, -0.0000f, + 0.035355f, -0.035355f, -1.000000f, 0.237286f, 0.810852f, 0.6344f, -0.7730f, -0.0000f, + 0.027779f, -0.041574f, -0.000000f, 0.230493f, 0.919541f, 0.4714f, -0.8819f, -0.0000f, + 0.019134f, -0.046194f, -1.000000f, 0.223699f, 0.810852f, 0.4714f, -0.8819f, -0.0000f, + 0.027779f, -0.041573f, -1.000000f, 0.230493f, 0.810852f, 0.4714f, -0.8819f, -0.0000f, + 0.019134f, -0.046194f, -0.000000f, 0.223699f, 0.919541f, 0.2903f, -0.9569f, -0.0000f, + 0.009755f, -0.049039f, -1.000000f, 0.216906f, 0.810852f, 0.2903f, -0.9569f, -0.0000f, + 0.019134f, -0.046194f, -1.000000f, 0.223699f, 0.810852f, 0.2903f, -0.9569f, -0.0000f, + 0.009755f, -0.049039f, -0.000000f, 0.216906f, 0.919541f, 0.0980f, -0.9952f, -0.0000f, + 0.000000f, -0.050000f, -1.000000f, 0.210113f, 0.810852f, 0.0980f, -0.9952f, -0.0000f, + 0.009755f, -0.049039f, -1.000000f, 0.216906f, 0.810852f, 0.0980f, -0.9952f, -0.0000f, + 0.000000f, -0.050000f, -1.000000f, 0.210113f, 0.810852f, -0.0980f, -0.9952f, -0.0000f, + -0.009755f, -0.049039f, -0.000000f, 0.203320f, 0.919541f, -0.0980f, -0.9952f, -0.0000f, + -0.009755f, -0.049039f, -1.000000f, 0.203320f, 0.810852f, -0.0980f, -0.9952f, -0.0000f, + -0.009755f, -0.049039f, -0.000000f, 0.203320f, 0.919541f, -0.2903f, -0.9569f, -0.0000f, + -0.019134f, -0.046194f, -1.000000f, 0.196527f, 0.810852f, -0.2903f, -0.9569f, -0.0000f, + -0.009755f, -0.049039f, -1.000000f, 0.203320f, 0.810852f, -0.2903f, -0.9569f, -0.0000f, + -0.019134f, -0.046194f, -0.000000f, 0.196527f, 0.919541f, -0.4714f, -0.8819f, -0.0000f, + -0.027779f, -0.041573f, -1.000000f, 0.189734f, 0.810852f, -0.4714f, -0.8819f, -0.0000f, + -0.019134f, -0.046194f, -1.000000f, 0.196527f, 0.810852f, -0.4714f, -0.8819f, -0.0000f, + -0.027779f, -0.041574f, -0.000000f, 0.189734f, 0.919541f, -0.6344f, -0.7730f, -0.0000f, + -0.035355f, -0.035355f, -1.000000f, 0.182941f, 0.810852f, -0.6344f, -0.7730f, -0.0000f, + -0.027779f, -0.041573f, -1.000000f, 0.189734f, 0.810852f, -0.6344f, -0.7730f, -0.0000f, + -0.035355f, -0.035355f, -0.000000f, 0.182941f, 0.919541f, -0.7730f, -0.6344f, -0.0000f, + -0.041573f, -0.027778f, -1.000000f, 0.176148f, 0.810852f, -0.7730f, -0.6344f, -0.0000f, + -0.035355f, -0.035355f, -1.000000f, 0.182941f, 0.810852f, -0.7730f, -0.6344f, -0.0000f, + -0.041573f, -0.027779f, -0.000000f, 0.176148f, 0.919541f, -0.8819f, -0.4714f, -0.0000f, + -0.046194f, -0.019134f, -1.000000f, 0.169355f, 0.810852f, -0.8819f, -0.4714f, -0.0000f, + -0.041573f, -0.027778f, -1.000000f, 0.176148f, 0.810852f, -0.8819f, -0.4714f, -0.0000f, + -0.046194f, -0.019134f, -0.000000f, 0.169355f, 0.919541f, -0.9569f, -0.2903f, -0.0000f, + -0.049039f, -0.009754f, -1.000000f, 0.162562f, 0.810852f, -0.9569f, -0.2903f, -0.0000f, + -0.046194f, -0.019134f, -1.000000f, 0.169355f, 0.810852f, -0.9569f, -0.2903f, -0.0000f, + -0.049039f, -0.009755f, -0.000000f, 0.162562f, 0.919541f, -0.9952f, -0.0980f, -0.0000f, + -0.050000f, 0.000000f, -1.000000f, 0.155769f, 0.810852f, -0.9952f, -0.0980f, -0.0000f, + -0.049039f, -0.009754f, -1.000000f, 0.162562f, 0.810852f, -0.9952f, -0.0980f, -0.0000f, + -0.050000f, -0.000000f, -0.000000f, 0.155769f, 0.919541f, -0.9952f, 0.0980f, -0.0000f, + -0.049039f, 0.009755f, -1.000000f, 0.148975f, 0.810852f, -0.9952f, 0.0980f, -0.0000f, + -0.050000f, 0.000000f, -1.000000f, 0.155769f, 0.810852f, -0.9952f, 0.0980f, -0.0000f, + -0.049039f, 0.009754f, 0.000000f, 0.148975f, 0.919541f, -0.9569f, 0.2903f, -0.0000f, + -0.046194f, 0.019134f, -1.000000f, 0.142182f, 0.810852f, -0.9569f, 0.2903f, -0.0000f, + -0.049039f, 0.009755f, -1.000000f, 0.148975f, 0.810852f, -0.9569f, 0.2903f, -0.0000f, + -0.046194f, 0.019134f, 0.000000f, 0.142182f, 0.919541f, -0.8819f, 0.4714f, -0.0000f, + -0.041573f, 0.027779f, -1.000000f, 0.135389f, 0.810852f, -0.8819f, 0.4714f, -0.0000f, + -0.046194f, 0.019134f, -1.000000f, 0.142182f, 0.810852f, -0.8819f, 0.4714f, -0.0000f, + -0.041573f, 0.027778f, 0.000000f, 0.135389f, 0.919541f, -0.7730f, 0.6344f, -0.0000f, + -0.035355f, 0.035355f, -1.000000f, 0.128596f, 0.810852f, -0.7730f, 0.6344f, -0.0000f, + -0.041573f, 0.027779f, -1.000000f, 0.135389f, 0.810852f, -0.7730f, 0.6344f, -0.0000f, + -0.035355f, 0.035355f, 0.000000f, 0.128596f, 0.919541f, -0.6344f, 0.7730f, -0.0000f, + -0.027779f, 0.041574f, -1.000000f, 0.121803f, 0.810852f, -0.6344f, 0.7730f, -0.0000f, + -0.035355f, 0.035355f, -1.000000f, 0.128596f, 0.810852f, -0.6344f, 0.7730f, -0.0000f, + -0.027779f, 0.041573f, 0.000000f, 0.121803f, 0.919541f, -0.4714f, 0.8819f, -0.0000f, + -0.019134f, 0.046194f, -1.000000f, 0.115010f, 0.810852f, -0.4714f, 0.8819f, -0.0000f, + -0.027779f, 0.041574f, -1.000000f, 0.121803f, 0.810852f, -0.4714f, 0.8819f, -0.0000f, + -0.019134f, -0.046194f, -0.000000f, 0.135804f, 0.708308f, -0.0000f, -0.0000f, 1.0000f, + 0.046194f, -0.019134f, -0.000000f, 0.203968f, 0.736542f, -0.0000f, -0.0000f, 1.0000f, + 0.019134f, 0.046194f, 0.000000f, 0.175734f, 0.804707f, -0.0000f, -0.0000f, 1.0000f, + -0.019134f, 0.046194f, 0.000000f, 0.115010f, 0.919541f, -0.2903f, 0.9569f, -0.0000f, + -0.009755f, 0.049039f, -1.000000f, 0.108217f, 0.810852f, -0.2903f, 0.9569f, -0.0000f, + -0.019134f, 0.046194f, -1.000000f, 0.115010f, 0.810852f, -0.2903f, 0.9569f, -0.0000f, + -0.009755f, 0.049039f, -1.000000f, 0.108217f, 0.810852f, -0.0980f, 0.9952f, -0.0000f, + 0.000000f, 0.050000f, 0.000000f, 0.101424f, 0.919541f, -0.0980f, 0.9952f, -0.0000f, + 0.000000f, 0.050000f, -1.000000f, 0.101424f, 0.810852f, -0.0980f, 0.9952f, -0.0000f, + 0.009755f, -0.049039f, -1.000000f, 0.274636f, 0.705339f, -0.0000f, -0.0000f, -1.0000f, + -0.049039f, -0.009754f, -1.000000f, 0.213289f, 0.746329f, -0.0000f, -0.0000f, -1.0000f, + -0.009755f, 0.049039f, -1.000000f, 0.254280f, 0.807676f, -0.0000f, -0.0000f, -1.0000f, + 1.000000f, 0.050000f, -0.000000f, 0.857352f, 0.280261f, -0.0000f, 0.9952f, -0.0980f, + 0.000000f, 0.049039f, -0.009755f, 0.852554f, 0.203494f, -0.0000f, 0.9952f, -0.0980f, + 0.000000f, 0.050000f, -0.000000f, 0.857352f, 0.203494f, -0.0000f, 0.9952f, -0.0980f, + 1.000000f, 0.049039f, -0.009755f, 0.852554f, 0.280261f, -0.0000f, 0.9569f, -0.2903f, + 0.000000f, 0.046194f, -0.019134f, 0.847756f, 0.203494f, -0.0000f, 0.9569f, -0.2903f, + 0.000000f, 0.049039f, -0.009755f, 0.852554f, 0.203494f, -0.0000f, 0.9569f, -0.2903f, + 1.000000f, 0.046194f, -0.019134f, 0.847756f, 0.280261f, -0.0000f, 0.8819f, -0.4714f, + 0.000000f, 0.041574f, -0.027779f, 0.842958f, 0.203494f, -0.0000f, 0.8819f, -0.4714f, + 0.000000f, 0.046194f, -0.019134f, 0.847756f, 0.203494f, -0.0000f, 0.8819f, -0.4714f, + 1.000000f, 0.041573f, -0.027779f, 0.842958f, 0.280261f, -0.0000f, 0.7730f, -0.6344f, + 0.000000f, 0.035355f, -0.035355f, 0.838161f, 0.203494f, -0.0000f, 0.7730f, -0.6344f, + 0.000000f, 0.041574f, -0.027779f, 0.842958f, 0.203494f, -0.0000f, 0.7730f, -0.6344f, + 1.000000f, 0.035355f, -0.035355f, 0.838161f, 0.280261f, -0.0000f, 0.6344f, -0.7730f, + -0.000000f, 0.027779f, -0.041573f, 0.833363f, 0.203494f, -0.0000f, 0.6344f, -0.7730f, + 0.000000f, 0.035355f, -0.035355f, 0.838161f, 0.203494f, -0.0000f, 0.6344f, -0.7730f, + 1.000000f, 0.027778f, -0.041574f, 0.833363f, 0.280261f, -0.0000f, 0.4714f, -0.8819f, + -0.000000f, 0.019134f, -0.046194f, 0.828565f, 0.203494f, -0.0000f, 0.4714f, -0.8819f, + -0.000000f, 0.027779f, -0.041573f, 0.833363f, 0.203494f, -0.0000f, 0.4714f, -0.8819f, + 1.000000f, 0.019134f, -0.046194f, 0.828565f, 0.280261f, -0.0000f, 0.2903f, -0.9569f, + -0.000000f, 0.009755f, -0.049039f, 0.823767f, 0.203494f, -0.0000f, 0.2903f, -0.9569f, + -0.000000f, 0.019134f, -0.046194f, 0.828565f, 0.203494f, -0.0000f, 0.2903f, -0.9569f, + 1.000000f, 0.009754f, -0.049039f, 0.823767f, 0.280261f, -0.0000f, 0.0980f, -0.9952f, + -0.000000f, 0.000000f, -0.050000f, 0.818969f, 0.203494f, -0.0000f, 0.0980f, -0.9952f, + -0.000000f, 0.009755f, -0.049039f, 0.823767f, 0.203494f, -0.0000f, 0.0980f, -0.9952f, + 1.000000f, -0.000000f, -0.050000f, 0.818969f, 0.280261f, -0.0000f, -0.0980f, -0.9952f, + -0.000000f, -0.009754f, -0.049039f, 0.814171f, 0.203494f, -0.0000f, -0.0980f, -0.9952f, + -0.000000f, 0.000000f, -0.050000f, 0.818969f, 0.203494f, -0.0000f, -0.0980f, -0.9952f, + 1.000000f, -0.009755f, -0.049039f, 0.814171f, 0.280261f, -0.0000f, -0.2903f, -0.9569f, + -0.000000f, -0.019134f, -0.046194f, 0.809373f, 0.203494f, -0.0000f, -0.2903f, -0.9569f, + -0.000000f, -0.009754f, -0.049039f, 0.814171f, 0.203494f, -0.0000f, -0.2903f, -0.9569f, + 1.000000f, -0.019134f, -0.046194f, 0.809373f, 0.280261f, -0.0000f, -0.4714f, -0.8819f, + -0.000000f, -0.027778f, -0.041573f, 0.804575f, 0.203494f, -0.0000f, -0.4714f, -0.8819f, + -0.000000f, -0.019134f, -0.046194f, 0.809373f, 0.203494f, -0.0000f, -0.4714f, -0.8819f, + 1.000000f, -0.027779f, -0.041574f, 0.804575f, 0.280261f, -0.0000f, -0.6344f, -0.7730f, + -0.000000f, -0.035355f, -0.035355f, 0.799777f, 0.203494f, -0.0000f, -0.6344f, -0.7730f, + -0.000000f, -0.027778f, -0.041573f, 0.804575f, 0.203494f, -0.0000f, -0.6344f, -0.7730f, + 1.000000f, -0.035355f, -0.035355f, 0.799777f, 0.280261f, -0.0000f, -0.7730f, -0.6344f, + -0.000000f, -0.041573f, -0.027779f, 0.794979f, 0.203494f, -0.0000f, -0.7730f, -0.6344f, + -0.000000f, -0.035355f, -0.035355f, 0.799777f, 0.203494f, -0.0000f, -0.7730f, -0.6344f, + 1.000000f, -0.041574f, -0.027779f, 0.794979f, 0.280261f, -0.0000f, -0.8819f, -0.4714f, + -0.000000f, -0.046194f, -0.019134f, 0.790181f, 0.203494f, -0.0000f, -0.8819f, -0.4714f, + -0.000000f, -0.041573f, -0.027779f, 0.794979f, 0.203494f, -0.0000f, -0.8819f, -0.4714f, + 1.000000f, -0.046194f, -0.019134f, 0.790181f, 0.280261f, -0.0000f, -0.9569f, -0.2903f, + -0.000000f, -0.049039f, -0.009755f, 0.785383f, 0.203494f, -0.0000f, -0.9569f, -0.2903f, + -0.000000f, -0.046194f, -0.019134f, 0.790181f, 0.203494f, -0.0000f, -0.9569f, -0.2903f, + 1.000000f, -0.049039f, -0.009755f, 0.785383f, 0.280261f, -0.0000f, -0.9952f, -0.0980f, + -0.000000f, -0.050000f, 0.000000f, 0.780586f, 0.203494f, -0.0000f, -0.9952f, -0.0980f, + -0.000000f, -0.049039f, -0.009755f, 0.785383f, 0.203494f, -0.0000f, -0.9952f, -0.0980f, + -0.000000f, -0.050000f, 0.000000f, 0.780586f, 0.203494f, -0.0000f, -0.9952f, 0.0980f, + 1.000000f, -0.049039f, 0.009754f, 0.775788f, 0.280261f, -0.0000f, -0.9952f, 0.0980f, + -0.000000f, -0.049039f, 0.009755f, 0.775788f, 0.203494f, -0.0000f, -0.9952f, 0.0980f, + 1.000000f, -0.049039f, 0.009754f, 0.775788f, 0.280261f, -0.0000f, -0.9569f, 0.2903f, + -0.000000f, -0.046194f, 0.019134f, 0.770990f, 0.203494f, -0.0000f, -0.9569f, 0.2903f, + -0.000000f, -0.049039f, 0.009755f, 0.775788f, 0.203494f, -0.0000f, -0.9569f, 0.2903f, + 1.000000f, -0.046194f, 0.019134f, 0.770990f, 0.280261f, -0.0000f, -0.8819f, 0.4714f, + -0.000000f, -0.041573f, 0.027779f, 0.766192f, 0.203494f, -0.0000f, -0.8819f, 0.4714f, + -0.000000f, -0.046194f, 0.019134f, 0.770990f, 0.203494f, -0.0000f, -0.8819f, 0.4714f, + 1.000000f, -0.041574f, 0.027778f, 0.766192f, 0.280261f, -0.0000f, -0.7730f, 0.6344f, + 0.000000f, -0.035355f, 0.035355f, 0.761394f, 0.203494f, -0.0000f, -0.7730f, 0.6344f, + -0.000000f, -0.041573f, 0.027779f, 0.766192f, 0.203494f, -0.0000f, -0.7730f, 0.6344f, + 1.000000f, -0.035355f, 0.035355f, 0.761394f, 0.280261f, -0.0000f, -0.6344f, 0.7730f, + 0.000000f, -0.027778f, 0.041573f, 0.756596f, 0.203494f, -0.0000f, -0.6344f, 0.7730f, + 0.000000f, -0.035355f, 0.035355f, 0.761394f, 0.203494f, -0.0000f, -0.6344f, 0.7730f, + 1.000000f, -0.027779f, 0.041573f, 0.756596f, 0.280261f, -0.0000f, -0.4714f, 0.8819f, + 0.000000f, -0.019134f, 0.046194f, 0.751798f, 0.203494f, -0.0000f, -0.4714f, 0.8819f, + 0.000000f, -0.027778f, 0.041573f, 0.756596f, 0.203494f, -0.0000f, -0.4714f, 0.8819f, + 1.000000f, -0.019134f, 0.046194f, 0.751798f, 0.280261f, -0.0000f, -0.2903f, 0.9569f, + 0.000000f, -0.009754f, 0.049039f, 0.747000f, 0.203494f, -0.0000f, -0.2903f, 0.9569f, + 0.000000f, -0.019134f, 0.046194f, 0.751798f, 0.203494f, -0.0000f, -0.2903f, 0.9569f, + 1.000000f, -0.009755f, 0.049039f, 0.747000f, 0.280261f, -0.0000f, -0.0980f, 0.9952f, + 0.000000f, 0.000000f, 0.050000f, 0.742202f, 0.203494f, -0.0000f, -0.0980f, 0.9952f, + 0.000000f, -0.009754f, 0.049039f, 0.747000f, 0.203494f, -0.0000f, -0.0980f, 0.9952f, + 1.000000f, -0.000000f, 0.050000f, 0.742202f, 0.280261f, -0.0000f, 0.0980f, 0.9952f, + 0.000000f, 0.009755f, 0.049039f, 0.737404f, 0.203494f, -0.0000f, 0.0980f, 0.9952f, + 0.000000f, 0.000000f, 0.050000f, 0.742202f, 0.203494f, -0.0000f, 0.0980f, 0.9952f, + 1.000000f, 0.009754f, 0.049039f, 0.737404f, 0.280261f, -0.0000f, 0.2903f, 0.9569f, + 0.000000f, 0.019134f, 0.046194f, 0.732606f, 0.203494f, -0.0000f, 0.2903f, 0.9569f, + 0.000000f, 0.009755f, 0.049039f, 0.737404f, 0.203494f, -0.0000f, 0.2903f, 0.9569f, + 1.000000f, 0.019134f, 0.046194f, 0.732606f, 0.280261f, -0.0000f, 0.4714f, 0.8819f, + 0.000000f, 0.027779f, 0.041573f, 0.727808f, 0.203494f, -0.0000f, 0.4714f, 0.8819f, + 0.000000f, 0.019134f, 0.046194f, 0.732606f, 0.203494f, -0.0000f, 0.4714f, 0.8819f, + 1.000000f, 0.027778f, 0.041573f, 0.727808f, 0.280261f, -0.0000f, 0.6344f, 0.7730f, + 0.000000f, 0.035355f, 0.035355f, 0.723011f, 0.203494f, -0.0000f, 0.6344f, 0.7730f, + 0.000000f, 0.027779f, 0.041573f, 0.727808f, 0.203494f, -0.0000f, 0.6344f, 0.7730f, + 1.000000f, 0.035355f, 0.035355f, 0.723011f, 0.280261f, -0.0000f, 0.7730f, 0.6344f, + 0.000000f, 0.041574f, 0.027779f, 0.718213f, 0.203494f, -0.0000f, 0.7730f, 0.6344f, + 0.000000f, 0.035355f, 0.035355f, 0.723011f, 0.203494f, -0.0000f, 0.7730f, 0.6344f, + 1.000000f, 0.041573f, 0.027778f, 0.718213f, 0.280261f, -0.0000f, 0.8819f, 0.4714f, + 0.000000f, 0.046194f, 0.019134f, 0.713415f, 0.203494f, -0.0000f, 0.8819f, 0.4714f, + 0.000000f, 0.041574f, 0.027779f, 0.718213f, 0.203494f, -0.0000f, 0.8819f, 0.4714f, + 1.000000f, -0.046194f, 0.019134f, 0.728101f, 0.131068f, 1.0000f, -0.0000f, -0.0000f, + 1.000000f, -0.019134f, -0.046194f, 0.776245f, 0.151010f, 1.0000f, -0.0000f, -0.0000f, + 1.000000f, 0.046194f, -0.019134f, 0.756303f, 0.199154f, 1.0000f, -0.0000f, -0.0000f, + 1.000000f, 0.046194f, 0.019134f, 0.713415f, 0.280261f, -0.0000f, 0.9569f, 0.2903f, + 0.000000f, 0.049039f, 0.009755f, 0.708617f, 0.203494f, -0.0000f, 0.9569f, 0.2903f, + 0.000000f, 0.046194f, 0.019134f, 0.713415f, 0.203494f, -0.0000f, 0.9569f, 0.2903f, + 0.000000f, 0.049039f, 0.009755f, 0.708617f, 0.203494f, -0.0000f, 0.9952f, 0.0980f, + 1.000000f, 0.050000f, -0.000000f, 0.703819f, 0.280261f, -0.0000f, 0.9952f, 0.0980f, + 0.000000f, 0.050000f, -0.000000f, 0.703819f, 0.203494f, -0.0000f, 0.9952f, 0.0980f, + -0.000000f, -0.049039f, -0.009755f, 0.826158f, 0.128971f, -1.0000f, -0.0000f, -0.0000f, + 0.000000f, -0.009754f, 0.049039f, 0.782829f, 0.157922f, -1.0000f, -0.0000f, -0.0000f, + 0.000000f, 0.049039f, 0.009755f, 0.811780f, 0.201251f, -1.0000f, -0.0000f, -0.0000f, + -0.050000f, 0.000000f, 0.000000f, 0.908319f, 0.765721f, -0.9952f, -0.0000f, -0.0980f, + -0.049039f, 1.000000f, -0.009755f, 0.900433f, 0.891905f, -0.9952f, -0.0000f, -0.0980f, + -0.049039f, -0.000000f, -0.009755f, 0.900433f, 0.765721f, -0.9952f, -0.0000f, -0.0980f, + -0.049039f, 1.000000f, -0.009755f, 0.900433f, 0.891905f, -0.9569f, -0.0000f, -0.2903f, + -0.046194f, -0.000000f, -0.019134f, 0.892546f, 0.765721f, -0.9569f, -0.0000f, -0.2903f, + -0.049039f, -0.000000f, -0.009755f, 0.900433f, 0.765721f, -0.9569f, -0.0000f, -0.2903f, + -0.046194f, 1.000000f, -0.019134f, 0.892546f, 0.891905f, -0.8819f, -0.0000f, -0.4714f, + -0.041574f, -0.000000f, -0.027779f, 0.884660f, 0.765721f, -0.8819f, -0.0000f, -0.4714f, + -0.046194f, -0.000000f, -0.019134f, 0.892546f, 0.765721f, -0.8819f, -0.0000f, -0.4714f, + -0.041574f, 1.000000f, -0.027779f, 0.884660f, 0.891905f, -0.7730f, -0.0000f, -0.6344f, + -0.035355f, -0.000000f, -0.035355f, 0.876773f, 0.765721f, -0.7730f, -0.0000f, -0.6344f, + -0.041574f, -0.000000f, -0.027779f, 0.884660f, 0.765721f, -0.7730f, -0.0000f, -0.6344f, + -0.035355f, 1.000000f, -0.035355f, 0.876773f, 0.891905f, -0.6344f, -0.0000f, -0.7730f, + -0.027779f, -0.000000f, -0.041573f, 0.868887f, 0.765721f, -0.6344f, -0.0000f, -0.7730f, + -0.035355f, -0.000000f, -0.035355f, 0.876773f, 0.765721f, -0.6344f, -0.0000f, -0.7730f, + -0.027779f, 1.000000f, -0.041574f, 0.868887f, 0.891905f, -0.4714f, -0.0000f, -0.8819f, + -0.019134f, -0.000000f, -0.046194f, 0.861000f, 0.765721f, -0.4714f, -0.0000f, -0.8819f, + -0.027779f, -0.000000f, -0.041573f, 0.868887f, 0.765721f, -0.4714f, -0.0000f, -0.8819f, + -0.019134f, 1.000000f, -0.046194f, 0.861000f, 0.891905f, -0.2903f, -0.0000f, -0.9569f, + -0.009755f, -0.000000f, -0.049039f, 0.853114f, 0.765721f, -0.2903f, -0.0000f, -0.9569f, + -0.019134f, -0.000000f, -0.046194f, 0.861000f, 0.765721f, -0.2903f, -0.0000f, -0.9569f, + -0.009755f, 1.000000f, -0.049039f, 0.853114f, 0.891905f, -0.0980f, -0.0000f, -0.9952f, + -0.000000f, -0.000000f, -0.050000f, 0.845227f, 0.765721f, -0.0980f, -0.0000f, -0.9952f, + -0.009755f, -0.000000f, -0.049039f, 0.853114f, 0.765721f, -0.0980f, -0.0000f, -0.9952f, + -0.000000f, 1.000000f, -0.050000f, 0.845227f, 0.891905f, 0.0980f, -0.0000f, -0.9952f, + 0.009754f, -0.000000f, -0.049039f, 0.837341f, 0.765721f, 0.0980f, -0.0000f, -0.9952f, + -0.000000f, -0.000000f, -0.050000f, 0.845227f, 0.765721f, 0.0980f, -0.0000f, -0.9952f, + 0.009754f, 1.000000f, -0.049039f, 0.837341f, 0.891905f, 0.2903f, -0.0000f, -0.9569f, + 0.019134f, -0.000000f, -0.046194f, 0.829455f, 0.765721f, 0.2903f, -0.0000f, -0.9569f, + 0.009754f, -0.000000f, -0.049039f, 0.837341f, 0.765721f, 0.2903f, -0.0000f, -0.9569f, + 0.019134f, 1.000000f, -0.046194f, 0.829455f, 0.891905f, 0.4714f, -0.0000f, -0.8819f, + 0.027778f, -0.000000f, -0.041573f, 0.821568f, 0.765721f, 0.4714f, -0.0000f, -0.8819f, + 0.019134f, -0.000000f, -0.046194f, 0.829455f, 0.765721f, 0.4714f, -0.0000f, -0.8819f, + 0.027778f, 1.000000f, -0.041574f, 0.821568f, 0.891905f, 0.6344f, -0.0000f, -0.7730f, + 0.035355f, -0.000000f, -0.035355f, 0.813682f, 0.765721f, 0.6344f, -0.0000f, -0.7730f, + 0.027778f, -0.000000f, -0.041573f, 0.821568f, 0.765721f, 0.6344f, -0.0000f, -0.7730f, + 0.035355f, 1.000000f, -0.035355f, 0.813682f, 0.891905f, 0.7730f, -0.0000f, -0.6344f, + 0.041573f, -0.000000f, -0.027779f, 0.805795f, 0.765721f, 0.7730f, -0.0000f, -0.6344f, + 0.035355f, -0.000000f, -0.035355f, 0.813682f, 0.765721f, 0.7730f, -0.0000f, -0.6344f, + 0.041573f, 1.000000f, -0.027779f, 0.805795f, 0.891905f, 0.8819f, -0.0000f, -0.4714f, + 0.046194f, -0.000000f, -0.019134f, 0.797909f, 0.765721f, 0.8819f, -0.0000f, -0.4714f, + 0.041573f, -0.000000f, -0.027779f, 0.805795f, 0.765721f, 0.8819f, -0.0000f, -0.4714f, + 0.046194f, 1.000000f, -0.019134f, 0.797909f, 0.891905f, 0.9569f, -0.0000f, -0.2903f, + 0.049039f, -0.000000f, -0.009755f, 0.790022f, 0.765721f, 0.9569f, -0.0000f, -0.2903f, + 0.046194f, -0.000000f, -0.019134f, 0.797909f, 0.765721f, 0.9569f, -0.0000f, -0.2903f, + 0.049039f, 1.000000f, -0.009755f, 0.790022f, 0.891905f, 0.9952f, -0.0000f, -0.0980f, + 0.050000f, 0.000000f, -0.000000f, 0.782136f, 0.765721f, 0.9952f, -0.0000f, -0.0980f, + 0.049039f, -0.000000f, -0.009755f, 0.790022f, 0.765721f, 0.9952f, -0.0000f, -0.0980f, + 0.050000f, 1.000000f, -0.000000f, 0.782136f, 0.891905f, 0.9952f, -0.0000f, 0.0980f, + 0.049039f, 0.000000f, 0.009755f, 0.774249f, 0.765721f, 0.9952f, -0.0000f, 0.0980f, + 0.050000f, 0.000000f, -0.000000f, 0.782136f, 0.765721f, 0.9952f, -0.0000f, 0.0980f, + 0.049039f, 1.000000f, 0.009754f, 0.774249f, 0.891905f, 0.9569f, -0.0000f, 0.2903f, + 0.046194f, 0.000000f, 0.019134f, 0.766363f, 0.765721f, 0.9569f, -0.0000f, 0.2903f, + 0.049039f, 0.000000f, 0.009755f, 0.774249f, 0.765721f, 0.9569f, -0.0000f, 0.2903f, + 0.046194f, 1.000000f, 0.019134f, 0.766363f, 0.891905f, 0.8819f, -0.0000f, 0.4714f, + 0.041573f, 0.000000f, 0.027779f, 0.758476f, 0.765721f, 0.8819f, -0.0000f, 0.4714f, + 0.046194f, 0.000000f, 0.019134f, 0.766363f, 0.765721f, 0.8819f, -0.0000f, 0.4714f, + 0.041573f, 1.000000f, 0.027778f, 0.758476f, 0.891905f, 0.7730f, -0.0000f, 0.6344f, + 0.035355f, 0.000000f, 0.035355f, 0.750590f, 0.765721f, 0.7730f, -0.0000f, 0.6344f, + 0.041573f, 0.000000f, 0.027779f, 0.758476f, 0.765721f, 0.7730f, -0.0000f, 0.6344f, + 0.035355f, 1.000000f, 0.035355f, 0.750590f, 0.891905f, 0.6344f, -0.0000f, 0.7730f, + 0.027778f, 0.000000f, 0.041573f, 0.742703f, 0.765721f, 0.6344f, -0.0000f, 0.7730f, + 0.035355f, 0.000000f, 0.035355f, 0.750590f, 0.765721f, 0.6344f, -0.0000f, 0.7730f, + 0.027778f, 1.000000f, 0.041573f, 0.742703f, 0.891905f, 0.4714f, -0.0000f, 0.8819f, + 0.019134f, 0.000000f, 0.046194f, 0.734817f, 0.765721f, 0.4714f, -0.0000f, 0.8819f, + 0.027778f, 0.000000f, 0.041573f, 0.742703f, 0.765721f, 0.4714f, -0.0000f, 0.8819f, + 0.019134f, 1.000000f, 0.046194f, 0.734817f, 0.891905f, 0.2903f, -0.0000f, 0.9569f, + 0.009754f, 0.000000f, 0.049039f, 0.726930f, 0.765721f, 0.2903f, -0.0000f, 0.9569f, + 0.019134f, 0.000000f, 0.046194f, 0.734817f, 0.765721f, 0.2903f, -0.0000f, 0.9569f, + 0.009754f, 1.000000f, 0.049039f, 0.726930f, 0.891905f, 0.0980f, -0.0000f, 0.9952f, + -0.000000f, 0.000000f, 0.050000f, 0.719044f, 0.765721f, 0.0980f, -0.0000f, 0.9952f, + 0.009754f, 0.000000f, 0.049039f, 0.726930f, 0.765721f, 0.0980f, -0.0000f, 0.9952f, + -0.000000f, 1.000000f, 0.050000f, 0.719044f, 0.891905f, -0.0980f, -0.0000f, 0.9952f, + -0.009755f, 0.000000f, 0.049039f, 0.711158f, 0.765721f, -0.0980f, -0.0000f, 0.9952f, + -0.000000f, 0.000000f, 0.050000f, 0.719044f, 0.765721f, -0.0980f, -0.0000f, 0.9952f, + -0.009755f, 1.000000f, 0.049039f, 0.711158f, 0.891905f, -0.2903f, -0.0000f, 0.9569f, + -0.019134f, 0.000000f, 0.046194f, 0.703271f, 0.765721f, -0.2903f, -0.0000f, 0.9569f, + -0.009755f, 0.000000f, 0.049039f, 0.711158f, 0.765721f, -0.2903f, -0.0000f, 0.9569f, + -0.019134f, 1.000000f, 0.046194f, 0.703271f, 0.891905f, -0.4714f, -0.0000f, 0.8819f, + -0.027779f, 0.000000f, 0.041573f, 0.695385f, 0.765721f, -0.4714f, -0.0000f, 0.8819f, + -0.019134f, 0.000000f, 0.046194f, 0.703271f, 0.765721f, -0.4714f, -0.0000f, 0.8819f, + -0.027779f, 1.000000f, 0.041573f, 0.695385f, 0.891905f, -0.6344f, -0.0000f, 0.7730f, + -0.035355f, 0.000000f, 0.035355f, 0.687498f, 0.765721f, -0.6344f, -0.0000f, 0.7730f, + -0.027779f, 0.000000f, 0.041573f, 0.695385f, 0.765721f, -0.6344f, -0.0000f, 0.7730f, + -0.035355f, 1.000000f, 0.035355f, 0.687498f, 0.891905f, -0.7730f, -0.0000f, 0.6344f, + -0.041574f, 0.000000f, 0.027779f, 0.679612f, 0.765721f, -0.7730f, -0.0000f, 0.6344f, + -0.035355f, 0.000000f, 0.035355f, 0.687498f, 0.765721f, -0.7730f, -0.0000f, 0.6344f, + -0.041574f, 1.000000f, 0.027778f, 0.679612f, 0.891905f, -0.8819f, -0.0000f, 0.4714f, + -0.046194f, 0.000000f, 0.019134f, 0.671725f, 0.765721f, -0.8819f, -0.0000f, 0.4714f, + -0.041574f, 0.000000f, 0.027779f, 0.679612f, 0.765721f, -0.8819f, -0.0000f, 0.4714f, + 0.046194f, 1.000000f, 0.019134f, 0.695866f, 0.646672f, -0.0000f, 1.0000f, -0.0000f, + 0.019134f, 1.000000f, -0.046194f, 0.775002f, 0.679451f, -0.0000f, 1.0000f, -0.0000f, + -0.046194f, 1.000000f, -0.019134f, 0.742222f, 0.758587f, -0.0000f, 1.0000f, -0.0000f, + -0.046194f, 1.000000f, 0.019134f, 0.671725f, 0.891905f, -0.9569f, -0.0000f, 0.2903f, + -0.049039f, 0.000000f, 0.009755f, 0.663839f, 0.765721f, -0.9569f, -0.0000f, 0.2903f, + -0.046194f, 0.000000f, 0.019134f, 0.671725f, 0.765721f, -0.9569f, -0.0000f, 0.2903f, + -0.049039f, 1.000000f, 0.009754f, 0.663839f, 0.891905f, -0.9952f, -0.0000f, 0.0980f, + -0.050000f, 0.000000f, 0.000000f, 0.655952f, 0.765721f, -0.9952f, -0.0000f, 0.0980f, + -0.049039f, 0.000000f, 0.009755f, 0.663839f, 0.765721f, -0.9952f, -0.0000f, 0.0980f, + 0.049039f, -0.000000f, -0.009755f, 0.857044f, 0.643225f, -0.0000f, -1.0000f, -0.0000f, + 0.009754f, 0.000000f, 0.049039f, 0.785823f, 0.690813f, -0.0000f, -1.0000f, -0.0000f, + -0.049039f, 0.000000f, 0.009755f, 0.833411f, 0.762034f, -0.0000f, -1.0000f, -0.0000f, + 1.000000f, 0.000000f, -1.000000f, 0.093750f, 0.093750f, -0.0000f, 1.0000f, -0.0000f, + 0.009755f, 0.049039f, 0.000000f, 0.312010f, 0.919541f, 0.0980f, 0.9952f, -0.0000f, + 0.019134f, 0.046194f, 0.000000f, 0.305217f, 0.919541f, 0.2903f, 0.9569f, -0.0000f, + 0.027779f, 0.041573f, 0.000000f, 0.298423f, 0.919541f, 0.4714f, 0.8819f, -0.0000f, + 0.035355f, 0.035355f, 0.000000f, 0.291630f, 0.919541f, 0.6344f, 0.7730f, -0.0000f, + 0.041573f, 0.027778f, 0.000000f, 0.284837f, 0.919541f, 0.7730f, 0.6344f, -0.0000f, + 0.046194f, 0.019134f, 0.000000f, 0.278044f, 0.919541f, 0.8819f, 0.4714f, -0.0000f, + 0.049039f, 0.009754f, 0.000000f, 0.271251f, 0.919541f, 0.9569f, 0.2903f, -0.0000f, + 0.050000f, -0.000000f, -0.000000f, 0.264458f, 0.919541f, 0.9952f, 0.0980f, -0.0000f, + 0.049039f, -0.009755f, -0.000000f, 0.257665f, 0.919541f, 0.9952f, -0.0980f, -0.0000f, + 0.046194f, -0.019134f, -0.000000f, 0.250872f, 0.919541f, 0.9569f, -0.2903f, -0.0000f, + 0.041573f, -0.027779f, -0.000000f, 0.244079f, 0.919541f, 0.8819f, -0.4714f, -0.0000f, + 0.035355f, -0.035355f, -0.000000f, 0.237286f, 0.919541f, 0.7730f, -0.6344f, -0.0000f, + 0.027779f, -0.041574f, -0.000000f, 0.230493f, 0.919541f, 0.6344f, -0.7730f, -0.0000f, + 0.019134f, -0.046194f, -0.000000f, 0.223699f, 0.919541f, 0.4714f, -0.8819f, -0.0000f, + 0.009755f, -0.049039f, -0.000000f, 0.216906f, 0.919541f, 0.2903f, -0.9569f, -0.0000f, + 0.000000f, -0.050000f, -0.000000f, 0.210113f, 0.919541f, 0.0980f, -0.9952f, -0.0000f, + 0.000000f, -0.050000f, -0.000000f, 0.210113f, 0.919541f, -0.0980f, -0.9952f, -0.0000f, + -0.019134f, -0.046194f, -0.000000f, 0.196527f, 0.919541f, -0.2903f, -0.9569f, -0.0000f, + -0.027779f, -0.041574f, -0.000000f, 0.189734f, 0.919541f, -0.4714f, -0.8819f, -0.0000f, + -0.035355f, -0.035355f, -0.000000f, 0.182941f, 0.919541f, -0.6344f, -0.7730f, -0.0000f, + -0.041573f, -0.027779f, -0.000000f, 0.176148f, 0.919541f, -0.7730f, -0.6344f, -0.0000f, + -0.046194f, -0.019134f, -0.000000f, 0.169355f, 0.919541f, -0.8819f, -0.4714f, -0.0000f, + -0.049039f, -0.009755f, -0.000000f, 0.162562f, 0.919541f, -0.9569f, -0.2903f, -0.0000f, + -0.050000f, -0.000000f, -0.000000f, 0.155769f, 0.919541f, -0.9952f, -0.0980f, -0.0000f, + -0.049039f, 0.009754f, 0.000000f, 0.148975f, 0.919541f, -0.9952f, 0.0980f, -0.0000f, + -0.046194f, 0.019134f, 0.000000f, 0.142182f, 0.919541f, -0.9569f, 0.2903f, -0.0000f, + -0.041573f, 0.027778f, 0.000000f, 0.135389f, 0.919541f, -0.8819f, 0.4714f, -0.0000f, + -0.035355f, 0.035355f, 0.000000f, 0.128596f, 0.919541f, -0.7730f, 0.6344f, -0.0000f, + -0.027779f, 0.041573f, 0.000000f, 0.121803f, 0.919541f, -0.6344f, 0.7730f, -0.0000f, + -0.019134f, 0.046194f, 0.000000f, 0.115010f, 0.919541f, -0.4714f, 0.8819f, -0.0000f, + 0.009755f, 0.049039f, 0.000000f, 0.165947f, 0.807676f, -0.0000f, -0.0000f, 1.0000f, + 0.000000f, 0.050000f, 0.000000f, 0.155769f, 0.808678f, -0.0000f, -0.0000f, 1.0000f, + -0.009755f, 0.049039f, 0.000000f, 0.145591f, 0.807676f, -0.0000f, -0.0000f, 1.0000f, + -0.019134f, 0.046194f, 0.000000f, 0.135804f, 0.804707f, -0.0000f, -0.0000f, 1.0000f, + -0.027779f, 0.041573f, 0.000000f, 0.126784f, 0.799886f, -0.0000f, -0.0000f, 1.0000f, + -0.035355f, 0.035355f, 0.000000f, 0.118878f, 0.793398f, -0.0000f, -0.0000f, 1.0000f, + -0.041573f, 0.027778f, 0.000000f, 0.112390f, 0.785492f, -0.0000f, -0.0000f, 1.0000f, + -0.046194f, 0.019134f, 0.000000f, 0.107569f, 0.776472f, -0.0000f, -0.0000f, 1.0000f, + -0.049039f, 0.009754f, 0.000000f, 0.104600f, 0.766685f, -0.0000f, -0.0000f, 1.0000f, + -0.050000f, -0.000000f, -0.000000f, 0.103598f, 0.756507f, -0.0000f, -0.0000f, 1.0000f, + -0.049039f, -0.009755f, -0.000000f, 0.104600f, 0.746329f, -0.0000f, -0.0000f, 1.0000f, + -0.046194f, -0.019134f, -0.000000f, 0.107569f, 0.736542f, -0.0000f, -0.0000f, 1.0000f, + -0.041573f, -0.027779f, -0.000000f, 0.112390f, 0.727523f, -0.0000f, -0.0000f, 1.0000f, + -0.035355f, -0.035355f, -0.000000f, 0.118878f, 0.719617f, -0.0000f, -0.0000f, 1.0000f, + -0.027779f, -0.041574f, -0.000000f, 0.126784f, 0.713129f, -0.0000f, -0.0000f, 1.0000f, + -0.009755f, -0.049039f, -0.000000f, 0.145591f, 0.705339f, -0.0000f, -0.0000f, 1.0000f, + 0.000000f, -0.050000f, -0.000000f, 0.155769f, 0.704336f, -0.0000f, -0.0000f, 1.0000f, + 0.009755f, -0.049039f, -0.000000f, 0.165947f, 0.705339f, -0.0000f, -0.0000f, 1.0000f, + 0.019134f, -0.046194f, -0.000000f, 0.175734f, 0.708308f, -0.0000f, -0.0000f, 1.0000f, + 0.027779f, -0.041574f, -0.000000f, 0.184753f, 0.713129f, -0.0000f, -0.0000f, 1.0000f, + 0.035355f, -0.035355f, -0.000000f, 0.192659f, 0.719617f, -0.0000f, -0.0000f, 1.0000f, + 0.041573f, -0.027779f, -0.000000f, 0.199147f, 0.727523f, -0.0000f, -0.0000f, 1.0000f, + 0.049039f, -0.009755f, -0.000000f, 0.206937f, 0.746329f, -0.0000f, -0.0000f, 1.0000f, + 0.050000f, -0.000000f, -0.000000f, 0.207940f, 0.756507f, -0.0000f, -0.0000f, 1.0000f, + 0.049039f, 0.009754f, 0.000000f, 0.206937f, 0.766685f, -0.0000f, -0.0000f, 1.0000f, + 0.046194f, 0.019134f, 0.000000f, 0.203968f, 0.776472f, -0.0000f, -0.0000f, 1.0000f, + 0.041573f, 0.027778f, 0.000000f, 0.199147f, 0.785492f, -0.0000f, -0.0000f, 1.0000f, + 0.035355f, 0.035355f, 0.000000f, 0.192659f, 0.793398f, -0.0000f, -0.0000f, 1.0000f, + 0.027779f, 0.041573f, 0.000000f, 0.184753f, 0.799886f, -0.0000f, -0.0000f, 1.0000f, + -0.009755f, 0.049039f, 0.000000f, 0.108217f, 0.919541f, -0.2903f, 0.9569f, -0.0000f, + -0.009755f, 0.049039f, 0.000000f, 0.108217f, 0.919541f, -0.0980f, 0.9952f, -0.0000f, + 0.000000f, 0.050000f, -1.000000f, 0.264458f, 0.808678f, -0.0000f, -0.0000f, -1.0000f, + 0.009755f, 0.049039f, -1.000000f, 0.274636f, 0.807676f, -0.0000f, -0.0000f, -1.0000f, + 0.019134f, 0.046194f, -1.000000f, 0.284423f, 0.804707f, -0.0000f, -0.0000f, -1.0000f, + 0.027779f, 0.041574f, -1.000000f, 0.293443f, 0.799886f, -0.0000f, -0.0000f, -1.0000f, + 0.035355f, 0.035355f, -1.000000f, 0.301348f, 0.793398f, -0.0000f, -0.0000f, -1.0000f, + 0.041573f, 0.027779f, -1.000000f, 0.307837f, 0.785492f, -0.0000f, -0.0000f, -1.0000f, + 0.046194f, 0.019134f, -1.000000f, 0.312658f, 0.776472f, -0.0000f, -0.0000f, -1.0000f, + 0.049039f, 0.009755f, -1.000000f, 0.315627f, 0.766685f, -0.0000f, -0.0000f, -1.0000f, + 0.050000f, 0.000000f, -1.000000f, 0.316629f, 0.756507f, -0.0000f, -0.0000f, -1.0000f, + 0.049039f, -0.009754f, -1.000000f, 0.315627f, 0.746329f, -0.0000f, -0.0000f, -1.0000f, + 0.046194f, -0.019134f, -1.000000f, 0.312658f, 0.736542f, -0.0000f, -0.0000f, -1.0000f, + 0.041573f, -0.027778f, -1.000000f, 0.307837f, 0.727523f, -0.0000f, -0.0000f, -1.0000f, + 0.035355f, -0.035355f, -1.000000f, 0.301348f, 0.719617f, -0.0000f, -0.0000f, -1.0000f, + 0.027779f, -0.041573f, -1.000000f, 0.293443f, 0.713129f, -0.0000f, -0.0000f, -1.0000f, + 0.019134f, -0.046194f, -1.000000f, 0.284423f, 0.708308f, -0.0000f, -0.0000f, -1.0000f, + 0.000000f, -0.050000f, -1.000000f, 0.264458f, 0.704336f, -0.0000f, -0.0000f, -1.0000f, + -0.009755f, -0.049039f, -1.000000f, 0.254280f, 0.705339f, -0.0000f, -0.0000f, -1.0000f, + -0.019134f, -0.046194f, -1.000000f, 0.244493f, 0.708308f, -0.0000f, -0.0000f, -1.0000f, + -0.027779f, -0.041573f, -1.000000f, 0.235473f, 0.713129f, -0.0000f, -0.0000f, -1.0000f, + -0.035355f, -0.035355f, -1.000000f, 0.227568f, 0.719617f, -0.0000f, -0.0000f, -1.0000f, + -0.041573f, -0.027778f, -1.000000f, 0.221079f, 0.727523f, -0.0000f, -0.0000f, -1.0000f, + -0.046194f, -0.019134f, -1.000000f, 0.216258f, 0.736542f, -0.0000f, -0.0000f, -1.0000f, + -0.050000f, 0.000000f, -1.000000f, 0.212287f, 0.756507f, -0.0000f, -0.0000f, -1.0000f, + -0.049039f, 0.009755f, -1.000000f, 0.213289f, 0.766685f, -0.0000f, -0.0000f, -1.0000f, + -0.046194f, 0.019134f, -1.000000f, 0.216258f, 0.776472f, -0.0000f, -0.0000f, -1.0000f, + -0.041573f, 0.027779f, -1.000000f, 0.221079f, 0.785492f, -0.0000f, -0.0000f, -1.0000f, + -0.035355f, 0.035355f, -1.000000f, 0.227568f, 0.793398f, -0.0000f, -0.0000f, -1.0000f, + -0.027779f, 0.041574f, -1.000000f, 0.235473f, 0.799886f, -0.0000f, -0.0000f, -1.0000f, + -0.019134f, 0.046194f, -1.000000f, 0.244493f, 0.804707f, -0.0000f, -0.0000f, -1.0000f, + 1.000000f, 0.049039f, -0.009755f, 0.852554f, 0.280261f, -0.0000f, 0.9952f, -0.0980f, + 1.000000f, 0.046194f, -0.019134f, 0.847756f, 0.280261f, -0.0000f, 0.9569f, -0.2903f, + 1.000000f, 0.041573f, -0.027779f, 0.842958f, 0.280261f, -0.0000f, 0.8819f, -0.4714f, + 1.000000f, 0.035355f, -0.035355f, 0.838161f, 0.280261f, -0.0000f, 0.7730f, -0.6344f, + 1.000000f, 0.027778f, -0.041574f, 0.833363f, 0.280261f, -0.0000f, 0.6344f, -0.7730f, + 1.000000f, 0.019134f, -0.046194f, 0.828565f, 0.280261f, -0.0000f, 0.4714f, -0.8819f, + 1.000000f, 0.009754f, -0.049039f, 0.823767f, 0.280261f, -0.0000f, 0.2903f, -0.9569f, + 1.000000f, -0.000000f, -0.050000f, 0.818969f, 0.280261f, -0.0000f, 0.0980f, -0.9952f, + 1.000000f, -0.009755f, -0.049039f, 0.814171f, 0.280261f, -0.0000f, -0.0980f, -0.9952f, + 1.000000f, -0.019134f, -0.046194f, 0.809373f, 0.280261f, -0.0000f, -0.2903f, -0.9569f, + 1.000000f, -0.027779f, -0.041574f, 0.804575f, 0.280261f, -0.0000f, -0.4714f, -0.8819f, + 1.000000f, -0.035355f, -0.035355f, 0.799777f, 0.280261f, -0.0000f, -0.6344f, -0.7730f, + 1.000000f, -0.041574f, -0.027779f, 0.794979f, 0.280261f, -0.0000f, -0.7730f, -0.6344f, + 1.000000f, -0.046194f, -0.019134f, 0.790181f, 0.280261f, -0.0000f, -0.8819f, -0.4714f, + 1.000000f, -0.049039f, -0.009755f, 0.785383f, 0.280261f, -0.0000f, -0.9569f, -0.2903f, + 1.000000f, -0.050000f, -0.000000f, 0.780586f, 0.280261f, -0.0000f, -0.9952f, -0.0980f, + 1.000000f, -0.050000f, -0.000000f, 0.780586f, 0.280261f, -0.0000f, -0.9952f, 0.0980f, + 1.000000f, -0.046194f, 0.019134f, 0.770990f, 0.280261f, -0.0000f, -0.9569f, 0.2903f, + 1.000000f, -0.041574f, 0.027778f, 0.766192f, 0.280261f, -0.0000f, -0.8819f, 0.4714f, + 1.000000f, -0.035355f, 0.035355f, 0.761394f, 0.280261f, -0.0000f, -0.7730f, 0.6344f, + 1.000000f, -0.027779f, 0.041573f, 0.756596f, 0.280261f, -0.0000f, -0.6344f, 0.7730f, + 1.000000f, -0.019134f, 0.046194f, 0.751798f, 0.280261f, -0.0000f, -0.4714f, 0.8819f, + 1.000000f, -0.009755f, 0.049039f, 0.747000f, 0.280261f, -0.0000f, -0.2903f, 0.9569f, + 1.000000f, -0.000000f, 0.050000f, 0.742202f, 0.280261f, -0.0000f, -0.0980f, 0.9952f, + 1.000000f, 0.009754f, 0.049039f, 0.737404f, 0.280261f, -0.0000f, 0.0980f, 0.9952f, + 1.000000f, 0.019134f, 0.046194f, 0.732606f, 0.280261f, -0.0000f, 0.2903f, 0.9569f, + 1.000000f, 0.027778f, 0.041573f, 0.727808f, 0.280261f, -0.0000f, 0.4714f, 0.8819f, + 1.000000f, 0.035355f, 0.035355f, 0.723011f, 0.280261f, -0.0000f, 0.6344f, 0.7730f, + 1.000000f, 0.041573f, 0.027778f, 0.718213f, 0.280261f, -0.0000f, 0.7730f, 0.6344f, + 1.000000f, 0.046194f, 0.019134f, 0.713415f, 0.280261f, -0.0000f, 0.8819f, 0.4714f, + 1.000000f, 0.049039f, -0.009755f, 0.749391f, 0.201251f, 1.0000f, -0.0000f, -0.0000f, + 1.000000f, 0.050000f, -0.000000f, 0.742202f, 0.201959f, 1.0000f, -0.0000f, -0.0000f, + 1.000000f, 0.049039f, 0.009754f, 0.735013f, 0.201251f, 1.0000f, -0.0000f, -0.0000f, + 1.000000f, 0.046194f, 0.019134f, 0.728101f, 0.199154f, 1.0000f, -0.0000f, -0.0000f, + 1.000000f, 0.041573f, 0.027778f, 0.721731f, 0.195749f, 1.0000f, -0.0000f, -0.0000f, + 1.000000f, 0.035355f, 0.035355f, 0.716147f, 0.191166f, 1.0000f, -0.0000f, -0.0000f, + 1.000000f, 0.027778f, 0.041573f, 0.711564f, 0.185583f, 1.0000f, -0.0000f, -0.0000f, + 1.000000f, 0.019134f, 0.046194f, 0.708159f, 0.179212f, 1.0000f, -0.0000f, -0.0000f, + 1.000000f, 0.019134f, 0.046194f, 0.708159f, 0.179212f, 1.0000f, -0.0000f, 0.0001f, + 1.000000f, 0.009754f, 0.049039f, 0.706062f, 0.172300f, 1.0000f, -0.0000f, 0.0001f, + 1.000000f, -0.000000f, 0.050000f, 0.705354f, 0.165111f, 1.0000f, -0.0000f, 0.0001f, + 1.000000f, -0.000000f, 0.050000f, 0.705354f, 0.165111f, 1.0000f, -0.0000f, -0.0001f, + 1.000000f, -0.009755f, 0.049039f, 0.706062f, 0.157922f, 1.0000f, -0.0000f, -0.0001f, + 1.000000f, -0.019134f, 0.046194f, 0.708159f, 0.151010f, 1.0000f, -0.0000f, -0.0001f, + 1.000000f, -0.019134f, 0.046194f, 0.708159f, 0.151010f, 1.0000f, -0.0000f, -0.0000f, + 1.000000f, -0.027779f, 0.041573f, 0.711564f, 0.144639f, 1.0000f, -0.0000f, -0.0000f, + 1.000000f, -0.035355f, 0.035355f, 0.716147f, 0.139055f, 1.0000f, -0.0000f, -0.0000f, + 1.000000f, -0.041574f, 0.027778f, 0.721731f, 0.134473f, 1.0000f, -0.0000f, -0.0000f, + 1.000000f, -0.049039f, 0.009754f, 0.735013f, 0.128971f, 1.0000f, -0.0000f, -0.0000f, + 1.000000f, -0.050000f, -0.000000f, 0.742202f, 0.128263f, 1.0000f, -0.0000f, -0.0000f, + 1.000000f, -0.049039f, -0.009755f, 0.749391f, 0.128971f, 1.0000f, -0.0000f, -0.0000f, + 1.000000f, -0.046194f, -0.019134f, 0.756303f, 0.131068f, 1.0000f, -0.0000f, -0.0000f, + 1.000000f, -0.041574f, -0.027779f, 0.762674f, 0.134473f, 1.0000f, -0.0000f, -0.0000f, + 1.000000f, -0.035355f, -0.035355f, 0.768258f, 0.139055f, 1.0000f, -0.0000f, -0.0000f, + 1.000000f, -0.027779f, -0.041574f, 0.772840f, 0.144639f, 1.0000f, -0.0000f, -0.0000f, + 1.000000f, -0.019134f, -0.046194f, 0.776245f, 0.151010f, 1.0000f, -0.0000f, 0.0001f, + 1.000000f, -0.009755f, -0.049039f, 0.778342f, 0.157922f, 1.0000f, -0.0000f, 0.0001f, + 1.000000f, -0.000000f, -0.050000f, 0.779050f, 0.165111f, 1.0000f, -0.0000f, 0.0001f, + 1.000000f, -0.000000f, -0.050000f, 0.779050f, 0.165111f, 1.0000f, -0.0000f, -0.0001f, + 1.000000f, 0.009754f, -0.049039f, 0.778342f, 0.172300f, 1.0000f, -0.0000f, -0.0001f, + 1.000000f, 0.019134f, -0.046194f, 0.776245f, 0.179212f, 1.0000f, -0.0000f, -0.0001f, + 1.000000f, 0.019134f, -0.046194f, 0.776245f, 0.179212f, 1.0000f, -0.0000f, -0.0000f, + 1.000000f, 0.027778f, -0.041574f, 0.772840f, 0.185583f, 1.0000f, -0.0000f, -0.0000f, + 1.000000f, 0.035355f, -0.035355f, 0.768258f, 0.191166f, 1.0000f, -0.0000f, -0.0000f, + 1.000000f, 0.041573f, -0.027779f, 0.762674f, 0.195749f, 1.0000f, -0.0000f, -0.0000f, + 1.000000f, -0.000000f, 0.050000f, 0.705354f, 0.165111f, 1.0000f, -0.0000f, -0.0000f, + 1.000000f, -0.000000f, -0.050000f, 0.779050f, 0.165111f, 1.0000f, -0.0000f, -0.0000f, + 1.000000f, 0.049039f, 0.009754f, 0.708617f, 0.280261f, -0.0000f, 0.9569f, 0.2903f, + 1.000000f, 0.049039f, 0.009754f, 0.708617f, 0.280261f, -0.0000f, 0.9952f, 0.0980f, + 0.000000f, 0.050000f, -0.000000f, 0.818969f, 0.201959f, -1.0000f, -0.0000f, -0.0000f, + 0.000000f, 0.049039f, -0.009755f, 0.826158f, 0.201251f, -1.0000f, -0.0000f, -0.0000f, + 0.000000f, 0.046194f, -0.019134f, 0.833070f, 0.199154f, -1.0000f, -0.0000f, -0.0000f, + 0.000000f, 0.041574f, -0.027779f, 0.839441f, 0.195749f, -1.0000f, -0.0000f, -0.0000f, + 0.000000f, 0.035355f, -0.035355f, 0.845024f, 0.191166f, -1.0000f, -0.0000f, -0.0000f, + -0.000000f, 0.027779f, -0.041573f, 0.849607f, 0.185583f, -1.0000f, -0.0000f, -0.0000f, + -0.000000f, 0.019134f, -0.046194f, 0.853012f, 0.179212f, -1.0000f, -0.0000f, -0.0000f, + -0.000000f, 0.009755f, -0.049039f, 0.855109f, 0.172300f, -1.0000f, -0.0000f, -0.0000f, + -0.000000f, 0.000000f, -0.050000f, 0.855817f, 0.165111f, -1.0000f, -0.0000f, -0.0000f, + -0.000000f, -0.009754f, -0.049039f, 0.855109f, 0.157922f, -1.0000f, -0.0000f, -0.0000f, + -0.000000f, -0.019134f, -0.046194f, 0.853012f, 0.151010f, -1.0000f, -0.0000f, -0.0000f, + -0.000000f, -0.027778f, -0.041573f, 0.849607f, 0.144639f, -1.0000f, -0.0000f, -0.0000f, + -0.000000f, -0.035355f, -0.035355f, 0.845024f, 0.139055f, -1.0000f, -0.0000f, -0.0000f, + -0.000000f, -0.041573f, -0.027779f, 0.839441f, 0.134473f, -1.0000f, -0.0000f, -0.0000f, + -0.000000f, -0.046194f, -0.019134f, 0.833070f, 0.131068f, -1.0000f, -0.0000f, -0.0000f, + -0.000000f, -0.050000f, 0.000000f, 0.818969f, 0.128263f, -1.0000f, -0.0000f, -0.0000f, + -0.000000f, -0.049039f, 0.009755f, 0.811780f, 0.128971f, -1.0000f, -0.0000f, -0.0000f, + -0.000000f, -0.046194f, 0.019134f, 0.804868f, 0.131068f, -1.0000f, -0.0000f, -0.0000f, + -0.000000f, -0.041573f, 0.027779f, 0.798497f, 0.134473f, -1.0000f, -0.0000f, -0.0000f, + 0.000000f, -0.035355f, 0.035355f, 0.792913f, 0.139055f, -1.0000f, -0.0000f, -0.0000f, + 0.000000f, -0.027778f, 0.041573f, 0.788331f, 0.144639f, -1.0000f, -0.0000f, -0.0000f, + 0.000000f, -0.019134f, 0.046194f, 0.784926f, 0.151010f, -1.0000f, -0.0000f, -0.0000f, + 0.000000f, 0.000000f, 0.050000f, 0.782121f, 0.165111f, -1.0000f, -0.0000f, -0.0000f, + 0.000000f, 0.009755f, 0.049039f, 0.782829f, 0.172300f, -1.0000f, -0.0000f, -0.0000f, + 0.000000f, 0.019134f, 0.046194f, 0.784926f, 0.179212f, -1.0000f, -0.0000f, -0.0000f, + 0.000000f, 0.027779f, 0.041573f, 0.788331f, 0.185583f, -1.0000f, -0.0000f, -0.0000f, + 0.000000f, 0.035355f, 0.035355f, 0.792913f, 0.191166f, -1.0000f, -0.0000f, -0.0000f, + 0.000000f, 0.041574f, 0.027779f, 0.798497f, 0.195749f, -1.0000f, -0.0000f, -0.0000f, + 0.000000f, 0.046194f, 0.019134f, 0.804868f, 0.199154f, -1.0000f, -0.0000f, -0.0000f, + -0.050000f, 1.000000f, -0.000000f, 0.908319f, 0.891905f, -0.9952f, -0.0000f, -0.0980f, + -0.046194f, 1.000000f, -0.019134f, 0.892546f, 0.891905f, -0.9569f, -0.0000f, -0.2903f, + -0.041574f, 1.000000f, -0.027779f, 0.884660f, 0.891905f, -0.8819f, -0.0000f, -0.4714f, + -0.035355f, 1.000000f, -0.035355f, 0.876773f, 0.891905f, -0.7730f, -0.0000f, -0.6344f, + -0.027779f, 1.000000f, -0.041574f, 0.868887f, 0.891905f, -0.6344f, -0.0000f, -0.7730f, + -0.019134f, 1.000000f, -0.046194f, 0.861000f, 0.891905f, -0.4714f, -0.0000f, -0.8819f, + -0.009755f, 1.000000f, -0.049039f, 0.853114f, 0.891905f, -0.2903f, -0.0000f, -0.9569f, + -0.000000f, 1.000000f, -0.050000f, 0.845227f, 0.891905f, -0.0980f, -0.0000f, -0.9952f, + 0.009754f, 1.000000f, -0.049039f, 0.837341f, 0.891905f, 0.0980f, -0.0000f, -0.9952f, + 0.019134f, 1.000000f, -0.046194f, 0.829455f, 0.891905f, 0.2903f, -0.0000f, -0.9569f, + 0.027778f, 1.000000f, -0.041574f, 0.821568f, 0.891905f, 0.4714f, -0.0000f, -0.8819f, + 0.035355f, 1.000000f, -0.035355f, 0.813682f, 0.891905f, 0.6344f, -0.0000f, -0.7730f, + 0.041573f, 1.000000f, -0.027779f, 0.805795f, 0.891905f, 0.7730f, -0.0000f, -0.6344f, + 0.046194f, 1.000000f, -0.019134f, 0.797909f, 0.891905f, 0.8819f, -0.0000f, -0.4714f, + 0.049039f, 1.000000f, -0.009755f, 0.790022f, 0.891905f, 0.9569f, -0.0000f, -0.2903f, + 0.050000f, 1.000000f, -0.000000f, 0.782136f, 0.891905f, 0.9952f, -0.0000f, -0.0980f, + 0.049039f, 1.000000f, 0.009754f, 0.774249f, 0.891905f, 0.9952f, -0.0000f, 0.0980f, + 0.046194f, 1.000000f, 0.019134f, 0.766363f, 0.891905f, 0.9569f, -0.0000f, 0.2903f, + 0.041573f, 1.000000f, 0.027778f, 0.758476f, 0.891905f, 0.8819f, -0.0000f, 0.4714f, + 0.035355f, 1.000000f, 0.035355f, 0.750590f, 0.891905f, 0.7730f, -0.0000f, 0.6344f, + 0.027778f, 1.000000f, 0.041573f, 0.742703f, 0.891905f, 0.6344f, -0.0000f, 0.7730f, + 0.019134f, 1.000000f, 0.046194f, 0.734817f, 0.891905f, 0.4714f, -0.0000f, 0.8819f, + 0.009754f, 1.000000f, 0.049039f, 0.726930f, 0.891905f, 0.2903f, -0.0000f, 0.9569f, + -0.000000f, 1.000000f, 0.050000f, 0.719044f, 0.891905f, 0.0980f, -0.0000f, 0.9952f, + -0.009755f, 1.000000f, 0.049039f, 0.711158f, 0.891905f, -0.0980f, -0.0000f, 0.9952f, + -0.019134f, 1.000000f, 0.046194f, 0.703271f, 0.891905f, -0.2903f, -0.0000f, 0.9569f, + -0.027779f, 1.000000f, 0.041573f, 0.695385f, 0.891905f, -0.4714f, -0.0000f, 0.8819f, + -0.035355f, 1.000000f, 0.035355f, 0.687498f, 0.891905f, -0.6344f, -0.0000f, 0.7730f, + -0.041574f, 1.000000f, 0.027778f, 0.679612f, 0.891905f, -0.7730f, -0.0000f, 0.6344f, + -0.046194f, 1.000000f, 0.019134f, 0.671725f, 0.891905f, -0.8819f, -0.0000f, 0.4714f, + -0.046194f, 1.000000f, -0.019134f, 0.742222f, 0.758587f, -0.0001f, 1.0000f, -0.0000f, + -0.049039f, 1.000000f, -0.009755f, 0.730860f, 0.762034f, -0.0001f, 1.0000f, -0.0000f, + -0.050000f, 1.000000f, -0.000000f, 0.719044f, 0.763198f, -0.0001f, 1.0000f, -0.0000f, + -0.050000f, 1.000000f, -0.000000f, 0.719044f, 0.763198f, 0.0001f, 1.0000f, -0.0000f, + -0.049039f, 1.000000f, 0.009754f, 0.707228f, 0.762034f, 0.0001f, 1.0000f, -0.0000f, + -0.046194f, 1.000000f, 0.019134f, 0.695866f, 0.758587f, 0.0001f, 1.0000f, -0.0000f, + -0.046194f, 1.000000f, 0.019134f, 0.695866f, 0.758587f, -0.0000f, 1.0000f, -0.0000f, + -0.041574f, 1.000000f, 0.027778f, 0.685394f, 0.752990f, -0.0000f, 1.0000f, -0.0000f, + -0.035355f, 1.000000f, 0.035355f, 0.676216f, 0.745458f, -0.0000f, 1.0000f, -0.0000f, + -0.027779f, 1.000000f, 0.041573f, 0.668683f, 0.736279f, -0.0000f, 1.0000f, -0.0000f, + -0.019134f, 1.000000f, 0.046194f, 0.663086f, 0.725808f, -0.0000f, 1.0000f, -0.0000f, + -0.009755f, 1.000000f, 0.049039f, 0.659640f, 0.714446f, -0.0000f, 1.0000f, -0.0000f, + -0.000000f, 1.000000f, 0.050000f, 0.658476f, 0.702630f, -0.0000f, 1.0000f, -0.0000f, + 0.009754f, 1.000000f, 0.049039f, 0.659640f, 0.690813f, -0.0000f, 1.0000f, -0.0000f, + 0.019134f, 1.000000f, 0.046194f, 0.663086f, 0.679451f, -0.0000f, 1.0000f, -0.0000f, + 0.027778f, 1.000000f, 0.041573f, 0.668683f, 0.668980f, -0.0000f, 1.0000f, -0.0000f, + 0.035355f, 1.000000f, 0.035355f, 0.676216f, 0.659801f, -0.0000f, 1.0000f, -0.0000f, + 0.041573f, 1.000000f, 0.027778f, 0.685394f, 0.652269f, -0.0000f, 1.0000f, -0.0000f, + 0.046194f, 1.000000f, 0.019134f, 0.695866f, 0.646672f, 0.0001f, 1.0000f, -0.0000f, + 0.049039f, 1.000000f, 0.009754f, 0.707228f, 0.643225f, 0.0001f, 1.0000f, -0.0000f, + 0.050000f, 1.000000f, -0.000000f, 0.719044f, 0.642061f, 0.0001f, 1.0000f, -0.0000f, + 0.050000f, 1.000000f, -0.000000f, 0.719044f, 0.642061f, -0.0001f, 1.0000f, -0.0000f, + 0.049039f, 1.000000f, -0.009755f, 0.730860f, 0.643225f, -0.0001f, 1.0000f, -0.0000f, + 0.046194f, 1.000000f, -0.019134f, 0.742222f, 0.646672f, -0.0001f, 1.0000f, -0.0000f, + 0.046194f, 1.000000f, -0.019134f, 0.742222f, 0.646672f, -0.0000f, 1.0000f, -0.0000f, + 0.041573f, 1.000000f, -0.027779f, 0.752694f, 0.652269f, -0.0000f, 1.0000f, -0.0000f, + 0.035355f, 1.000000f, -0.035355f, 0.761872f, 0.659801f, -0.0000f, 1.0000f, -0.0000f, + 0.027778f, 1.000000f, -0.041574f, 0.769405f, 0.668980f, -0.0000f, 1.0000f, -0.0000f, + 0.009754f, 1.000000f, -0.049039f, 0.778448f, 0.690813f, -0.0000f, 1.0000f, -0.0000f, + -0.000000f, 1.000000f, -0.050000f, 0.779612f, 0.702630f, -0.0000f, 1.0000f, -0.0000f, + -0.009755f, 1.000000f, -0.049039f, 0.778448f, 0.714446f, -0.0000f, 1.0000f, -0.0000f, + -0.019134f, 1.000000f, -0.046194f, 0.775002f, 0.725808f, -0.0000f, 1.0000f, -0.0000f, + -0.027779f, 1.000000f, -0.041574f, 0.769405f, 0.736279f, -0.0000f, 1.0000f, -0.0000f, + -0.035355f, 1.000000f, -0.035355f, 0.761872f, 0.745458f, -0.0000f, 1.0000f, -0.0000f, + -0.041574f, 1.000000f, -0.027779f, 0.752694f, 0.752990f, -0.0000f, 1.0000f, -0.0000f, + -0.050000f, 1.000000f, -0.000000f, 0.719044f, 0.763198f, -0.0000f, 1.0000f, -0.0000f, + 0.050000f, 1.000000f, -0.000000f, 0.719044f, 0.642061f, -0.0000f, 1.0000f, -0.0000f, + -0.049039f, 1.000000f, 0.009754f, 0.663839f, 0.891905f, -0.9569f, -0.0000f, 0.2903f, + -0.050000f, 1.000000f, -0.000000f, 0.655952f, 0.891905f, -0.9952f, -0.0000f, 0.0980f, + -0.050000f, 0.000000f, 0.000000f, 0.845227f, 0.763198f, -0.0000f, -1.0000f, -0.0000f, + -0.049039f, -0.000000f, -0.009755f, 0.857044f, 0.762034f, -0.0000f, -1.0000f, -0.0000f, + -0.046194f, -0.000000f, -0.019134f, 0.868406f, 0.758587f, -0.0000f, -1.0000f, -0.0000f, + -0.041574f, -0.000000f, -0.027779f, 0.878877f, 0.752990f, -0.0000f, -1.0000f, -0.0000f, + -0.035355f, -0.000000f, -0.035355f, 0.888056f, 0.745458f, -0.0000f, -1.0000f, -0.0000f, + -0.027779f, -0.000000f, -0.041573f, 0.895588f, 0.736279f, -0.0000f, -1.0000f, -0.0000f, + -0.019134f, -0.000000f, -0.046194f, 0.901185f, 0.725808f, -0.0000f, -1.0000f, -0.0000f, + -0.009755f, -0.000000f, -0.049039f, 0.904632f, 0.714446f, -0.0000f, -1.0000f, -0.0000f, + -0.000000f, -0.000000f, -0.050000f, 0.905796f, 0.702630f, -0.0000f, -1.0000f, -0.0000f, + 0.009754f, -0.000000f, -0.049039f, 0.904632f, 0.690813f, -0.0000f, -1.0000f, -0.0000f, + 0.019134f, -0.000000f, -0.046194f, 0.901185f, 0.679451f, -0.0000f, -1.0000f, -0.0000f, + 0.027778f, -0.000000f, -0.041573f, 0.895588f, 0.668980f, -0.0000f, -1.0000f, -0.0000f, + 0.035355f, -0.000000f, -0.035355f, 0.888056f, 0.659801f, -0.0000f, -1.0000f, -0.0000f, + 0.041573f, -0.000000f, -0.027779f, 0.878877f, 0.652269f, -0.0000f, -1.0000f, -0.0000f, + 0.046194f, -0.000000f, -0.019134f, 0.868406f, 0.646672f, -0.0000f, -1.0000f, -0.0000f, + 0.050000f, 0.000000f, -0.000000f, 0.845227f, 0.642061f, -0.0000f, -1.0000f, -0.0000f, + 0.049039f, 0.000000f, 0.009755f, 0.833411f, 0.643225f, -0.0000f, -1.0000f, -0.0000f, + 0.046194f, 0.000000f, 0.019134f, 0.822049f, 0.646672f, -0.0000f, -1.0000f, -0.0000f, + 0.041573f, 0.000000f, 0.027779f, 0.811578f, 0.652269f, -0.0000f, -1.0000f, -0.0000f, + 0.035355f, 0.000000f, 0.035355f, 0.802399f, 0.659801f, -0.0000f, -1.0000f, -0.0000f, + 0.027778f, 0.000000f, 0.041573f, 0.794867f, 0.668980f, -0.0000f, -1.0000f, -0.0000f, + 0.019134f, 0.000000f, 0.046194f, 0.789270f, 0.679451f, -0.0000f, -1.0000f, -0.0000f, + -0.000000f, 0.000000f, 0.050000f, 0.784659f, 0.702630f, -0.0000f, -1.0000f, -0.0000f, + -0.009755f, 0.000000f, 0.049039f, 0.785823f, 0.714446f, -0.0000f, -1.0000f, -0.0000f, + -0.019134f, 0.000000f, 0.046194f, 0.789270f, 0.725808f, -0.0000f, -1.0000f, -0.0000f, + -0.027779f, 0.000000f, 0.041573f, 0.794867f, 0.736279f, -0.0000f, -1.0000f, -0.0000f, + -0.035355f, 0.000000f, 0.035355f, 0.802399f, 0.745458f, -0.0000f, -1.0000f, -0.0000f, + -0.041574f, 0.000000f, 0.027779f, 0.811578f, 0.752990f, -0.0000f, -1.0000f, -0.0000f, + -0.046194f, 0.000000f, 0.019134f, 0.822049f, 0.758587f, -0.0000f, -1.0000f, -0.0000f, +}; + +const int test_scene_vertices_length = (sizeof (test_scene_vertices)) / (sizeof (test_scene_vertices[0])); + diff --git a/include/model/test_scene_color.data.h b/include/model/test_scene_color.data.h new file mode 100644 index 0000000..a987ccc --- /dev/null +++ b/include/model/test_scene_color.data.h @@ -0,0 +1,18 @@ +#pragma once + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern uint32_t _binary_model_test_scene_color_data_start __asm("_binary_model_test_scene_color_data_start"); +extern uint32_t _binary_model_test_scene_color_data_end __asm("_binary_model_test_scene_color_data_end"); + +#define model_test_scene_color_data_start ((const char *)&_binary_model_test_scene_color_data_start) +#define model_test_scene_color_data_end ((const char *)&_binary_model_test_scene_color_data_end) +#define model_test_scene_color_data_size (model_test_scene_color_data_end - model_test_scene_color_data_start) + +#ifdef __cplusplus +} +#endif diff --git a/include/render.h b/include/render.h new file mode 100644 index 0000000..7f49aa6 --- /dev/null +++ b/include/render.h @@ -0,0 +1,19 @@ +#pragma once + +#include "state.h" + +#ifdef __cplusplus +extern "C" { +#endif + + void render(const struct state * state, + unsigned int program, + unsigned int program__trans, + unsigned int program__texture0, + unsigned int color, + unsigned int vertex_array, + int triangles_length); + +#ifdef __cplusplus +} +#endif diff --git a/include/shader.h b/include/shader.h new file mode 100644 index 0000000..18e7b9b --- /dev/null +++ b/include/shader.h @@ -0,0 +1,19 @@ +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + + unsigned int compile_shader(const char * name, + const void * vs, + const int vs_length, + const void * fs, + const int fs_length); + + static const int shader_attrib_position = 0; + static const int shader_attrib_texture = 1; + static const int shader_attrib_normal = 2; + +#ifdef __cplusplus +} +#endif diff --git a/include/shader/scene.fs.glsl.h b/include/shader/scene.fs.glsl.h new file mode 100644 index 0000000..2ab0ff2 --- /dev/null +++ b/include/shader/scene.fs.glsl.h @@ -0,0 +1,18 @@ +#pragma once + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern uint32_t _binary_src_shader_scene_fs_glsl_start __asm("_binary_src_shader_scene_fs_glsl_start"); +extern uint32_t _binary_src_shader_scene_fs_glsl_end __asm("_binary_src_shader_scene_fs_glsl_end"); + +#define src_shader_scene_fs_glsl_start ((const char *)&_binary_src_shader_scene_fs_glsl_start) +#define src_shader_scene_fs_glsl_end ((const char *)&_binary_src_shader_scene_fs_glsl_end) +#define src_shader_scene_fs_glsl_size ((uintptr_t)src_shader_scene_fs_glsl_end - (uintptr_t)src_shader_scene_fs_glsl_start) + +#ifdef __cplusplus +} +#endif diff --git a/include/shader/scene.vs.glsl.h b/include/shader/scene.vs.glsl.h new file mode 100644 index 0000000..66a3acb --- /dev/null +++ b/include/shader/scene.vs.glsl.h @@ -0,0 +1,18 @@ +#pragma once + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern uint32_t _binary_src_shader_scene_vs_glsl_start __asm("_binary_src_shader_scene_vs_glsl_start"); +extern uint32_t _binary_src_shader_scene_vs_glsl_end __asm("_binary_src_shader_scene_vs_glsl_end"); + +#define src_shader_scene_vs_glsl_start ((const char *)&_binary_src_shader_scene_vs_glsl_start) +#define src_shader_scene_vs_glsl_end ((const char *)&_binary_src_shader_scene_vs_glsl_end) +#define src_shader_scene_vs_glsl_size ((uintptr_t)src_shader_scene_vs_glsl_end - (uintptr_t)src_shader_scene_vs_glsl_start) + +#ifdef __cplusplus +} +#endif diff --git a/include/state.h b/include/state.h new file mode 100644 index 0000000..742f1d7 --- /dev/null +++ b/include/state.h @@ -0,0 +1,18 @@ +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +struct state { + float rx; + float ry; + float rz; + float tx; + float ty; + float tz; +}; + +#ifdef __cplusplus +} +#endif diff --git a/model/test_scene.blend b/model/test_scene.blend new file mode 100644 index 0000000000000000000000000000000000000000..45e09e71329eea4717c1745e444f3ad01b5013e7 GIT binary patch literal 527218 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 XYQuGDkcdOP(TmMRvfg_!YT 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 RV;`!Nu2QN50etr7{{d#^pb`K8 literal 0 HcmV?d00001 diff --git a/model/test_scene.obj b/model/test_scene.obj new file mode 100644 index 0000000..95b53ec --- /dev/null +++ b/model/test_scene.obj @@ -0,0 +1,1076 @@ +# Blender 4.4.3 +# www.blender.org +mtllib test_scene.mtl +o Plane +v -1.000000 0.000000 1.000000 +v 1.000000 0.000000 1.000000 +v -1.000000 0.000000 -1.000000 +v 1.000000 0.000000 -1.000000 +v 0.000000 0.050000 -1.000000 +v 0.000000 0.050000 0.000000 +v 0.009755 0.049039 -1.000000 +v 0.009755 0.049039 0.000000 +v 0.019134 0.046194 -1.000000 +v 0.019134 0.046194 0.000000 +v 0.027779 0.041574 -1.000000 +v 0.027779 0.041573 0.000000 +v 0.035355 0.035355 -1.000000 +v 0.035355 0.035355 0.000000 +v 0.041573 0.027779 -1.000000 +v 0.041573 0.027778 0.000000 +v 0.046194 0.019134 -1.000000 +v 0.046194 0.019134 0.000000 +v 0.049039 0.009755 -1.000000 +v 0.049039 0.009754 0.000000 +v 0.050000 0.000000 -1.000000 +v 0.050000 -0.000000 -0.000000 +v 0.049039 -0.009754 -1.000000 +v 0.049039 -0.009755 -0.000000 +v 0.046194 -0.019134 -1.000000 +v 0.046194 -0.019134 -0.000000 +v 0.041573 -0.027778 -1.000000 +v 0.041573 -0.027779 -0.000000 +v 0.035355 -0.035355 -1.000000 +v 0.035355 -0.035355 -0.000000 +v 0.027779 -0.041573 -1.000000 +v 0.027779 -0.041574 -0.000000 +v 0.019134 -0.046194 -1.000000 +v 0.019134 -0.046194 -0.000000 +v 0.009755 -0.049039 -1.000000 +v 0.009755 -0.049039 -0.000000 +v 0.000000 -0.050000 -1.000000 +v 0.000000 -0.050000 -0.000000 +v -0.009755 -0.049039 -1.000000 +v -0.009755 -0.049039 -0.000000 +v -0.019134 -0.046194 -1.000000 +v -0.019134 -0.046194 -0.000000 +v -0.027779 -0.041573 -1.000000 +v -0.027779 -0.041574 -0.000000 +v -0.035355 -0.035355 -1.000000 +v -0.035355 -0.035355 -0.000000 +v -0.041573 -0.027778 -1.000000 +v -0.041573 -0.027779 -0.000000 +v -0.046194 -0.019134 -1.000000 +v -0.046194 -0.019134 -0.000000 +v -0.049039 -0.009754 -1.000000 +v -0.049039 -0.009755 -0.000000 +v -0.050000 0.000000 -1.000000 +v -0.050000 -0.000000 -0.000000 +v -0.049039 0.009755 -1.000000 +v -0.049039 0.009754 0.000000 +v -0.046194 0.019134 -1.000000 +v -0.046194 0.019134 0.000000 +v -0.041573 0.027779 -1.000000 +v -0.041573 0.027778 0.000000 +v -0.035355 0.035355 -1.000000 +v -0.035355 0.035355 0.000000 +v -0.027779 0.041574 -1.000000 +v -0.027779 0.041573 0.000000 +v -0.019134 0.046194 -1.000000 +v -0.019134 0.046194 0.000000 +v -0.009755 0.049039 -1.000000 +v -0.009755 0.049039 0.000000 +v 0.000000 0.050000 -0.000000 +v 1.000000 0.050000 -0.000000 +v 0.000000 0.049039 -0.009755 +v 1.000000 0.049039 -0.009755 +v 0.000000 0.046194 -0.019134 +v 1.000000 0.046194 -0.019134 +v 0.000000 0.041574 -0.027779 +v 1.000000 0.041573 -0.027779 +v 0.000000 0.035355 -0.035355 +v 1.000000 0.035355 -0.035355 +v -0.000000 0.027779 -0.041573 +v 1.000000 0.027778 -0.041574 +v -0.000000 0.019134 -0.046194 +v 1.000000 0.019134 -0.046194 +v -0.000000 0.009755 -0.049039 +v 1.000000 0.009754 -0.049039 +v -0.000000 0.000000 -0.050000 +v 1.000000 -0.000000 -0.050000 +v -0.000000 -0.009754 -0.049039 +v 1.000000 -0.009755 -0.049039 +v -0.000000 -0.019134 -0.046194 +v 1.000000 -0.019134 -0.046194 +v -0.000000 -0.027778 -0.041573 +v 1.000000 -0.027779 -0.041574 +v -0.000000 -0.035355 -0.035355 +v 1.000000 -0.035355 -0.035355 +v -0.000000 -0.041573 -0.027779 +v 1.000000 -0.041574 -0.027779 +v -0.000000 -0.046194 -0.019134 +v 1.000000 -0.046194 -0.019134 +v -0.000000 -0.049039 -0.009755 +v 1.000000 -0.049039 -0.009755 +v -0.000000 -0.050000 0.000000 +v 1.000000 -0.050000 -0.000000 +v -0.000000 -0.049039 0.009755 +v 1.000000 -0.049039 0.009754 +v -0.000000 -0.046194 0.019134 +v 1.000000 -0.046194 0.019134 +v -0.000000 -0.041573 0.027779 +v 1.000000 -0.041574 0.027778 +v 0.000000 -0.035355 0.035355 +v 1.000000 -0.035355 0.035355 +v 0.000000 -0.027778 0.041573 +v 1.000000 -0.027779 0.041573 +v 0.000000 -0.019134 0.046194 +v 1.000000 -0.019134 0.046194 +v 0.000000 -0.009754 0.049039 +v 1.000000 -0.009755 0.049039 +v 0.000000 0.000000 0.050000 +v 1.000000 -0.000000 0.050000 +v 0.000000 0.009755 0.049039 +v 1.000000 0.009754 0.049039 +v 0.000000 0.019134 0.046194 +v 1.000000 0.019134 0.046194 +v 0.000000 0.027779 0.041573 +v 1.000000 0.027778 0.041573 +v 0.000000 0.035355 0.035355 +v 1.000000 0.035355 0.035355 +v 0.000000 0.041574 0.027779 +v 1.000000 0.041573 0.027778 +v 0.000000 0.046194 0.019134 +v 1.000000 0.046194 0.019134 +v 0.000000 0.049039 0.009755 +v 1.000000 0.049039 0.009754 +v -0.050000 0.000000 0.000000 +v -0.050000 1.000000 -0.000000 +v -0.049039 -0.000000 -0.009755 +v -0.049039 1.000000 -0.009755 +v -0.046194 -0.000000 -0.019134 +v -0.046194 1.000000 -0.019134 +v -0.041574 -0.000000 -0.027779 +v -0.041574 1.000000 -0.027779 +v -0.035355 -0.000000 -0.035355 +v -0.035355 1.000000 -0.035355 +v -0.027779 -0.000000 -0.041573 +v -0.027779 1.000000 -0.041574 +v -0.019134 -0.000000 -0.046194 +v -0.019134 1.000000 -0.046194 +v -0.009755 -0.000000 -0.049039 +v -0.009755 1.000000 -0.049039 +v -0.000000 -0.000000 -0.050000 +v -0.000000 1.000000 -0.050000 +v 0.009754 -0.000000 -0.049039 +v 0.009754 1.000000 -0.049039 +v 0.019134 -0.000000 -0.046194 +v 0.019134 1.000000 -0.046194 +v 0.027778 -0.000000 -0.041573 +v 0.027778 1.000000 -0.041574 +v 0.035355 -0.000000 -0.035355 +v 0.035355 1.000000 -0.035355 +v 0.041573 -0.000000 -0.027779 +v 0.041573 1.000000 -0.027779 +v 0.046194 -0.000000 -0.019134 +v 0.046194 1.000000 -0.019134 +v 0.049039 -0.000000 -0.009755 +v 0.049039 1.000000 -0.009755 +v 0.050000 0.000000 -0.000000 +v 0.050000 1.000000 -0.000000 +v 0.049039 0.000000 0.009755 +v 0.049039 1.000000 0.009754 +v 0.046194 0.000000 0.019134 +v 0.046194 1.000000 0.019134 +v 0.041573 0.000000 0.027779 +v 0.041573 1.000000 0.027778 +v 0.035355 0.000000 0.035355 +v 0.035355 1.000000 0.035355 +v 0.027778 0.000000 0.041573 +v 0.027778 1.000000 0.041573 +v 0.019134 0.000000 0.046194 +v 0.019134 1.000000 0.046194 +v 0.009754 0.000000 0.049039 +v 0.009754 1.000000 0.049039 +v -0.000000 0.000000 0.050000 +v -0.000000 1.000000 0.050000 +v -0.009755 0.000000 0.049039 +v -0.009755 1.000000 0.049039 +v -0.019134 0.000000 0.046194 +v -0.019134 1.000000 0.046194 +v -0.027779 0.000000 0.041573 +v -0.027779 1.000000 0.041573 +v -0.035355 0.000000 0.035355 +v -0.035355 1.000000 0.035355 +v -0.041574 0.000000 0.027779 +v -0.041574 1.000000 0.027778 +v -0.046194 0.000000 0.019134 +v -0.046194 1.000000 0.019134 +v -0.049039 0.000000 0.009755 +v -0.049039 1.000000 0.009754 +vn -0.0000 1.0000 -0.0000 +vn 0.0980 0.9952 -0.0000 +vn 0.2903 0.9569 -0.0000 +vn 0.4714 0.8819 -0.0000 +vn 0.6344 0.7730 -0.0000 +vn 0.7730 0.6344 -0.0000 +vn 0.8819 0.4714 -0.0000 +vn 0.9569 0.2903 -0.0000 +vn 0.9952 0.0980 -0.0000 +vn 0.9952 -0.0980 -0.0000 +vn 0.9569 -0.2903 -0.0000 +vn 0.8819 -0.4714 -0.0000 +vn 0.7730 -0.6344 -0.0000 +vn 0.6344 -0.7730 -0.0000 +vn 0.4714 -0.8819 -0.0000 +vn 0.2903 -0.9569 -0.0000 +vn 0.0980 -0.9952 -0.0000 +vn -0.0980 -0.9952 -0.0000 +vn -0.2903 -0.9569 -0.0000 +vn -0.4714 -0.8819 -0.0000 +vn -0.6344 -0.7730 -0.0000 +vn -0.7730 -0.6344 -0.0000 +vn -0.8819 -0.4714 -0.0000 +vn -0.9569 -0.2903 -0.0000 +vn -0.9952 -0.0980 -0.0000 +vn -0.9952 0.0980 -0.0000 +vn -0.9569 0.2903 -0.0000 +vn -0.8819 0.4714 -0.0000 +vn -0.7730 0.6344 -0.0000 +vn -0.6344 0.7730 -0.0000 +vn -0.4714 0.8819 -0.0000 +vn -0.0000 -0.0000 1.0000 +vn -0.2903 0.9569 -0.0000 +vn -0.0980 0.9952 -0.0000 +vn -0.0000 -0.0000 -1.0000 +vn -0.0000 0.9952 -0.0980 +vn -0.0000 0.9569 -0.2903 +vn -0.0000 0.8819 -0.4714 +vn -0.0000 0.7730 -0.6344 +vn -0.0000 0.6344 -0.7730 +vn -0.0000 0.4714 -0.8819 +vn -0.0000 0.2903 -0.9569 +vn -0.0000 0.0980 -0.9952 +vn -0.0000 -0.0980 -0.9952 +vn -0.0000 -0.2903 -0.9569 +vn -0.0000 -0.4714 -0.8819 +vn -0.0000 -0.6344 -0.7730 +vn -0.0000 -0.7730 -0.6344 +vn -0.0000 -0.8819 -0.4714 +vn -0.0000 -0.9569 -0.2903 +vn -0.0000 -0.9952 -0.0980 +vn -0.0000 -0.9952 0.0980 +vn -0.0000 -0.9569 0.2903 +vn -0.0000 -0.8819 0.4714 +vn -0.0000 -0.7730 0.6344 +vn -0.0000 -0.6344 0.7730 +vn -0.0000 -0.4714 0.8819 +vn -0.0000 -0.2903 0.9569 +vn -0.0000 -0.0980 0.9952 +vn -0.0000 0.0980 0.9952 +vn -0.0000 0.2903 0.9569 +vn -0.0000 0.4714 0.8819 +vn -0.0000 0.6344 0.7730 +vn -0.0000 0.7730 0.6344 +vn -0.0000 0.8819 0.4714 +vn 1.0000 -0.0000 -0.0000 +vn -0.0000 0.9569 0.2903 +vn -0.0000 0.9952 0.0980 +vn -1.0000 -0.0000 -0.0000 +vn -0.9952 -0.0000 -0.0980 +vn -0.9569 -0.0000 -0.2903 +vn -0.8819 -0.0000 -0.4714 +vn -0.7730 -0.0000 -0.6344 +vn -0.6344 -0.0000 -0.7730 +vn -0.4714 -0.0000 -0.8819 +vn -0.2903 -0.0000 -0.9569 +vn -0.0980 -0.0000 -0.9952 +vn 0.0980 -0.0000 -0.9952 +vn 0.2903 -0.0000 -0.9569 +vn 0.4714 -0.0000 -0.8819 +vn 0.6344 -0.0000 -0.7730 +vn 0.7730 -0.0000 -0.6344 +vn 0.8819 -0.0000 -0.4714 +vn 0.9569 -0.0000 -0.2903 +vn 0.9952 -0.0000 -0.0980 +vn 0.9952 -0.0000 0.0980 +vn 0.9569 -0.0000 0.2903 +vn 0.8819 -0.0000 0.4714 +vn 0.7730 -0.0000 0.6344 +vn 0.6344 -0.0000 0.7730 +vn 0.4714 -0.0000 0.8819 +vn 0.2903 -0.0000 0.9569 +vn 0.0980 -0.0000 0.9952 +vn -0.0980 -0.0000 0.9952 +vn -0.2903 -0.0000 0.9569 +vn -0.4714 -0.0000 0.8819 +vn -0.6344 -0.0000 0.7730 +vn -0.7730 -0.0000 0.6344 +vn -0.8819 -0.0000 0.4714 +vn -0.9569 -0.0000 0.2903 +vn -0.9952 -0.0000 0.0980 +vn -0.0000 -1.0000 -0.0000 +vn 1.0000 -0.0000 0.0001 +vn 1.0000 -0.0000 -0.0001 +vn -0.0001 1.0000 -0.0000 +vn 0.0001 1.0000 -0.0000 +vt 0.093750 0.031250 +vt 0.031250 0.093750 +vt 0.031250 0.031250 +vt 0.318803 0.919541 +vt 0.312010 0.810852 +vt 0.318803 0.810852 +vt 0.312010 0.919541 +vt 0.305217 0.810852 +vt 0.305217 0.919541 +vt 0.298423 0.810852 +vt 0.298423 0.919541 +vt 0.291630 0.810852 +vt 0.291630 0.919541 +vt 0.284837 0.810852 +vt 0.284837 0.919541 +vt 0.278044 0.810852 +vt 0.278044 0.919541 +vt 0.271251 0.810852 +vt 0.271251 0.919541 +vt 0.264458 0.810852 +vt 0.264458 0.919541 +vt 0.257665 0.810852 +vt 0.257665 0.919541 +vt 0.250872 0.810852 +vt 0.250872 0.919541 +vt 0.244079 0.810852 +vt 0.244079 0.919541 +vt 0.237286 0.810852 +vt 0.237286 0.919541 +vt 0.230493 0.810852 +vt 0.230493 0.919541 +vt 0.223699 0.810852 +vt 0.223699 0.919541 +vt 0.216906 0.810852 +vt 0.216906 0.919541 +vt 0.210113 0.810852 +vt 0.203320 0.919541 +vt 0.203320 0.810852 +vt 0.196527 0.810852 +vt 0.196527 0.919541 +vt 0.189734 0.810852 +vt 0.189734 0.919541 +vt 0.182941 0.810852 +vt 0.182941 0.919541 +vt 0.176148 0.810852 +vt 0.176148 0.919541 +vt 0.169355 0.810852 +vt 0.169355 0.919541 +vt 0.162562 0.810852 +vt 0.162562 0.919541 +vt 0.155769 0.810852 +vt 0.155769 0.919541 +vt 0.148975 0.810852 +vt 0.148975 0.919541 +vt 0.142182 0.810852 +vt 0.142182 0.919541 +vt 0.135389 0.810852 +vt 0.135389 0.919541 +vt 0.128596 0.810852 +vt 0.128596 0.919541 +vt 0.121803 0.810852 +vt 0.121803 0.919541 +vt 0.115010 0.810852 +vt 0.135804 0.708308 +vt 0.203968 0.736542 +vt 0.175734 0.804707 +vt 0.115010 0.919541 +vt 0.108217 0.810852 +vt 0.101424 0.919541 +vt 0.101424 0.810852 +vt 0.274636 0.705339 +vt 0.213289 0.746329 +vt 0.254280 0.807676 +vt 0.857352 0.280261 +vt 0.852554 0.203494 +vt 0.857352 0.203494 +vt 0.852554 0.280261 +vt 0.847756 0.203494 +vt 0.847756 0.280261 +vt 0.842958 0.203494 +vt 0.842958 0.280261 +vt 0.838161 0.203494 +vt 0.838161 0.280261 +vt 0.833363 0.203494 +vt 0.833363 0.280261 +vt 0.828565 0.203494 +vt 0.828565 0.280261 +vt 0.823767 0.203494 +vt 0.823767 0.280261 +vt 0.818969 0.203494 +vt 0.818969 0.280261 +vt 0.814171 0.203494 +vt 0.814171 0.280261 +vt 0.809373 0.203494 +vt 0.809373 0.280261 +vt 0.804575 0.203494 +vt 0.804575 0.280261 +vt 0.799777 0.203494 +vt 0.799777 0.280261 +vt 0.794979 0.203494 +vt 0.794979 0.280261 +vt 0.790181 0.203494 +vt 0.790181 0.280261 +vt 0.785383 0.203494 +vt 0.785383 0.280261 +vt 0.780586 0.203494 +vt 0.775788 0.280261 +vt 0.775788 0.203494 +vt 0.770990 0.203494 +vt 0.770990 0.280261 +vt 0.766192 0.203494 +vt 0.766192 0.280261 +vt 0.761394 0.203494 +vt 0.761394 0.280261 +vt 0.756596 0.203494 +vt 0.756596 0.280261 +vt 0.751798 0.203494 +vt 0.751798 0.280261 +vt 0.747000 0.203494 +vt 0.747000 0.280261 +vt 0.742202 0.203494 +vt 0.742202 0.280261 +vt 0.737404 0.203494 +vt 0.737404 0.280261 +vt 0.732606 0.203494 +vt 0.732606 0.280261 +vt 0.727808 0.203494 +vt 0.727808 0.280261 +vt 0.723011 0.203494 +vt 0.723011 0.280261 +vt 0.718213 0.203494 +vt 0.718213 0.280261 +vt 0.713415 0.203494 +vt 0.728101 0.131068 +vt 0.776245 0.151010 +vt 0.756303 0.199154 +vt 0.713415 0.280261 +vt 0.708617 0.203494 +vt 0.703819 0.280261 +vt 0.703819 0.203494 +vt 0.826158 0.128971 +vt 0.782829 0.157922 +vt 0.811780 0.201251 +vt 0.908319 0.765721 +vt 0.900433 0.891905 +vt 0.900433 0.765721 +vt 0.892546 0.765721 +vt 0.892546 0.891905 +vt 0.884660 0.765721 +vt 0.884660 0.891905 +vt 0.876773 0.765721 +vt 0.876773 0.891905 +vt 0.868887 0.765721 +vt 0.868887 0.891905 +vt 0.861000 0.765721 +vt 0.861000 0.891905 +vt 0.853114 0.765721 +vt 0.853114 0.891905 +vt 0.845227 0.765721 +vt 0.845227 0.891905 +vt 0.837341 0.765721 +vt 0.837341 0.891905 +vt 0.829455 0.765721 +vt 0.829455 0.891905 +vt 0.821568 0.765721 +vt 0.821568 0.891905 +vt 0.813682 0.765721 +vt 0.813682 0.891905 +vt 0.805795 0.765721 +vt 0.805795 0.891905 +vt 0.797909 0.765721 +vt 0.797909 0.891905 +vt 0.790022 0.765721 +vt 0.790022 0.891905 +vt 0.782136 0.765721 +vt 0.782136 0.891905 +vt 0.774249 0.765721 +vt 0.774249 0.891905 +vt 0.766363 0.765721 +vt 0.766363 0.891905 +vt 0.758476 0.765721 +vt 0.758476 0.891905 +vt 0.750590 0.765721 +vt 0.750590 0.891905 +vt 0.742703 0.765721 +vt 0.742703 0.891905 +vt 0.734817 0.765721 +vt 0.734817 0.891905 +vt 0.726930 0.765721 +vt 0.726930 0.891905 +vt 0.719044 0.765721 +vt 0.719044 0.891905 +vt 0.711158 0.765721 +vt 0.711158 0.891905 +vt 0.703271 0.765721 +vt 0.703271 0.891905 +vt 0.695385 0.765721 +vt 0.695385 0.891905 +vt 0.687498 0.765721 +vt 0.687498 0.891905 +vt 0.679612 0.765721 +vt 0.679612 0.891905 +vt 0.671725 0.765721 +vt 0.695866 0.646672 +vt 0.775002 0.679451 +vt 0.742222 0.758587 +vt 0.671725 0.891905 +vt 0.663839 0.765721 +vt 0.663839 0.891905 +vt 0.655952 0.765721 +vt 0.857044 0.643225 +vt 0.785823 0.690813 +vt 0.833411 0.762034 +vt 0.093750 0.093750 +vt 0.210113 0.919541 +vt 0.165947 0.807676 +vt 0.155769 0.808678 +vt 0.145591 0.807676 +vt 0.135804 0.804707 +vt 0.126784 0.799886 +vt 0.118878 0.793398 +vt 0.112390 0.785492 +vt 0.107569 0.776472 +vt 0.104600 0.766685 +vt 0.103598 0.756507 +vt 0.104600 0.746329 +vt 0.107569 0.736542 +vt 0.112390 0.727523 +vt 0.118878 0.719617 +vt 0.126784 0.713129 +vt 0.145591 0.705339 +vt 0.155769 0.704336 +vt 0.165947 0.705339 +vt 0.175734 0.708308 +vt 0.184753 0.713129 +vt 0.192659 0.719617 +vt 0.199147 0.727523 +vt 0.206937 0.746329 +vt 0.207940 0.756507 +vt 0.206937 0.766685 +vt 0.203968 0.776472 +vt 0.199147 0.785492 +vt 0.192659 0.793398 +vt 0.184753 0.799886 +vt 0.108217 0.919541 +vt 0.264458 0.808678 +vt 0.274636 0.807676 +vt 0.284423 0.804707 +vt 0.293443 0.799886 +vt 0.301348 0.793398 +vt 0.307837 0.785492 +vt 0.312658 0.776472 +vt 0.315627 0.766685 +vt 0.316629 0.756507 +vt 0.315627 0.746329 +vt 0.312658 0.736542 +vt 0.307837 0.727523 +vt 0.301348 0.719617 +vt 0.293443 0.713129 +vt 0.284423 0.708308 +vt 0.264458 0.704336 +vt 0.254280 0.705339 +vt 0.244493 0.708308 +vt 0.235473 0.713129 +vt 0.227568 0.719617 +vt 0.221079 0.727523 +vt 0.216258 0.736542 +vt 0.212287 0.756507 +vt 0.213289 0.766685 +vt 0.216258 0.776472 +vt 0.221079 0.785492 +vt 0.227568 0.793398 +vt 0.235473 0.799886 +vt 0.244493 0.804707 +vt 0.780586 0.280261 +vt 0.749391 0.201251 +vt 0.742202 0.201959 +vt 0.735013 0.201251 +vt 0.728101 0.199154 +vt 0.721731 0.195749 +vt 0.716147 0.191166 +vt 0.711564 0.185583 +vt 0.708159 0.179212 +vt 0.706062 0.172300 +vt 0.705354 0.165111 +vt 0.706062 0.157922 +vt 0.708159 0.151010 +vt 0.711564 0.144639 +vt 0.716147 0.139055 +vt 0.721731 0.134473 +vt 0.735013 0.128971 +vt 0.742202 0.128263 +vt 0.749391 0.128971 +vt 0.756303 0.131068 +vt 0.762674 0.134473 +vt 0.768258 0.139055 +vt 0.772840 0.144639 +vt 0.778342 0.157922 +vt 0.779050 0.165111 +vt 0.778342 0.172300 +vt 0.776245 0.179212 +vt 0.772840 0.185583 +vt 0.768258 0.191166 +vt 0.762674 0.195749 +vt 0.708617 0.280261 +vt 0.818969 0.201959 +vt 0.826158 0.201251 +vt 0.833070 0.199154 +vt 0.839441 0.195749 +vt 0.845024 0.191166 +vt 0.849607 0.185583 +vt 0.853012 0.179212 +vt 0.855109 0.172300 +vt 0.855817 0.165111 +vt 0.855109 0.157922 +vt 0.853012 0.151010 +vt 0.849607 0.144639 +vt 0.845024 0.139055 +vt 0.839441 0.134473 +vt 0.833070 0.131068 +vt 0.818969 0.128263 +vt 0.811780 0.128971 +vt 0.804868 0.131068 +vt 0.798497 0.134473 +vt 0.792913 0.139055 +vt 0.788331 0.144639 +vt 0.784926 0.151010 +vt 0.782121 0.165111 +vt 0.782829 0.172300 +vt 0.784926 0.179212 +vt 0.788331 0.185583 +vt 0.792913 0.191166 +vt 0.798497 0.195749 +vt 0.804868 0.199154 +vt 0.908319 0.891905 +vt 0.730860 0.762034 +vt 0.719044 0.763198 +vt 0.707228 0.762034 +vt 0.695866 0.758587 +vt 0.685394 0.752990 +vt 0.676216 0.745458 +vt 0.668683 0.736279 +vt 0.663086 0.725808 +vt 0.659640 0.714446 +vt 0.658476 0.702630 +vt 0.659640 0.690813 +vt 0.663086 0.679451 +vt 0.668683 0.668980 +vt 0.676216 0.659801 +vt 0.685394 0.652269 +vt 0.707228 0.643225 +vt 0.719044 0.642061 +vt 0.730860 0.643225 +vt 0.742222 0.646672 +vt 0.752694 0.652269 +vt 0.761872 0.659801 +vt 0.769405 0.668980 +vt 0.778448 0.690813 +vt 0.779612 0.702630 +vt 0.778448 0.714446 +vt 0.775002 0.725808 +vt 0.769405 0.736279 +vt 0.761872 0.745458 +vt 0.752694 0.752990 +vt 0.655952 0.891905 +vt 0.845227 0.763198 +vt 0.857044 0.762034 +vt 0.868406 0.758587 +vt 0.878877 0.752990 +vt 0.888056 0.745458 +vt 0.895588 0.736279 +vt 0.901185 0.725808 +vt 0.904632 0.714446 +vt 0.905796 0.702630 +vt 0.904632 0.690813 +vt 0.901185 0.679451 +vt 0.895588 0.668980 +vt 0.888056 0.659801 +vt 0.878877 0.652269 +vt 0.868406 0.646672 +vt 0.845227 0.642061 +vt 0.833411 0.643225 +vt 0.822049 0.646672 +vt 0.811578 0.652269 +vt 0.802399 0.659801 +vt 0.794867 0.668980 +vt 0.789270 0.679451 +vt 0.784659 0.702630 +vt 0.785823 0.714446 +vt 0.789270 0.725808 +vt 0.794867 0.736279 +vt 0.802399 0.745458 +vt 0.811578 0.752990 +vt 0.822049 0.758587 +s 0 +usemtl Material +f 2/1/1 3/2/1 1/3/1 +f 6/4/2 7/5/2 5/6/2 +f 8/7/3 9/8/3 7/5/3 +f 10/9/4 11/10/4 9/8/4 +f 12/11/5 13/12/5 11/10/5 +f 14/13/6 15/14/6 13/12/6 +f 16/15/7 17/16/7 15/14/7 +f 18/17/8 19/18/8 17/16/8 +f 20/19/9 21/20/9 19/18/9 +f 22/21/10 23/22/10 21/20/10 +f 24/23/11 25/24/11 23/22/11 +f 26/25/12 27/26/12 25/24/12 +f 28/27/13 29/28/13 27/26/13 +f 30/29/14 31/30/14 29/28/14 +f 32/31/15 33/32/15 31/30/15 +f 34/33/16 35/34/16 33/32/16 +f 36/35/17 37/36/17 35/34/17 +f 37/36/18 40/37/18 39/38/18 +f 40/37/19 41/39/19 39/38/19 +f 42/40/20 43/41/20 41/39/20 +f 44/42/21 45/43/21 43/41/21 +f 46/44/22 47/45/22 45/43/22 +f 48/46/23 49/47/23 47/45/23 +f 50/48/24 51/49/24 49/47/24 +f 52/50/25 53/51/25 51/49/25 +f 54/52/26 55/53/26 53/51/26 +f 56/54/27 57/55/27 55/53/27 +f 58/56/28 59/57/28 57/55/28 +f 60/58/29 61/59/29 59/57/29 +f 62/60/30 63/61/30 61/59/30 +f 64/62/31 65/63/31 63/61/31 +f 42/64/32 26/65/32 10/66/32 +f 66/67/33 67/68/33 65/63/33 +f 67/68/34 6/69/34 5/70/34 +f 35/71/35 51/72/35 67/73/35 +f 70/74/36 71/75/36 69/76/36 +f 72/77/37 73/78/37 71/75/37 +f 74/79/38 75/80/38 73/78/38 +f 76/81/39 77/82/39 75/80/39 +f 78/83/40 79/84/40 77/82/40 +f 80/85/41 81/86/41 79/84/41 +f 82/87/42 83/88/42 81/86/42 +f 84/89/43 85/90/43 83/88/43 +f 86/91/44 87/92/44 85/90/44 +f 88/93/45 89/94/45 87/92/45 +f 90/95/46 91/96/46 89/94/46 +f 92/97/47 93/98/47 91/96/47 +f 94/99/48 95/100/48 93/98/48 +f 96/101/49 97/102/49 95/100/49 +f 98/103/50 99/104/50 97/102/50 +f 100/105/51 101/106/51 99/104/51 +f 101/106/52 104/107/52 103/108/52 +f 104/107/53 105/109/53 103/108/53 +f 106/110/54 107/111/54 105/109/54 +f 108/112/55 109/113/55 107/111/55 +f 110/114/56 111/115/56 109/113/56 +f 112/116/57 113/117/57 111/115/57 +f 114/118/58 115/119/58 113/117/58 +f 116/120/59 117/121/59 115/119/59 +f 118/122/60 119/123/60 117/121/60 +f 120/124/61 121/125/61 119/123/61 +f 122/126/62 123/127/62 121/125/62 +f 124/128/63 125/129/63 123/127/63 +f 126/130/64 127/131/64 125/129/64 +f 128/132/65 129/133/65 127/131/65 +f 106/134/66 90/135/66 74/136/66 +f 130/137/67 131/138/67 129/133/67 +f 131/138/68 70/139/68 69/140/68 +f 99/141/69 115/142/69 131/143/69 +f 133/144/70 136/145/70 135/146/70 +f 136/145/71 137/147/71 135/146/71 +f 138/148/72 139/149/72 137/147/72 +f 140/150/73 141/151/73 139/149/73 +f 142/152/74 143/153/74 141/151/74 +f 144/154/75 145/155/75 143/153/75 +f 146/156/76 147/157/76 145/155/76 +f 148/158/77 149/159/77 147/157/77 +f 150/160/78 151/161/78 149/159/78 +f 152/162/79 153/163/79 151/161/79 +f 154/164/80 155/165/80 153/163/80 +f 156/166/81 157/167/81 155/165/81 +f 158/168/82 159/169/82 157/167/82 +f 160/170/83 161/171/83 159/169/83 +f 162/172/84 163/173/84 161/171/84 +f 164/174/85 165/175/85 163/173/85 +f 166/176/86 167/177/86 165/175/86 +f 168/178/87 169/179/87 167/177/87 +f 170/180/88 171/181/88 169/179/88 +f 172/182/89 173/183/89 171/181/89 +f 174/184/90 175/185/90 173/183/90 +f 176/186/91 177/187/91 175/185/91 +f 178/188/92 179/189/92 177/187/92 +f 180/190/93 181/191/93 179/189/93 +f 182/192/94 183/193/94 181/191/94 +f 184/194/95 185/195/95 183/193/95 +f 186/196/96 187/197/96 185/195/96 +f 188/198/97 189/199/97 187/197/97 +f 190/200/98 191/201/98 189/199/98 +f 192/202/99 193/203/99 191/201/99 +f 170/204/1 154/205/1 138/206/1 +f 194/207/100 195/208/100 193/203/100 +f 196/209/101 133/210/101 195/208/101 +f 163/211/102 179/212/102 195/213/102 +f 2/1/1 4/214/1 3/2/1 +f 6/4/2 8/7/2 7/5/2 +f 8/7/3 10/9/3 9/8/3 +f 10/9/4 12/11/4 11/10/4 +f 12/11/5 14/13/5 13/12/5 +f 14/13/6 16/15/6 15/14/6 +f 16/15/7 18/17/7 17/16/7 +f 18/17/8 20/19/8 19/18/8 +f 20/19/9 22/21/9 21/20/9 +f 22/21/10 24/23/10 23/22/10 +f 24/23/11 26/25/11 25/24/11 +f 26/25/12 28/27/12 27/26/12 +f 28/27/13 30/29/13 29/28/13 +f 30/29/14 32/31/14 31/30/14 +f 32/31/15 34/33/15 33/32/15 +f 34/33/16 36/35/16 35/34/16 +f 36/35/17 38/215/17 37/36/17 +f 37/36/18 38/215/18 40/37/18 +f 40/37/19 42/40/19 41/39/19 +f 42/40/20 44/42/20 43/41/20 +f 44/42/21 46/44/21 45/43/21 +f 46/44/22 48/46/22 47/45/22 +f 48/46/23 50/48/23 49/47/23 +f 50/48/24 52/50/24 51/49/24 +f 52/50/25 54/52/25 53/51/25 +f 54/52/26 56/54/26 55/53/26 +f 56/54/27 58/56/27 57/55/27 +f 58/56/28 60/58/28 59/57/28 +f 60/58/29 62/60/29 61/59/29 +f 62/60/30 64/62/30 63/61/30 +f 64/62/31 66/67/31 65/63/31 +f 10/66/32 8/216/32 6/217/32 +f 6/217/32 68/218/32 66/219/32 +f 66/219/32 64/220/32 62/221/32 +f 62/221/32 60/222/32 58/223/32 +f 58/223/32 56/224/32 54/225/32 +f 54/225/32 52/226/32 50/227/32 +f 50/227/32 48/228/32 46/229/32 +f 46/229/32 44/230/32 42/64/32 +f 42/64/32 40/231/32 38/232/32 +f 38/232/32 36/233/32 34/234/32 +f 34/234/32 32/235/32 30/236/32 +f 30/236/32 28/237/32 26/65/32 +f 26/65/32 24/238/32 22/239/32 +f 22/239/32 20/240/32 18/241/32 +f 18/241/32 16/242/32 14/243/32 +f 14/243/32 12/244/32 10/66/32 +f 10/66/32 6/217/32 66/219/32 +f 66/219/32 62/221/32 58/223/32 +f 58/223/32 54/225/32 50/227/32 +f 50/227/32 46/229/32 42/64/32 +f 42/64/32 38/232/32 34/234/32 +f 34/234/32 30/236/32 26/65/32 +f 26/65/32 22/239/32 18/241/32 +f 18/241/32 14/243/32 10/66/32 +f 10/66/32 66/219/32 58/223/32 +f 58/223/32 50/227/32 42/64/32 +f 42/64/32 34/234/32 26/65/32 +f 26/65/32 18/241/32 10/66/32 +f 10/66/32 58/223/32 42/64/32 +f 66/67/33 68/245/33 67/68/33 +f 67/68/34 68/245/34 6/69/34 +f 67/73/35 5/246/35 7/247/35 +f 7/247/35 9/248/35 11/249/35 +f 11/249/35 13/250/35 15/251/35 +f 15/251/35 17/252/35 19/253/35 +f 19/253/35 21/254/35 23/255/35 +f 23/255/35 25/256/35 27/257/35 +f 27/257/35 29/258/35 31/259/35 +f 31/259/35 33/260/35 35/71/35 +f 35/71/35 37/261/35 39/262/35 +f 39/262/35 41/263/35 43/264/35 +f 43/264/35 45/265/35 47/266/35 +f 47/266/35 49/267/35 51/72/35 +f 51/72/35 53/268/35 55/269/35 +f 55/269/35 57/270/35 59/271/35 +f 59/271/35 61/272/35 63/273/35 +f 63/273/35 65/274/35 67/73/35 +f 67/73/35 7/247/35 11/249/35 +f 11/249/35 15/251/35 19/253/35 +f 19/253/35 23/255/35 27/257/35 +f 27/257/35 31/259/35 35/71/35 +f 35/71/35 39/262/35 43/264/35 +f 43/264/35 47/266/35 51/72/35 +f 51/72/35 55/269/35 59/271/35 +f 59/271/35 63/273/35 67/73/35 +f 67/73/35 11/249/35 19/253/35 +f 19/253/35 27/257/35 35/71/35 +f 35/71/35 43/264/35 51/72/35 +f 51/72/35 59/271/35 67/73/35 +f 67/73/35 19/253/35 35/71/35 +f 70/74/36 72/77/36 71/75/36 +f 72/77/37 74/79/37 73/78/37 +f 74/79/38 76/81/38 75/80/38 +f 76/81/39 78/83/39 77/82/39 +f 78/83/40 80/85/40 79/84/40 +f 80/85/41 82/87/41 81/86/41 +f 82/87/42 84/89/42 83/88/42 +f 84/89/43 86/91/43 85/90/43 +f 86/91/44 88/93/44 87/92/44 +f 88/93/45 90/95/45 89/94/45 +f 90/95/46 92/97/46 91/96/46 +f 92/97/47 94/99/47 93/98/47 +f 94/99/48 96/101/48 95/100/48 +f 96/101/49 98/103/49 97/102/49 +f 98/103/50 100/105/50 99/104/50 +f 100/105/51 102/275/51 101/106/51 +f 101/106/52 102/275/52 104/107/52 +f 104/107/53 106/110/53 105/109/53 +f 106/110/54 108/112/54 107/111/54 +f 108/112/55 110/114/55 109/113/55 +f 110/114/56 112/116/56 111/115/56 +f 112/116/57 114/118/57 113/117/57 +f 114/118/58 116/120/58 115/119/58 +f 116/120/59 118/122/59 117/121/59 +f 118/122/60 120/124/60 119/123/60 +f 120/124/61 122/126/61 121/125/61 +f 122/126/62 124/128/62 123/127/62 +f 124/128/63 126/130/63 125/129/63 +f 126/130/64 128/132/64 127/131/64 +f 128/132/65 130/137/65 129/133/65 +f 74/136/66 72/276/66 70/277/66 +f 70/277/66 132/278/66 130/279/66 +f 130/279/66 128/280/66 126/281/66 +f 126/281/66 124/282/66 122/283/66 +f 122/283/103 120/284/103 118/285/103 +f 118/285/104 116/286/104 114/287/104 +f 114/287/66 112/288/66 110/289/66 +f 110/289/66 108/290/66 106/134/66 +f 106/134/66 104/291/66 102/292/66 +f 102/292/66 100/293/66 98/294/66 +f 98/294/66 96/295/66 94/296/66 +f 94/296/66 92/297/66 90/135/66 +f 90/135/103 88/298/103 86/299/103 +f 86/299/104 84/300/104 82/301/104 +f 82/301/66 80/302/66 78/303/66 +f 78/303/66 76/304/66 74/136/66 +f 74/136/66 70/277/66 130/279/66 +f 130/279/66 126/281/66 122/283/66 +f 122/283/66 118/285/66 114/287/66 +f 114/287/66 110/289/66 106/134/66 +f 106/134/66 102/292/66 98/294/66 +f 98/294/66 94/296/66 90/135/66 +f 90/135/66 86/299/66 82/301/66 +f 82/301/66 78/303/66 74/136/66 +f 74/136/66 130/279/66 122/283/66 +f 122/283/66 114/287/66 106/134/66 +f 106/134/66 98/294/66 90/135/66 +f 90/135/66 82/301/66 74/136/66 +f 74/136/66 122/283/66 106/134/66 +f 130/137/67 132/305/67 131/138/67 +f 131/138/68 132/305/68 70/139/68 +f 131/143/69 69/306/69 71/307/69 +f 71/307/69 73/308/69 75/309/69 +f 75/309/69 77/310/69 79/311/69 +f 79/311/69 81/312/69 83/313/69 +f 83/313/69 85/314/69 87/315/69 +f 87/315/69 89/316/69 91/317/69 +f 91/317/69 93/318/69 95/319/69 +f 95/319/69 97/320/69 99/141/69 +f 99/141/69 101/321/69 103/322/69 +f 103/322/69 105/323/69 107/324/69 +f 107/324/69 109/325/69 111/326/69 +f 111/326/69 113/327/69 115/142/69 +f 115/142/69 117/328/69 119/329/69 +f 119/329/69 121/330/69 123/331/69 +f 123/331/69 125/332/69 127/333/69 +f 127/333/69 129/334/69 131/143/69 +f 131/143/69 71/307/69 75/309/69 +f 75/309/69 79/311/69 83/313/69 +f 83/313/69 87/315/69 91/317/69 +f 91/317/69 95/319/69 99/141/69 +f 99/141/69 103/322/69 107/324/69 +f 107/324/69 111/326/69 115/142/69 +f 115/142/69 119/329/69 123/331/69 +f 123/331/69 127/333/69 131/143/69 +f 131/143/69 75/309/69 83/313/69 +f 83/313/69 91/317/69 99/141/69 +f 99/141/69 107/324/69 115/142/69 +f 115/142/69 123/331/69 131/143/69 +f 131/143/69 83/313/69 99/141/69 +f 133/144/70 134/335/70 136/145/70 +f 136/145/71 138/148/71 137/147/71 +f 138/148/72 140/150/72 139/149/72 +f 140/150/73 142/152/73 141/151/73 +f 142/152/74 144/154/74 143/153/74 +f 144/154/75 146/156/75 145/155/75 +f 146/156/76 148/158/76 147/157/76 +f 148/158/77 150/160/77 149/159/77 +f 150/160/78 152/162/78 151/161/78 +f 152/162/79 154/164/79 153/163/79 +f 154/164/80 156/166/80 155/165/80 +f 156/166/81 158/168/81 157/167/81 +f 158/168/82 160/170/82 159/169/82 +f 160/170/83 162/172/83 161/171/83 +f 162/172/84 164/174/84 163/173/84 +f 164/174/85 166/176/85 165/175/85 +f 166/176/86 168/178/86 167/177/86 +f 168/178/87 170/180/87 169/179/87 +f 170/180/88 172/182/88 171/181/88 +f 172/182/89 174/184/89 173/183/89 +f 174/184/90 176/186/90 175/185/90 +f 176/186/91 178/188/91 177/187/91 +f 178/188/92 180/190/92 179/189/92 +f 180/190/93 182/192/93 181/191/93 +f 182/192/94 184/194/94 183/193/94 +f 184/194/95 186/196/95 185/195/95 +f 186/196/96 188/198/96 187/197/96 +f 188/198/97 190/200/97 189/199/97 +f 190/200/98 192/202/98 191/201/98 +f 192/202/99 194/207/99 193/203/99 +f 138/206/105 136/336/105 134/337/105 +f 134/337/106 196/338/106 194/339/106 +f 194/339/1 192/340/1 190/341/1 +f 190/341/1 188/342/1 186/343/1 +f 186/343/1 184/344/1 182/345/1 +f 182/345/1 180/346/1 178/347/1 +f 178/347/1 176/348/1 174/349/1 +f 174/349/1 172/350/1 170/204/1 +f 170/204/106 168/351/106 166/352/106 +f 166/352/105 164/353/105 162/354/105 +f 162/354/1 160/355/1 158/356/1 +f 158/356/1 156/357/1 154/205/1 +f 154/205/1 152/358/1 150/359/1 +f 150/359/1 148/360/1 146/361/1 +f 146/361/1 144/362/1 142/363/1 +f 142/363/1 140/364/1 138/206/1 +f 138/206/1 134/337/1 194/339/1 +f 194/339/1 190/341/1 186/343/1 +f 186/343/1 182/345/1 178/347/1 +f 178/347/1 174/349/1 170/204/1 +f 170/204/1 166/352/1 162/354/1 +f 162/354/1 158/356/1 154/205/1 +f 154/205/1 150/359/1 146/361/1 +f 146/361/1 142/363/1 138/206/1 +f 138/206/1 194/339/1 186/343/1 +f 186/343/1 178/347/1 170/204/1 +f 170/204/1 162/354/1 154/205/1 +f 154/205/1 146/361/1 138/206/1 +f 138/206/1 186/343/1 170/204/1 +f 194/207/100 196/209/100 195/208/100 +f 196/209/101 134/365/101 133/210/101 +f 195/213/102 133/366/102 135/367/102 +f 135/367/102 137/368/102 139/369/102 +f 139/369/102 141/370/102 143/371/102 +f 143/371/102 145/372/102 147/373/102 +f 147/373/102 149/374/102 151/375/102 +f 151/375/102 153/376/102 155/377/102 +f 155/377/102 157/378/102 159/379/102 +f 159/379/102 161/380/102 163/211/102 +f 163/211/102 165/381/102 167/382/102 +f 167/382/102 169/383/102 171/384/102 +f 171/384/102 173/385/102 175/386/102 +f 175/386/102 177/387/102 179/212/102 +f 179/212/102 181/388/102 183/389/102 +f 183/389/102 185/390/102 187/391/102 +f 187/391/102 189/392/102 191/393/102 +f 191/393/102 193/394/102 195/213/102 +f 195/213/102 135/367/102 139/369/102 +f 139/369/102 143/371/102 147/373/102 +f 147/373/102 151/375/102 155/377/102 +f 155/377/102 159/379/102 163/211/102 +f 163/211/102 167/382/102 171/384/102 +f 171/384/102 175/386/102 179/212/102 +f 179/212/102 183/389/102 187/391/102 +f 187/391/102 191/393/102 195/213/102 +f 195/213/102 139/369/102 147/373/102 +f 147/373/102 155/377/102 163/211/102 +f 163/211/102 171/384/102 179/212/102 +f 179/212/102 187/391/102 195/213/102 +f 195/213/102 147/373/102 163/211/102 diff --git a/model/test_scene_color.data b/model/test_scene_color.data new file mode 100644 index 0000000000000000000000000000000000000000..f53594cb43b7d478c0fc17ca61d2b4a4c8227902 GIT binary patch literal 3072 zcmcJRPe@cz6vls!e^N6`NoCLwH$hZ{iwtzp(srS=2%^MA5JDRvT2&*`woPpc10$kU zpfGJh+7(H=&=wVmw8%wBk(6d--@TL1nWpzVcVNz3cyHc2=R1GyIp2M(!Nzv$H@tz9 zP)VNbgwya6zJoM!D7q2iJdD6@r@SqAWcM5nMDS^tfYo^WAMgk|toZVxFt0$3T(rOg z_!$qLi|H3+1MrplGf2z9WnTnK=Ia6Y!drqPs*yIs0`7IpiVpH?ibL8sOHXX#ZeC3h zE!WX`H?La^#s-xw*Gr8wKMp94EQ9dhHd3E0BmR?Gs_vAlKI-?86cy+FB$(4SE4r@S zr{UTUuL4S>A+xv;6I_6l@T=h>tk}#}cx@=BDkDDF6_HOf+)N~&T*QiLjA3|}$R!%4 zX-8CrvKPi-IVLz!$tM_vdi^*9FEpEwUn{As!$-IQ?Sq6j${8gI1UYCv0F+3m=*(8P$}oyE`6dWoT_N^KIMj=M1>twWtU2GuX)UtfS<{b$z1c2>`R}U_e!Xb8DC?2 h$x}^~yXD43ujMbv@#}35rsF8zZxFr+^?G27{sBV~y|MrR literal 0 HcmV?d00001 diff --git a/model/test_scene_color.png b/model/test_scene_color.png new file mode 100644 index 0000000000000000000000000000000000000000..382d42b606237350a55a50493c0a2a4229eef16c GIT binary patch literal 4694 zcmeHKeNYo;8V{fXL2H6KDnh%iR1n={v*dFp5fLJ!H5MVIh}W^3-3_edi)2IM=Lu>n z;2nO{R#1x~^?GWVdg`EuSgUf_Djox#*Q-`MJwWa}m5O?P)q8gdU(?RqICK4vWM1B{ z-~OKG`MuBkkS$JIkTOOXAruG%V+^Uu>7a+W77_^lKAZIKy`XERvkVr4Ax;niCIA^Q zLJ+`VKnoZ&4h#qq1c9~pK??_C4#TyGfRTK^5sat!#~*@mtRKTYBMS%=i~;>l&@eC_ z5BmL}F(35WItj+yCxrhNj|3<%>+4et#xw|%$WTeV8tkB$0+(U9ObN+UxI%@?Wx#&G z?g5WDrpoB1E5N_COj1&sAt?!Rx*Qh9N(%(OovSwMQqRnZY*><^-&|5OQXh$#V(LEI zU_UCxiBa+SctU6D+w~ zr9J=RYUSQ{nih=?*>F~7*{!ILVg1I&xK89^_VI5j9{oc)y1i!`UDFzw7+9KB zG(s%gAG>Gtl!e)z^jX!p33qP3R`5Lh_;}a0Q|At?5z5ciy!LGDYHwb9Ow5Vuw8&d4 z^LLgl+?_Wu_fll%({J-5V&>eNe5_^hk8eb6e;i$Zxdl#{)24Lhf8X+A+3wD;OWWp{1jlOgL7HdiA$wkuUF!YmpEKG zQkh1hk)oIs!w`T#+{^4N;X~~1X&gl_M>6duU5t}u9CnD~B+L#EtAk;%5B2$Ha~h5P z^meyj1)zu2M>wT22`aVOq=TPuv-$!+;&s zXW&B0VQfx5C?MVtV-(qsb9!7>9z&5*+Dh91sT=qw8-iyU%YaxzeB*Zba0WX9%=PmR zLHEVZg8|BD#FHJQhcjwO*1?>=IOQN23g?F^f{2%?FceW(C=8LC%_yS5G!#P9YBQ#w zWE7?%2T>X9ZkDiSHim@#FUuf>~Kw5wYN1n>Kf&FFtQtyq*p!0iY zy;Cd0UnL0QF9lAJy&<@X0-ECe1YEsaWG-RPp+WWVr)%Fj^E0VnR;o0#45blp^fE+_ zs%S)w%1J~{$kiah6sQ@q3}tsaEUcGs(TO=gN1zo*PyQbi6w9CBjG<_6F3lYe5DbxF zh)mfhSiD~_sXt&TS2Ow|)=Gb(iIxWpDl*`?-ZfCXKrNK^7el{hT-o^rKmN1$1uX#T zVIwc4@336Ma=nxSF9jaXu3@=eN`aRG4`lAGVzku|gmS9A!vOG^I8kz1;Msi5NfXUfV78 z<*c5>qAk;H$&6Tx!03~()9;FqqN0%RjxZCNnok<*a>eV8#Er`iMmEmP6>kj-jjKA+ zvT2^vvU7zaEdL8<&&eRS`uzQ!oh$1*PnZk^E!#C0TbZpr&cex=#j5hm$EQ3Gr>=iA z>Yifnn7hxl)h&@}H)jO>J~TY@xbclVf;_1M~l=3&r zx z|0i)lM$TrhmaN$JdFQk$$%f+poS9WtPAxjn()9Wpmnzuz%7c4qJLXg}@Me76a zM2D6%+$cy8ezYNIYY1ACRux{6xJMvtkjFfpuw-)R$vCfe3l QaPQ~_{etA0x$hPI7lQMHXaE2J literal 0 HcmV?d00001 diff --git a/src/depth_decode.py b/src/depth_decode.py new file mode 100644 index 0000000..4ffa255 --- /dev/null +++ b/src/depth_decode.py @@ -0,0 +1,22 @@ +import sys +import struct + +with open(sys.argv[1], 'rb') as f: + buf = memoryview(f.read()) + +print("P2") +print("800 600") +print("65535") + +for i in range(len(buf) // 4): + b = buf[i*4:i*4+4] + v, = struct.unpack("= 0.0 and v <= 1.0 + + depth16 = v * 65535 + + print(depth16, end='') + if i % 128 == 127: + print("", end='\n') + else: + print("", end=" ") diff --git a/src/gl.c b/src/gl.c new file mode 100644 index 0000000..73bffb3 --- /dev/null +++ b/src/gl.c @@ -0,0 +1,1512 @@ +/** + * SPDX-License-Identifier: (WTFPL OR CC0-1.0) AND Apache-2.0 + */ +#include +#include +#include +#include + +#ifndef GLAD_IMPL_UTIL_C_ +#define GLAD_IMPL_UTIL_C_ + +#ifdef _MSC_VER +#define GLAD_IMPL_UTIL_SSCANF sscanf_s +#else +#define GLAD_IMPL_UTIL_SSCANF sscanf +#endif + +#endif /* GLAD_IMPL_UTIL_C_ */ + +#ifdef __cplusplus +extern "C" { +#endif + + + +int GLAD_GL_VERSION_1_0 = 0; +int GLAD_GL_VERSION_1_1 = 0; +int GLAD_GL_VERSION_1_2 = 0; +int GLAD_GL_VERSION_1_3 = 0; +int GLAD_GL_VERSION_1_4 = 0; +int GLAD_GL_VERSION_1_5 = 0; +int GLAD_GL_VERSION_2_0 = 0; +int GLAD_GL_VERSION_2_1 = 0; +int GLAD_GL_VERSION_3_0 = 0; + + + +PFNGLACCUMPROC glad_glAccum = NULL; +PFNGLACTIVETEXTUREPROC glad_glActiveTexture = NULL; +PFNGLALPHAFUNCPROC glad_glAlphaFunc = NULL; +PFNGLARETEXTURESRESIDENTPROC glad_glAreTexturesResident = NULL; +PFNGLARRAYELEMENTPROC glad_glArrayElement = NULL; +PFNGLATTACHSHADERPROC glad_glAttachShader = NULL; +PFNGLBEGINPROC glad_glBegin = NULL; +PFNGLBEGINCONDITIONALRENDERPROC glad_glBeginConditionalRender = NULL; +PFNGLBEGINQUERYPROC glad_glBeginQuery = NULL; +PFNGLBEGINTRANSFORMFEEDBACKPROC glad_glBeginTransformFeedback = NULL; +PFNGLBINDATTRIBLOCATIONPROC glad_glBindAttribLocation = NULL; +PFNGLBINDBUFFERPROC glad_glBindBuffer = NULL; +PFNGLBINDBUFFERBASEPROC glad_glBindBufferBase = NULL; +PFNGLBINDBUFFERRANGEPROC glad_glBindBufferRange = NULL; +PFNGLBINDFRAGDATALOCATIONPROC glad_glBindFragDataLocation = NULL; +PFNGLBINDFRAMEBUFFERPROC glad_glBindFramebuffer = NULL; +PFNGLBINDRENDERBUFFERPROC glad_glBindRenderbuffer = NULL; +PFNGLBINDTEXTUREPROC glad_glBindTexture = NULL; +PFNGLBINDVERTEXARRAYPROC glad_glBindVertexArray = NULL; +PFNGLBITMAPPROC glad_glBitmap = NULL; +PFNGLBLENDCOLORPROC glad_glBlendColor = NULL; +PFNGLBLENDEQUATIONPROC glad_glBlendEquation = NULL; +PFNGLBLENDEQUATIONSEPARATEPROC glad_glBlendEquationSeparate = NULL; +PFNGLBLENDFUNCPROC glad_glBlendFunc = NULL; +PFNGLBLENDFUNCSEPARATEPROC glad_glBlendFuncSeparate = NULL; +PFNGLBLITFRAMEBUFFERPROC glad_glBlitFramebuffer = NULL; +PFNGLBUFFERDATAPROC glad_glBufferData = NULL; +PFNGLBUFFERSUBDATAPROC glad_glBufferSubData = NULL; +PFNGLCALLLISTPROC glad_glCallList = NULL; +PFNGLCALLLISTSPROC glad_glCallLists = NULL; +PFNGLCHECKFRAMEBUFFERSTATUSPROC glad_glCheckFramebufferStatus = NULL; +PFNGLCLAMPCOLORPROC glad_glClampColor = NULL; +PFNGLCLEARPROC glad_glClear = NULL; +PFNGLCLEARACCUMPROC glad_glClearAccum = NULL; +PFNGLCLEARBUFFERFIPROC glad_glClearBufferfi = NULL; +PFNGLCLEARBUFFERFVPROC glad_glClearBufferfv = NULL; +PFNGLCLEARBUFFERIVPROC glad_glClearBufferiv = NULL; +PFNGLCLEARBUFFERUIVPROC glad_glClearBufferuiv = NULL; +PFNGLCLEARCOLORPROC glad_glClearColor = NULL; +PFNGLCLEARDEPTHPROC glad_glClearDepth = NULL; +PFNGLCLEARINDEXPROC glad_glClearIndex = NULL; +PFNGLCLEARSTENCILPROC glad_glClearStencil = NULL; +PFNGLCLIENTACTIVETEXTUREPROC glad_glClientActiveTexture = NULL; +PFNGLCLIPPLANEPROC glad_glClipPlane = NULL; +PFNGLCOLOR3BPROC glad_glColor3b = NULL; +PFNGLCOLOR3BVPROC glad_glColor3bv = NULL; +PFNGLCOLOR3DPROC glad_glColor3d = NULL; +PFNGLCOLOR3DVPROC glad_glColor3dv = NULL; +PFNGLCOLOR3FPROC glad_glColor3f = NULL; +PFNGLCOLOR3FVPROC glad_glColor3fv = NULL; +PFNGLCOLOR3IPROC glad_glColor3i = NULL; +PFNGLCOLOR3IVPROC glad_glColor3iv = NULL; +PFNGLCOLOR3SPROC glad_glColor3s = NULL; +PFNGLCOLOR3SVPROC glad_glColor3sv = NULL; +PFNGLCOLOR3UBPROC glad_glColor3ub = NULL; +PFNGLCOLOR3UBVPROC glad_glColor3ubv = NULL; +PFNGLCOLOR3UIPROC glad_glColor3ui = NULL; +PFNGLCOLOR3UIVPROC glad_glColor3uiv = NULL; +PFNGLCOLOR3USPROC glad_glColor3us = NULL; +PFNGLCOLOR3USVPROC glad_glColor3usv = NULL; +PFNGLCOLOR4BPROC glad_glColor4b = NULL; +PFNGLCOLOR4BVPROC glad_glColor4bv = NULL; +PFNGLCOLOR4DPROC glad_glColor4d = NULL; +PFNGLCOLOR4DVPROC glad_glColor4dv = NULL; +PFNGLCOLOR4FPROC glad_glColor4f = NULL; +PFNGLCOLOR4FVPROC glad_glColor4fv = NULL; +PFNGLCOLOR4IPROC glad_glColor4i = NULL; +PFNGLCOLOR4IVPROC glad_glColor4iv = NULL; +PFNGLCOLOR4SPROC glad_glColor4s = NULL; +PFNGLCOLOR4SVPROC glad_glColor4sv = NULL; +PFNGLCOLOR4UBPROC glad_glColor4ub = NULL; +PFNGLCOLOR4UBVPROC glad_glColor4ubv = NULL; +PFNGLCOLOR4UIPROC glad_glColor4ui = NULL; +PFNGLCOLOR4UIVPROC glad_glColor4uiv = NULL; +PFNGLCOLOR4USPROC glad_glColor4us = NULL; +PFNGLCOLOR4USVPROC glad_glColor4usv = NULL; +PFNGLCOLORMASKPROC glad_glColorMask = NULL; +PFNGLCOLORMASKIPROC glad_glColorMaski = NULL; +PFNGLCOLORMATERIALPROC glad_glColorMaterial = NULL; +PFNGLCOLORPOINTERPROC glad_glColorPointer = NULL; +PFNGLCOMPILESHADERPROC glad_glCompileShader = NULL; +PFNGLCOMPRESSEDTEXIMAGE1DPROC glad_glCompressedTexImage1D = NULL; +PFNGLCOMPRESSEDTEXIMAGE2DPROC glad_glCompressedTexImage2D = NULL; +PFNGLCOMPRESSEDTEXIMAGE3DPROC glad_glCompressedTexImage3D = NULL; +PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glad_glCompressedTexSubImage1D = NULL; +PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glad_glCompressedTexSubImage2D = NULL; +PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glad_glCompressedTexSubImage3D = NULL; +PFNGLCOPYPIXELSPROC glad_glCopyPixels = NULL; +PFNGLCOPYTEXIMAGE1DPROC glad_glCopyTexImage1D = NULL; +PFNGLCOPYTEXIMAGE2DPROC glad_glCopyTexImage2D = NULL; +PFNGLCOPYTEXSUBIMAGE1DPROC glad_glCopyTexSubImage1D = NULL; +PFNGLCOPYTEXSUBIMAGE2DPROC glad_glCopyTexSubImage2D = NULL; +PFNGLCOPYTEXSUBIMAGE3DPROC glad_glCopyTexSubImage3D = NULL; +PFNGLCREATEPROGRAMPROC glad_glCreateProgram = NULL; +PFNGLCREATESHADERPROC glad_glCreateShader = NULL; +PFNGLCULLFACEPROC glad_glCullFace = NULL; +PFNGLDELETEBUFFERSPROC glad_glDeleteBuffers = NULL; +PFNGLDELETEFRAMEBUFFERSPROC glad_glDeleteFramebuffers = NULL; +PFNGLDELETELISTSPROC glad_glDeleteLists = NULL; +PFNGLDELETEPROGRAMPROC glad_glDeleteProgram = NULL; +PFNGLDELETEQUERIESPROC glad_glDeleteQueries = NULL; +PFNGLDELETERENDERBUFFERSPROC glad_glDeleteRenderbuffers = NULL; +PFNGLDELETESHADERPROC glad_glDeleteShader = NULL; +PFNGLDELETETEXTURESPROC glad_glDeleteTextures = NULL; +PFNGLDELETEVERTEXARRAYSPROC glad_glDeleteVertexArrays = NULL; +PFNGLDEPTHFUNCPROC glad_glDepthFunc = NULL; +PFNGLDEPTHMASKPROC glad_glDepthMask = NULL; +PFNGLDEPTHRANGEPROC glad_glDepthRange = NULL; +PFNGLDETACHSHADERPROC glad_glDetachShader = NULL; +PFNGLDISABLEPROC glad_glDisable = NULL; +PFNGLDISABLECLIENTSTATEPROC glad_glDisableClientState = NULL; +PFNGLDISABLEVERTEXATTRIBARRAYPROC glad_glDisableVertexAttribArray = NULL; +PFNGLDISABLEIPROC glad_glDisablei = NULL; +PFNGLDRAWARRAYSPROC glad_glDrawArrays = NULL; +PFNGLDRAWBUFFERPROC glad_glDrawBuffer = NULL; +PFNGLDRAWBUFFERSPROC glad_glDrawBuffers = NULL; +PFNGLDRAWELEMENTSPROC glad_glDrawElements = NULL; +PFNGLDRAWPIXELSPROC glad_glDrawPixels = NULL; +PFNGLDRAWRANGEELEMENTSPROC glad_glDrawRangeElements = NULL; +PFNGLEDGEFLAGPROC glad_glEdgeFlag = NULL; +PFNGLEDGEFLAGPOINTERPROC glad_glEdgeFlagPointer = NULL; +PFNGLEDGEFLAGVPROC glad_glEdgeFlagv = NULL; +PFNGLENABLEPROC glad_glEnable = NULL; +PFNGLENABLECLIENTSTATEPROC glad_glEnableClientState = NULL; +PFNGLENABLEVERTEXATTRIBARRAYPROC glad_glEnableVertexAttribArray = NULL; +PFNGLENABLEIPROC glad_glEnablei = NULL; +PFNGLENDPROC glad_glEnd = NULL; +PFNGLENDCONDITIONALRENDERPROC glad_glEndConditionalRender = NULL; +PFNGLENDLISTPROC glad_glEndList = NULL; +PFNGLENDQUERYPROC glad_glEndQuery = NULL; +PFNGLENDTRANSFORMFEEDBACKPROC glad_glEndTransformFeedback = NULL; +PFNGLEVALCOORD1DPROC glad_glEvalCoord1d = NULL; +PFNGLEVALCOORD1DVPROC glad_glEvalCoord1dv = NULL; +PFNGLEVALCOORD1FPROC glad_glEvalCoord1f = NULL; +PFNGLEVALCOORD1FVPROC glad_glEvalCoord1fv = NULL; +PFNGLEVALCOORD2DPROC glad_glEvalCoord2d = NULL; +PFNGLEVALCOORD2DVPROC glad_glEvalCoord2dv = NULL; +PFNGLEVALCOORD2FPROC glad_glEvalCoord2f = NULL; +PFNGLEVALCOORD2FVPROC glad_glEvalCoord2fv = NULL; +PFNGLEVALMESH1PROC glad_glEvalMesh1 = NULL; +PFNGLEVALMESH2PROC glad_glEvalMesh2 = NULL; +PFNGLEVALPOINT1PROC glad_glEvalPoint1 = NULL; +PFNGLEVALPOINT2PROC glad_glEvalPoint2 = NULL; +PFNGLFEEDBACKBUFFERPROC glad_glFeedbackBuffer = NULL; +PFNGLFINISHPROC glad_glFinish = NULL; +PFNGLFLUSHPROC glad_glFlush = NULL; +PFNGLFLUSHMAPPEDBUFFERRANGEPROC glad_glFlushMappedBufferRange = NULL; +PFNGLFOGCOORDPOINTERPROC glad_glFogCoordPointer = NULL; +PFNGLFOGCOORDDPROC glad_glFogCoordd = NULL; +PFNGLFOGCOORDDVPROC glad_glFogCoorddv = NULL; +PFNGLFOGCOORDFPROC glad_glFogCoordf = NULL; +PFNGLFOGCOORDFVPROC glad_glFogCoordfv = NULL; +PFNGLFOGFPROC glad_glFogf = NULL; +PFNGLFOGFVPROC glad_glFogfv = NULL; +PFNGLFOGIPROC glad_glFogi = NULL; +PFNGLFOGIVPROC glad_glFogiv = NULL; +PFNGLFRAMEBUFFERRENDERBUFFERPROC glad_glFramebufferRenderbuffer = NULL; +PFNGLFRAMEBUFFERTEXTURE1DPROC glad_glFramebufferTexture1D = NULL; +PFNGLFRAMEBUFFERTEXTURE2DPROC glad_glFramebufferTexture2D = NULL; +PFNGLFRAMEBUFFERTEXTURE3DPROC glad_glFramebufferTexture3D = NULL; +PFNGLFRAMEBUFFERTEXTURELAYERPROC glad_glFramebufferTextureLayer = NULL; +PFNGLFRONTFACEPROC glad_glFrontFace = NULL; +PFNGLFRUSTUMPROC glad_glFrustum = NULL; +PFNGLGENBUFFERSPROC glad_glGenBuffers = NULL; +PFNGLGENFRAMEBUFFERSPROC glad_glGenFramebuffers = NULL; +PFNGLGENLISTSPROC glad_glGenLists = NULL; +PFNGLGENQUERIESPROC glad_glGenQueries = NULL; +PFNGLGENRENDERBUFFERSPROC glad_glGenRenderbuffers = NULL; +PFNGLGENTEXTURESPROC glad_glGenTextures = NULL; +PFNGLGENVERTEXARRAYSPROC glad_glGenVertexArrays = NULL; +PFNGLGENERATEMIPMAPPROC glad_glGenerateMipmap = NULL; +PFNGLGETACTIVEATTRIBPROC glad_glGetActiveAttrib = NULL; +PFNGLGETACTIVEUNIFORMPROC glad_glGetActiveUniform = NULL; +PFNGLGETATTACHEDSHADERSPROC glad_glGetAttachedShaders = NULL; +PFNGLGETATTRIBLOCATIONPROC glad_glGetAttribLocation = NULL; +PFNGLGETBOOLEANI_VPROC glad_glGetBooleani_v = NULL; +PFNGLGETBOOLEANVPROC glad_glGetBooleanv = NULL; +PFNGLGETBUFFERPARAMETERIVPROC glad_glGetBufferParameteriv = NULL; +PFNGLGETBUFFERPOINTERVPROC glad_glGetBufferPointerv = NULL; +PFNGLGETBUFFERSUBDATAPROC glad_glGetBufferSubData = NULL; +PFNGLGETCLIPPLANEPROC glad_glGetClipPlane = NULL; +PFNGLGETCOMPRESSEDTEXIMAGEPROC glad_glGetCompressedTexImage = NULL; +PFNGLGETDOUBLEVPROC glad_glGetDoublev = NULL; +PFNGLGETERRORPROC glad_glGetError = NULL; +PFNGLGETFLOATVPROC glad_glGetFloatv = NULL; +PFNGLGETFRAGDATALOCATIONPROC glad_glGetFragDataLocation = NULL; +PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetFramebufferAttachmentParameteriv = NULL; +PFNGLGETINTEGERI_VPROC glad_glGetIntegeri_v = NULL; +PFNGLGETINTEGERVPROC glad_glGetIntegerv = NULL; +PFNGLGETLIGHTFVPROC glad_glGetLightfv = NULL; +PFNGLGETLIGHTIVPROC glad_glGetLightiv = NULL; +PFNGLGETMAPDVPROC glad_glGetMapdv = NULL; +PFNGLGETMAPFVPROC glad_glGetMapfv = NULL; +PFNGLGETMAPIVPROC glad_glGetMapiv = NULL; +PFNGLGETMATERIALFVPROC glad_glGetMaterialfv = NULL; +PFNGLGETMATERIALIVPROC glad_glGetMaterialiv = NULL; +PFNGLGETPIXELMAPFVPROC glad_glGetPixelMapfv = NULL; +PFNGLGETPIXELMAPUIVPROC glad_glGetPixelMapuiv = NULL; +PFNGLGETPIXELMAPUSVPROC glad_glGetPixelMapusv = NULL; +PFNGLGETPOINTERVPROC glad_glGetPointerv = NULL; +PFNGLGETPOLYGONSTIPPLEPROC glad_glGetPolygonStipple = NULL; +PFNGLGETPROGRAMINFOLOGPROC glad_glGetProgramInfoLog = NULL; +PFNGLGETPROGRAMIVPROC glad_glGetProgramiv = NULL; +PFNGLGETQUERYOBJECTIVPROC glad_glGetQueryObjectiv = NULL; +PFNGLGETQUERYOBJECTUIVPROC glad_glGetQueryObjectuiv = NULL; +PFNGLGETQUERYIVPROC glad_glGetQueryiv = NULL; +PFNGLGETRENDERBUFFERPARAMETERIVPROC glad_glGetRenderbufferParameteriv = NULL; +PFNGLGETSHADERINFOLOGPROC glad_glGetShaderInfoLog = NULL; +PFNGLGETSHADERSOURCEPROC glad_glGetShaderSource = NULL; +PFNGLGETSHADERIVPROC glad_glGetShaderiv = NULL; +PFNGLGETSTRINGPROC glad_glGetString = NULL; +PFNGLGETSTRINGIPROC glad_glGetStringi = NULL; +PFNGLGETTEXENVFVPROC glad_glGetTexEnvfv = NULL; +PFNGLGETTEXENVIVPROC glad_glGetTexEnviv = NULL; +PFNGLGETTEXGENDVPROC glad_glGetTexGendv = NULL; +PFNGLGETTEXGENFVPROC glad_glGetTexGenfv = NULL; +PFNGLGETTEXGENIVPROC glad_glGetTexGeniv = NULL; +PFNGLGETTEXIMAGEPROC glad_glGetTexImage = NULL; +PFNGLGETTEXLEVELPARAMETERFVPROC glad_glGetTexLevelParameterfv = NULL; +PFNGLGETTEXLEVELPARAMETERIVPROC glad_glGetTexLevelParameteriv = NULL; +PFNGLGETTEXPARAMETERIIVPROC glad_glGetTexParameterIiv = NULL; +PFNGLGETTEXPARAMETERIUIVPROC glad_glGetTexParameterIuiv = NULL; +PFNGLGETTEXPARAMETERFVPROC glad_glGetTexParameterfv = NULL; +PFNGLGETTEXPARAMETERIVPROC glad_glGetTexParameteriv = NULL; +PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glad_glGetTransformFeedbackVarying = NULL; +PFNGLGETUNIFORMLOCATIONPROC glad_glGetUniformLocation = NULL; +PFNGLGETUNIFORMFVPROC glad_glGetUniformfv = NULL; +PFNGLGETUNIFORMIVPROC glad_glGetUniformiv = NULL; +PFNGLGETUNIFORMUIVPROC glad_glGetUniformuiv = NULL; +PFNGLGETVERTEXATTRIBIIVPROC glad_glGetVertexAttribIiv = NULL; +PFNGLGETVERTEXATTRIBIUIVPROC glad_glGetVertexAttribIuiv = NULL; +PFNGLGETVERTEXATTRIBPOINTERVPROC glad_glGetVertexAttribPointerv = NULL; +PFNGLGETVERTEXATTRIBDVPROC glad_glGetVertexAttribdv = NULL; +PFNGLGETVERTEXATTRIBFVPROC glad_glGetVertexAttribfv = NULL; +PFNGLGETVERTEXATTRIBIVPROC glad_glGetVertexAttribiv = NULL; +PFNGLHINTPROC glad_glHint = NULL; +PFNGLINDEXMASKPROC glad_glIndexMask = NULL; +PFNGLINDEXPOINTERPROC glad_glIndexPointer = NULL; +PFNGLINDEXDPROC glad_glIndexd = NULL; +PFNGLINDEXDVPROC glad_glIndexdv = NULL; +PFNGLINDEXFPROC glad_glIndexf = NULL; +PFNGLINDEXFVPROC glad_glIndexfv = NULL; +PFNGLINDEXIPROC glad_glIndexi = NULL; +PFNGLINDEXIVPROC glad_glIndexiv = NULL; +PFNGLINDEXSPROC glad_glIndexs = NULL; +PFNGLINDEXSVPROC glad_glIndexsv = NULL; +PFNGLINDEXUBPROC glad_glIndexub = NULL; +PFNGLINDEXUBVPROC glad_glIndexubv = NULL; +PFNGLINITNAMESPROC glad_glInitNames = NULL; +PFNGLINTERLEAVEDARRAYSPROC glad_glInterleavedArrays = NULL; +PFNGLISBUFFERPROC glad_glIsBuffer = NULL; +PFNGLISENABLEDPROC glad_glIsEnabled = NULL; +PFNGLISENABLEDIPROC glad_glIsEnabledi = NULL; +PFNGLISFRAMEBUFFERPROC glad_glIsFramebuffer = NULL; +PFNGLISLISTPROC glad_glIsList = NULL; +PFNGLISPROGRAMPROC glad_glIsProgram = NULL; +PFNGLISQUERYPROC glad_glIsQuery = NULL; +PFNGLISRENDERBUFFERPROC glad_glIsRenderbuffer = NULL; +PFNGLISSHADERPROC glad_glIsShader = NULL; +PFNGLISTEXTUREPROC glad_glIsTexture = NULL; +PFNGLISVERTEXARRAYPROC glad_glIsVertexArray = NULL; +PFNGLLIGHTMODELFPROC glad_glLightModelf = NULL; +PFNGLLIGHTMODELFVPROC glad_glLightModelfv = NULL; +PFNGLLIGHTMODELIPROC glad_glLightModeli = NULL; +PFNGLLIGHTMODELIVPROC glad_glLightModeliv = NULL; +PFNGLLIGHTFPROC glad_glLightf = NULL; +PFNGLLIGHTFVPROC glad_glLightfv = NULL; +PFNGLLIGHTIPROC glad_glLighti = NULL; +PFNGLLIGHTIVPROC glad_glLightiv = NULL; +PFNGLLINESTIPPLEPROC glad_glLineStipple = NULL; +PFNGLLINEWIDTHPROC glad_glLineWidth = NULL; +PFNGLLINKPROGRAMPROC glad_glLinkProgram = NULL; +PFNGLLISTBASEPROC glad_glListBase = NULL; +PFNGLLOADIDENTITYPROC glad_glLoadIdentity = NULL; +PFNGLLOADMATRIXDPROC glad_glLoadMatrixd = NULL; +PFNGLLOADMATRIXFPROC glad_glLoadMatrixf = NULL; +PFNGLLOADNAMEPROC glad_glLoadName = NULL; +PFNGLLOADTRANSPOSEMATRIXDPROC glad_glLoadTransposeMatrixd = NULL; +PFNGLLOADTRANSPOSEMATRIXFPROC glad_glLoadTransposeMatrixf = NULL; +PFNGLLOGICOPPROC glad_glLogicOp = NULL; +PFNGLMAP1DPROC glad_glMap1d = NULL; +PFNGLMAP1FPROC glad_glMap1f = NULL; +PFNGLMAP2DPROC glad_glMap2d = NULL; +PFNGLMAP2FPROC glad_glMap2f = NULL; +PFNGLMAPBUFFERPROC glad_glMapBuffer = NULL; +PFNGLMAPBUFFERRANGEPROC glad_glMapBufferRange = NULL; +PFNGLMAPGRID1DPROC glad_glMapGrid1d = NULL; +PFNGLMAPGRID1FPROC glad_glMapGrid1f = NULL; +PFNGLMAPGRID2DPROC glad_glMapGrid2d = NULL; +PFNGLMAPGRID2FPROC glad_glMapGrid2f = NULL; +PFNGLMATERIALFPROC glad_glMaterialf = NULL; +PFNGLMATERIALFVPROC glad_glMaterialfv = NULL; +PFNGLMATERIALIPROC glad_glMateriali = NULL; +PFNGLMATERIALIVPROC glad_glMaterialiv = NULL; +PFNGLMATRIXMODEPROC glad_glMatrixMode = NULL; +PFNGLMULTMATRIXDPROC glad_glMultMatrixd = NULL; +PFNGLMULTMATRIXFPROC glad_glMultMatrixf = NULL; +PFNGLMULTTRANSPOSEMATRIXDPROC glad_glMultTransposeMatrixd = NULL; +PFNGLMULTTRANSPOSEMATRIXFPROC glad_glMultTransposeMatrixf = NULL; +PFNGLMULTIDRAWARRAYSPROC glad_glMultiDrawArrays = NULL; +PFNGLMULTIDRAWELEMENTSPROC glad_glMultiDrawElements = NULL; +PFNGLMULTITEXCOORD1DPROC glad_glMultiTexCoord1d = NULL; +PFNGLMULTITEXCOORD1DVPROC glad_glMultiTexCoord1dv = NULL; +PFNGLMULTITEXCOORD1FPROC glad_glMultiTexCoord1f = NULL; +PFNGLMULTITEXCOORD1FVPROC glad_glMultiTexCoord1fv = NULL; +PFNGLMULTITEXCOORD1IPROC glad_glMultiTexCoord1i = NULL; +PFNGLMULTITEXCOORD1IVPROC glad_glMultiTexCoord1iv = NULL; +PFNGLMULTITEXCOORD1SPROC glad_glMultiTexCoord1s = NULL; +PFNGLMULTITEXCOORD1SVPROC glad_glMultiTexCoord1sv = NULL; +PFNGLMULTITEXCOORD2DPROC glad_glMultiTexCoord2d = NULL; +PFNGLMULTITEXCOORD2DVPROC glad_glMultiTexCoord2dv = NULL; +PFNGLMULTITEXCOORD2FPROC glad_glMultiTexCoord2f = NULL; +PFNGLMULTITEXCOORD2FVPROC glad_glMultiTexCoord2fv = NULL; +PFNGLMULTITEXCOORD2IPROC glad_glMultiTexCoord2i = NULL; +PFNGLMULTITEXCOORD2IVPROC glad_glMultiTexCoord2iv = NULL; +PFNGLMULTITEXCOORD2SPROC glad_glMultiTexCoord2s = NULL; +PFNGLMULTITEXCOORD2SVPROC glad_glMultiTexCoord2sv = NULL; +PFNGLMULTITEXCOORD3DPROC glad_glMultiTexCoord3d = NULL; +PFNGLMULTITEXCOORD3DVPROC glad_glMultiTexCoord3dv = NULL; +PFNGLMULTITEXCOORD3FPROC glad_glMultiTexCoord3f = NULL; +PFNGLMULTITEXCOORD3FVPROC glad_glMultiTexCoord3fv = NULL; +PFNGLMULTITEXCOORD3IPROC glad_glMultiTexCoord3i = NULL; +PFNGLMULTITEXCOORD3IVPROC glad_glMultiTexCoord3iv = NULL; +PFNGLMULTITEXCOORD3SPROC glad_glMultiTexCoord3s = NULL; +PFNGLMULTITEXCOORD3SVPROC glad_glMultiTexCoord3sv = NULL; +PFNGLMULTITEXCOORD4DPROC glad_glMultiTexCoord4d = NULL; +PFNGLMULTITEXCOORD4DVPROC glad_glMultiTexCoord4dv = NULL; +PFNGLMULTITEXCOORD4FPROC glad_glMultiTexCoord4f = NULL; +PFNGLMULTITEXCOORD4FVPROC glad_glMultiTexCoord4fv = NULL; +PFNGLMULTITEXCOORD4IPROC glad_glMultiTexCoord4i = NULL; +PFNGLMULTITEXCOORD4IVPROC glad_glMultiTexCoord4iv = NULL; +PFNGLMULTITEXCOORD4SPROC glad_glMultiTexCoord4s = NULL; +PFNGLMULTITEXCOORD4SVPROC glad_glMultiTexCoord4sv = NULL; +PFNGLNEWLISTPROC glad_glNewList = NULL; +PFNGLNORMAL3BPROC glad_glNormal3b = NULL; +PFNGLNORMAL3BVPROC glad_glNormal3bv = NULL; +PFNGLNORMAL3DPROC glad_glNormal3d = NULL; +PFNGLNORMAL3DVPROC glad_glNormal3dv = NULL; +PFNGLNORMAL3FPROC glad_glNormal3f = NULL; +PFNGLNORMAL3FVPROC glad_glNormal3fv = NULL; +PFNGLNORMAL3IPROC glad_glNormal3i = NULL; +PFNGLNORMAL3IVPROC glad_glNormal3iv = NULL; +PFNGLNORMAL3SPROC glad_glNormal3s = NULL; +PFNGLNORMAL3SVPROC glad_glNormal3sv = NULL; +PFNGLNORMALPOINTERPROC glad_glNormalPointer = NULL; +PFNGLORTHOPROC glad_glOrtho = NULL; +PFNGLPASSTHROUGHPROC glad_glPassThrough = NULL; +PFNGLPIXELMAPFVPROC glad_glPixelMapfv = NULL; +PFNGLPIXELMAPUIVPROC glad_glPixelMapuiv = NULL; +PFNGLPIXELMAPUSVPROC glad_glPixelMapusv = NULL; +PFNGLPIXELSTOREFPROC glad_glPixelStoref = NULL; +PFNGLPIXELSTOREIPROC glad_glPixelStorei = NULL; +PFNGLPIXELTRANSFERFPROC glad_glPixelTransferf = NULL; +PFNGLPIXELTRANSFERIPROC glad_glPixelTransferi = NULL; +PFNGLPIXELZOOMPROC glad_glPixelZoom = NULL; +PFNGLPOINTPARAMETERFPROC glad_glPointParameterf = NULL; +PFNGLPOINTPARAMETERFVPROC glad_glPointParameterfv = NULL; +PFNGLPOINTPARAMETERIPROC glad_glPointParameteri = NULL; +PFNGLPOINTPARAMETERIVPROC glad_glPointParameteriv = NULL; +PFNGLPOINTSIZEPROC glad_glPointSize = NULL; +PFNGLPOLYGONMODEPROC glad_glPolygonMode = NULL; +PFNGLPOLYGONOFFSETPROC glad_glPolygonOffset = NULL; +PFNGLPOLYGONSTIPPLEPROC glad_glPolygonStipple = NULL; +PFNGLPOPATTRIBPROC glad_glPopAttrib = NULL; +PFNGLPOPCLIENTATTRIBPROC glad_glPopClientAttrib = NULL; +PFNGLPOPMATRIXPROC glad_glPopMatrix = NULL; +PFNGLPOPNAMEPROC glad_glPopName = NULL; +PFNGLPRIORITIZETEXTURESPROC glad_glPrioritizeTextures = NULL; +PFNGLPUSHATTRIBPROC glad_glPushAttrib = NULL; +PFNGLPUSHCLIENTATTRIBPROC glad_glPushClientAttrib = NULL; +PFNGLPUSHMATRIXPROC glad_glPushMatrix = NULL; +PFNGLPUSHNAMEPROC glad_glPushName = NULL; +PFNGLRASTERPOS2DPROC glad_glRasterPos2d = NULL; +PFNGLRASTERPOS2DVPROC glad_glRasterPos2dv = NULL; +PFNGLRASTERPOS2FPROC glad_glRasterPos2f = NULL; +PFNGLRASTERPOS2FVPROC glad_glRasterPos2fv = NULL; +PFNGLRASTERPOS2IPROC glad_glRasterPos2i = NULL; +PFNGLRASTERPOS2IVPROC glad_glRasterPos2iv = NULL; +PFNGLRASTERPOS2SPROC glad_glRasterPos2s = NULL; +PFNGLRASTERPOS2SVPROC glad_glRasterPos2sv = NULL; +PFNGLRASTERPOS3DPROC glad_glRasterPos3d = NULL; +PFNGLRASTERPOS3DVPROC glad_glRasterPos3dv = NULL; +PFNGLRASTERPOS3FPROC glad_glRasterPos3f = NULL; +PFNGLRASTERPOS3FVPROC glad_glRasterPos3fv = NULL; +PFNGLRASTERPOS3IPROC glad_glRasterPos3i = NULL; +PFNGLRASTERPOS3IVPROC glad_glRasterPos3iv = NULL; +PFNGLRASTERPOS3SPROC glad_glRasterPos3s = NULL; +PFNGLRASTERPOS3SVPROC glad_glRasterPos3sv = NULL; +PFNGLRASTERPOS4DPROC glad_glRasterPos4d = NULL; +PFNGLRASTERPOS4DVPROC glad_glRasterPos4dv = NULL; +PFNGLRASTERPOS4FPROC glad_glRasterPos4f = NULL; +PFNGLRASTERPOS4FVPROC glad_glRasterPos4fv = NULL; +PFNGLRASTERPOS4IPROC glad_glRasterPos4i = NULL; +PFNGLRASTERPOS4IVPROC glad_glRasterPos4iv = NULL; +PFNGLRASTERPOS4SPROC glad_glRasterPos4s = NULL; +PFNGLRASTERPOS4SVPROC glad_glRasterPos4sv = NULL; +PFNGLREADBUFFERPROC glad_glReadBuffer = NULL; +PFNGLREADPIXELSPROC glad_glReadPixels = NULL; +PFNGLRECTDPROC glad_glRectd = NULL; +PFNGLRECTDVPROC glad_glRectdv = NULL; +PFNGLRECTFPROC glad_glRectf = NULL; +PFNGLRECTFVPROC glad_glRectfv = NULL; +PFNGLRECTIPROC glad_glRecti = NULL; +PFNGLRECTIVPROC glad_glRectiv = NULL; +PFNGLRECTSPROC glad_glRects = NULL; +PFNGLRECTSVPROC glad_glRectsv = NULL; +PFNGLRENDERMODEPROC glad_glRenderMode = NULL; +PFNGLRENDERBUFFERSTORAGEPROC glad_glRenderbufferStorage = NULL; +PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glRenderbufferStorageMultisample = NULL; +PFNGLROTATEDPROC glad_glRotated = NULL; +PFNGLROTATEFPROC glad_glRotatef = NULL; +PFNGLSAMPLECOVERAGEPROC glad_glSampleCoverage = NULL; +PFNGLSCALEDPROC glad_glScaled = NULL; +PFNGLSCALEFPROC glad_glScalef = NULL; +PFNGLSCISSORPROC glad_glScissor = NULL; +PFNGLSECONDARYCOLOR3BPROC glad_glSecondaryColor3b = NULL; +PFNGLSECONDARYCOLOR3BVPROC glad_glSecondaryColor3bv = NULL; +PFNGLSECONDARYCOLOR3DPROC glad_glSecondaryColor3d = NULL; +PFNGLSECONDARYCOLOR3DVPROC glad_glSecondaryColor3dv = NULL; +PFNGLSECONDARYCOLOR3FPROC glad_glSecondaryColor3f = NULL; +PFNGLSECONDARYCOLOR3FVPROC glad_glSecondaryColor3fv = NULL; +PFNGLSECONDARYCOLOR3IPROC glad_glSecondaryColor3i = NULL; +PFNGLSECONDARYCOLOR3IVPROC glad_glSecondaryColor3iv = NULL; +PFNGLSECONDARYCOLOR3SPROC glad_glSecondaryColor3s = NULL; +PFNGLSECONDARYCOLOR3SVPROC glad_glSecondaryColor3sv = NULL; +PFNGLSECONDARYCOLOR3UBPROC glad_glSecondaryColor3ub = NULL; +PFNGLSECONDARYCOLOR3UBVPROC glad_glSecondaryColor3ubv = NULL; +PFNGLSECONDARYCOLOR3UIPROC glad_glSecondaryColor3ui = NULL; +PFNGLSECONDARYCOLOR3UIVPROC glad_glSecondaryColor3uiv = NULL; +PFNGLSECONDARYCOLOR3USPROC glad_glSecondaryColor3us = NULL; +PFNGLSECONDARYCOLOR3USVPROC glad_glSecondaryColor3usv = NULL; +PFNGLSECONDARYCOLORPOINTERPROC glad_glSecondaryColorPointer = NULL; +PFNGLSELECTBUFFERPROC glad_glSelectBuffer = NULL; +PFNGLSHADEMODELPROC glad_glShadeModel = NULL; +PFNGLSHADERSOURCEPROC glad_glShaderSource = NULL; +PFNGLSTENCILFUNCPROC glad_glStencilFunc = NULL; +PFNGLSTENCILFUNCSEPARATEPROC glad_glStencilFuncSeparate = NULL; +PFNGLSTENCILMASKPROC glad_glStencilMask = NULL; +PFNGLSTENCILMASKSEPARATEPROC glad_glStencilMaskSeparate = NULL; +PFNGLSTENCILOPPROC glad_glStencilOp = NULL; +PFNGLSTENCILOPSEPARATEPROC glad_glStencilOpSeparate = NULL; +PFNGLTEXCOORD1DPROC glad_glTexCoord1d = NULL; +PFNGLTEXCOORD1DVPROC glad_glTexCoord1dv = NULL; +PFNGLTEXCOORD1FPROC glad_glTexCoord1f = NULL; +PFNGLTEXCOORD1FVPROC glad_glTexCoord1fv = NULL; +PFNGLTEXCOORD1IPROC glad_glTexCoord1i = NULL; +PFNGLTEXCOORD1IVPROC glad_glTexCoord1iv = NULL; +PFNGLTEXCOORD1SPROC glad_glTexCoord1s = NULL; +PFNGLTEXCOORD1SVPROC glad_glTexCoord1sv = NULL; +PFNGLTEXCOORD2DPROC glad_glTexCoord2d = NULL; +PFNGLTEXCOORD2DVPROC glad_glTexCoord2dv = NULL; +PFNGLTEXCOORD2FPROC glad_glTexCoord2f = NULL; +PFNGLTEXCOORD2FVPROC glad_glTexCoord2fv = NULL; +PFNGLTEXCOORD2IPROC glad_glTexCoord2i = NULL; +PFNGLTEXCOORD2IVPROC glad_glTexCoord2iv = NULL; +PFNGLTEXCOORD2SPROC glad_glTexCoord2s = NULL; +PFNGLTEXCOORD2SVPROC glad_glTexCoord2sv = NULL; +PFNGLTEXCOORD3DPROC glad_glTexCoord3d = NULL; +PFNGLTEXCOORD3DVPROC glad_glTexCoord3dv = NULL; +PFNGLTEXCOORD3FPROC glad_glTexCoord3f = NULL; +PFNGLTEXCOORD3FVPROC glad_glTexCoord3fv = NULL; +PFNGLTEXCOORD3IPROC glad_glTexCoord3i = NULL; +PFNGLTEXCOORD3IVPROC glad_glTexCoord3iv = NULL; +PFNGLTEXCOORD3SPROC glad_glTexCoord3s = NULL; +PFNGLTEXCOORD3SVPROC glad_glTexCoord3sv = NULL; +PFNGLTEXCOORD4DPROC glad_glTexCoord4d = NULL; +PFNGLTEXCOORD4DVPROC glad_glTexCoord4dv = NULL; +PFNGLTEXCOORD4FPROC glad_glTexCoord4f = NULL; +PFNGLTEXCOORD4FVPROC glad_glTexCoord4fv = NULL; +PFNGLTEXCOORD4IPROC glad_glTexCoord4i = NULL; +PFNGLTEXCOORD4IVPROC glad_glTexCoord4iv = NULL; +PFNGLTEXCOORD4SPROC glad_glTexCoord4s = NULL; +PFNGLTEXCOORD4SVPROC glad_glTexCoord4sv = NULL; +PFNGLTEXCOORDPOINTERPROC glad_glTexCoordPointer = NULL; +PFNGLTEXENVFPROC glad_glTexEnvf = NULL; +PFNGLTEXENVFVPROC glad_glTexEnvfv = NULL; +PFNGLTEXENVIPROC glad_glTexEnvi = NULL; +PFNGLTEXENVIVPROC glad_glTexEnviv = NULL; +PFNGLTEXGENDPROC glad_glTexGend = NULL; +PFNGLTEXGENDVPROC glad_glTexGendv = NULL; +PFNGLTEXGENFPROC glad_glTexGenf = NULL; +PFNGLTEXGENFVPROC glad_glTexGenfv = NULL; +PFNGLTEXGENIPROC glad_glTexGeni = NULL; +PFNGLTEXGENIVPROC glad_glTexGeniv = NULL; +PFNGLTEXIMAGE1DPROC glad_glTexImage1D = NULL; +PFNGLTEXIMAGE2DPROC glad_glTexImage2D = NULL; +PFNGLTEXIMAGE3DPROC glad_glTexImage3D = NULL; +PFNGLTEXPARAMETERIIVPROC glad_glTexParameterIiv = NULL; +PFNGLTEXPARAMETERIUIVPROC glad_glTexParameterIuiv = NULL; +PFNGLTEXPARAMETERFPROC glad_glTexParameterf = NULL; +PFNGLTEXPARAMETERFVPROC glad_glTexParameterfv = NULL; +PFNGLTEXPARAMETERIPROC glad_glTexParameteri = NULL; +PFNGLTEXPARAMETERIVPROC glad_glTexParameteriv = NULL; +PFNGLTEXSUBIMAGE1DPROC glad_glTexSubImage1D = NULL; +PFNGLTEXSUBIMAGE2DPROC glad_glTexSubImage2D = NULL; +PFNGLTEXSUBIMAGE3DPROC glad_glTexSubImage3D = NULL; +PFNGLTRANSFORMFEEDBACKVARYINGSPROC glad_glTransformFeedbackVaryings = NULL; +PFNGLTRANSLATEDPROC glad_glTranslated = NULL; +PFNGLTRANSLATEFPROC glad_glTranslatef = NULL; +PFNGLUNIFORM1FPROC glad_glUniform1f = NULL; +PFNGLUNIFORM1FVPROC glad_glUniform1fv = NULL; +PFNGLUNIFORM1IPROC glad_glUniform1i = NULL; +PFNGLUNIFORM1IVPROC glad_glUniform1iv = NULL; +PFNGLUNIFORM1UIPROC glad_glUniform1ui = NULL; +PFNGLUNIFORM1UIVPROC glad_glUniform1uiv = NULL; +PFNGLUNIFORM2FPROC glad_glUniform2f = NULL; +PFNGLUNIFORM2FVPROC glad_glUniform2fv = NULL; +PFNGLUNIFORM2IPROC glad_glUniform2i = NULL; +PFNGLUNIFORM2IVPROC glad_glUniform2iv = NULL; +PFNGLUNIFORM2UIPROC glad_glUniform2ui = NULL; +PFNGLUNIFORM2UIVPROC glad_glUniform2uiv = NULL; +PFNGLUNIFORM3FPROC glad_glUniform3f = NULL; +PFNGLUNIFORM3FVPROC glad_glUniform3fv = NULL; +PFNGLUNIFORM3IPROC glad_glUniform3i = NULL; +PFNGLUNIFORM3IVPROC glad_glUniform3iv = NULL; +PFNGLUNIFORM3UIPROC glad_glUniform3ui = NULL; +PFNGLUNIFORM3UIVPROC glad_glUniform3uiv = NULL; +PFNGLUNIFORM4FPROC glad_glUniform4f = NULL; +PFNGLUNIFORM4FVPROC glad_glUniform4fv = NULL; +PFNGLUNIFORM4IPROC glad_glUniform4i = NULL; +PFNGLUNIFORM4IVPROC glad_glUniform4iv = NULL; +PFNGLUNIFORM4UIPROC glad_glUniform4ui = NULL; +PFNGLUNIFORM4UIVPROC glad_glUniform4uiv = NULL; +PFNGLUNIFORMMATRIX2FVPROC glad_glUniformMatrix2fv = NULL; +PFNGLUNIFORMMATRIX2X3FVPROC glad_glUniformMatrix2x3fv = NULL; +PFNGLUNIFORMMATRIX2X4FVPROC glad_glUniformMatrix2x4fv = NULL; +PFNGLUNIFORMMATRIX3FVPROC glad_glUniformMatrix3fv = NULL; +PFNGLUNIFORMMATRIX3X2FVPROC glad_glUniformMatrix3x2fv = NULL; +PFNGLUNIFORMMATRIX3X4FVPROC glad_glUniformMatrix3x4fv = NULL; +PFNGLUNIFORMMATRIX4FVPROC glad_glUniformMatrix4fv = NULL; +PFNGLUNIFORMMATRIX4X2FVPROC glad_glUniformMatrix4x2fv = NULL; +PFNGLUNIFORMMATRIX4X3FVPROC glad_glUniformMatrix4x3fv = NULL; +PFNGLUNMAPBUFFERPROC glad_glUnmapBuffer = NULL; +PFNGLUSEPROGRAMPROC glad_glUseProgram = NULL; +PFNGLVALIDATEPROGRAMPROC glad_glValidateProgram = NULL; +PFNGLVERTEX2DPROC glad_glVertex2d = NULL; +PFNGLVERTEX2DVPROC glad_glVertex2dv = NULL; +PFNGLVERTEX2FPROC glad_glVertex2f = NULL; +PFNGLVERTEX2FVPROC glad_glVertex2fv = NULL; +PFNGLVERTEX2IPROC glad_glVertex2i = NULL; +PFNGLVERTEX2IVPROC glad_glVertex2iv = NULL; +PFNGLVERTEX2SPROC glad_glVertex2s = NULL; +PFNGLVERTEX2SVPROC glad_glVertex2sv = NULL; +PFNGLVERTEX3DPROC glad_glVertex3d = NULL; +PFNGLVERTEX3DVPROC glad_glVertex3dv = NULL; +PFNGLVERTEX3FPROC glad_glVertex3f = NULL; +PFNGLVERTEX3FVPROC glad_glVertex3fv = NULL; +PFNGLVERTEX3IPROC glad_glVertex3i = NULL; +PFNGLVERTEX3IVPROC glad_glVertex3iv = NULL; +PFNGLVERTEX3SPROC glad_glVertex3s = NULL; +PFNGLVERTEX3SVPROC glad_glVertex3sv = NULL; +PFNGLVERTEX4DPROC glad_glVertex4d = NULL; +PFNGLVERTEX4DVPROC glad_glVertex4dv = NULL; +PFNGLVERTEX4FPROC glad_glVertex4f = NULL; +PFNGLVERTEX4FVPROC glad_glVertex4fv = NULL; +PFNGLVERTEX4IPROC glad_glVertex4i = NULL; +PFNGLVERTEX4IVPROC glad_glVertex4iv = NULL; +PFNGLVERTEX4SPROC glad_glVertex4s = NULL; +PFNGLVERTEX4SVPROC glad_glVertex4sv = NULL; +PFNGLVERTEXATTRIB1DPROC glad_glVertexAttrib1d = NULL; +PFNGLVERTEXATTRIB1DVPROC glad_glVertexAttrib1dv = NULL; +PFNGLVERTEXATTRIB1FPROC glad_glVertexAttrib1f = NULL; +PFNGLVERTEXATTRIB1FVPROC glad_glVertexAttrib1fv = NULL; +PFNGLVERTEXATTRIB1SPROC glad_glVertexAttrib1s = NULL; +PFNGLVERTEXATTRIB1SVPROC glad_glVertexAttrib1sv = NULL; +PFNGLVERTEXATTRIB2DPROC glad_glVertexAttrib2d = NULL; +PFNGLVERTEXATTRIB2DVPROC glad_glVertexAttrib2dv = NULL; +PFNGLVERTEXATTRIB2FPROC glad_glVertexAttrib2f = NULL; +PFNGLVERTEXATTRIB2FVPROC glad_glVertexAttrib2fv = NULL; +PFNGLVERTEXATTRIB2SPROC glad_glVertexAttrib2s = NULL; +PFNGLVERTEXATTRIB2SVPROC glad_glVertexAttrib2sv = NULL; +PFNGLVERTEXATTRIB3DPROC glad_glVertexAttrib3d = NULL; +PFNGLVERTEXATTRIB3DVPROC glad_glVertexAttrib3dv = NULL; +PFNGLVERTEXATTRIB3FPROC glad_glVertexAttrib3f = NULL; +PFNGLVERTEXATTRIB3FVPROC glad_glVertexAttrib3fv = NULL; +PFNGLVERTEXATTRIB3SPROC glad_glVertexAttrib3s = NULL; +PFNGLVERTEXATTRIB3SVPROC glad_glVertexAttrib3sv = NULL; +PFNGLVERTEXATTRIB4NBVPROC glad_glVertexAttrib4Nbv = NULL; +PFNGLVERTEXATTRIB4NIVPROC glad_glVertexAttrib4Niv = NULL; +PFNGLVERTEXATTRIB4NSVPROC glad_glVertexAttrib4Nsv = NULL; +PFNGLVERTEXATTRIB4NUBPROC glad_glVertexAttrib4Nub = NULL; +PFNGLVERTEXATTRIB4NUBVPROC glad_glVertexAttrib4Nubv = NULL; +PFNGLVERTEXATTRIB4NUIVPROC glad_glVertexAttrib4Nuiv = NULL; +PFNGLVERTEXATTRIB4NUSVPROC glad_glVertexAttrib4Nusv = NULL; +PFNGLVERTEXATTRIB4BVPROC glad_glVertexAttrib4bv = NULL; +PFNGLVERTEXATTRIB4DPROC glad_glVertexAttrib4d = NULL; +PFNGLVERTEXATTRIB4DVPROC glad_glVertexAttrib4dv = NULL; +PFNGLVERTEXATTRIB4FPROC glad_glVertexAttrib4f = NULL; +PFNGLVERTEXATTRIB4FVPROC glad_glVertexAttrib4fv = NULL; +PFNGLVERTEXATTRIB4IVPROC glad_glVertexAttrib4iv = NULL; +PFNGLVERTEXATTRIB4SPROC glad_glVertexAttrib4s = NULL; +PFNGLVERTEXATTRIB4SVPROC glad_glVertexAttrib4sv = NULL; +PFNGLVERTEXATTRIB4UBVPROC glad_glVertexAttrib4ubv = NULL; +PFNGLVERTEXATTRIB4UIVPROC glad_glVertexAttrib4uiv = NULL; +PFNGLVERTEXATTRIB4USVPROC glad_glVertexAttrib4usv = NULL; +PFNGLVERTEXATTRIBI1IPROC glad_glVertexAttribI1i = NULL; +PFNGLVERTEXATTRIBI1IVPROC glad_glVertexAttribI1iv = NULL; +PFNGLVERTEXATTRIBI1UIPROC glad_glVertexAttribI1ui = NULL; +PFNGLVERTEXATTRIBI1UIVPROC glad_glVertexAttribI1uiv = NULL; +PFNGLVERTEXATTRIBI2IPROC glad_glVertexAttribI2i = NULL; +PFNGLVERTEXATTRIBI2IVPROC glad_glVertexAttribI2iv = NULL; +PFNGLVERTEXATTRIBI2UIPROC glad_glVertexAttribI2ui = NULL; +PFNGLVERTEXATTRIBI2UIVPROC glad_glVertexAttribI2uiv = NULL; +PFNGLVERTEXATTRIBI3IPROC glad_glVertexAttribI3i = NULL; +PFNGLVERTEXATTRIBI3IVPROC glad_glVertexAttribI3iv = NULL; +PFNGLVERTEXATTRIBI3UIPROC glad_glVertexAttribI3ui = NULL; +PFNGLVERTEXATTRIBI3UIVPROC glad_glVertexAttribI3uiv = NULL; +PFNGLVERTEXATTRIBI4BVPROC glad_glVertexAttribI4bv = NULL; +PFNGLVERTEXATTRIBI4IPROC glad_glVertexAttribI4i = NULL; +PFNGLVERTEXATTRIBI4IVPROC glad_glVertexAttribI4iv = NULL; +PFNGLVERTEXATTRIBI4SVPROC glad_glVertexAttribI4sv = NULL; +PFNGLVERTEXATTRIBI4UBVPROC glad_glVertexAttribI4ubv = NULL; +PFNGLVERTEXATTRIBI4UIPROC glad_glVertexAttribI4ui = NULL; +PFNGLVERTEXATTRIBI4UIVPROC glad_glVertexAttribI4uiv = NULL; +PFNGLVERTEXATTRIBI4USVPROC glad_glVertexAttribI4usv = NULL; +PFNGLVERTEXATTRIBIPOINTERPROC glad_glVertexAttribIPointer = NULL; +PFNGLVERTEXATTRIBPOINTERPROC glad_glVertexAttribPointer = NULL; +PFNGLVERTEXPOINTERPROC glad_glVertexPointer = NULL; +PFNGLVIEWPORTPROC glad_glViewport = NULL; +PFNGLWINDOWPOS2DPROC glad_glWindowPos2d = NULL; +PFNGLWINDOWPOS2DVPROC glad_glWindowPos2dv = NULL; +PFNGLWINDOWPOS2FPROC glad_glWindowPos2f = NULL; +PFNGLWINDOWPOS2FVPROC glad_glWindowPos2fv = NULL; +PFNGLWINDOWPOS2IPROC glad_glWindowPos2i = NULL; +PFNGLWINDOWPOS2IVPROC glad_glWindowPos2iv = NULL; +PFNGLWINDOWPOS2SPROC glad_glWindowPos2s = NULL; +PFNGLWINDOWPOS2SVPROC glad_glWindowPos2sv = NULL; +PFNGLWINDOWPOS3DPROC glad_glWindowPos3d = NULL; +PFNGLWINDOWPOS3DVPROC glad_glWindowPos3dv = NULL; +PFNGLWINDOWPOS3FPROC glad_glWindowPos3f = NULL; +PFNGLWINDOWPOS3FVPROC glad_glWindowPos3fv = NULL; +PFNGLWINDOWPOS3IPROC glad_glWindowPos3i = NULL; +PFNGLWINDOWPOS3IVPROC glad_glWindowPos3iv = NULL; +PFNGLWINDOWPOS3SPROC glad_glWindowPos3s = NULL; +PFNGLWINDOWPOS3SVPROC glad_glWindowPos3sv = NULL; + + +static void glad_gl_load_GL_VERSION_1_0( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_VERSION_1_0) return; + glad_glAccum = (PFNGLACCUMPROC) load(userptr, "glAccum"); + glad_glAlphaFunc = (PFNGLALPHAFUNCPROC) load(userptr, "glAlphaFunc"); + glad_glBegin = (PFNGLBEGINPROC) load(userptr, "glBegin"); + glad_glBitmap = (PFNGLBITMAPPROC) load(userptr, "glBitmap"); + glad_glBlendFunc = (PFNGLBLENDFUNCPROC) load(userptr, "glBlendFunc"); + glad_glCallList = (PFNGLCALLLISTPROC) load(userptr, "glCallList"); + glad_glCallLists = (PFNGLCALLLISTSPROC) load(userptr, "glCallLists"); + glad_glClear = (PFNGLCLEARPROC) load(userptr, "glClear"); + glad_glClearAccum = (PFNGLCLEARACCUMPROC) load(userptr, "glClearAccum"); + glad_glClearColor = (PFNGLCLEARCOLORPROC) load(userptr, "glClearColor"); + glad_glClearDepth = (PFNGLCLEARDEPTHPROC) load(userptr, "glClearDepth"); + glad_glClearIndex = (PFNGLCLEARINDEXPROC) load(userptr, "glClearIndex"); + glad_glClearStencil = (PFNGLCLEARSTENCILPROC) load(userptr, "glClearStencil"); + glad_glClipPlane = (PFNGLCLIPPLANEPROC) load(userptr, "glClipPlane"); + glad_glColor3b = (PFNGLCOLOR3BPROC) load(userptr, "glColor3b"); + glad_glColor3bv = (PFNGLCOLOR3BVPROC) load(userptr, "glColor3bv"); + glad_glColor3d = (PFNGLCOLOR3DPROC) load(userptr, "glColor3d"); + glad_glColor3dv = (PFNGLCOLOR3DVPROC) load(userptr, "glColor3dv"); + glad_glColor3f = (PFNGLCOLOR3FPROC) load(userptr, "glColor3f"); + glad_glColor3fv = (PFNGLCOLOR3FVPROC) load(userptr, "glColor3fv"); + glad_glColor3i = (PFNGLCOLOR3IPROC) load(userptr, "glColor3i"); + glad_glColor3iv = (PFNGLCOLOR3IVPROC) load(userptr, "glColor3iv"); + glad_glColor3s = (PFNGLCOLOR3SPROC) load(userptr, "glColor3s"); + glad_glColor3sv = (PFNGLCOLOR3SVPROC) load(userptr, "glColor3sv"); + glad_glColor3ub = (PFNGLCOLOR3UBPROC) load(userptr, "glColor3ub"); + glad_glColor3ubv = (PFNGLCOLOR3UBVPROC) load(userptr, "glColor3ubv"); + glad_glColor3ui = (PFNGLCOLOR3UIPROC) load(userptr, "glColor3ui"); + glad_glColor3uiv = (PFNGLCOLOR3UIVPROC) load(userptr, "glColor3uiv"); + glad_glColor3us = (PFNGLCOLOR3USPROC) load(userptr, "glColor3us"); + glad_glColor3usv = (PFNGLCOLOR3USVPROC) load(userptr, "glColor3usv"); + glad_glColor4b = (PFNGLCOLOR4BPROC) load(userptr, "glColor4b"); + glad_glColor4bv = (PFNGLCOLOR4BVPROC) load(userptr, "glColor4bv"); + glad_glColor4d = (PFNGLCOLOR4DPROC) load(userptr, "glColor4d"); + glad_glColor4dv = (PFNGLCOLOR4DVPROC) load(userptr, "glColor4dv"); + glad_glColor4f = (PFNGLCOLOR4FPROC) load(userptr, "glColor4f"); + glad_glColor4fv = (PFNGLCOLOR4FVPROC) load(userptr, "glColor4fv"); + glad_glColor4i = (PFNGLCOLOR4IPROC) load(userptr, "glColor4i"); + glad_glColor4iv = (PFNGLCOLOR4IVPROC) load(userptr, "glColor4iv"); + glad_glColor4s = (PFNGLCOLOR4SPROC) load(userptr, "glColor4s"); + glad_glColor4sv = (PFNGLCOLOR4SVPROC) load(userptr, "glColor4sv"); + glad_glColor4ub = (PFNGLCOLOR4UBPROC) load(userptr, "glColor4ub"); + glad_glColor4ubv = (PFNGLCOLOR4UBVPROC) load(userptr, "glColor4ubv"); + glad_glColor4ui = (PFNGLCOLOR4UIPROC) load(userptr, "glColor4ui"); + glad_glColor4uiv = (PFNGLCOLOR4UIVPROC) load(userptr, "glColor4uiv"); + glad_glColor4us = (PFNGLCOLOR4USPROC) load(userptr, "glColor4us"); + glad_glColor4usv = (PFNGLCOLOR4USVPROC) load(userptr, "glColor4usv"); + glad_glColorMask = (PFNGLCOLORMASKPROC) load(userptr, "glColorMask"); + glad_glColorMaterial = (PFNGLCOLORMATERIALPROC) load(userptr, "glColorMaterial"); + glad_glCopyPixels = (PFNGLCOPYPIXELSPROC) load(userptr, "glCopyPixels"); + glad_glCullFace = (PFNGLCULLFACEPROC) load(userptr, "glCullFace"); + glad_glDeleteLists = (PFNGLDELETELISTSPROC) load(userptr, "glDeleteLists"); + glad_glDepthFunc = (PFNGLDEPTHFUNCPROC) load(userptr, "glDepthFunc"); + glad_glDepthMask = (PFNGLDEPTHMASKPROC) load(userptr, "glDepthMask"); + glad_glDepthRange = (PFNGLDEPTHRANGEPROC) load(userptr, "glDepthRange"); + glad_glDisable = (PFNGLDISABLEPROC) load(userptr, "glDisable"); + glad_glDrawBuffer = (PFNGLDRAWBUFFERPROC) load(userptr, "glDrawBuffer"); + glad_glDrawPixels = (PFNGLDRAWPIXELSPROC) load(userptr, "glDrawPixels"); + glad_glEdgeFlag = (PFNGLEDGEFLAGPROC) load(userptr, "glEdgeFlag"); + glad_glEdgeFlagv = (PFNGLEDGEFLAGVPROC) load(userptr, "glEdgeFlagv"); + glad_glEnable = (PFNGLENABLEPROC) load(userptr, "glEnable"); + glad_glEnd = (PFNGLENDPROC) load(userptr, "glEnd"); + glad_glEndList = (PFNGLENDLISTPROC) load(userptr, "glEndList"); + glad_glEvalCoord1d = (PFNGLEVALCOORD1DPROC) load(userptr, "glEvalCoord1d"); + glad_glEvalCoord1dv = (PFNGLEVALCOORD1DVPROC) load(userptr, "glEvalCoord1dv"); + glad_glEvalCoord1f = (PFNGLEVALCOORD1FPROC) load(userptr, "glEvalCoord1f"); + glad_glEvalCoord1fv = (PFNGLEVALCOORD1FVPROC) load(userptr, "glEvalCoord1fv"); + glad_glEvalCoord2d = (PFNGLEVALCOORD2DPROC) load(userptr, "glEvalCoord2d"); + glad_glEvalCoord2dv = (PFNGLEVALCOORD2DVPROC) load(userptr, "glEvalCoord2dv"); + glad_glEvalCoord2f = (PFNGLEVALCOORD2FPROC) load(userptr, "glEvalCoord2f"); + glad_glEvalCoord2fv = (PFNGLEVALCOORD2FVPROC) load(userptr, "glEvalCoord2fv"); + glad_glEvalMesh1 = (PFNGLEVALMESH1PROC) load(userptr, "glEvalMesh1"); + glad_glEvalMesh2 = (PFNGLEVALMESH2PROC) load(userptr, "glEvalMesh2"); + glad_glEvalPoint1 = (PFNGLEVALPOINT1PROC) load(userptr, "glEvalPoint1"); + glad_glEvalPoint2 = (PFNGLEVALPOINT2PROC) load(userptr, "glEvalPoint2"); + glad_glFeedbackBuffer = (PFNGLFEEDBACKBUFFERPROC) load(userptr, "glFeedbackBuffer"); + glad_glFinish = (PFNGLFINISHPROC) load(userptr, "glFinish"); + glad_glFlush = (PFNGLFLUSHPROC) load(userptr, "glFlush"); + glad_glFogf = (PFNGLFOGFPROC) load(userptr, "glFogf"); + glad_glFogfv = (PFNGLFOGFVPROC) load(userptr, "glFogfv"); + glad_glFogi = (PFNGLFOGIPROC) load(userptr, "glFogi"); + glad_glFogiv = (PFNGLFOGIVPROC) load(userptr, "glFogiv"); + glad_glFrontFace = (PFNGLFRONTFACEPROC) load(userptr, "glFrontFace"); + glad_glFrustum = (PFNGLFRUSTUMPROC) load(userptr, "glFrustum"); + glad_glGenLists = (PFNGLGENLISTSPROC) load(userptr, "glGenLists"); + glad_glGetBooleanv = (PFNGLGETBOOLEANVPROC) load(userptr, "glGetBooleanv"); + glad_glGetClipPlane = (PFNGLGETCLIPPLANEPROC) load(userptr, "glGetClipPlane"); + glad_glGetDoublev = (PFNGLGETDOUBLEVPROC) load(userptr, "glGetDoublev"); + glad_glGetError = (PFNGLGETERRORPROC) load(userptr, "glGetError"); + glad_glGetFloatv = (PFNGLGETFLOATVPROC) load(userptr, "glGetFloatv"); + glad_glGetIntegerv = (PFNGLGETINTEGERVPROC) load(userptr, "glGetIntegerv"); + glad_glGetLightfv = (PFNGLGETLIGHTFVPROC) load(userptr, "glGetLightfv"); + glad_glGetLightiv = (PFNGLGETLIGHTIVPROC) load(userptr, "glGetLightiv"); + glad_glGetMapdv = (PFNGLGETMAPDVPROC) load(userptr, "glGetMapdv"); + glad_glGetMapfv = (PFNGLGETMAPFVPROC) load(userptr, "glGetMapfv"); + glad_glGetMapiv = (PFNGLGETMAPIVPROC) load(userptr, "glGetMapiv"); + glad_glGetMaterialfv = (PFNGLGETMATERIALFVPROC) load(userptr, "glGetMaterialfv"); + glad_glGetMaterialiv = (PFNGLGETMATERIALIVPROC) load(userptr, "glGetMaterialiv"); + glad_glGetPixelMapfv = (PFNGLGETPIXELMAPFVPROC) load(userptr, "glGetPixelMapfv"); + glad_glGetPixelMapuiv = (PFNGLGETPIXELMAPUIVPROC) load(userptr, "glGetPixelMapuiv"); + glad_glGetPixelMapusv = (PFNGLGETPIXELMAPUSVPROC) load(userptr, "glGetPixelMapusv"); + glad_glGetPolygonStipple = (PFNGLGETPOLYGONSTIPPLEPROC) load(userptr, "glGetPolygonStipple"); + glad_glGetString = (PFNGLGETSTRINGPROC) load(userptr, "glGetString"); + glad_glGetTexEnvfv = (PFNGLGETTEXENVFVPROC) load(userptr, "glGetTexEnvfv"); + glad_glGetTexEnviv = (PFNGLGETTEXENVIVPROC) load(userptr, "glGetTexEnviv"); + glad_glGetTexGendv = (PFNGLGETTEXGENDVPROC) load(userptr, "glGetTexGendv"); + glad_glGetTexGenfv = (PFNGLGETTEXGENFVPROC) load(userptr, "glGetTexGenfv"); + glad_glGetTexGeniv = (PFNGLGETTEXGENIVPROC) load(userptr, "glGetTexGeniv"); + glad_glGetTexImage = (PFNGLGETTEXIMAGEPROC) load(userptr, "glGetTexImage"); + glad_glGetTexLevelParameterfv = (PFNGLGETTEXLEVELPARAMETERFVPROC) load(userptr, "glGetTexLevelParameterfv"); + glad_glGetTexLevelParameteriv = (PFNGLGETTEXLEVELPARAMETERIVPROC) load(userptr, "glGetTexLevelParameteriv"); + glad_glGetTexParameterfv = (PFNGLGETTEXPARAMETERFVPROC) load(userptr, "glGetTexParameterfv"); + glad_glGetTexParameteriv = (PFNGLGETTEXPARAMETERIVPROC) load(userptr, "glGetTexParameteriv"); + glad_glHint = (PFNGLHINTPROC) load(userptr, "glHint"); + glad_glIndexMask = (PFNGLINDEXMASKPROC) load(userptr, "glIndexMask"); + glad_glIndexd = (PFNGLINDEXDPROC) load(userptr, "glIndexd"); + glad_glIndexdv = (PFNGLINDEXDVPROC) load(userptr, "glIndexdv"); + glad_glIndexf = (PFNGLINDEXFPROC) load(userptr, "glIndexf"); + glad_glIndexfv = (PFNGLINDEXFVPROC) load(userptr, "glIndexfv"); + glad_glIndexi = (PFNGLINDEXIPROC) load(userptr, "glIndexi"); + glad_glIndexiv = (PFNGLINDEXIVPROC) load(userptr, "glIndexiv"); + glad_glIndexs = (PFNGLINDEXSPROC) load(userptr, "glIndexs"); + glad_glIndexsv = (PFNGLINDEXSVPROC) load(userptr, "glIndexsv"); + glad_glInitNames = (PFNGLINITNAMESPROC) load(userptr, "glInitNames"); + glad_glIsEnabled = (PFNGLISENABLEDPROC) load(userptr, "glIsEnabled"); + glad_glIsList = (PFNGLISLISTPROC) load(userptr, "glIsList"); + glad_glLightModelf = (PFNGLLIGHTMODELFPROC) load(userptr, "glLightModelf"); + glad_glLightModelfv = (PFNGLLIGHTMODELFVPROC) load(userptr, "glLightModelfv"); + glad_glLightModeli = (PFNGLLIGHTMODELIPROC) load(userptr, "glLightModeli"); + glad_glLightModeliv = (PFNGLLIGHTMODELIVPROC) load(userptr, "glLightModeliv"); + glad_glLightf = (PFNGLLIGHTFPROC) load(userptr, "glLightf"); + glad_glLightfv = (PFNGLLIGHTFVPROC) load(userptr, "glLightfv"); + glad_glLighti = (PFNGLLIGHTIPROC) load(userptr, "glLighti"); + glad_glLightiv = (PFNGLLIGHTIVPROC) load(userptr, "glLightiv"); + glad_glLineStipple = (PFNGLLINESTIPPLEPROC) load(userptr, "glLineStipple"); + glad_glLineWidth = (PFNGLLINEWIDTHPROC) load(userptr, "glLineWidth"); + glad_glListBase = (PFNGLLISTBASEPROC) load(userptr, "glListBase"); + glad_glLoadIdentity = (PFNGLLOADIDENTITYPROC) load(userptr, "glLoadIdentity"); + glad_glLoadMatrixd = (PFNGLLOADMATRIXDPROC) load(userptr, "glLoadMatrixd"); + glad_glLoadMatrixf = (PFNGLLOADMATRIXFPROC) load(userptr, "glLoadMatrixf"); + glad_glLoadName = (PFNGLLOADNAMEPROC) load(userptr, "glLoadName"); + glad_glLogicOp = (PFNGLLOGICOPPROC) load(userptr, "glLogicOp"); + glad_glMap1d = (PFNGLMAP1DPROC) load(userptr, "glMap1d"); + glad_glMap1f = (PFNGLMAP1FPROC) load(userptr, "glMap1f"); + glad_glMap2d = (PFNGLMAP2DPROC) load(userptr, "glMap2d"); + glad_glMap2f = (PFNGLMAP2FPROC) load(userptr, "glMap2f"); + glad_glMapGrid1d = (PFNGLMAPGRID1DPROC) load(userptr, "glMapGrid1d"); + glad_glMapGrid1f = (PFNGLMAPGRID1FPROC) load(userptr, "glMapGrid1f"); + glad_glMapGrid2d = (PFNGLMAPGRID2DPROC) load(userptr, "glMapGrid2d"); + glad_glMapGrid2f = (PFNGLMAPGRID2FPROC) load(userptr, "glMapGrid2f"); + glad_glMaterialf = (PFNGLMATERIALFPROC) load(userptr, "glMaterialf"); + glad_glMaterialfv = (PFNGLMATERIALFVPROC) load(userptr, "glMaterialfv"); + glad_glMateriali = (PFNGLMATERIALIPROC) load(userptr, "glMateriali"); + glad_glMaterialiv = (PFNGLMATERIALIVPROC) load(userptr, "glMaterialiv"); + glad_glMatrixMode = (PFNGLMATRIXMODEPROC) load(userptr, "glMatrixMode"); + glad_glMultMatrixd = (PFNGLMULTMATRIXDPROC) load(userptr, "glMultMatrixd"); + glad_glMultMatrixf = (PFNGLMULTMATRIXFPROC) load(userptr, "glMultMatrixf"); + glad_glNewList = (PFNGLNEWLISTPROC) load(userptr, "glNewList"); + glad_glNormal3b = (PFNGLNORMAL3BPROC) load(userptr, "glNormal3b"); + glad_glNormal3bv = (PFNGLNORMAL3BVPROC) load(userptr, "glNormal3bv"); + glad_glNormal3d = (PFNGLNORMAL3DPROC) load(userptr, "glNormal3d"); + glad_glNormal3dv = (PFNGLNORMAL3DVPROC) load(userptr, "glNormal3dv"); + glad_glNormal3f = (PFNGLNORMAL3FPROC) load(userptr, "glNormal3f"); + glad_glNormal3fv = (PFNGLNORMAL3FVPROC) load(userptr, "glNormal3fv"); + glad_glNormal3i = (PFNGLNORMAL3IPROC) load(userptr, "glNormal3i"); + glad_glNormal3iv = (PFNGLNORMAL3IVPROC) load(userptr, "glNormal3iv"); + glad_glNormal3s = (PFNGLNORMAL3SPROC) load(userptr, "glNormal3s"); + glad_glNormal3sv = (PFNGLNORMAL3SVPROC) load(userptr, "glNormal3sv"); + glad_glOrtho = (PFNGLORTHOPROC) load(userptr, "glOrtho"); + glad_glPassThrough = (PFNGLPASSTHROUGHPROC) load(userptr, "glPassThrough"); + glad_glPixelMapfv = (PFNGLPIXELMAPFVPROC) load(userptr, "glPixelMapfv"); + glad_glPixelMapuiv = (PFNGLPIXELMAPUIVPROC) load(userptr, "glPixelMapuiv"); + glad_glPixelMapusv = (PFNGLPIXELMAPUSVPROC) load(userptr, "glPixelMapusv"); + glad_glPixelStoref = (PFNGLPIXELSTOREFPROC) load(userptr, "glPixelStoref"); + glad_glPixelStorei = (PFNGLPIXELSTOREIPROC) load(userptr, "glPixelStorei"); + glad_glPixelTransferf = (PFNGLPIXELTRANSFERFPROC) load(userptr, "glPixelTransferf"); + glad_glPixelTransferi = (PFNGLPIXELTRANSFERIPROC) load(userptr, "glPixelTransferi"); + glad_glPixelZoom = (PFNGLPIXELZOOMPROC) load(userptr, "glPixelZoom"); + glad_glPointSize = (PFNGLPOINTSIZEPROC) load(userptr, "glPointSize"); + glad_glPolygonMode = (PFNGLPOLYGONMODEPROC) load(userptr, "glPolygonMode"); + glad_glPolygonStipple = (PFNGLPOLYGONSTIPPLEPROC) load(userptr, "glPolygonStipple"); + glad_glPopAttrib = (PFNGLPOPATTRIBPROC) load(userptr, "glPopAttrib"); + glad_glPopMatrix = (PFNGLPOPMATRIXPROC) load(userptr, "glPopMatrix"); + glad_glPopName = (PFNGLPOPNAMEPROC) load(userptr, "glPopName"); + glad_glPushAttrib = (PFNGLPUSHATTRIBPROC) load(userptr, "glPushAttrib"); + glad_glPushMatrix = (PFNGLPUSHMATRIXPROC) load(userptr, "glPushMatrix"); + glad_glPushName = (PFNGLPUSHNAMEPROC) load(userptr, "glPushName"); + glad_glRasterPos2d = (PFNGLRASTERPOS2DPROC) load(userptr, "glRasterPos2d"); + glad_glRasterPos2dv = (PFNGLRASTERPOS2DVPROC) load(userptr, "glRasterPos2dv"); + glad_glRasterPos2f = (PFNGLRASTERPOS2FPROC) load(userptr, "glRasterPos2f"); + glad_glRasterPos2fv = (PFNGLRASTERPOS2FVPROC) load(userptr, "glRasterPos2fv"); + glad_glRasterPos2i = (PFNGLRASTERPOS2IPROC) load(userptr, "glRasterPos2i"); + glad_glRasterPos2iv = (PFNGLRASTERPOS2IVPROC) load(userptr, "glRasterPos2iv"); + glad_glRasterPos2s = (PFNGLRASTERPOS2SPROC) load(userptr, "glRasterPos2s"); + glad_glRasterPos2sv = (PFNGLRASTERPOS2SVPROC) load(userptr, "glRasterPos2sv"); + glad_glRasterPos3d = (PFNGLRASTERPOS3DPROC) load(userptr, "glRasterPos3d"); + glad_glRasterPos3dv = (PFNGLRASTERPOS3DVPROC) load(userptr, "glRasterPos3dv"); + glad_glRasterPos3f = (PFNGLRASTERPOS3FPROC) load(userptr, "glRasterPos3f"); + glad_glRasterPos3fv = (PFNGLRASTERPOS3FVPROC) load(userptr, "glRasterPos3fv"); + glad_glRasterPos3i = (PFNGLRASTERPOS3IPROC) load(userptr, "glRasterPos3i"); + glad_glRasterPos3iv = (PFNGLRASTERPOS3IVPROC) load(userptr, "glRasterPos3iv"); + glad_glRasterPos3s = (PFNGLRASTERPOS3SPROC) load(userptr, "glRasterPos3s"); + glad_glRasterPos3sv = (PFNGLRASTERPOS3SVPROC) load(userptr, "glRasterPos3sv"); + glad_glRasterPos4d = (PFNGLRASTERPOS4DPROC) load(userptr, "glRasterPos4d"); + glad_glRasterPos4dv = (PFNGLRASTERPOS4DVPROC) load(userptr, "glRasterPos4dv"); + glad_glRasterPos4f = (PFNGLRASTERPOS4FPROC) load(userptr, "glRasterPos4f"); + glad_glRasterPos4fv = (PFNGLRASTERPOS4FVPROC) load(userptr, "glRasterPos4fv"); + glad_glRasterPos4i = (PFNGLRASTERPOS4IPROC) load(userptr, "glRasterPos4i"); + glad_glRasterPos4iv = (PFNGLRASTERPOS4IVPROC) load(userptr, "glRasterPos4iv"); + glad_glRasterPos4s = (PFNGLRASTERPOS4SPROC) load(userptr, "glRasterPos4s"); + glad_glRasterPos4sv = (PFNGLRASTERPOS4SVPROC) load(userptr, "glRasterPos4sv"); + glad_glReadBuffer = (PFNGLREADBUFFERPROC) load(userptr, "glReadBuffer"); + glad_glReadPixels = (PFNGLREADPIXELSPROC) load(userptr, "glReadPixels"); + glad_glRectd = (PFNGLRECTDPROC) load(userptr, "glRectd"); + glad_glRectdv = (PFNGLRECTDVPROC) load(userptr, "glRectdv"); + glad_glRectf = (PFNGLRECTFPROC) load(userptr, "glRectf"); + glad_glRectfv = (PFNGLRECTFVPROC) load(userptr, "glRectfv"); + glad_glRecti = (PFNGLRECTIPROC) load(userptr, "glRecti"); + glad_glRectiv = (PFNGLRECTIVPROC) load(userptr, "glRectiv"); + glad_glRects = (PFNGLRECTSPROC) load(userptr, "glRects"); + glad_glRectsv = (PFNGLRECTSVPROC) load(userptr, "glRectsv"); + glad_glRenderMode = (PFNGLRENDERMODEPROC) load(userptr, "glRenderMode"); + glad_glRotated = (PFNGLROTATEDPROC) load(userptr, "glRotated"); + glad_glRotatef = (PFNGLROTATEFPROC) load(userptr, "glRotatef"); + glad_glScaled = (PFNGLSCALEDPROC) load(userptr, "glScaled"); + glad_glScalef = (PFNGLSCALEFPROC) load(userptr, "glScalef"); + glad_glScissor = (PFNGLSCISSORPROC) load(userptr, "glScissor"); + glad_glSelectBuffer = (PFNGLSELECTBUFFERPROC) load(userptr, "glSelectBuffer"); + glad_glShadeModel = (PFNGLSHADEMODELPROC) load(userptr, "glShadeModel"); + glad_glStencilFunc = (PFNGLSTENCILFUNCPROC) load(userptr, "glStencilFunc"); + glad_glStencilMask = (PFNGLSTENCILMASKPROC) load(userptr, "glStencilMask"); + glad_glStencilOp = (PFNGLSTENCILOPPROC) load(userptr, "glStencilOp"); + glad_glTexCoord1d = (PFNGLTEXCOORD1DPROC) load(userptr, "glTexCoord1d"); + glad_glTexCoord1dv = (PFNGLTEXCOORD1DVPROC) load(userptr, "glTexCoord1dv"); + glad_glTexCoord1f = (PFNGLTEXCOORD1FPROC) load(userptr, "glTexCoord1f"); + glad_glTexCoord1fv = (PFNGLTEXCOORD1FVPROC) load(userptr, "glTexCoord1fv"); + glad_glTexCoord1i = (PFNGLTEXCOORD1IPROC) load(userptr, "glTexCoord1i"); + glad_glTexCoord1iv = (PFNGLTEXCOORD1IVPROC) load(userptr, "glTexCoord1iv"); + glad_glTexCoord1s = (PFNGLTEXCOORD1SPROC) load(userptr, "glTexCoord1s"); + glad_glTexCoord1sv = (PFNGLTEXCOORD1SVPROC) load(userptr, "glTexCoord1sv"); + glad_glTexCoord2d = (PFNGLTEXCOORD2DPROC) load(userptr, "glTexCoord2d"); + glad_glTexCoord2dv = (PFNGLTEXCOORD2DVPROC) load(userptr, "glTexCoord2dv"); + glad_glTexCoord2f = (PFNGLTEXCOORD2FPROC) load(userptr, "glTexCoord2f"); + glad_glTexCoord2fv = (PFNGLTEXCOORD2FVPROC) load(userptr, "glTexCoord2fv"); + glad_glTexCoord2i = (PFNGLTEXCOORD2IPROC) load(userptr, "glTexCoord2i"); + glad_glTexCoord2iv = (PFNGLTEXCOORD2IVPROC) load(userptr, "glTexCoord2iv"); + glad_glTexCoord2s = (PFNGLTEXCOORD2SPROC) load(userptr, "glTexCoord2s"); + glad_glTexCoord2sv = (PFNGLTEXCOORD2SVPROC) load(userptr, "glTexCoord2sv"); + glad_glTexCoord3d = (PFNGLTEXCOORD3DPROC) load(userptr, "glTexCoord3d"); + glad_glTexCoord3dv = (PFNGLTEXCOORD3DVPROC) load(userptr, "glTexCoord3dv"); + glad_glTexCoord3f = (PFNGLTEXCOORD3FPROC) load(userptr, "glTexCoord3f"); + glad_glTexCoord3fv = (PFNGLTEXCOORD3FVPROC) load(userptr, "glTexCoord3fv"); + glad_glTexCoord3i = (PFNGLTEXCOORD3IPROC) load(userptr, "glTexCoord3i"); + glad_glTexCoord3iv = (PFNGLTEXCOORD3IVPROC) load(userptr, "glTexCoord3iv"); + glad_glTexCoord3s = (PFNGLTEXCOORD3SPROC) load(userptr, "glTexCoord3s"); + glad_glTexCoord3sv = (PFNGLTEXCOORD3SVPROC) load(userptr, "glTexCoord3sv"); + glad_glTexCoord4d = (PFNGLTEXCOORD4DPROC) load(userptr, "glTexCoord4d"); + glad_glTexCoord4dv = (PFNGLTEXCOORD4DVPROC) load(userptr, "glTexCoord4dv"); + glad_glTexCoord4f = (PFNGLTEXCOORD4FPROC) load(userptr, "glTexCoord4f"); + glad_glTexCoord4fv = (PFNGLTEXCOORD4FVPROC) load(userptr, "glTexCoord4fv"); + glad_glTexCoord4i = (PFNGLTEXCOORD4IPROC) load(userptr, "glTexCoord4i"); + glad_glTexCoord4iv = (PFNGLTEXCOORD4IVPROC) load(userptr, "glTexCoord4iv"); + glad_glTexCoord4s = (PFNGLTEXCOORD4SPROC) load(userptr, "glTexCoord4s"); + glad_glTexCoord4sv = (PFNGLTEXCOORD4SVPROC) load(userptr, "glTexCoord4sv"); + glad_glTexEnvf = (PFNGLTEXENVFPROC) load(userptr, "glTexEnvf"); + glad_glTexEnvfv = (PFNGLTEXENVFVPROC) load(userptr, "glTexEnvfv"); + glad_glTexEnvi = (PFNGLTEXENVIPROC) load(userptr, "glTexEnvi"); + glad_glTexEnviv = (PFNGLTEXENVIVPROC) load(userptr, "glTexEnviv"); + glad_glTexGend = (PFNGLTEXGENDPROC) load(userptr, "glTexGend"); + glad_glTexGendv = (PFNGLTEXGENDVPROC) load(userptr, "glTexGendv"); + glad_glTexGenf = (PFNGLTEXGENFPROC) load(userptr, "glTexGenf"); + glad_glTexGenfv = (PFNGLTEXGENFVPROC) load(userptr, "glTexGenfv"); + glad_glTexGeni = (PFNGLTEXGENIPROC) load(userptr, "glTexGeni"); + glad_glTexGeniv = (PFNGLTEXGENIVPROC) load(userptr, "glTexGeniv"); + glad_glTexImage1D = (PFNGLTEXIMAGE1DPROC) load(userptr, "glTexImage1D"); + glad_glTexImage2D = (PFNGLTEXIMAGE2DPROC) load(userptr, "glTexImage2D"); + glad_glTexParameterf = (PFNGLTEXPARAMETERFPROC) load(userptr, "glTexParameterf"); + glad_glTexParameterfv = (PFNGLTEXPARAMETERFVPROC) load(userptr, "glTexParameterfv"); + glad_glTexParameteri = (PFNGLTEXPARAMETERIPROC) load(userptr, "glTexParameteri"); + glad_glTexParameteriv = (PFNGLTEXPARAMETERIVPROC) load(userptr, "glTexParameteriv"); + glad_glTranslated = (PFNGLTRANSLATEDPROC) load(userptr, "glTranslated"); + glad_glTranslatef = (PFNGLTRANSLATEFPROC) load(userptr, "glTranslatef"); + glad_glVertex2d = (PFNGLVERTEX2DPROC) load(userptr, "glVertex2d"); + glad_glVertex2dv = (PFNGLVERTEX2DVPROC) load(userptr, "glVertex2dv"); + glad_glVertex2f = (PFNGLVERTEX2FPROC) load(userptr, "glVertex2f"); + glad_glVertex2fv = (PFNGLVERTEX2FVPROC) load(userptr, "glVertex2fv"); + glad_glVertex2i = (PFNGLVERTEX2IPROC) load(userptr, "glVertex2i"); + glad_glVertex2iv = (PFNGLVERTEX2IVPROC) load(userptr, "glVertex2iv"); + glad_glVertex2s = (PFNGLVERTEX2SPROC) load(userptr, "glVertex2s"); + glad_glVertex2sv = (PFNGLVERTEX2SVPROC) load(userptr, "glVertex2sv"); + glad_glVertex3d = (PFNGLVERTEX3DPROC) load(userptr, "glVertex3d"); + glad_glVertex3dv = (PFNGLVERTEX3DVPROC) load(userptr, "glVertex3dv"); + glad_glVertex3f = (PFNGLVERTEX3FPROC) load(userptr, "glVertex3f"); + glad_glVertex3fv = (PFNGLVERTEX3FVPROC) load(userptr, "glVertex3fv"); + glad_glVertex3i = (PFNGLVERTEX3IPROC) load(userptr, "glVertex3i"); + glad_glVertex3iv = (PFNGLVERTEX3IVPROC) load(userptr, "glVertex3iv"); + glad_glVertex3s = (PFNGLVERTEX3SPROC) load(userptr, "glVertex3s"); + glad_glVertex3sv = (PFNGLVERTEX3SVPROC) load(userptr, "glVertex3sv"); + glad_glVertex4d = (PFNGLVERTEX4DPROC) load(userptr, "glVertex4d"); + glad_glVertex4dv = (PFNGLVERTEX4DVPROC) load(userptr, "glVertex4dv"); + glad_glVertex4f = (PFNGLVERTEX4FPROC) load(userptr, "glVertex4f"); + glad_glVertex4fv = (PFNGLVERTEX4FVPROC) load(userptr, "glVertex4fv"); + glad_glVertex4i = (PFNGLVERTEX4IPROC) load(userptr, "glVertex4i"); + glad_glVertex4iv = (PFNGLVERTEX4IVPROC) load(userptr, "glVertex4iv"); + glad_glVertex4s = (PFNGLVERTEX4SPROC) load(userptr, "glVertex4s"); + glad_glVertex4sv = (PFNGLVERTEX4SVPROC) load(userptr, "glVertex4sv"); + glad_glViewport = (PFNGLVIEWPORTPROC) load(userptr, "glViewport"); +} +static void glad_gl_load_GL_VERSION_1_1( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_VERSION_1_1) return; + glad_glAreTexturesResident = (PFNGLARETEXTURESRESIDENTPROC) load(userptr, "glAreTexturesResident"); + glad_glArrayElement = (PFNGLARRAYELEMENTPROC) load(userptr, "glArrayElement"); + glad_glBindTexture = (PFNGLBINDTEXTUREPROC) load(userptr, "glBindTexture"); + glad_glColorPointer = (PFNGLCOLORPOINTERPROC) load(userptr, "glColorPointer"); + glad_glCopyTexImage1D = (PFNGLCOPYTEXIMAGE1DPROC) load(userptr, "glCopyTexImage1D"); + glad_glCopyTexImage2D = (PFNGLCOPYTEXIMAGE2DPROC) load(userptr, "glCopyTexImage2D"); + glad_glCopyTexSubImage1D = (PFNGLCOPYTEXSUBIMAGE1DPROC) load(userptr, "glCopyTexSubImage1D"); + glad_glCopyTexSubImage2D = (PFNGLCOPYTEXSUBIMAGE2DPROC) load(userptr, "glCopyTexSubImage2D"); + glad_glDeleteTextures = (PFNGLDELETETEXTURESPROC) load(userptr, "glDeleteTextures"); + glad_glDisableClientState = (PFNGLDISABLECLIENTSTATEPROC) load(userptr, "glDisableClientState"); + glad_glDrawArrays = (PFNGLDRAWARRAYSPROC) load(userptr, "glDrawArrays"); + glad_glDrawElements = (PFNGLDRAWELEMENTSPROC) load(userptr, "glDrawElements"); + glad_glEdgeFlagPointer = (PFNGLEDGEFLAGPOINTERPROC) load(userptr, "glEdgeFlagPointer"); + glad_glEnableClientState = (PFNGLENABLECLIENTSTATEPROC) load(userptr, "glEnableClientState"); + glad_glGenTextures = (PFNGLGENTEXTURESPROC) load(userptr, "glGenTextures"); + glad_glGetPointerv = (PFNGLGETPOINTERVPROC) load(userptr, "glGetPointerv"); + glad_glIndexPointer = (PFNGLINDEXPOINTERPROC) load(userptr, "glIndexPointer"); + glad_glIndexub = (PFNGLINDEXUBPROC) load(userptr, "glIndexub"); + glad_glIndexubv = (PFNGLINDEXUBVPROC) load(userptr, "glIndexubv"); + glad_glInterleavedArrays = (PFNGLINTERLEAVEDARRAYSPROC) load(userptr, "glInterleavedArrays"); + glad_glIsTexture = (PFNGLISTEXTUREPROC) load(userptr, "glIsTexture"); + glad_glNormalPointer = (PFNGLNORMALPOINTERPROC) load(userptr, "glNormalPointer"); + glad_glPolygonOffset = (PFNGLPOLYGONOFFSETPROC) load(userptr, "glPolygonOffset"); + glad_glPopClientAttrib = (PFNGLPOPCLIENTATTRIBPROC) load(userptr, "glPopClientAttrib"); + glad_glPrioritizeTextures = (PFNGLPRIORITIZETEXTURESPROC) load(userptr, "glPrioritizeTextures"); + glad_glPushClientAttrib = (PFNGLPUSHCLIENTATTRIBPROC) load(userptr, "glPushClientAttrib"); + glad_glTexCoordPointer = (PFNGLTEXCOORDPOINTERPROC) load(userptr, "glTexCoordPointer"); + glad_glTexSubImage1D = (PFNGLTEXSUBIMAGE1DPROC) load(userptr, "glTexSubImage1D"); + glad_glTexSubImage2D = (PFNGLTEXSUBIMAGE2DPROC) load(userptr, "glTexSubImage2D"); + glad_glVertexPointer = (PFNGLVERTEXPOINTERPROC) load(userptr, "glVertexPointer"); +} +static void glad_gl_load_GL_VERSION_1_2( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_VERSION_1_2) return; + glad_glCopyTexSubImage3D = (PFNGLCOPYTEXSUBIMAGE3DPROC) load(userptr, "glCopyTexSubImage3D"); + glad_glDrawRangeElements = (PFNGLDRAWRANGEELEMENTSPROC) load(userptr, "glDrawRangeElements"); + glad_glTexImage3D = (PFNGLTEXIMAGE3DPROC) load(userptr, "glTexImage3D"); + glad_glTexSubImage3D = (PFNGLTEXSUBIMAGE3DPROC) load(userptr, "glTexSubImage3D"); +} +static void glad_gl_load_GL_VERSION_1_3( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_VERSION_1_3) return; + glad_glActiveTexture = (PFNGLACTIVETEXTUREPROC) load(userptr, "glActiveTexture"); + glad_glClientActiveTexture = (PFNGLCLIENTACTIVETEXTUREPROC) load(userptr, "glClientActiveTexture"); + glad_glCompressedTexImage1D = (PFNGLCOMPRESSEDTEXIMAGE1DPROC) load(userptr, "glCompressedTexImage1D"); + glad_glCompressedTexImage2D = (PFNGLCOMPRESSEDTEXIMAGE2DPROC) load(userptr, "glCompressedTexImage2D"); + glad_glCompressedTexImage3D = (PFNGLCOMPRESSEDTEXIMAGE3DPROC) load(userptr, "glCompressedTexImage3D"); + glad_glCompressedTexSubImage1D = (PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) load(userptr, "glCompressedTexSubImage1D"); + glad_glCompressedTexSubImage2D = (PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) load(userptr, "glCompressedTexSubImage2D"); + glad_glCompressedTexSubImage3D = (PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) load(userptr, "glCompressedTexSubImage3D"); + glad_glGetCompressedTexImage = (PFNGLGETCOMPRESSEDTEXIMAGEPROC) load(userptr, "glGetCompressedTexImage"); + glad_glLoadTransposeMatrixd = (PFNGLLOADTRANSPOSEMATRIXDPROC) load(userptr, "glLoadTransposeMatrixd"); + glad_glLoadTransposeMatrixf = (PFNGLLOADTRANSPOSEMATRIXFPROC) load(userptr, "glLoadTransposeMatrixf"); + glad_glMultTransposeMatrixd = (PFNGLMULTTRANSPOSEMATRIXDPROC) load(userptr, "glMultTransposeMatrixd"); + glad_glMultTransposeMatrixf = (PFNGLMULTTRANSPOSEMATRIXFPROC) load(userptr, "glMultTransposeMatrixf"); + glad_glMultiTexCoord1d = (PFNGLMULTITEXCOORD1DPROC) load(userptr, "glMultiTexCoord1d"); + glad_glMultiTexCoord1dv = (PFNGLMULTITEXCOORD1DVPROC) load(userptr, "glMultiTexCoord1dv"); + glad_glMultiTexCoord1f = (PFNGLMULTITEXCOORD1FPROC) load(userptr, "glMultiTexCoord1f"); + glad_glMultiTexCoord1fv = (PFNGLMULTITEXCOORD1FVPROC) load(userptr, "glMultiTexCoord1fv"); + glad_glMultiTexCoord1i = (PFNGLMULTITEXCOORD1IPROC) load(userptr, "glMultiTexCoord1i"); + glad_glMultiTexCoord1iv = (PFNGLMULTITEXCOORD1IVPROC) load(userptr, "glMultiTexCoord1iv"); + glad_glMultiTexCoord1s = (PFNGLMULTITEXCOORD1SPROC) load(userptr, "glMultiTexCoord1s"); + glad_glMultiTexCoord1sv = (PFNGLMULTITEXCOORD1SVPROC) load(userptr, "glMultiTexCoord1sv"); + glad_glMultiTexCoord2d = (PFNGLMULTITEXCOORD2DPROC) load(userptr, "glMultiTexCoord2d"); + glad_glMultiTexCoord2dv = (PFNGLMULTITEXCOORD2DVPROC) load(userptr, "glMultiTexCoord2dv"); + glad_glMultiTexCoord2f = (PFNGLMULTITEXCOORD2FPROC) load(userptr, "glMultiTexCoord2f"); + glad_glMultiTexCoord2fv = (PFNGLMULTITEXCOORD2FVPROC) load(userptr, "glMultiTexCoord2fv"); + glad_glMultiTexCoord2i = (PFNGLMULTITEXCOORD2IPROC) load(userptr, "glMultiTexCoord2i"); + glad_glMultiTexCoord2iv = (PFNGLMULTITEXCOORD2IVPROC) load(userptr, "glMultiTexCoord2iv"); + glad_glMultiTexCoord2s = (PFNGLMULTITEXCOORD2SPROC) load(userptr, "glMultiTexCoord2s"); + glad_glMultiTexCoord2sv = (PFNGLMULTITEXCOORD2SVPROC) load(userptr, "glMultiTexCoord2sv"); + glad_glMultiTexCoord3d = (PFNGLMULTITEXCOORD3DPROC) load(userptr, "glMultiTexCoord3d"); + glad_glMultiTexCoord3dv = (PFNGLMULTITEXCOORD3DVPROC) load(userptr, "glMultiTexCoord3dv"); + glad_glMultiTexCoord3f = (PFNGLMULTITEXCOORD3FPROC) load(userptr, "glMultiTexCoord3f"); + glad_glMultiTexCoord3fv = (PFNGLMULTITEXCOORD3FVPROC) load(userptr, "glMultiTexCoord3fv"); + glad_glMultiTexCoord3i = (PFNGLMULTITEXCOORD3IPROC) load(userptr, "glMultiTexCoord3i"); + glad_glMultiTexCoord3iv = (PFNGLMULTITEXCOORD3IVPROC) load(userptr, "glMultiTexCoord3iv"); + glad_glMultiTexCoord3s = (PFNGLMULTITEXCOORD3SPROC) load(userptr, "glMultiTexCoord3s"); + glad_glMultiTexCoord3sv = (PFNGLMULTITEXCOORD3SVPROC) load(userptr, "glMultiTexCoord3sv"); + glad_glMultiTexCoord4d = (PFNGLMULTITEXCOORD4DPROC) load(userptr, "glMultiTexCoord4d"); + glad_glMultiTexCoord4dv = (PFNGLMULTITEXCOORD4DVPROC) load(userptr, "glMultiTexCoord4dv"); + glad_glMultiTexCoord4f = (PFNGLMULTITEXCOORD4FPROC) load(userptr, "glMultiTexCoord4f"); + glad_glMultiTexCoord4fv = (PFNGLMULTITEXCOORD4FVPROC) load(userptr, "glMultiTexCoord4fv"); + glad_glMultiTexCoord4i = (PFNGLMULTITEXCOORD4IPROC) load(userptr, "glMultiTexCoord4i"); + glad_glMultiTexCoord4iv = (PFNGLMULTITEXCOORD4IVPROC) load(userptr, "glMultiTexCoord4iv"); + glad_glMultiTexCoord4s = (PFNGLMULTITEXCOORD4SPROC) load(userptr, "glMultiTexCoord4s"); + glad_glMultiTexCoord4sv = (PFNGLMULTITEXCOORD4SVPROC) load(userptr, "glMultiTexCoord4sv"); + glad_glSampleCoverage = (PFNGLSAMPLECOVERAGEPROC) load(userptr, "glSampleCoverage"); +} +static void glad_gl_load_GL_VERSION_1_4( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_VERSION_1_4) return; + glad_glBlendColor = (PFNGLBLENDCOLORPROC) load(userptr, "glBlendColor"); + glad_glBlendEquation = (PFNGLBLENDEQUATIONPROC) load(userptr, "glBlendEquation"); + glad_glBlendFuncSeparate = (PFNGLBLENDFUNCSEPARATEPROC) load(userptr, "glBlendFuncSeparate"); + glad_glFogCoordPointer = (PFNGLFOGCOORDPOINTERPROC) load(userptr, "glFogCoordPointer"); + glad_glFogCoordd = (PFNGLFOGCOORDDPROC) load(userptr, "glFogCoordd"); + glad_glFogCoorddv = (PFNGLFOGCOORDDVPROC) load(userptr, "glFogCoorddv"); + glad_glFogCoordf = (PFNGLFOGCOORDFPROC) load(userptr, "glFogCoordf"); + glad_glFogCoordfv = (PFNGLFOGCOORDFVPROC) load(userptr, "glFogCoordfv"); + glad_glMultiDrawArrays = (PFNGLMULTIDRAWARRAYSPROC) load(userptr, "glMultiDrawArrays"); + glad_glMultiDrawElements = (PFNGLMULTIDRAWELEMENTSPROC) load(userptr, "glMultiDrawElements"); + glad_glPointParameterf = (PFNGLPOINTPARAMETERFPROC) load(userptr, "glPointParameterf"); + glad_glPointParameterfv = (PFNGLPOINTPARAMETERFVPROC) load(userptr, "glPointParameterfv"); + glad_glPointParameteri = (PFNGLPOINTPARAMETERIPROC) load(userptr, "glPointParameteri"); + glad_glPointParameteriv = (PFNGLPOINTPARAMETERIVPROC) load(userptr, "glPointParameteriv"); + glad_glSecondaryColor3b = (PFNGLSECONDARYCOLOR3BPROC) load(userptr, "glSecondaryColor3b"); + glad_glSecondaryColor3bv = (PFNGLSECONDARYCOLOR3BVPROC) load(userptr, "glSecondaryColor3bv"); + glad_glSecondaryColor3d = (PFNGLSECONDARYCOLOR3DPROC) load(userptr, "glSecondaryColor3d"); + glad_glSecondaryColor3dv = (PFNGLSECONDARYCOLOR3DVPROC) load(userptr, "glSecondaryColor3dv"); + glad_glSecondaryColor3f = (PFNGLSECONDARYCOLOR3FPROC) load(userptr, "glSecondaryColor3f"); + glad_glSecondaryColor3fv = (PFNGLSECONDARYCOLOR3FVPROC) load(userptr, "glSecondaryColor3fv"); + glad_glSecondaryColor3i = (PFNGLSECONDARYCOLOR3IPROC) load(userptr, "glSecondaryColor3i"); + glad_glSecondaryColor3iv = (PFNGLSECONDARYCOLOR3IVPROC) load(userptr, "glSecondaryColor3iv"); + glad_glSecondaryColor3s = (PFNGLSECONDARYCOLOR3SPROC) load(userptr, "glSecondaryColor3s"); + glad_glSecondaryColor3sv = (PFNGLSECONDARYCOLOR3SVPROC) load(userptr, "glSecondaryColor3sv"); + glad_glSecondaryColor3ub = (PFNGLSECONDARYCOLOR3UBPROC) load(userptr, "glSecondaryColor3ub"); + glad_glSecondaryColor3ubv = (PFNGLSECONDARYCOLOR3UBVPROC) load(userptr, "glSecondaryColor3ubv"); + glad_glSecondaryColor3ui = (PFNGLSECONDARYCOLOR3UIPROC) load(userptr, "glSecondaryColor3ui"); + glad_glSecondaryColor3uiv = (PFNGLSECONDARYCOLOR3UIVPROC) load(userptr, "glSecondaryColor3uiv"); + glad_glSecondaryColor3us = (PFNGLSECONDARYCOLOR3USPROC) load(userptr, "glSecondaryColor3us"); + glad_glSecondaryColor3usv = (PFNGLSECONDARYCOLOR3USVPROC) load(userptr, "glSecondaryColor3usv"); + glad_glSecondaryColorPointer = (PFNGLSECONDARYCOLORPOINTERPROC) load(userptr, "glSecondaryColorPointer"); + glad_glWindowPos2d = (PFNGLWINDOWPOS2DPROC) load(userptr, "glWindowPos2d"); + glad_glWindowPos2dv = (PFNGLWINDOWPOS2DVPROC) load(userptr, "glWindowPos2dv"); + glad_glWindowPos2f = (PFNGLWINDOWPOS2FPROC) load(userptr, "glWindowPos2f"); + glad_glWindowPos2fv = (PFNGLWINDOWPOS2FVPROC) load(userptr, "glWindowPos2fv"); + glad_glWindowPos2i = (PFNGLWINDOWPOS2IPROC) load(userptr, "glWindowPos2i"); + glad_glWindowPos2iv = (PFNGLWINDOWPOS2IVPROC) load(userptr, "glWindowPos2iv"); + glad_glWindowPos2s = (PFNGLWINDOWPOS2SPROC) load(userptr, "glWindowPos2s"); + glad_glWindowPos2sv = (PFNGLWINDOWPOS2SVPROC) load(userptr, "glWindowPos2sv"); + glad_glWindowPos3d = (PFNGLWINDOWPOS3DPROC) load(userptr, "glWindowPos3d"); + glad_glWindowPos3dv = (PFNGLWINDOWPOS3DVPROC) load(userptr, "glWindowPos3dv"); + glad_glWindowPos3f = (PFNGLWINDOWPOS3FPROC) load(userptr, "glWindowPos3f"); + glad_glWindowPos3fv = (PFNGLWINDOWPOS3FVPROC) load(userptr, "glWindowPos3fv"); + glad_glWindowPos3i = (PFNGLWINDOWPOS3IPROC) load(userptr, "glWindowPos3i"); + glad_glWindowPos3iv = (PFNGLWINDOWPOS3IVPROC) load(userptr, "glWindowPos3iv"); + glad_glWindowPos3s = (PFNGLWINDOWPOS3SPROC) load(userptr, "glWindowPos3s"); + glad_glWindowPos3sv = (PFNGLWINDOWPOS3SVPROC) load(userptr, "glWindowPos3sv"); +} +static void glad_gl_load_GL_VERSION_1_5( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_VERSION_1_5) return; + glad_glBeginQuery = (PFNGLBEGINQUERYPROC) load(userptr, "glBeginQuery"); + glad_glBindBuffer = (PFNGLBINDBUFFERPROC) load(userptr, "glBindBuffer"); + glad_glBufferData = (PFNGLBUFFERDATAPROC) load(userptr, "glBufferData"); + glad_glBufferSubData = (PFNGLBUFFERSUBDATAPROC) load(userptr, "glBufferSubData"); + glad_glDeleteBuffers = (PFNGLDELETEBUFFERSPROC) load(userptr, "glDeleteBuffers"); + glad_glDeleteQueries = (PFNGLDELETEQUERIESPROC) load(userptr, "glDeleteQueries"); + glad_glEndQuery = (PFNGLENDQUERYPROC) load(userptr, "glEndQuery"); + glad_glGenBuffers = (PFNGLGENBUFFERSPROC) load(userptr, "glGenBuffers"); + glad_glGenQueries = (PFNGLGENQUERIESPROC) load(userptr, "glGenQueries"); + glad_glGetBufferParameteriv = (PFNGLGETBUFFERPARAMETERIVPROC) load(userptr, "glGetBufferParameteriv"); + glad_glGetBufferPointerv = (PFNGLGETBUFFERPOINTERVPROC) load(userptr, "glGetBufferPointerv"); + glad_glGetBufferSubData = (PFNGLGETBUFFERSUBDATAPROC) load(userptr, "glGetBufferSubData"); + glad_glGetQueryObjectiv = (PFNGLGETQUERYOBJECTIVPROC) load(userptr, "glGetQueryObjectiv"); + glad_glGetQueryObjectuiv = (PFNGLGETQUERYOBJECTUIVPROC) load(userptr, "glGetQueryObjectuiv"); + glad_glGetQueryiv = (PFNGLGETQUERYIVPROC) load(userptr, "glGetQueryiv"); + glad_glIsBuffer = (PFNGLISBUFFERPROC) load(userptr, "glIsBuffer"); + glad_glIsQuery = (PFNGLISQUERYPROC) load(userptr, "glIsQuery"); + glad_glMapBuffer = (PFNGLMAPBUFFERPROC) load(userptr, "glMapBuffer"); + glad_glUnmapBuffer = (PFNGLUNMAPBUFFERPROC) load(userptr, "glUnmapBuffer"); +} +static void glad_gl_load_GL_VERSION_2_0( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_VERSION_2_0) return; + glad_glAttachShader = (PFNGLATTACHSHADERPROC) load(userptr, "glAttachShader"); + glad_glBindAttribLocation = (PFNGLBINDATTRIBLOCATIONPROC) load(userptr, "glBindAttribLocation"); + glad_glBlendEquationSeparate = (PFNGLBLENDEQUATIONSEPARATEPROC) load(userptr, "glBlendEquationSeparate"); + glad_glCompileShader = (PFNGLCOMPILESHADERPROC) load(userptr, "glCompileShader"); + glad_glCreateProgram = (PFNGLCREATEPROGRAMPROC) load(userptr, "glCreateProgram"); + glad_glCreateShader = (PFNGLCREATESHADERPROC) load(userptr, "glCreateShader"); + glad_glDeleteProgram = (PFNGLDELETEPROGRAMPROC) load(userptr, "glDeleteProgram"); + glad_glDeleteShader = (PFNGLDELETESHADERPROC) load(userptr, "glDeleteShader"); + glad_glDetachShader = (PFNGLDETACHSHADERPROC) load(userptr, "glDetachShader"); + glad_glDisableVertexAttribArray = (PFNGLDISABLEVERTEXATTRIBARRAYPROC) load(userptr, "glDisableVertexAttribArray"); + glad_glDrawBuffers = (PFNGLDRAWBUFFERSPROC) load(userptr, "glDrawBuffers"); + glad_glEnableVertexAttribArray = (PFNGLENABLEVERTEXATTRIBARRAYPROC) load(userptr, "glEnableVertexAttribArray"); + glad_glGetActiveAttrib = (PFNGLGETACTIVEATTRIBPROC) load(userptr, "glGetActiveAttrib"); + glad_glGetActiveUniform = (PFNGLGETACTIVEUNIFORMPROC) load(userptr, "glGetActiveUniform"); + glad_glGetAttachedShaders = (PFNGLGETATTACHEDSHADERSPROC) load(userptr, "glGetAttachedShaders"); + glad_glGetAttribLocation = (PFNGLGETATTRIBLOCATIONPROC) load(userptr, "glGetAttribLocation"); + glad_glGetProgramInfoLog = (PFNGLGETPROGRAMINFOLOGPROC) load(userptr, "glGetProgramInfoLog"); + glad_glGetProgramiv = (PFNGLGETPROGRAMIVPROC) load(userptr, "glGetProgramiv"); + glad_glGetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC) load(userptr, "glGetShaderInfoLog"); + glad_glGetShaderSource = (PFNGLGETSHADERSOURCEPROC) load(userptr, "glGetShaderSource"); + glad_glGetShaderiv = (PFNGLGETSHADERIVPROC) load(userptr, "glGetShaderiv"); + glad_glGetUniformLocation = (PFNGLGETUNIFORMLOCATIONPROC) load(userptr, "glGetUniformLocation"); + glad_glGetUniformfv = (PFNGLGETUNIFORMFVPROC) load(userptr, "glGetUniformfv"); + glad_glGetUniformiv = (PFNGLGETUNIFORMIVPROC) load(userptr, "glGetUniformiv"); + glad_glGetVertexAttribPointerv = (PFNGLGETVERTEXATTRIBPOINTERVPROC) load(userptr, "glGetVertexAttribPointerv"); + glad_glGetVertexAttribdv = (PFNGLGETVERTEXATTRIBDVPROC) load(userptr, "glGetVertexAttribdv"); + glad_glGetVertexAttribfv = (PFNGLGETVERTEXATTRIBFVPROC) load(userptr, "glGetVertexAttribfv"); + glad_glGetVertexAttribiv = (PFNGLGETVERTEXATTRIBIVPROC) load(userptr, "glGetVertexAttribiv"); + glad_glIsProgram = (PFNGLISPROGRAMPROC) load(userptr, "glIsProgram"); + glad_glIsShader = (PFNGLISSHADERPROC) load(userptr, "glIsShader"); + glad_glLinkProgram = (PFNGLLINKPROGRAMPROC) load(userptr, "glLinkProgram"); + glad_glShaderSource = (PFNGLSHADERSOURCEPROC) load(userptr, "glShaderSource"); + glad_glStencilFuncSeparate = (PFNGLSTENCILFUNCSEPARATEPROC) load(userptr, "glStencilFuncSeparate"); + glad_glStencilMaskSeparate = (PFNGLSTENCILMASKSEPARATEPROC) load(userptr, "glStencilMaskSeparate"); + glad_glStencilOpSeparate = (PFNGLSTENCILOPSEPARATEPROC) load(userptr, "glStencilOpSeparate"); + glad_glUniform1f = (PFNGLUNIFORM1FPROC) load(userptr, "glUniform1f"); + glad_glUniform1fv = (PFNGLUNIFORM1FVPROC) load(userptr, "glUniform1fv"); + glad_glUniform1i = (PFNGLUNIFORM1IPROC) load(userptr, "glUniform1i"); + glad_glUniform1iv = (PFNGLUNIFORM1IVPROC) load(userptr, "glUniform1iv"); + glad_glUniform2f = (PFNGLUNIFORM2FPROC) load(userptr, "glUniform2f"); + glad_glUniform2fv = (PFNGLUNIFORM2FVPROC) load(userptr, "glUniform2fv"); + glad_glUniform2i = (PFNGLUNIFORM2IPROC) load(userptr, "glUniform2i"); + glad_glUniform2iv = (PFNGLUNIFORM2IVPROC) load(userptr, "glUniform2iv"); + glad_glUniform3f = (PFNGLUNIFORM3FPROC) load(userptr, "glUniform3f"); + glad_glUniform3fv = (PFNGLUNIFORM3FVPROC) load(userptr, "glUniform3fv"); + glad_glUniform3i = (PFNGLUNIFORM3IPROC) load(userptr, "glUniform3i"); + glad_glUniform3iv = (PFNGLUNIFORM3IVPROC) load(userptr, "glUniform3iv"); + glad_glUniform4f = (PFNGLUNIFORM4FPROC) load(userptr, "glUniform4f"); + glad_glUniform4fv = (PFNGLUNIFORM4FVPROC) load(userptr, "glUniform4fv"); + glad_glUniform4i = (PFNGLUNIFORM4IPROC) load(userptr, "glUniform4i"); + glad_glUniform4iv = (PFNGLUNIFORM4IVPROC) load(userptr, "glUniform4iv"); + glad_glUniformMatrix2fv = (PFNGLUNIFORMMATRIX2FVPROC) load(userptr, "glUniformMatrix2fv"); + glad_glUniformMatrix3fv = (PFNGLUNIFORMMATRIX3FVPROC) load(userptr, "glUniformMatrix3fv"); + glad_glUniformMatrix4fv = (PFNGLUNIFORMMATRIX4FVPROC) load(userptr, "glUniformMatrix4fv"); + glad_glUseProgram = (PFNGLUSEPROGRAMPROC) load(userptr, "glUseProgram"); + glad_glValidateProgram = (PFNGLVALIDATEPROGRAMPROC) load(userptr, "glValidateProgram"); + glad_glVertexAttrib1d = (PFNGLVERTEXATTRIB1DPROC) load(userptr, "glVertexAttrib1d"); + glad_glVertexAttrib1dv = (PFNGLVERTEXATTRIB1DVPROC) load(userptr, "glVertexAttrib1dv"); + glad_glVertexAttrib1f = (PFNGLVERTEXATTRIB1FPROC) load(userptr, "glVertexAttrib1f"); + glad_glVertexAttrib1fv = (PFNGLVERTEXATTRIB1FVPROC) load(userptr, "glVertexAttrib1fv"); + glad_glVertexAttrib1s = (PFNGLVERTEXATTRIB1SPROC) load(userptr, "glVertexAttrib1s"); + glad_glVertexAttrib1sv = (PFNGLVERTEXATTRIB1SVPROC) load(userptr, "glVertexAttrib1sv"); + glad_glVertexAttrib2d = (PFNGLVERTEXATTRIB2DPROC) load(userptr, "glVertexAttrib2d"); + glad_glVertexAttrib2dv = (PFNGLVERTEXATTRIB2DVPROC) load(userptr, "glVertexAttrib2dv"); + glad_glVertexAttrib2f = (PFNGLVERTEXATTRIB2FPROC) load(userptr, "glVertexAttrib2f"); + glad_glVertexAttrib2fv = (PFNGLVERTEXATTRIB2FVPROC) load(userptr, "glVertexAttrib2fv"); + glad_glVertexAttrib2s = (PFNGLVERTEXATTRIB2SPROC) load(userptr, "glVertexAttrib2s"); + glad_glVertexAttrib2sv = (PFNGLVERTEXATTRIB2SVPROC) load(userptr, "glVertexAttrib2sv"); + glad_glVertexAttrib3d = (PFNGLVERTEXATTRIB3DPROC) load(userptr, "glVertexAttrib3d"); + glad_glVertexAttrib3dv = (PFNGLVERTEXATTRIB3DVPROC) load(userptr, "glVertexAttrib3dv"); + glad_glVertexAttrib3f = (PFNGLVERTEXATTRIB3FPROC) load(userptr, "glVertexAttrib3f"); + glad_glVertexAttrib3fv = (PFNGLVERTEXATTRIB3FVPROC) load(userptr, "glVertexAttrib3fv"); + glad_glVertexAttrib3s = (PFNGLVERTEXATTRIB3SPROC) load(userptr, "glVertexAttrib3s"); + glad_glVertexAttrib3sv = (PFNGLVERTEXATTRIB3SVPROC) load(userptr, "glVertexAttrib3sv"); + glad_glVertexAttrib4Nbv = (PFNGLVERTEXATTRIB4NBVPROC) load(userptr, "glVertexAttrib4Nbv"); + glad_glVertexAttrib4Niv = (PFNGLVERTEXATTRIB4NIVPROC) load(userptr, "glVertexAttrib4Niv"); + glad_glVertexAttrib4Nsv = (PFNGLVERTEXATTRIB4NSVPROC) load(userptr, "glVertexAttrib4Nsv"); + glad_glVertexAttrib4Nub = (PFNGLVERTEXATTRIB4NUBPROC) load(userptr, "glVertexAttrib4Nub"); + glad_glVertexAttrib4Nubv = (PFNGLVERTEXATTRIB4NUBVPROC) load(userptr, "glVertexAttrib4Nubv"); + glad_glVertexAttrib4Nuiv = (PFNGLVERTEXATTRIB4NUIVPROC) load(userptr, "glVertexAttrib4Nuiv"); + glad_glVertexAttrib4Nusv = (PFNGLVERTEXATTRIB4NUSVPROC) load(userptr, "glVertexAttrib4Nusv"); + glad_glVertexAttrib4bv = (PFNGLVERTEXATTRIB4BVPROC) load(userptr, "glVertexAttrib4bv"); + glad_glVertexAttrib4d = (PFNGLVERTEXATTRIB4DPROC) load(userptr, "glVertexAttrib4d"); + glad_glVertexAttrib4dv = (PFNGLVERTEXATTRIB4DVPROC) load(userptr, "glVertexAttrib4dv"); + glad_glVertexAttrib4f = (PFNGLVERTEXATTRIB4FPROC) load(userptr, "glVertexAttrib4f"); + glad_glVertexAttrib4fv = (PFNGLVERTEXATTRIB4FVPROC) load(userptr, "glVertexAttrib4fv"); + glad_glVertexAttrib4iv = (PFNGLVERTEXATTRIB4IVPROC) load(userptr, "glVertexAttrib4iv"); + glad_glVertexAttrib4s = (PFNGLVERTEXATTRIB4SPROC) load(userptr, "glVertexAttrib4s"); + glad_glVertexAttrib4sv = (PFNGLVERTEXATTRIB4SVPROC) load(userptr, "glVertexAttrib4sv"); + glad_glVertexAttrib4ubv = (PFNGLVERTEXATTRIB4UBVPROC) load(userptr, "glVertexAttrib4ubv"); + glad_glVertexAttrib4uiv = (PFNGLVERTEXATTRIB4UIVPROC) load(userptr, "glVertexAttrib4uiv"); + glad_glVertexAttrib4usv = (PFNGLVERTEXATTRIB4USVPROC) load(userptr, "glVertexAttrib4usv"); + glad_glVertexAttribPointer = (PFNGLVERTEXATTRIBPOINTERPROC) load(userptr, "glVertexAttribPointer"); +} +static void glad_gl_load_GL_VERSION_2_1( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_VERSION_2_1) return; + glad_glUniformMatrix2x3fv = (PFNGLUNIFORMMATRIX2X3FVPROC) load(userptr, "glUniformMatrix2x3fv"); + glad_glUniformMatrix2x4fv = (PFNGLUNIFORMMATRIX2X4FVPROC) load(userptr, "glUniformMatrix2x4fv"); + glad_glUniformMatrix3x2fv = (PFNGLUNIFORMMATRIX3X2FVPROC) load(userptr, "glUniformMatrix3x2fv"); + glad_glUniformMatrix3x4fv = (PFNGLUNIFORMMATRIX3X4FVPROC) load(userptr, "glUniformMatrix3x4fv"); + glad_glUniformMatrix4x2fv = (PFNGLUNIFORMMATRIX4X2FVPROC) load(userptr, "glUniformMatrix4x2fv"); + glad_glUniformMatrix4x3fv = (PFNGLUNIFORMMATRIX4X3FVPROC) load(userptr, "glUniformMatrix4x3fv"); +} +static void glad_gl_load_GL_VERSION_3_0( GLADuserptrloadfunc load, void* userptr) { + if(!GLAD_GL_VERSION_3_0) return; + glad_glBeginConditionalRender = (PFNGLBEGINCONDITIONALRENDERPROC) load(userptr, "glBeginConditionalRender"); + glad_glBeginTransformFeedback = (PFNGLBEGINTRANSFORMFEEDBACKPROC) load(userptr, "glBeginTransformFeedback"); + glad_glBindBufferBase = (PFNGLBINDBUFFERBASEPROC) load(userptr, "glBindBufferBase"); + glad_glBindBufferRange = (PFNGLBINDBUFFERRANGEPROC) load(userptr, "glBindBufferRange"); + glad_glBindFragDataLocation = (PFNGLBINDFRAGDATALOCATIONPROC) load(userptr, "glBindFragDataLocation"); + glad_glBindFramebuffer = (PFNGLBINDFRAMEBUFFERPROC) load(userptr, "glBindFramebuffer"); + glad_glBindRenderbuffer = (PFNGLBINDRENDERBUFFERPROC) load(userptr, "glBindRenderbuffer"); + glad_glBindVertexArray = (PFNGLBINDVERTEXARRAYPROC) load(userptr, "glBindVertexArray"); + glad_glBlitFramebuffer = (PFNGLBLITFRAMEBUFFERPROC) load(userptr, "glBlitFramebuffer"); + glad_glCheckFramebufferStatus = (PFNGLCHECKFRAMEBUFFERSTATUSPROC) load(userptr, "glCheckFramebufferStatus"); + glad_glClampColor = (PFNGLCLAMPCOLORPROC) load(userptr, "glClampColor"); + glad_glClearBufferfi = (PFNGLCLEARBUFFERFIPROC) load(userptr, "glClearBufferfi"); + glad_glClearBufferfv = (PFNGLCLEARBUFFERFVPROC) load(userptr, "glClearBufferfv"); + glad_glClearBufferiv = (PFNGLCLEARBUFFERIVPROC) load(userptr, "glClearBufferiv"); + glad_glClearBufferuiv = (PFNGLCLEARBUFFERUIVPROC) load(userptr, "glClearBufferuiv"); + glad_glColorMaski = (PFNGLCOLORMASKIPROC) load(userptr, "glColorMaski"); + glad_glDeleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSPROC) load(userptr, "glDeleteFramebuffers"); + glad_glDeleteRenderbuffers = (PFNGLDELETERENDERBUFFERSPROC) load(userptr, "glDeleteRenderbuffers"); + glad_glDeleteVertexArrays = (PFNGLDELETEVERTEXARRAYSPROC) load(userptr, "glDeleteVertexArrays"); + glad_glDisablei = (PFNGLDISABLEIPROC) load(userptr, "glDisablei"); + glad_glEnablei = (PFNGLENABLEIPROC) load(userptr, "glEnablei"); + glad_glEndConditionalRender = (PFNGLENDCONDITIONALRENDERPROC) load(userptr, "glEndConditionalRender"); + glad_glEndTransformFeedback = (PFNGLENDTRANSFORMFEEDBACKPROC) load(userptr, "glEndTransformFeedback"); + glad_glFlushMappedBufferRange = (PFNGLFLUSHMAPPEDBUFFERRANGEPROC) load(userptr, "glFlushMappedBufferRange"); + glad_glFramebufferRenderbuffer = (PFNGLFRAMEBUFFERRENDERBUFFERPROC) load(userptr, "glFramebufferRenderbuffer"); + glad_glFramebufferTexture1D = (PFNGLFRAMEBUFFERTEXTURE1DPROC) load(userptr, "glFramebufferTexture1D"); + glad_glFramebufferTexture2D = (PFNGLFRAMEBUFFERTEXTURE2DPROC) load(userptr, "glFramebufferTexture2D"); + glad_glFramebufferTexture3D = (PFNGLFRAMEBUFFERTEXTURE3DPROC) load(userptr, "glFramebufferTexture3D"); + glad_glFramebufferTextureLayer = (PFNGLFRAMEBUFFERTEXTURELAYERPROC) load(userptr, "glFramebufferTextureLayer"); + glad_glGenFramebuffers = (PFNGLGENFRAMEBUFFERSPROC) load(userptr, "glGenFramebuffers"); + glad_glGenRenderbuffers = (PFNGLGENRENDERBUFFERSPROC) load(userptr, "glGenRenderbuffers"); + glad_glGenVertexArrays = (PFNGLGENVERTEXARRAYSPROC) load(userptr, "glGenVertexArrays"); + glad_glGenerateMipmap = (PFNGLGENERATEMIPMAPPROC) load(userptr, "glGenerateMipmap"); + glad_glGetBooleani_v = (PFNGLGETBOOLEANI_VPROC) load(userptr, "glGetBooleani_v"); + glad_glGetFragDataLocation = (PFNGLGETFRAGDATALOCATIONPROC) load(userptr, "glGetFragDataLocation"); + glad_glGetFramebufferAttachmentParameteriv = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) load(userptr, "glGetFramebufferAttachmentParameteriv"); + glad_glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC) load(userptr, "glGetIntegeri_v"); + glad_glGetRenderbufferParameteriv = (PFNGLGETRENDERBUFFERPARAMETERIVPROC) load(userptr, "glGetRenderbufferParameteriv"); + glad_glGetStringi = (PFNGLGETSTRINGIPROC) load(userptr, "glGetStringi"); + glad_glGetTexParameterIiv = (PFNGLGETTEXPARAMETERIIVPROC) load(userptr, "glGetTexParameterIiv"); + glad_glGetTexParameterIuiv = (PFNGLGETTEXPARAMETERIUIVPROC) load(userptr, "glGetTexParameterIuiv"); + glad_glGetTransformFeedbackVarying = (PFNGLGETTRANSFORMFEEDBACKVARYINGPROC) load(userptr, "glGetTransformFeedbackVarying"); + glad_glGetUniformuiv = (PFNGLGETUNIFORMUIVPROC) load(userptr, "glGetUniformuiv"); + glad_glGetVertexAttribIiv = (PFNGLGETVERTEXATTRIBIIVPROC) load(userptr, "glGetVertexAttribIiv"); + glad_glGetVertexAttribIuiv = (PFNGLGETVERTEXATTRIBIUIVPROC) load(userptr, "glGetVertexAttribIuiv"); + glad_glIsEnabledi = (PFNGLISENABLEDIPROC) load(userptr, "glIsEnabledi"); + glad_glIsFramebuffer = (PFNGLISFRAMEBUFFERPROC) load(userptr, "glIsFramebuffer"); + glad_glIsRenderbuffer = (PFNGLISRENDERBUFFERPROC) load(userptr, "glIsRenderbuffer"); + glad_glIsVertexArray = (PFNGLISVERTEXARRAYPROC) load(userptr, "glIsVertexArray"); + glad_glMapBufferRange = (PFNGLMAPBUFFERRANGEPROC) load(userptr, "glMapBufferRange"); + glad_glRenderbufferStorage = (PFNGLRENDERBUFFERSTORAGEPROC) load(userptr, "glRenderbufferStorage"); + glad_glRenderbufferStorageMultisample = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC) load(userptr, "glRenderbufferStorageMultisample"); + glad_glTexParameterIiv = (PFNGLTEXPARAMETERIIVPROC) load(userptr, "glTexParameterIiv"); + glad_glTexParameterIuiv = (PFNGLTEXPARAMETERIUIVPROC) load(userptr, "glTexParameterIuiv"); + glad_glTransformFeedbackVaryings = (PFNGLTRANSFORMFEEDBACKVARYINGSPROC) load(userptr, "glTransformFeedbackVaryings"); + glad_glUniform1ui = (PFNGLUNIFORM1UIPROC) load(userptr, "glUniform1ui"); + glad_glUniform1uiv = (PFNGLUNIFORM1UIVPROC) load(userptr, "glUniform1uiv"); + glad_glUniform2ui = (PFNGLUNIFORM2UIPROC) load(userptr, "glUniform2ui"); + glad_glUniform2uiv = (PFNGLUNIFORM2UIVPROC) load(userptr, "glUniform2uiv"); + glad_glUniform3ui = (PFNGLUNIFORM3UIPROC) load(userptr, "glUniform3ui"); + glad_glUniform3uiv = (PFNGLUNIFORM3UIVPROC) load(userptr, "glUniform3uiv"); + glad_glUniform4ui = (PFNGLUNIFORM4UIPROC) load(userptr, "glUniform4ui"); + glad_glUniform4uiv = (PFNGLUNIFORM4UIVPROC) load(userptr, "glUniform4uiv"); + glad_glVertexAttribI1i = (PFNGLVERTEXATTRIBI1IPROC) load(userptr, "glVertexAttribI1i"); + glad_glVertexAttribI1iv = (PFNGLVERTEXATTRIBI1IVPROC) load(userptr, "glVertexAttribI1iv"); + glad_glVertexAttribI1ui = (PFNGLVERTEXATTRIBI1UIPROC) load(userptr, "glVertexAttribI1ui"); + glad_glVertexAttribI1uiv = (PFNGLVERTEXATTRIBI1UIVPROC) load(userptr, "glVertexAttribI1uiv"); + glad_glVertexAttribI2i = (PFNGLVERTEXATTRIBI2IPROC) load(userptr, "glVertexAttribI2i"); + glad_glVertexAttribI2iv = (PFNGLVERTEXATTRIBI2IVPROC) load(userptr, "glVertexAttribI2iv"); + glad_glVertexAttribI2ui = (PFNGLVERTEXATTRIBI2UIPROC) load(userptr, "glVertexAttribI2ui"); + glad_glVertexAttribI2uiv = (PFNGLVERTEXATTRIBI2UIVPROC) load(userptr, "glVertexAttribI2uiv"); + glad_glVertexAttribI3i = (PFNGLVERTEXATTRIBI3IPROC) load(userptr, "glVertexAttribI3i"); + glad_glVertexAttribI3iv = (PFNGLVERTEXATTRIBI3IVPROC) load(userptr, "glVertexAttribI3iv"); + glad_glVertexAttribI3ui = (PFNGLVERTEXATTRIBI3UIPROC) load(userptr, "glVertexAttribI3ui"); + glad_glVertexAttribI3uiv = (PFNGLVERTEXATTRIBI3UIVPROC) load(userptr, "glVertexAttribI3uiv"); + glad_glVertexAttribI4bv = (PFNGLVERTEXATTRIBI4BVPROC) load(userptr, "glVertexAttribI4bv"); + glad_glVertexAttribI4i = (PFNGLVERTEXATTRIBI4IPROC) load(userptr, "glVertexAttribI4i"); + glad_glVertexAttribI4iv = (PFNGLVERTEXATTRIBI4IVPROC) load(userptr, "glVertexAttribI4iv"); + glad_glVertexAttribI4sv = (PFNGLVERTEXATTRIBI4SVPROC) load(userptr, "glVertexAttribI4sv"); + glad_glVertexAttribI4ubv = (PFNGLVERTEXATTRIBI4UBVPROC) load(userptr, "glVertexAttribI4ubv"); + glad_glVertexAttribI4ui = (PFNGLVERTEXATTRIBI4UIPROC) load(userptr, "glVertexAttribI4ui"); + glad_glVertexAttribI4uiv = (PFNGLVERTEXATTRIBI4UIVPROC) load(userptr, "glVertexAttribI4uiv"); + glad_glVertexAttribI4usv = (PFNGLVERTEXATTRIBI4USVPROC) load(userptr, "glVertexAttribI4usv"); + glad_glVertexAttribIPointer = (PFNGLVERTEXATTRIBIPOINTERPROC) load(userptr, "glVertexAttribIPointer"); +} + + + +static void glad_gl_free_extensions(char **exts_i) { + if (exts_i != NULL) { + unsigned int index; + for(index = 0; exts_i[index]; index++) { + free((void *) (exts_i[index])); + } + free((void *)exts_i); + exts_i = NULL; + } +} +static int glad_gl_get_extensions( const char **out_exts, char ***out_exts_i) { +#if defined(GL_ES_VERSION_3_0) || defined(GL_VERSION_3_0) + if (glad_glGetStringi != NULL && glad_glGetIntegerv != NULL) { + unsigned int index = 0; + unsigned int num_exts_i = 0; + char **exts_i = NULL; + glad_glGetIntegerv(GL_NUM_EXTENSIONS, (int*) &num_exts_i); + exts_i = (char **) malloc((num_exts_i + 1) * (sizeof *exts_i)); + if (exts_i == NULL) { + return 0; + } + for(index = 0; index < num_exts_i; index++) { + const char *gl_str_tmp = (const char*) glad_glGetStringi(GL_EXTENSIONS, index); + size_t len = strlen(gl_str_tmp) + 1; + + char *local_str = (char*) malloc(len * sizeof(char)); + if(local_str == NULL) { + exts_i[index] = NULL; + glad_gl_free_extensions(exts_i); + return 0; + } + + memcpy(local_str, gl_str_tmp, len * sizeof(char)); + exts_i[index] = local_str; + } + exts_i[index] = NULL; + + *out_exts_i = exts_i; + + return 1; + } +#else + GLAD_UNUSED(out_exts_i); +#endif + if (glad_glGetString == NULL) { + return 0; + } + *out_exts = (const char *)glad_glGetString(GL_EXTENSIONS); + return 1; +} +static int glad_gl_has_extension(const char *exts, char **exts_i, const char *ext) { + if(exts_i) { + unsigned int index; + for(index = 0; exts_i[index]; index++) { + const char *e = exts_i[index]; + if(strcmp(e, ext) == 0) { + return 1; + } + } + } else { + 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; + } + } + return 0; +} + +static GLADapiproc glad_gl_get_proc_from_userptr(void *userptr, const char* name) { + return (GLAD_GNUC_EXTENSION (GLADapiproc (*)(const char *name)) userptr)(name); +} + +static int glad_gl_find_extensions_gl(void) { + const char *exts = NULL; + char **exts_i = NULL; + if (!glad_gl_get_extensions(&exts, &exts_i)) return 0; + + GLAD_UNUSED(&glad_gl_has_extension); + + glad_gl_free_extensions(exts_i); + + return 1; +} + +static int glad_gl_find_core_gl(void) { + int i; + const char* version; + const char* prefixes[] = { + "OpenGL ES-CM ", + "OpenGL ES-CL ", + "OpenGL ES ", + "OpenGL SC ", + NULL + }; + int major = 0; + int minor = 0; + version = (const char*) glad_glGetString(GL_VERSION); + if (!version) return 0; + for (i = 0; prefixes[i]; i++) { + const size_t length = strlen(prefixes[i]); + if (strncmp(version, prefixes[i], length) == 0) { + version += length; + break; + } + } + + GLAD_IMPL_UTIL_SSCANF(version, "%d.%d", &major, &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; + + return GLAD_MAKE_VERSION(major, minor); +} + +int gladLoadGLUserPtr( GLADuserptrloadfunc load, void *userptr) { + int version; + + glad_glGetString = (PFNGLGETSTRINGPROC) load(userptr, "glGetString"); + if(glad_glGetString == NULL) return 0; + version = glad_gl_find_core_gl(); + + glad_gl_load_GL_VERSION_1_0(load, userptr); + glad_gl_load_GL_VERSION_1_1(load, userptr); + glad_gl_load_GL_VERSION_1_2(load, userptr); + glad_gl_load_GL_VERSION_1_3(load, userptr); + glad_gl_load_GL_VERSION_1_4(load, userptr); + glad_gl_load_GL_VERSION_1_5(load, userptr); + glad_gl_load_GL_VERSION_2_0(load, userptr); + glad_gl_load_GL_VERSION_2_1(load, userptr); + glad_gl_load_GL_VERSION_3_0(load, userptr); + + if (!glad_gl_find_extensions_gl()) return 0; + + + + return version; +} + + +int gladLoadGL( GLADloadfunc load) { + return gladLoadGLUserPtr( glad_gl_get_proc_from_userptr, GLAD_GNUC_EXTENSION (void*) load); +} + + + + + + +#ifdef __cplusplus +} +#endif diff --git a/src/make.c b/src/make.c new file mode 100644 index 0000000..80c70c6 --- /dev/null +++ b/src/make.c @@ -0,0 +1,41 @@ +#include "glad/gl.h" + +#include "make.h" + +unsigned int make_buffer(unsigned int target, + const void * data, + size_t size) +{ + unsigned int buffer; + glGenBuffers(1, &buffer); + glBindBuffer(target, buffer); + glBufferData(target, size, data, GL_STATIC_DRAW); + + glBindBuffer(target, 0); + return buffer; +} + +unsigned int make_texture(const void * data, + int internalformat, + int width, + int height, + int format, + int type) +{ + unsigned int texture; + glGenTextures(1, &texture); + + glBindTexture(GL_TEXTURE_2D, texture); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + + float color[3] = {0.0, 0.0, 0.0}; + glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, color); + + glTexImage2D(GL_TEXTURE_2D, 0, internalformat, width, height, 0, format, type, data); + + glBindTexture(GL_TEXTURE_2D, 0); + return texture; +} diff --git a/src/render.cpp b/src/render.cpp new file mode 100644 index 0000000..d043d59 --- /dev/null +++ b/src/render.cpp @@ -0,0 +1,48 @@ +#include +#include + +#include "glad/gl.h" + +#include "render.h" +#include "math/float_types.hpp" +#include "math/transform.hpp" + +mat4x4 perspective() +{ + mat4x4 m1 = mat4x4(1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 1, + 0, 0, -1, 0 + ); + return m1; +} + +void render(const struct state * state, + unsigned int program, + unsigned int program__trans, + unsigned int program__texture0, + unsigned int color, + unsigned int vertex_array, + int triangles_length) +{ + mat4x4 trans = perspective() * translate(vec3(0, 0, -2)) * scale(1.0f) * rotate_y(state->ry) * rotate_x(state->rx); + + glEnable(GL_DEPTH_TEST); + glClearDepth(-1000.0f); + glDepthFunc(GL_GREATER); + + glUniformMatrix4fv(program__trans, 1, GL_TRUE, &trans[0][0]); + glUniform1i(program__texture0, 0); + + glClearColor(0.1, 0.2, 0.3, 1.0); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + glUseProgram(program); + + glActiveTexture(GL_TEXTURE0); + glBindTexture(GL_TEXTURE_2D, color); + + glBindVertexArray(vertex_array); + + glDrawElements(GL_TRIANGLES, triangles_length, GL_UNSIGNED_INT, 0); +} diff --git a/src/shader.c b/src/shader.c new file mode 100644 index 0000000..273465b --- /dev/null +++ b/src/shader.c @@ -0,0 +1,66 @@ +#include + +#include "glad/gl.h" + +#include "shader.h" + +unsigned int compile_shader(const char * name, + const void * vs, + const int vs_length, + const void * fs, + const int fs_length) +{ + unsigned int vertex_shader; + vertex_shader = glCreateShader(GL_VERTEX_SHADER); + glShaderSource(vertex_shader, 1, (const char **)&vs, &vs_length); + glCompileShader(vertex_shader); + { + int success; + char info_log[512]; + glGetShaderiv(vertex_shader, GL_COMPILE_STATUS, &success); + if(!success) { + glGetShaderInfoLog(vertex_shader, 512, NULL, info_log); + fprintf(stderr, "%s: vertex shader compile failed:\n%s\n", name, info_log); + } + } + + unsigned int fragment_shader; + fragment_shader = glCreateShader(GL_FRAGMENT_SHADER); + glShaderSource(fragment_shader, 1, (const char **)&fs, &fs_length); + glCompileShader(fragment_shader); + { + int success; + char info_log[512]; + glGetShaderiv(fragment_shader, GL_COMPILE_STATUS, &success); + if(!success) { + glGetShaderInfoLog(fragment_shader, 512, NULL, info_log); + fprintf(stderr, "%s: fragment shader compile failed:\n%s\n", name, info_log); + } + } + + unsigned int shader_program; + shader_program = glCreateProgram(); + + glAttachShader(shader_program, vertex_shader); + glAttachShader(shader_program, fragment_shader); + + glBindAttribLocation(shader_program, shader_attrib_position, "v_position"); + glBindAttribLocation(shader_program, shader_attrib_texture, "v_texture"); + glBindAttribLocation(shader_program, shader_attrib_normal, "v_normal"); + glLinkProgram(shader_program); + + { + int success; + char info_log[512]; + glGetProgramiv(shader_program, GL_LINK_STATUS, &success); + if(!success) { + glGetProgramInfoLog(shader_program, 512, NULL, info_log); + fprintf(stderr, "%s: program link failed:\n%s\n", name, info_log); + } + } + + glDeleteShader(vertex_shader); + glDeleteShader(fragment_shader); + + return shader_program; +} diff --git a/src/shader/scene.fs.glsl b/src/shader/scene.fs.glsl new file mode 100644 index 0000000..edd04ab --- /dev/null +++ b/src/shader/scene.fs.glsl @@ -0,0 +1,15 @@ +#version 130 + +uniform sampler2D texture0; + +in vec2 f_texture; +in vec4 f_position; + +void main() +{ + vec2 coord = vec2(f_texture.x, 1.0 - f_texture.y); + vec4 c = texture2D(texture0, coord); + + gl_FragColor = c; + //gl_FragColor = vec4(f_position.wwww); +} diff --git a/src/shader/scene.vs.glsl b/src/shader/scene.vs.glsl new file mode 100644 index 0000000..a302cf8 --- /dev/null +++ b/src/shader/scene.vs.glsl @@ -0,0 +1,17 @@ +#version 130 + +in vec3 v_position; +in vec2 v_texture; + +uniform mat4 trans; + +out vec2 f_texture; +out vec4 f_position; + +void main() +{ + vec4 pos = trans * vec4(v_position, 1.0); + gl_Position = pos; + f_texture = v_texture; + f_position = pos; +}