├── .gitignore ├── Makefile ├── README.md ├── all.gif ├── bloom.gif ├── glad.c ├── include ├── KHR │ └── khrplatform.h └── glad │ └── glad.h ├── none.gif ├── phosphor.gif ├── shader.frag ├── shader.vert ├── source.png ├── stb_image.h ├── tv.png └── vector.cpp /.gitignore: -------------------------------------------------------------------------------- 1 | *.swp 2 | vector 3 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | vector: vector.cpp 2 | g++ -Wall -Wpedantic -O3 -Iinclude -lglfw -ldl -o vector vector.cpp glad.c 3 | 4 | .PHONY: 5 | run: vector 6 | MESA_GL_VERSION_OVERRIDE=3.3 ./vector 7 | 8 | .PHONY: 9 | clean: 10 | rm vector 11 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Vector Display Simulation 2 | 3 | a simulation of a vector display!!! 4 | 5 | also a color crt mode! 6 | 7 | 8 | 9 | https://github.com/user-attachments/assets/813c2c94-2369-4518-8fbf-52940d299fca 10 | 11 | 12 | 13 | ## demo animations comparison 14 | 15 | electron beam -> phosphor -> bloom 16 | 17 | 18 | 19 | https://github.com/user-attachments/assets/e05708cb-c972-419c-99f9-0007bd2c588e 20 | 21 | 22 | 23 | 24 | electron beam only 25 | 26 | ![Pure electron beam](none.gif) 27 | 28 | electron beam -> phosphor; no bloom 29 | 30 | ![No bloom](phosphor.gif) 31 | 32 | 33 | electron beam -> bloom; no phosphor 34 | 35 | ![No hhosphor](bloom.gif) 36 | 37 | -------------------------------------------------------------------------------- /all.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MegaLoler/Vector-Display-Simulation/3fe902703bdd27fc46be462c70632d3260e7f2d4/all.gif -------------------------------------------------------------------------------- /bloom.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MegaLoler/Vector-Display-Simulation/3fe902703bdd27fc46be462c70632d3260e7f2d4/bloom.gif -------------------------------------------------------------------------------- /glad.c: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | OpenGL loader generated by glad 0.1.33 on Wed Aug 28 02:40:16 2019. 4 | 5 | Language/Generator: C/C++ 6 | Specification: gl 7 | APIs: gl=3.3 8 | Profile: compatibility 9 | Extensions: 10 | 11 | Loader: True 12 | Local files: False 13 | Omit khrplatform: False 14 | Reproducible: False 15 | 16 | Commandline: 17 | --profile="compatibility" --api="gl=3.3" --generator="c" --spec="gl" --extensions="" 18 | Online: 19 | https://glad.dav1d.de/#profile=compatibility&language=c&specification=gl&loader=on&api=gl%3D3.3 20 | */ 21 | 22 | #include 23 | #include 24 | #include 25 | #include 26 | 27 | static void* get_proc(const char *namez); 28 | 29 | #if defined(_WIN32) || defined(__CYGWIN__) 30 | #ifndef _WINDOWS_ 31 | #undef APIENTRY 32 | #endif 33 | #include 34 | static HMODULE libGL; 35 | 36 | typedef void* (APIENTRYP PFNWGLGETPROCADDRESSPROC_PRIVATE)(const char*); 37 | static PFNWGLGETPROCADDRESSPROC_PRIVATE gladGetProcAddressPtr; 38 | 39 | #ifdef _MSC_VER 40 | #ifdef __has_include 41 | #if __has_include() 42 | #define HAVE_WINAPIFAMILY 1 43 | #endif 44 | #elif _MSC_VER >= 1700 && !_USING_V110_SDK71_ 45 | #define HAVE_WINAPIFAMILY 1 46 | #endif 47 | #endif 48 | 49 | #ifdef HAVE_WINAPIFAMILY 50 | #include 51 | #if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) && WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) 52 | #define IS_UWP 1 53 | #endif 54 | #endif 55 | 56 | static 57 | int open_gl(void) { 58 | #ifndef IS_UWP 59 | libGL = LoadLibraryW(L"opengl32.dll"); 60 | if(libGL != NULL) { 61 | void (* tmp)(void); 62 | tmp = (void(*)(void)) GetProcAddress(libGL, "wglGetProcAddress"); 63 | gladGetProcAddressPtr = (PFNWGLGETPROCADDRESSPROC_PRIVATE) tmp; 64 | return gladGetProcAddressPtr != NULL; 65 | } 66 | #endif 67 | 68 | return 0; 69 | } 70 | 71 | static 72 | void close_gl(void) { 73 | if(libGL != NULL) { 74 | FreeLibrary((HMODULE) libGL); 75 | libGL = NULL; 76 | } 77 | } 78 | #else 79 | #include 80 | static void* libGL; 81 | 82 | #if !defined(__APPLE__) && !defined(__HAIKU__) 83 | typedef void* (APIENTRYP PFNGLXGETPROCADDRESSPROC_PRIVATE)(const char*); 84 | static PFNGLXGETPROCADDRESSPROC_PRIVATE gladGetProcAddressPtr; 85 | #endif 86 | 87 | static 88 | int open_gl(void) { 89 | #ifdef __APPLE__ 90 | static const char *NAMES[] = { 91 | "../Frameworks/OpenGL.framework/OpenGL", 92 | "/Library/Frameworks/OpenGL.framework/OpenGL", 93 | "/System/Library/Frameworks/OpenGL.framework/OpenGL", 94 | "/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL" 95 | }; 96 | #else 97 | static const char *NAMES[] = {"libGL.so.1", "libGL.so"}; 98 | #endif 99 | 100 | unsigned int index = 0; 101 | for(index = 0; index < (sizeof(NAMES) / sizeof(NAMES[0])); index++) { 102 | libGL = dlopen(NAMES[index], RTLD_NOW | RTLD_GLOBAL); 103 | 104 | if(libGL != NULL) { 105 | #if defined(__APPLE__) || defined(__HAIKU__) 106 | return 1; 107 | #else 108 | gladGetProcAddressPtr = (PFNGLXGETPROCADDRESSPROC_PRIVATE)dlsym(libGL, 109 | "glXGetProcAddressARB"); 110 | return gladGetProcAddressPtr != NULL; 111 | #endif 112 | } 113 | } 114 | 115 | return 0; 116 | } 117 | 118 | static 119 | void close_gl(void) { 120 | if(libGL != NULL) { 121 | dlclose(libGL); 122 | libGL = NULL; 123 | } 124 | } 125 | #endif 126 | 127 | static 128 | void* get_proc(const char *namez) { 129 | void* result = NULL; 130 | if(libGL == NULL) return NULL; 131 | 132 | #if !defined(__APPLE__) && !defined(__HAIKU__) 133 | if(gladGetProcAddressPtr != NULL) { 134 | result = gladGetProcAddressPtr(namez); 135 | } 136 | #endif 137 | if(result == NULL) { 138 | #if defined(_WIN32) || defined(__CYGWIN__) 139 | result = (void*)GetProcAddress((HMODULE) libGL, namez); 140 | #else 141 | result = dlsym(libGL, namez); 142 | #endif 143 | } 144 | 145 | return result; 146 | } 147 | 148 | int gladLoadGL(void) { 149 | int status = 0; 150 | 151 | if(open_gl()) { 152 | status = gladLoadGLLoader(&get_proc); 153 | close_gl(); 154 | } 155 | 156 | return status; 157 | } 158 | 159 | struct gladGLversionStruct GLVersion = { 0, 0 }; 160 | 161 | #if defined(GL_ES_VERSION_3_0) || defined(GL_VERSION_3_0) 162 | #define _GLAD_IS_SOME_NEW_VERSION 1 163 | #endif 164 | 165 | static int max_loaded_major; 166 | static int max_loaded_minor; 167 | 168 | static const char *exts = NULL; 169 | static int num_exts_i = 0; 170 | static char **exts_i = NULL; 171 | 172 | static int get_exts(void) { 173 | #ifdef _GLAD_IS_SOME_NEW_VERSION 174 | if(max_loaded_major < 3) { 175 | #endif 176 | exts = (const char *)glGetString(GL_EXTENSIONS); 177 | #ifdef _GLAD_IS_SOME_NEW_VERSION 178 | } else { 179 | unsigned int index; 180 | 181 | num_exts_i = 0; 182 | glGetIntegerv(GL_NUM_EXTENSIONS, &num_exts_i); 183 | if (num_exts_i > 0) { 184 | exts_i = (char **)malloc((size_t)num_exts_i * (sizeof *exts_i)); 185 | } 186 | 187 | if (exts_i == NULL) { 188 | return 0; 189 | } 190 | 191 | for(index = 0; index < (unsigned)num_exts_i; index++) { 192 | const char *gl_str_tmp = (const char*)glGetStringi(GL_EXTENSIONS, index); 193 | size_t len = strlen(gl_str_tmp); 194 | 195 | char *local_str = (char*)malloc((len+1) * sizeof(char)); 196 | if(local_str != NULL) { 197 | memcpy(local_str, gl_str_tmp, (len+1) * sizeof(char)); 198 | } 199 | exts_i[index] = local_str; 200 | } 201 | } 202 | #endif 203 | return 1; 204 | } 205 | 206 | static void free_exts(void) { 207 | if (exts_i != NULL) { 208 | int index; 209 | for(index = 0; index < num_exts_i; index++) { 210 | free((char *)exts_i[index]); 211 | } 212 | free((void *)exts_i); 213 | exts_i = NULL; 214 | } 215 | } 216 | 217 | static int has_ext(const char *ext) { 218 | #ifdef _GLAD_IS_SOME_NEW_VERSION 219 | if(max_loaded_major < 3) { 220 | #endif 221 | const char *extensions; 222 | const char *loc; 223 | const char *terminator; 224 | extensions = exts; 225 | if(extensions == NULL || ext == NULL) { 226 | return 0; 227 | } 228 | 229 | while(1) { 230 | loc = strstr(extensions, ext); 231 | if(loc == NULL) { 232 | return 0; 233 | } 234 | 235 | terminator = loc + strlen(ext); 236 | if((loc == extensions || *(loc - 1) == ' ') && 237 | (*terminator == ' ' || *terminator == '\0')) { 238 | return 1; 239 | } 240 | extensions = terminator; 241 | } 242 | #ifdef _GLAD_IS_SOME_NEW_VERSION 243 | } else { 244 | int index; 245 | if(exts_i == NULL) return 0; 246 | for(index = 0; index < num_exts_i; index++) { 247 | const char *e = exts_i[index]; 248 | 249 | if(exts_i[index] != NULL && strcmp(e, ext) == 0) { 250 | return 1; 251 | } 252 | } 253 | } 254 | #endif 255 | 256 | return 0; 257 | } 258 | int GLAD_GL_VERSION_1_0 = 0; 259 | int GLAD_GL_VERSION_1_1 = 0; 260 | int GLAD_GL_VERSION_1_2 = 0; 261 | int GLAD_GL_VERSION_1_3 = 0; 262 | int GLAD_GL_VERSION_1_4 = 0; 263 | int GLAD_GL_VERSION_1_5 = 0; 264 | int GLAD_GL_VERSION_2_0 = 0; 265 | int GLAD_GL_VERSION_2_1 = 0; 266 | int GLAD_GL_VERSION_3_0 = 0; 267 | int GLAD_GL_VERSION_3_1 = 0; 268 | int GLAD_GL_VERSION_3_2 = 0; 269 | int GLAD_GL_VERSION_3_3 = 0; 270 | PFNGLACCUMPROC glad_glAccum = NULL; 271 | PFNGLACTIVETEXTUREPROC glad_glActiveTexture = NULL; 272 | PFNGLALPHAFUNCPROC glad_glAlphaFunc = NULL; 273 | PFNGLARETEXTURESRESIDENTPROC glad_glAreTexturesResident = NULL; 274 | PFNGLARRAYELEMENTPROC glad_glArrayElement = NULL; 275 | PFNGLATTACHSHADERPROC glad_glAttachShader = NULL; 276 | PFNGLBEGINPROC glad_glBegin = NULL; 277 | PFNGLBEGINCONDITIONALRENDERPROC glad_glBeginConditionalRender = NULL; 278 | PFNGLBEGINQUERYPROC glad_glBeginQuery = NULL; 279 | PFNGLBEGINTRANSFORMFEEDBACKPROC glad_glBeginTransformFeedback = NULL; 280 | PFNGLBINDATTRIBLOCATIONPROC glad_glBindAttribLocation = NULL; 281 | PFNGLBINDBUFFERPROC glad_glBindBuffer = NULL; 282 | PFNGLBINDBUFFERBASEPROC glad_glBindBufferBase = NULL; 283 | PFNGLBINDBUFFERRANGEPROC glad_glBindBufferRange = NULL; 284 | PFNGLBINDFRAGDATALOCATIONPROC glad_glBindFragDataLocation = NULL; 285 | PFNGLBINDFRAGDATALOCATIONINDEXEDPROC glad_glBindFragDataLocationIndexed = NULL; 286 | PFNGLBINDFRAMEBUFFERPROC glad_glBindFramebuffer = NULL; 287 | PFNGLBINDRENDERBUFFERPROC glad_glBindRenderbuffer = NULL; 288 | PFNGLBINDSAMPLERPROC glad_glBindSampler = NULL; 289 | PFNGLBINDTEXTUREPROC glad_glBindTexture = NULL; 290 | PFNGLBINDVERTEXARRAYPROC glad_glBindVertexArray = NULL; 291 | PFNGLBITMAPPROC glad_glBitmap = NULL; 292 | PFNGLBLENDCOLORPROC glad_glBlendColor = NULL; 293 | PFNGLBLENDEQUATIONPROC glad_glBlendEquation = NULL; 294 | PFNGLBLENDEQUATIONSEPARATEPROC glad_glBlendEquationSeparate = NULL; 295 | PFNGLBLENDFUNCPROC glad_glBlendFunc = NULL; 296 | PFNGLBLENDFUNCSEPARATEPROC glad_glBlendFuncSeparate = NULL; 297 | PFNGLBLITFRAMEBUFFERPROC glad_glBlitFramebuffer = NULL; 298 | PFNGLBUFFERDATAPROC glad_glBufferData = NULL; 299 | PFNGLBUFFERSUBDATAPROC glad_glBufferSubData = NULL; 300 | PFNGLCALLLISTPROC glad_glCallList = NULL; 301 | PFNGLCALLLISTSPROC glad_glCallLists = NULL; 302 | PFNGLCHECKFRAMEBUFFERSTATUSPROC glad_glCheckFramebufferStatus = NULL; 303 | PFNGLCLAMPCOLORPROC glad_glClampColor = NULL; 304 | PFNGLCLEARPROC glad_glClear = NULL; 305 | PFNGLCLEARACCUMPROC glad_glClearAccum = NULL; 306 | PFNGLCLEARBUFFERFIPROC glad_glClearBufferfi = NULL; 307 | PFNGLCLEARBUFFERFVPROC glad_glClearBufferfv = NULL; 308 | PFNGLCLEARBUFFERIVPROC glad_glClearBufferiv = NULL; 309 | PFNGLCLEARBUFFERUIVPROC glad_glClearBufferuiv = NULL; 310 | PFNGLCLEARCOLORPROC glad_glClearColor = NULL; 311 | PFNGLCLEARDEPTHPROC glad_glClearDepth = NULL; 312 | PFNGLCLEARINDEXPROC glad_glClearIndex = NULL; 313 | PFNGLCLEARSTENCILPROC glad_glClearStencil = NULL; 314 | PFNGLCLIENTACTIVETEXTUREPROC glad_glClientActiveTexture = NULL; 315 | PFNGLCLIENTWAITSYNCPROC glad_glClientWaitSync = NULL; 316 | PFNGLCLIPPLANEPROC glad_glClipPlane = NULL; 317 | PFNGLCOLOR3BPROC glad_glColor3b = NULL; 318 | PFNGLCOLOR3BVPROC glad_glColor3bv = NULL; 319 | PFNGLCOLOR3DPROC glad_glColor3d = NULL; 320 | PFNGLCOLOR3DVPROC glad_glColor3dv = NULL; 321 | PFNGLCOLOR3FPROC glad_glColor3f = NULL; 322 | PFNGLCOLOR3FVPROC glad_glColor3fv = NULL; 323 | PFNGLCOLOR3IPROC glad_glColor3i = NULL; 324 | PFNGLCOLOR3IVPROC glad_glColor3iv = NULL; 325 | PFNGLCOLOR3SPROC glad_glColor3s = NULL; 326 | PFNGLCOLOR3SVPROC glad_glColor3sv = NULL; 327 | PFNGLCOLOR3UBPROC glad_glColor3ub = NULL; 328 | PFNGLCOLOR3UBVPROC glad_glColor3ubv = NULL; 329 | PFNGLCOLOR3UIPROC glad_glColor3ui = NULL; 330 | PFNGLCOLOR3UIVPROC glad_glColor3uiv = NULL; 331 | PFNGLCOLOR3USPROC glad_glColor3us = NULL; 332 | PFNGLCOLOR3USVPROC glad_glColor3usv = NULL; 333 | PFNGLCOLOR4BPROC glad_glColor4b = NULL; 334 | PFNGLCOLOR4BVPROC glad_glColor4bv = NULL; 335 | PFNGLCOLOR4DPROC glad_glColor4d = NULL; 336 | PFNGLCOLOR4DVPROC glad_glColor4dv = NULL; 337 | PFNGLCOLOR4FPROC glad_glColor4f = NULL; 338 | PFNGLCOLOR4FVPROC glad_glColor4fv = NULL; 339 | PFNGLCOLOR4IPROC glad_glColor4i = NULL; 340 | PFNGLCOLOR4IVPROC glad_glColor4iv = NULL; 341 | PFNGLCOLOR4SPROC glad_glColor4s = NULL; 342 | PFNGLCOLOR4SVPROC glad_glColor4sv = NULL; 343 | PFNGLCOLOR4UBPROC glad_glColor4ub = NULL; 344 | PFNGLCOLOR4UBVPROC glad_glColor4ubv = NULL; 345 | PFNGLCOLOR4UIPROC glad_glColor4ui = NULL; 346 | PFNGLCOLOR4UIVPROC glad_glColor4uiv = NULL; 347 | PFNGLCOLOR4USPROC glad_glColor4us = NULL; 348 | PFNGLCOLOR4USVPROC glad_glColor4usv = NULL; 349 | PFNGLCOLORMASKPROC glad_glColorMask = NULL; 350 | PFNGLCOLORMASKIPROC glad_glColorMaski = NULL; 351 | PFNGLCOLORMATERIALPROC glad_glColorMaterial = NULL; 352 | PFNGLCOLORP3UIPROC glad_glColorP3ui = NULL; 353 | PFNGLCOLORP3UIVPROC glad_glColorP3uiv = NULL; 354 | PFNGLCOLORP4UIPROC glad_glColorP4ui = NULL; 355 | PFNGLCOLORP4UIVPROC glad_glColorP4uiv = NULL; 356 | PFNGLCOLORPOINTERPROC glad_glColorPointer = NULL; 357 | PFNGLCOMPILESHADERPROC glad_glCompileShader = NULL; 358 | PFNGLCOMPRESSEDTEXIMAGE1DPROC glad_glCompressedTexImage1D = NULL; 359 | PFNGLCOMPRESSEDTEXIMAGE2DPROC glad_glCompressedTexImage2D = NULL; 360 | PFNGLCOMPRESSEDTEXIMAGE3DPROC glad_glCompressedTexImage3D = NULL; 361 | PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glad_glCompressedTexSubImage1D = NULL; 362 | PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glad_glCompressedTexSubImage2D = NULL; 363 | PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glad_glCompressedTexSubImage3D = NULL; 364 | PFNGLCOPYBUFFERSUBDATAPROC glad_glCopyBufferSubData = NULL; 365 | PFNGLCOPYPIXELSPROC glad_glCopyPixels = NULL; 366 | PFNGLCOPYTEXIMAGE1DPROC glad_glCopyTexImage1D = NULL; 367 | PFNGLCOPYTEXIMAGE2DPROC glad_glCopyTexImage2D = NULL; 368 | PFNGLCOPYTEXSUBIMAGE1DPROC glad_glCopyTexSubImage1D = NULL; 369 | PFNGLCOPYTEXSUBIMAGE2DPROC glad_glCopyTexSubImage2D = NULL; 370 | PFNGLCOPYTEXSUBIMAGE3DPROC glad_glCopyTexSubImage3D = NULL; 371 | PFNGLCREATEPROGRAMPROC glad_glCreateProgram = NULL; 372 | PFNGLCREATESHADERPROC glad_glCreateShader = NULL; 373 | PFNGLCULLFACEPROC glad_glCullFace = NULL; 374 | PFNGLDELETEBUFFERSPROC glad_glDeleteBuffers = NULL; 375 | PFNGLDELETEFRAMEBUFFERSPROC glad_glDeleteFramebuffers = NULL; 376 | PFNGLDELETELISTSPROC glad_glDeleteLists = NULL; 377 | PFNGLDELETEPROGRAMPROC glad_glDeleteProgram = NULL; 378 | PFNGLDELETEQUERIESPROC glad_glDeleteQueries = NULL; 379 | PFNGLDELETERENDERBUFFERSPROC glad_glDeleteRenderbuffers = NULL; 380 | PFNGLDELETESAMPLERSPROC glad_glDeleteSamplers = NULL; 381 | PFNGLDELETESHADERPROC glad_glDeleteShader = NULL; 382 | PFNGLDELETESYNCPROC glad_glDeleteSync = NULL; 383 | PFNGLDELETETEXTURESPROC glad_glDeleteTextures = NULL; 384 | PFNGLDELETEVERTEXARRAYSPROC glad_glDeleteVertexArrays = NULL; 385 | PFNGLDEPTHFUNCPROC glad_glDepthFunc = NULL; 386 | PFNGLDEPTHMASKPROC glad_glDepthMask = NULL; 387 | PFNGLDEPTHRANGEPROC glad_glDepthRange = NULL; 388 | PFNGLDETACHSHADERPROC glad_glDetachShader = NULL; 389 | PFNGLDISABLEPROC glad_glDisable = NULL; 390 | PFNGLDISABLECLIENTSTATEPROC glad_glDisableClientState = NULL; 391 | PFNGLDISABLEVERTEXATTRIBARRAYPROC glad_glDisableVertexAttribArray = NULL; 392 | PFNGLDISABLEIPROC glad_glDisablei = NULL; 393 | PFNGLDRAWARRAYSPROC glad_glDrawArrays = NULL; 394 | PFNGLDRAWARRAYSINSTANCEDPROC glad_glDrawArraysInstanced = NULL; 395 | PFNGLDRAWBUFFERPROC glad_glDrawBuffer = NULL; 396 | PFNGLDRAWBUFFERSPROC glad_glDrawBuffers = NULL; 397 | PFNGLDRAWELEMENTSPROC glad_glDrawElements = NULL; 398 | PFNGLDRAWELEMENTSBASEVERTEXPROC glad_glDrawElementsBaseVertex = NULL; 399 | PFNGLDRAWELEMENTSINSTANCEDPROC glad_glDrawElementsInstanced = NULL; 400 | PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glad_glDrawElementsInstancedBaseVertex = NULL; 401 | PFNGLDRAWPIXELSPROC glad_glDrawPixels = NULL; 402 | PFNGLDRAWRANGEELEMENTSPROC glad_glDrawRangeElements = NULL; 403 | PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glad_glDrawRangeElementsBaseVertex = NULL; 404 | PFNGLEDGEFLAGPROC glad_glEdgeFlag = NULL; 405 | PFNGLEDGEFLAGPOINTERPROC glad_glEdgeFlagPointer = NULL; 406 | PFNGLEDGEFLAGVPROC glad_glEdgeFlagv = NULL; 407 | PFNGLENABLEPROC glad_glEnable = NULL; 408 | PFNGLENABLECLIENTSTATEPROC glad_glEnableClientState = NULL; 409 | PFNGLENABLEVERTEXATTRIBARRAYPROC glad_glEnableVertexAttribArray = NULL; 410 | PFNGLENABLEIPROC glad_glEnablei = NULL; 411 | PFNGLENDPROC glad_glEnd = NULL; 412 | PFNGLENDCONDITIONALRENDERPROC glad_glEndConditionalRender = NULL; 413 | PFNGLENDLISTPROC glad_glEndList = NULL; 414 | PFNGLENDQUERYPROC glad_glEndQuery = NULL; 415 | PFNGLENDTRANSFORMFEEDBACKPROC glad_glEndTransformFeedback = NULL; 416 | PFNGLEVALCOORD1DPROC glad_glEvalCoord1d = NULL; 417 | PFNGLEVALCOORD1DVPROC glad_glEvalCoord1dv = NULL; 418 | PFNGLEVALCOORD1FPROC glad_glEvalCoord1f = NULL; 419 | PFNGLEVALCOORD1FVPROC glad_glEvalCoord1fv = NULL; 420 | PFNGLEVALCOORD2DPROC glad_glEvalCoord2d = NULL; 421 | PFNGLEVALCOORD2DVPROC glad_glEvalCoord2dv = NULL; 422 | PFNGLEVALCOORD2FPROC glad_glEvalCoord2f = NULL; 423 | PFNGLEVALCOORD2FVPROC glad_glEvalCoord2fv = NULL; 424 | PFNGLEVALMESH1PROC glad_glEvalMesh1 = NULL; 425 | PFNGLEVALMESH2PROC glad_glEvalMesh2 = NULL; 426 | PFNGLEVALPOINT1PROC glad_glEvalPoint1 = NULL; 427 | PFNGLEVALPOINT2PROC glad_glEvalPoint2 = NULL; 428 | PFNGLFEEDBACKBUFFERPROC glad_glFeedbackBuffer = NULL; 429 | PFNGLFENCESYNCPROC glad_glFenceSync = NULL; 430 | PFNGLFINISHPROC glad_glFinish = NULL; 431 | PFNGLFLUSHPROC glad_glFlush = NULL; 432 | PFNGLFLUSHMAPPEDBUFFERRANGEPROC glad_glFlushMappedBufferRange = NULL; 433 | PFNGLFOGCOORDPOINTERPROC glad_glFogCoordPointer = NULL; 434 | PFNGLFOGCOORDDPROC glad_glFogCoordd = NULL; 435 | PFNGLFOGCOORDDVPROC glad_glFogCoorddv = NULL; 436 | PFNGLFOGCOORDFPROC glad_glFogCoordf = NULL; 437 | PFNGLFOGCOORDFVPROC glad_glFogCoordfv = NULL; 438 | PFNGLFOGFPROC glad_glFogf = NULL; 439 | PFNGLFOGFVPROC glad_glFogfv = NULL; 440 | PFNGLFOGIPROC glad_glFogi = NULL; 441 | PFNGLFOGIVPROC glad_glFogiv = NULL; 442 | PFNGLFRAMEBUFFERRENDERBUFFERPROC glad_glFramebufferRenderbuffer = NULL; 443 | PFNGLFRAMEBUFFERTEXTUREPROC glad_glFramebufferTexture = NULL; 444 | PFNGLFRAMEBUFFERTEXTURE1DPROC glad_glFramebufferTexture1D = NULL; 445 | PFNGLFRAMEBUFFERTEXTURE2DPROC glad_glFramebufferTexture2D = NULL; 446 | PFNGLFRAMEBUFFERTEXTURE3DPROC glad_glFramebufferTexture3D = NULL; 447 | PFNGLFRAMEBUFFERTEXTURELAYERPROC glad_glFramebufferTextureLayer = NULL; 448 | PFNGLFRONTFACEPROC glad_glFrontFace = NULL; 449 | PFNGLFRUSTUMPROC glad_glFrustum = NULL; 450 | PFNGLGENBUFFERSPROC glad_glGenBuffers = NULL; 451 | PFNGLGENFRAMEBUFFERSPROC glad_glGenFramebuffers = NULL; 452 | PFNGLGENLISTSPROC glad_glGenLists = NULL; 453 | PFNGLGENQUERIESPROC glad_glGenQueries = NULL; 454 | PFNGLGENRENDERBUFFERSPROC glad_glGenRenderbuffers = NULL; 455 | PFNGLGENSAMPLERSPROC glad_glGenSamplers = NULL; 456 | PFNGLGENTEXTURESPROC glad_glGenTextures = NULL; 457 | PFNGLGENVERTEXARRAYSPROC glad_glGenVertexArrays = NULL; 458 | PFNGLGENERATEMIPMAPPROC glad_glGenerateMipmap = NULL; 459 | PFNGLGETACTIVEATTRIBPROC glad_glGetActiveAttrib = NULL; 460 | PFNGLGETACTIVEUNIFORMPROC glad_glGetActiveUniform = NULL; 461 | PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glad_glGetActiveUniformBlockName = NULL; 462 | PFNGLGETACTIVEUNIFORMBLOCKIVPROC glad_glGetActiveUniformBlockiv = NULL; 463 | PFNGLGETACTIVEUNIFORMNAMEPROC glad_glGetActiveUniformName = NULL; 464 | PFNGLGETACTIVEUNIFORMSIVPROC glad_glGetActiveUniformsiv = NULL; 465 | PFNGLGETATTACHEDSHADERSPROC glad_glGetAttachedShaders = NULL; 466 | PFNGLGETATTRIBLOCATIONPROC glad_glGetAttribLocation = NULL; 467 | PFNGLGETBOOLEANI_VPROC glad_glGetBooleani_v = NULL; 468 | PFNGLGETBOOLEANVPROC glad_glGetBooleanv = NULL; 469 | PFNGLGETBUFFERPARAMETERI64VPROC glad_glGetBufferParameteri64v = NULL; 470 | PFNGLGETBUFFERPARAMETERIVPROC glad_glGetBufferParameteriv = NULL; 471 | PFNGLGETBUFFERPOINTERVPROC glad_glGetBufferPointerv = NULL; 472 | PFNGLGETBUFFERSUBDATAPROC glad_glGetBufferSubData = NULL; 473 | PFNGLGETCLIPPLANEPROC glad_glGetClipPlane = NULL; 474 | PFNGLGETCOMPRESSEDTEXIMAGEPROC glad_glGetCompressedTexImage = NULL; 475 | PFNGLGETDOUBLEVPROC glad_glGetDoublev = NULL; 476 | PFNGLGETERRORPROC glad_glGetError = NULL; 477 | PFNGLGETFLOATVPROC glad_glGetFloatv = NULL; 478 | PFNGLGETFRAGDATAINDEXPROC glad_glGetFragDataIndex = NULL; 479 | PFNGLGETFRAGDATALOCATIONPROC glad_glGetFragDataLocation = NULL; 480 | PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetFramebufferAttachmentParameteriv = NULL; 481 | PFNGLGETINTEGER64I_VPROC glad_glGetInteger64i_v = NULL; 482 | PFNGLGETINTEGER64VPROC glad_glGetInteger64v = NULL; 483 | PFNGLGETINTEGERI_VPROC glad_glGetIntegeri_v = NULL; 484 | PFNGLGETINTEGERVPROC glad_glGetIntegerv = NULL; 485 | PFNGLGETLIGHTFVPROC glad_glGetLightfv = NULL; 486 | PFNGLGETLIGHTIVPROC glad_glGetLightiv = NULL; 487 | PFNGLGETMAPDVPROC glad_glGetMapdv = NULL; 488 | PFNGLGETMAPFVPROC glad_glGetMapfv = NULL; 489 | PFNGLGETMAPIVPROC glad_glGetMapiv = NULL; 490 | PFNGLGETMATERIALFVPROC glad_glGetMaterialfv = NULL; 491 | PFNGLGETMATERIALIVPROC glad_glGetMaterialiv = NULL; 492 | PFNGLGETMULTISAMPLEFVPROC glad_glGetMultisamplefv = NULL; 493 | PFNGLGETPIXELMAPFVPROC glad_glGetPixelMapfv = NULL; 494 | PFNGLGETPIXELMAPUIVPROC glad_glGetPixelMapuiv = NULL; 495 | PFNGLGETPIXELMAPUSVPROC glad_glGetPixelMapusv = NULL; 496 | PFNGLGETPOINTERVPROC glad_glGetPointerv = NULL; 497 | PFNGLGETPOLYGONSTIPPLEPROC glad_glGetPolygonStipple = NULL; 498 | PFNGLGETPROGRAMINFOLOGPROC glad_glGetProgramInfoLog = NULL; 499 | PFNGLGETPROGRAMIVPROC glad_glGetProgramiv = NULL; 500 | PFNGLGETQUERYOBJECTI64VPROC glad_glGetQueryObjecti64v = NULL; 501 | PFNGLGETQUERYOBJECTIVPROC glad_glGetQueryObjectiv = NULL; 502 | PFNGLGETQUERYOBJECTUI64VPROC glad_glGetQueryObjectui64v = NULL; 503 | PFNGLGETQUERYOBJECTUIVPROC glad_glGetQueryObjectuiv = NULL; 504 | PFNGLGETQUERYIVPROC glad_glGetQueryiv = NULL; 505 | PFNGLGETRENDERBUFFERPARAMETERIVPROC glad_glGetRenderbufferParameteriv = NULL; 506 | PFNGLGETSAMPLERPARAMETERIIVPROC glad_glGetSamplerParameterIiv = NULL; 507 | PFNGLGETSAMPLERPARAMETERIUIVPROC glad_glGetSamplerParameterIuiv = NULL; 508 | PFNGLGETSAMPLERPARAMETERFVPROC glad_glGetSamplerParameterfv = NULL; 509 | PFNGLGETSAMPLERPARAMETERIVPROC glad_glGetSamplerParameteriv = NULL; 510 | PFNGLGETSHADERINFOLOGPROC glad_glGetShaderInfoLog = NULL; 511 | PFNGLGETSHADERSOURCEPROC glad_glGetShaderSource = NULL; 512 | PFNGLGETSHADERIVPROC glad_glGetShaderiv = NULL; 513 | PFNGLGETSTRINGPROC glad_glGetString = NULL; 514 | PFNGLGETSTRINGIPROC glad_glGetStringi = NULL; 515 | PFNGLGETSYNCIVPROC glad_glGetSynciv = NULL; 516 | PFNGLGETTEXENVFVPROC glad_glGetTexEnvfv = NULL; 517 | PFNGLGETTEXENVIVPROC glad_glGetTexEnviv = NULL; 518 | PFNGLGETTEXGENDVPROC glad_glGetTexGendv = NULL; 519 | PFNGLGETTEXGENFVPROC glad_glGetTexGenfv = NULL; 520 | PFNGLGETTEXGENIVPROC glad_glGetTexGeniv = NULL; 521 | PFNGLGETTEXIMAGEPROC glad_glGetTexImage = NULL; 522 | PFNGLGETTEXLEVELPARAMETERFVPROC glad_glGetTexLevelParameterfv = NULL; 523 | PFNGLGETTEXLEVELPARAMETERIVPROC glad_glGetTexLevelParameteriv = NULL; 524 | PFNGLGETTEXPARAMETERIIVPROC glad_glGetTexParameterIiv = NULL; 525 | PFNGLGETTEXPARAMETERIUIVPROC glad_glGetTexParameterIuiv = NULL; 526 | PFNGLGETTEXPARAMETERFVPROC glad_glGetTexParameterfv = NULL; 527 | PFNGLGETTEXPARAMETERIVPROC glad_glGetTexParameteriv = NULL; 528 | PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glad_glGetTransformFeedbackVarying = NULL; 529 | PFNGLGETUNIFORMBLOCKINDEXPROC glad_glGetUniformBlockIndex = NULL; 530 | PFNGLGETUNIFORMINDICESPROC glad_glGetUniformIndices = NULL; 531 | PFNGLGETUNIFORMLOCATIONPROC glad_glGetUniformLocation = NULL; 532 | PFNGLGETUNIFORMFVPROC glad_glGetUniformfv = NULL; 533 | PFNGLGETUNIFORMIVPROC glad_glGetUniformiv = NULL; 534 | PFNGLGETUNIFORMUIVPROC glad_glGetUniformuiv = NULL; 535 | PFNGLGETVERTEXATTRIBIIVPROC glad_glGetVertexAttribIiv = NULL; 536 | PFNGLGETVERTEXATTRIBIUIVPROC glad_glGetVertexAttribIuiv = NULL; 537 | PFNGLGETVERTEXATTRIBPOINTERVPROC glad_glGetVertexAttribPointerv = NULL; 538 | PFNGLGETVERTEXATTRIBDVPROC glad_glGetVertexAttribdv = NULL; 539 | PFNGLGETVERTEXATTRIBFVPROC glad_glGetVertexAttribfv = NULL; 540 | PFNGLGETVERTEXATTRIBIVPROC glad_glGetVertexAttribiv = NULL; 541 | PFNGLHINTPROC glad_glHint = NULL; 542 | PFNGLINDEXMASKPROC glad_glIndexMask = NULL; 543 | PFNGLINDEXPOINTERPROC glad_glIndexPointer = NULL; 544 | PFNGLINDEXDPROC glad_glIndexd = NULL; 545 | PFNGLINDEXDVPROC glad_glIndexdv = NULL; 546 | PFNGLINDEXFPROC glad_glIndexf = NULL; 547 | PFNGLINDEXFVPROC glad_glIndexfv = NULL; 548 | PFNGLINDEXIPROC glad_glIndexi = NULL; 549 | PFNGLINDEXIVPROC glad_glIndexiv = NULL; 550 | PFNGLINDEXSPROC glad_glIndexs = NULL; 551 | PFNGLINDEXSVPROC glad_glIndexsv = NULL; 552 | PFNGLINDEXUBPROC glad_glIndexub = NULL; 553 | PFNGLINDEXUBVPROC glad_glIndexubv = NULL; 554 | PFNGLINITNAMESPROC glad_glInitNames = NULL; 555 | PFNGLINTERLEAVEDARRAYSPROC glad_glInterleavedArrays = NULL; 556 | PFNGLISBUFFERPROC glad_glIsBuffer = NULL; 557 | PFNGLISENABLEDPROC glad_glIsEnabled = NULL; 558 | PFNGLISENABLEDIPROC glad_glIsEnabledi = NULL; 559 | PFNGLISFRAMEBUFFERPROC glad_glIsFramebuffer = NULL; 560 | PFNGLISLISTPROC glad_glIsList = NULL; 561 | PFNGLISPROGRAMPROC glad_glIsProgram = NULL; 562 | PFNGLISQUERYPROC glad_glIsQuery = NULL; 563 | PFNGLISRENDERBUFFERPROC glad_glIsRenderbuffer = NULL; 564 | PFNGLISSAMPLERPROC glad_glIsSampler = NULL; 565 | PFNGLISSHADERPROC glad_glIsShader = NULL; 566 | PFNGLISSYNCPROC glad_glIsSync = NULL; 567 | PFNGLISTEXTUREPROC glad_glIsTexture = NULL; 568 | PFNGLISVERTEXARRAYPROC glad_glIsVertexArray = NULL; 569 | PFNGLLIGHTMODELFPROC glad_glLightModelf = NULL; 570 | PFNGLLIGHTMODELFVPROC glad_glLightModelfv = NULL; 571 | PFNGLLIGHTMODELIPROC glad_glLightModeli = NULL; 572 | PFNGLLIGHTMODELIVPROC glad_glLightModeliv = NULL; 573 | PFNGLLIGHTFPROC glad_glLightf = NULL; 574 | PFNGLLIGHTFVPROC glad_glLightfv = NULL; 575 | PFNGLLIGHTIPROC glad_glLighti = NULL; 576 | PFNGLLIGHTIVPROC glad_glLightiv = NULL; 577 | PFNGLLINESTIPPLEPROC glad_glLineStipple = NULL; 578 | PFNGLLINEWIDTHPROC glad_glLineWidth = NULL; 579 | PFNGLLINKPROGRAMPROC glad_glLinkProgram = NULL; 580 | PFNGLLISTBASEPROC glad_glListBase = NULL; 581 | PFNGLLOADIDENTITYPROC glad_glLoadIdentity = NULL; 582 | PFNGLLOADMATRIXDPROC glad_glLoadMatrixd = NULL; 583 | PFNGLLOADMATRIXFPROC glad_glLoadMatrixf = NULL; 584 | PFNGLLOADNAMEPROC glad_glLoadName = NULL; 585 | PFNGLLOADTRANSPOSEMATRIXDPROC glad_glLoadTransposeMatrixd = NULL; 586 | PFNGLLOADTRANSPOSEMATRIXFPROC glad_glLoadTransposeMatrixf = NULL; 587 | PFNGLLOGICOPPROC glad_glLogicOp = NULL; 588 | PFNGLMAP1DPROC glad_glMap1d = NULL; 589 | PFNGLMAP1FPROC glad_glMap1f = NULL; 590 | PFNGLMAP2DPROC glad_glMap2d = NULL; 591 | PFNGLMAP2FPROC glad_glMap2f = NULL; 592 | PFNGLMAPBUFFERPROC glad_glMapBuffer = NULL; 593 | PFNGLMAPBUFFERRANGEPROC glad_glMapBufferRange = NULL; 594 | PFNGLMAPGRID1DPROC glad_glMapGrid1d = NULL; 595 | PFNGLMAPGRID1FPROC glad_glMapGrid1f = NULL; 596 | PFNGLMAPGRID2DPROC glad_glMapGrid2d = NULL; 597 | PFNGLMAPGRID2FPROC glad_glMapGrid2f = NULL; 598 | PFNGLMATERIALFPROC glad_glMaterialf = NULL; 599 | PFNGLMATERIALFVPROC glad_glMaterialfv = NULL; 600 | PFNGLMATERIALIPROC glad_glMateriali = NULL; 601 | PFNGLMATERIALIVPROC glad_glMaterialiv = NULL; 602 | PFNGLMATRIXMODEPROC glad_glMatrixMode = NULL; 603 | PFNGLMULTMATRIXDPROC glad_glMultMatrixd = NULL; 604 | PFNGLMULTMATRIXFPROC glad_glMultMatrixf = NULL; 605 | PFNGLMULTTRANSPOSEMATRIXDPROC glad_glMultTransposeMatrixd = NULL; 606 | PFNGLMULTTRANSPOSEMATRIXFPROC glad_glMultTransposeMatrixf = NULL; 607 | PFNGLMULTIDRAWARRAYSPROC glad_glMultiDrawArrays = NULL; 608 | PFNGLMULTIDRAWELEMENTSPROC glad_glMultiDrawElements = NULL; 609 | PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glad_glMultiDrawElementsBaseVertex = NULL; 610 | PFNGLMULTITEXCOORD1DPROC glad_glMultiTexCoord1d = NULL; 611 | PFNGLMULTITEXCOORD1DVPROC glad_glMultiTexCoord1dv = NULL; 612 | PFNGLMULTITEXCOORD1FPROC glad_glMultiTexCoord1f = NULL; 613 | PFNGLMULTITEXCOORD1FVPROC glad_glMultiTexCoord1fv = NULL; 614 | PFNGLMULTITEXCOORD1IPROC glad_glMultiTexCoord1i = NULL; 615 | PFNGLMULTITEXCOORD1IVPROC glad_glMultiTexCoord1iv = NULL; 616 | PFNGLMULTITEXCOORD1SPROC glad_glMultiTexCoord1s = NULL; 617 | PFNGLMULTITEXCOORD1SVPROC glad_glMultiTexCoord1sv = NULL; 618 | PFNGLMULTITEXCOORD2DPROC glad_glMultiTexCoord2d = NULL; 619 | PFNGLMULTITEXCOORD2DVPROC glad_glMultiTexCoord2dv = NULL; 620 | PFNGLMULTITEXCOORD2FPROC glad_glMultiTexCoord2f = NULL; 621 | PFNGLMULTITEXCOORD2FVPROC glad_glMultiTexCoord2fv = NULL; 622 | PFNGLMULTITEXCOORD2IPROC glad_glMultiTexCoord2i = NULL; 623 | PFNGLMULTITEXCOORD2IVPROC glad_glMultiTexCoord2iv = NULL; 624 | PFNGLMULTITEXCOORD2SPROC glad_glMultiTexCoord2s = NULL; 625 | PFNGLMULTITEXCOORD2SVPROC glad_glMultiTexCoord2sv = NULL; 626 | PFNGLMULTITEXCOORD3DPROC glad_glMultiTexCoord3d = NULL; 627 | PFNGLMULTITEXCOORD3DVPROC glad_glMultiTexCoord3dv = NULL; 628 | PFNGLMULTITEXCOORD3FPROC glad_glMultiTexCoord3f = NULL; 629 | PFNGLMULTITEXCOORD3FVPROC glad_glMultiTexCoord3fv = NULL; 630 | PFNGLMULTITEXCOORD3IPROC glad_glMultiTexCoord3i = NULL; 631 | PFNGLMULTITEXCOORD3IVPROC glad_glMultiTexCoord3iv = NULL; 632 | PFNGLMULTITEXCOORD3SPROC glad_glMultiTexCoord3s = NULL; 633 | PFNGLMULTITEXCOORD3SVPROC glad_glMultiTexCoord3sv = NULL; 634 | PFNGLMULTITEXCOORD4DPROC glad_glMultiTexCoord4d = NULL; 635 | PFNGLMULTITEXCOORD4DVPROC glad_glMultiTexCoord4dv = NULL; 636 | PFNGLMULTITEXCOORD4FPROC glad_glMultiTexCoord4f = NULL; 637 | PFNGLMULTITEXCOORD4FVPROC glad_glMultiTexCoord4fv = NULL; 638 | PFNGLMULTITEXCOORD4IPROC glad_glMultiTexCoord4i = NULL; 639 | PFNGLMULTITEXCOORD4IVPROC glad_glMultiTexCoord4iv = NULL; 640 | PFNGLMULTITEXCOORD4SPROC glad_glMultiTexCoord4s = NULL; 641 | PFNGLMULTITEXCOORD4SVPROC glad_glMultiTexCoord4sv = NULL; 642 | PFNGLMULTITEXCOORDP1UIPROC glad_glMultiTexCoordP1ui = NULL; 643 | PFNGLMULTITEXCOORDP1UIVPROC glad_glMultiTexCoordP1uiv = NULL; 644 | PFNGLMULTITEXCOORDP2UIPROC glad_glMultiTexCoordP2ui = NULL; 645 | PFNGLMULTITEXCOORDP2UIVPROC glad_glMultiTexCoordP2uiv = NULL; 646 | PFNGLMULTITEXCOORDP3UIPROC glad_glMultiTexCoordP3ui = NULL; 647 | PFNGLMULTITEXCOORDP3UIVPROC glad_glMultiTexCoordP3uiv = NULL; 648 | PFNGLMULTITEXCOORDP4UIPROC glad_glMultiTexCoordP4ui = NULL; 649 | PFNGLMULTITEXCOORDP4UIVPROC glad_glMultiTexCoordP4uiv = NULL; 650 | PFNGLNEWLISTPROC glad_glNewList = NULL; 651 | PFNGLNORMAL3BPROC glad_glNormal3b = NULL; 652 | PFNGLNORMAL3BVPROC glad_glNormal3bv = NULL; 653 | PFNGLNORMAL3DPROC glad_glNormal3d = NULL; 654 | PFNGLNORMAL3DVPROC glad_glNormal3dv = NULL; 655 | PFNGLNORMAL3FPROC glad_glNormal3f = NULL; 656 | PFNGLNORMAL3FVPROC glad_glNormal3fv = NULL; 657 | PFNGLNORMAL3IPROC glad_glNormal3i = NULL; 658 | PFNGLNORMAL3IVPROC glad_glNormal3iv = NULL; 659 | PFNGLNORMAL3SPROC glad_glNormal3s = NULL; 660 | PFNGLNORMAL3SVPROC glad_glNormal3sv = NULL; 661 | PFNGLNORMALP3UIPROC glad_glNormalP3ui = NULL; 662 | PFNGLNORMALP3UIVPROC glad_glNormalP3uiv = NULL; 663 | PFNGLNORMALPOINTERPROC glad_glNormalPointer = NULL; 664 | PFNGLORTHOPROC glad_glOrtho = NULL; 665 | PFNGLPASSTHROUGHPROC glad_glPassThrough = NULL; 666 | PFNGLPIXELMAPFVPROC glad_glPixelMapfv = NULL; 667 | PFNGLPIXELMAPUIVPROC glad_glPixelMapuiv = NULL; 668 | PFNGLPIXELMAPUSVPROC glad_glPixelMapusv = NULL; 669 | PFNGLPIXELSTOREFPROC glad_glPixelStoref = NULL; 670 | PFNGLPIXELSTOREIPROC glad_glPixelStorei = NULL; 671 | PFNGLPIXELTRANSFERFPROC glad_glPixelTransferf = NULL; 672 | PFNGLPIXELTRANSFERIPROC glad_glPixelTransferi = NULL; 673 | PFNGLPIXELZOOMPROC glad_glPixelZoom = NULL; 674 | PFNGLPOINTPARAMETERFPROC glad_glPointParameterf = NULL; 675 | PFNGLPOINTPARAMETERFVPROC glad_glPointParameterfv = NULL; 676 | PFNGLPOINTPARAMETERIPROC glad_glPointParameteri = NULL; 677 | PFNGLPOINTPARAMETERIVPROC glad_glPointParameteriv = NULL; 678 | PFNGLPOINTSIZEPROC glad_glPointSize = NULL; 679 | PFNGLPOLYGONMODEPROC glad_glPolygonMode = NULL; 680 | PFNGLPOLYGONOFFSETPROC glad_glPolygonOffset = NULL; 681 | PFNGLPOLYGONSTIPPLEPROC glad_glPolygonStipple = NULL; 682 | PFNGLPOPATTRIBPROC glad_glPopAttrib = NULL; 683 | PFNGLPOPCLIENTATTRIBPROC glad_glPopClientAttrib = NULL; 684 | PFNGLPOPMATRIXPROC glad_glPopMatrix = NULL; 685 | PFNGLPOPNAMEPROC glad_glPopName = NULL; 686 | PFNGLPRIMITIVERESTARTINDEXPROC glad_glPrimitiveRestartIndex = NULL; 687 | PFNGLPRIORITIZETEXTURESPROC glad_glPrioritizeTextures = NULL; 688 | PFNGLPROVOKINGVERTEXPROC glad_glProvokingVertex = NULL; 689 | PFNGLPUSHATTRIBPROC glad_glPushAttrib = NULL; 690 | PFNGLPUSHCLIENTATTRIBPROC glad_glPushClientAttrib = NULL; 691 | PFNGLPUSHMATRIXPROC glad_glPushMatrix = NULL; 692 | PFNGLPUSHNAMEPROC glad_glPushName = NULL; 693 | PFNGLQUERYCOUNTERPROC glad_glQueryCounter = NULL; 694 | PFNGLRASTERPOS2DPROC glad_glRasterPos2d = NULL; 695 | PFNGLRASTERPOS2DVPROC glad_glRasterPos2dv = NULL; 696 | PFNGLRASTERPOS2FPROC glad_glRasterPos2f = NULL; 697 | PFNGLRASTERPOS2FVPROC glad_glRasterPos2fv = NULL; 698 | PFNGLRASTERPOS2IPROC glad_glRasterPos2i = NULL; 699 | PFNGLRASTERPOS2IVPROC glad_glRasterPos2iv = NULL; 700 | PFNGLRASTERPOS2SPROC glad_glRasterPos2s = NULL; 701 | PFNGLRASTERPOS2SVPROC glad_glRasterPos2sv = NULL; 702 | PFNGLRASTERPOS3DPROC glad_glRasterPos3d = NULL; 703 | PFNGLRASTERPOS3DVPROC glad_glRasterPos3dv = NULL; 704 | PFNGLRASTERPOS3FPROC glad_glRasterPos3f = NULL; 705 | PFNGLRASTERPOS3FVPROC glad_glRasterPos3fv = NULL; 706 | PFNGLRASTERPOS3IPROC glad_glRasterPos3i = NULL; 707 | PFNGLRASTERPOS3IVPROC glad_glRasterPos3iv = NULL; 708 | PFNGLRASTERPOS3SPROC glad_glRasterPos3s = NULL; 709 | PFNGLRASTERPOS3SVPROC glad_glRasterPos3sv = NULL; 710 | PFNGLRASTERPOS4DPROC glad_glRasterPos4d = NULL; 711 | PFNGLRASTERPOS4DVPROC glad_glRasterPos4dv = NULL; 712 | PFNGLRASTERPOS4FPROC glad_glRasterPos4f = NULL; 713 | PFNGLRASTERPOS4FVPROC glad_glRasterPos4fv = NULL; 714 | PFNGLRASTERPOS4IPROC glad_glRasterPos4i = NULL; 715 | PFNGLRASTERPOS4IVPROC glad_glRasterPos4iv = NULL; 716 | PFNGLRASTERPOS4SPROC glad_glRasterPos4s = NULL; 717 | PFNGLRASTERPOS4SVPROC glad_glRasterPos4sv = NULL; 718 | PFNGLREADBUFFERPROC glad_glReadBuffer = NULL; 719 | PFNGLREADPIXELSPROC glad_glReadPixels = NULL; 720 | PFNGLRECTDPROC glad_glRectd = NULL; 721 | PFNGLRECTDVPROC glad_glRectdv = NULL; 722 | PFNGLRECTFPROC glad_glRectf = NULL; 723 | PFNGLRECTFVPROC glad_glRectfv = NULL; 724 | PFNGLRECTIPROC glad_glRecti = NULL; 725 | PFNGLRECTIVPROC glad_glRectiv = NULL; 726 | PFNGLRECTSPROC glad_glRects = NULL; 727 | PFNGLRECTSVPROC glad_glRectsv = NULL; 728 | PFNGLRENDERMODEPROC glad_glRenderMode = NULL; 729 | PFNGLRENDERBUFFERSTORAGEPROC glad_glRenderbufferStorage = NULL; 730 | PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glRenderbufferStorageMultisample = NULL; 731 | PFNGLROTATEDPROC glad_glRotated = NULL; 732 | PFNGLROTATEFPROC glad_glRotatef = NULL; 733 | PFNGLSAMPLECOVERAGEPROC glad_glSampleCoverage = NULL; 734 | PFNGLSAMPLEMASKIPROC glad_glSampleMaski = NULL; 735 | PFNGLSAMPLERPARAMETERIIVPROC glad_glSamplerParameterIiv = NULL; 736 | PFNGLSAMPLERPARAMETERIUIVPROC glad_glSamplerParameterIuiv = NULL; 737 | PFNGLSAMPLERPARAMETERFPROC glad_glSamplerParameterf = NULL; 738 | PFNGLSAMPLERPARAMETERFVPROC glad_glSamplerParameterfv = NULL; 739 | PFNGLSAMPLERPARAMETERIPROC glad_glSamplerParameteri = NULL; 740 | PFNGLSAMPLERPARAMETERIVPROC glad_glSamplerParameteriv = NULL; 741 | PFNGLSCALEDPROC glad_glScaled = NULL; 742 | PFNGLSCALEFPROC glad_glScalef = NULL; 743 | PFNGLSCISSORPROC glad_glScissor = NULL; 744 | PFNGLSECONDARYCOLOR3BPROC glad_glSecondaryColor3b = NULL; 745 | PFNGLSECONDARYCOLOR3BVPROC glad_glSecondaryColor3bv = NULL; 746 | PFNGLSECONDARYCOLOR3DPROC glad_glSecondaryColor3d = NULL; 747 | PFNGLSECONDARYCOLOR3DVPROC glad_glSecondaryColor3dv = NULL; 748 | PFNGLSECONDARYCOLOR3FPROC glad_glSecondaryColor3f = NULL; 749 | PFNGLSECONDARYCOLOR3FVPROC glad_glSecondaryColor3fv = NULL; 750 | PFNGLSECONDARYCOLOR3IPROC glad_glSecondaryColor3i = NULL; 751 | PFNGLSECONDARYCOLOR3IVPROC glad_glSecondaryColor3iv = NULL; 752 | PFNGLSECONDARYCOLOR3SPROC glad_glSecondaryColor3s = NULL; 753 | PFNGLSECONDARYCOLOR3SVPROC glad_glSecondaryColor3sv = NULL; 754 | PFNGLSECONDARYCOLOR3UBPROC glad_glSecondaryColor3ub = NULL; 755 | PFNGLSECONDARYCOLOR3UBVPROC glad_glSecondaryColor3ubv = NULL; 756 | PFNGLSECONDARYCOLOR3UIPROC glad_glSecondaryColor3ui = NULL; 757 | PFNGLSECONDARYCOLOR3UIVPROC glad_glSecondaryColor3uiv = NULL; 758 | PFNGLSECONDARYCOLOR3USPROC glad_glSecondaryColor3us = NULL; 759 | PFNGLSECONDARYCOLOR3USVPROC glad_glSecondaryColor3usv = NULL; 760 | PFNGLSECONDARYCOLORP3UIPROC glad_glSecondaryColorP3ui = NULL; 761 | PFNGLSECONDARYCOLORP3UIVPROC glad_glSecondaryColorP3uiv = NULL; 762 | PFNGLSECONDARYCOLORPOINTERPROC glad_glSecondaryColorPointer = NULL; 763 | PFNGLSELECTBUFFERPROC glad_glSelectBuffer = NULL; 764 | PFNGLSHADEMODELPROC glad_glShadeModel = NULL; 765 | PFNGLSHADERSOURCEPROC glad_glShaderSource = NULL; 766 | PFNGLSTENCILFUNCPROC glad_glStencilFunc = NULL; 767 | PFNGLSTENCILFUNCSEPARATEPROC glad_glStencilFuncSeparate = NULL; 768 | PFNGLSTENCILMASKPROC glad_glStencilMask = NULL; 769 | PFNGLSTENCILMASKSEPARATEPROC glad_glStencilMaskSeparate = NULL; 770 | PFNGLSTENCILOPPROC glad_glStencilOp = NULL; 771 | PFNGLSTENCILOPSEPARATEPROC glad_glStencilOpSeparate = NULL; 772 | PFNGLTEXBUFFERPROC glad_glTexBuffer = NULL; 773 | PFNGLTEXCOORD1DPROC glad_glTexCoord1d = NULL; 774 | PFNGLTEXCOORD1DVPROC glad_glTexCoord1dv = NULL; 775 | PFNGLTEXCOORD1FPROC glad_glTexCoord1f = NULL; 776 | PFNGLTEXCOORD1FVPROC glad_glTexCoord1fv = NULL; 777 | PFNGLTEXCOORD1IPROC glad_glTexCoord1i = NULL; 778 | PFNGLTEXCOORD1IVPROC glad_glTexCoord1iv = NULL; 779 | PFNGLTEXCOORD1SPROC glad_glTexCoord1s = NULL; 780 | PFNGLTEXCOORD1SVPROC glad_glTexCoord1sv = NULL; 781 | PFNGLTEXCOORD2DPROC glad_glTexCoord2d = NULL; 782 | PFNGLTEXCOORD2DVPROC glad_glTexCoord2dv = NULL; 783 | PFNGLTEXCOORD2FPROC glad_glTexCoord2f = NULL; 784 | PFNGLTEXCOORD2FVPROC glad_glTexCoord2fv = NULL; 785 | PFNGLTEXCOORD2IPROC glad_glTexCoord2i = NULL; 786 | PFNGLTEXCOORD2IVPROC glad_glTexCoord2iv = NULL; 787 | PFNGLTEXCOORD2SPROC glad_glTexCoord2s = NULL; 788 | PFNGLTEXCOORD2SVPROC glad_glTexCoord2sv = NULL; 789 | PFNGLTEXCOORD3DPROC glad_glTexCoord3d = NULL; 790 | PFNGLTEXCOORD3DVPROC glad_glTexCoord3dv = NULL; 791 | PFNGLTEXCOORD3FPROC glad_glTexCoord3f = NULL; 792 | PFNGLTEXCOORD3FVPROC glad_glTexCoord3fv = NULL; 793 | PFNGLTEXCOORD3IPROC glad_glTexCoord3i = NULL; 794 | PFNGLTEXCOORD3IVPROC glad_glTexCoord3iv = NULL; 795 | PFNGLTEXCOORD3SPROC glad_glTexCoord3s = NULL; 796 | PFNGLTEXCOORD3SVPROC glad_glTexCoord3sv = NULL; 797 | PFNGLTEXCOORD4DPROC glad_glTexCoord4d = NULL; 798 | PFNGLTEXCOORD4DVPROC glad_glTexCoord4dv = NULL; 799 | PFNGLTEXCOORD4FPROC glad_glTexCoord4f = NULL; 800 | PFNGLTEXCOORD4FVPROC glad_glTexCoord4fv = NULL; 801 | PFNGLTEXCOORD4IPROC glad_glTexCoord4i = NULL; 802 | PFNGLTEXCOORD4IVPROC glad_glTexCoord4iv = NULL; 803 | PFNGLTEXCOORD4SPROC glad_glTexCoord4s = NULL; 804 | PFNGLTEXCOORD4SVPROC glad_glTexCoord4sv = NULL; 805 | PFNGLTEXCOORDP1UIPROC glad_glTexCoordP1ui = NULL; 806 | PFNGLTEXCOORDP1UIVPROC glad_glTexCoordP1uiv = NULL; 807 | PFNGLTEXCOORDP2UIPROC glad_glTexCoordP2ui = NULL; 808 | PFNGLTEXCOORDP2UIVPROC glad_glTexCoordP2uiv = NULL; 809 | PFNGLTEXCOORDP3UIPROC glad_glTexCoordP3ui = NULL; 810 | PFNGLTEXCOORDP3UIVPROC glad_glTexCoordP3uiv = NULL; 811 | PFNGLTEXCOORDP4UIPROC glad_glTexCoordP4ui = NULL; 812 | PFNGLTEXCOORDP4UIVPROC glad_glTexCoordP4uiv = NULL; 813 | PFNGLTEXCOORDPOINTERPROC glad_glTexCoordPointer = NULL; 814 | PFNGLTEXENVFPROC glad_glTexEnvf = NULL; 815 | PFNGLTEXENVFVPROC glad_glTexEnvfv = NULL; 816 | PFNGLTEXENVIPROC glad_glTexEnvi = NULL; 817 | PFNGLTEXENVIVPROC glad_glTexEnviv = NULL; 818 | PFNGLTEXGENDPROC glad_glTexGend = NULL; 819 | PFNGLTEXGENDVPROC glad_glTexGendv = NULL; 820 | PFNGLTEXGENFPROC glad_glTexGenf = NULL; 821 | PFNGLTEXGENFVPROC glad_glTexGenfv = NULL; 822 | PFNGLTEXGENIPROC glad_glTexGeni = NULL; 823 | PFNGLTEXGENIVPROC glad_glTexGeniv = NULL; 824 | PFNGLTEXIMAGE1DPROC glad_glTexImage1D = NULL; 825 | PFNGLTEXIMAGE2DPROC glad_glTexImage2D = NULL; 826 | PFNGLTEXIMAGE2DMULTISAMPLEPROC glad_glTexImage2DMultisample = NULL; 827 | PFNGLTEXIMAGE3DPROC glad_glTexImage3D = NULL; 828 | PFNGLTEXIMAGE3DMULTISAMPLEPROC glad_glTexImage3DMultisample = NULL; 829 | PFNGLTEXPARAMETERIIVPROC glad_glTexParameterIiv = NULL; 830 | PFNGLTEXPARAMETERIUIVPROC glad_glTexParameterIuiv = NULL; 831 | PFNGLTEXPARAMETERFPROC glad_glTexParameterf = NULL; 832 | PFNGLTEXPARAMETERFVPROC glad_glTexParameterfv = NULL; 833 | PFNGLTEXPARAMETERIPROC glad_glTexParameteri = NULL; 834 | PFNGLTEXPARAMETERIVPROC glad_glTexParameteriv = NULL; 835 | PFNGLTEXSUBIMAGE1DPROC glad_glTexSubImage1D = NULL; 836 | PFNGLTEXSUBIMAGE2DPROC glad_glTexSubImage2D = NULL; 837 | PFNGLTEXSUBIMAGE3DPROC glad_glTexSubImage3D = NULL; 838 | PFNGLTRANSFORMFEEDBACKVARYINGSPROC glad_glTransformFeedbackVaryings = NULL; 839 | PFNGLTRANSLATEDPROC glad_glTranslated = NULL; 840 | PFNGLTRANSLATEFPROC glad_glTranslatef = NULL; 841 | PFNGLUNIFORM1FPROC glad_glUniform1f = NULL; 842 | PFNGLUNIFORM1FVPROC glad_glUniform1fv = NULL; 843 | PFNGLUNIFORM1IPROC glad_glUniform1i = NULL; 844 | PFNGLUNIFORM1IVPROC glad_glUniform1iv = NULL; 845 | PFNGLUNIFORM1UIPROC glad_glUniform1ui = NULL; 846 | PFNGLUNIFORM1UIVPROC glad_glUniform1uiv = NULL; 847 | PFNGLUNIFORM2FPROC glad_glUniform2f = NULL; 848 | PFNGLUNIFORM2FVPROC glad_glUniform2fv = NULL; 849 | PFNGLUNIFORM2IPROC glad_glUniform2i = NULL; 850 | PFNGLUNIFORM2IVPROC glad_glUniform2iv = NULL; 851 | PFNGLUNIFORM2UIPROC glad_glUniform2ui = NULL; 852 | PFNGLUNIFORM2UIVPROC glad_glUniform2uiv = NULL; 853 | PFNGLUNIFORM3FPROC glad_glUniform3f = NULL; 854 | PFNGLUNIFORM3FVPROC glad_glUniform3fv = NULL; 855 | PFNGLUNIFORM3IPROC glad_glUniform3i = NULL; 856 | PFNGLUNIFORM3IVPROC glad_glUniform3iv = NULL; 857 | PFNGLUNIFORM3UIPROC glad_glUniform3ui = NULL; 858 | PFNGLUNIFORM3UIVPROC glad_glUniform3uiv = NULL; 859 | PFNGLUNIFORM4FPROC glad_glUniform4f = NULL; 860 | PFNGLUNIFORM4FVPROC glad_glUniform4fv = NULL; 861 | PFNGLUNIFORM4IPROC glad_glUniform4i = NULL; 862 | PFNGLUNIFORM4IVPROC glad_glUniform4iv = NULL; 863 | PFNGLUNIFORM4UIPROC glad_glUniform4ui = NULL; 864 | PFNGLUNIFORM4UIVPROC glad_glUniform4uiv = NULL; 865 | PFNGLUNIFORMBLOCKBINDINGPROC glad_glUniformBlockBinding = NULL; 866 | PFNGLUNIFORMMATRIX2FVPROC glad_glUniformMatrix2fv = NULL; 867 | PFNGLUNIFORMMATRIX2X3FVPROC glad_glUniformMatrix2x3fv = NULL; 868 | PFNGLUNIFORMMATRIX2X4FVPROC glad_glUniformMatrix2x4fv = NULL; 869 | PFNGLUNIFORMMATRIX3FVPROC glad_glUniformMatrix3fv = NULL; 870 | PFNGLUNIFORMMATRIX3X2FVPROC glad_glUniformMatrix3x2fv = NULL; 871 | PFNGLUNIFORMMATRIX3X4FVPROC glad_glUniformMatrix3x4fv = NULL; 872 | PFNGLUNIFORMMATRIX4FVPROC glad_glUniformMatrix4fv = NULL; 873 | PFNGLUNIFORMMATRIX4X2FVPROC glad_glUniformMatrix4x2fv = NULL; 874 | PFNGLUNIFORMMATRIX4X3FVPROC glad_glUniformMatrix4x3fv = NULL; 875 | PFNGLUNMAPBUFFERPROC glad_glUnmapBuffer = NULL; 876 | PFNGLUSEPROGRAMPROC glad_glUseProgram = NULL; 877 | PFNGLVALIDATEPROGRAMPROC glad_glValidateProgram = NULL; 878 | PFNGLVERTEX2DPROC glad_glVertex2d = NULL; 879 | PFNGLVERTEX2DVPROC glad_glVertex2dv = NULL; 880 | PFNGLVERTEX2FPROC glad_glVertex2f = NULL; 881 | PFNGLVERTEX2FVPROC glad_glVertex2fv = NULL; 882 | PFNGLVERTEX2IPROC glad_glVertex2i = NULL; 883 | PFNGLVERTEX2IVPROC glad_glVertex2iv = NULL; 884 | PFNGLVERTEX2SPROC glad_glVertex2s = NULL; 885 | PFNGLVERTEX2SVPROC glad_glVertex2sv = NULL; 886 | PFNGLVERTEX3DPROC glad_glVertex3d = NULL; 887 | PFNGLVERTEX3DVPROC glad_glVertex3dv = NULL; 888 | PFNGLVERTEX3FPROC glad_glVertex3f = NULL; 889 | PFNGLVERTEX3FVPROC glad_glVertex3fv = NULL; 890 | PFNGLVERTEX3IPROC glad_glVertex3i = NULL; 891 | PFNGLVERTEX3IVPROC glad_glVertex3iv = NULL; 892 | PFNGLVERTEX3SPROC glad_glVertex3s = NULL; 893 | PFNGLVERTEX3SVPROC glad_glVertex3sv = NULL; 894 | PFNGLVERTEX4DPROC glad_glVertex4d = NULL; 895 | PFNGLVERTEX4DVPROC glad_glVertex4dv = NULL; 896 | PFNGLVERTEX4FPROC glad_glVertex4f = NULL; 897 | PFNGLVERTEX4FVPROC glad_glVertex4fv = NULL; 898 | PFNGLVERTEX4IPROC glad_glVertex4i = NULL; 899 | PFNGLVERTEX4IVPROC glad_glVertex4iv = NULL; 900 | PFNGLVERTEX4SPROC glad_glVertex4s = NULL; 901 | PFNGLVERTEX4SVPROC glad_glVertex4sv = NULL; 902 | PFNGLVERTEXATTRIB1DPROC glad_glVertexAttrib1d = NULL; 903 | PFNGLVERTEXATTRIB1DVPROC glad_glVertexAttrib1dv = NULL; 904 | PFNGLVERTEXATTRIB1FPROC glad_glVertexAttrib1f = NULL; 905 | PFNGLVERTEXATTRIB1FVPROC glad_glVertexAttrib1fv = NULL; 906 | PFNGLVERTEXATTRIB1SPROC glad_glVertexAttrib1s = NULL; 907 | PFNGLVERTEXATTRIB1SVPROC glad_glVertexAttrib1sv = NULL; 908 | PFNGLVERTEXATTRIB2DPROC glad_glVertexAttrib2d = NULL; 909 | PFNGLVERTEXATTRIB2DVPROC glad_glVertexAttrib2dv = NULL; 910 | PFNGLVERTEXATTRIB2FPROC glad_glVertexAttrib2f = NULL; 911 | PFNGLVERTEXATTRIB2FVPROC glad_glVertexAttrib2fv = NULL; 912 | PFNGLVERTEXATTRIB2SPROC glad_glVertexAttrib2s = NULL; 913 | PFNGLVERTEXATTRIB2SVPROC glad_glVertexAttrib2sv = NULL; 914 | PFNGLVERTEXATTRIB3DPROC glad_glVertexAttrib3d = NULL; 915 | PFNGLVERTEXATTRIB3DVPROC glad_glVertexAttrib3dv = NULL; 916 | PFNGLVERTEXATTRIB3FPROC glad_glVertexAttrib3f = NULL; 917 | PFNGLVERTEXATTRIB3FVPROC glad_glVertexAttrib3fv = NULL; 918 | PFNGLVERTEXATTRIB3SPROC glad_glVertexAttrib3s = NULL; 919 | PFNGLVERTEXATTRIB3SVPROC glad_glVertexAttrib3sv = NULL; 920 | PFNGLVERTEXATTRIB4NBVPROC glad_glVertexAttrib4Nbv = NULL; 921 | PFNGLVERTEXATTRIB4NIVPROC glad_glVertexAttrib4Niv = NULL; 922 | PFNGLVERTEXATTRIB4NSVPROC glad_glVertexAttrib4Nsv = NULL; 923 | PFNGLVERTEXATTRIB4NUBPROC glad_glVertexAttrib4Nub = NULL; 924 | PFNGLVERTEXATTRIB4NUBVPROC glad_glVertexAttrib4Nubv = NULL; 925 | PFNGLVERTEXATTRIB4NUIVPROC glad_glVertexAttrib4Nuiv = NULL; 926 | PFNGLVERTEXATTRIB4NUSVPROC glad_glVertexAttrib4Nusv = NULL; 927 | PFNGLVERTEXATTRIB4BVPROC glad_glVertexAttrib4bv = NULL; 928 | PFNGLVERTEXATTRIB4DPROC glad_glVertexAttrib4d = NULL; 929 | PFNGLVERTEXATTRIB4DVPROC glad_glVertexAttrib4dv = NULL; 930 | PFNGLVERTEXATTRIB4FPROC glad_glVertexAttrib4f = NULL; 931 | PFNGLVERTEXATTRIB4FVPROC glad_glVertexAttrib4fv = NULL; 932 | PFNGLVERTEXATTRIB4IVPROC glad_glVertexAttrib4iv = NULL; 933 | PFNGLVERTEXATTRIB4SPROC glad_glVertexAttrib4s = NULL; 934 | PFNGLVERTEXATTRIB4SVPROC glad_glVertexAttrib4sv = NULL; 935 | PFNGLVERTEXATTRIB4UBVPROC glad_glVertexAttrib4ubv = NULL; 936 | PFNGLVERTEXATTRIB4UIVPROC glad_glVertexAttrib4uiv = NULL; 937 | PFNGLVERTEXATTRIB4USVPROC glad_glVertexAttrib4usv = NULL; 938 | PFNGLVERTEXATTRIBDIVISORPROC glad_glVertexAttribDivisor = NULL; 939 | PFNGLVERTEXATTRIBI1IPROC glad_glVertexAttribI1i = NULL; 940 | PFNGLVERTEXATTRIBI1IVPROC glad_glVertexAttribI1iv = NULL; 941 | PFNGLVERTEXATTRIBI1UIPROC glad_glVertexAttribI1ui = NULL; 942 | PFNGLVERTEXATTRIBI1UIVPROC glad_glVertexAttribI1uiv = NULL; 943 | PFNGLVERTEXATTRIBI2IPROC glad_glVertexAttribI2i = NULL; 944 | PFNGLVERTEXATTRIBI2IVPROC glad_glVertexAttribI2iv = NULL; 945 | PFNGLVERTEXATTRIBI2UIPROC glad_glVertexAttribI2ui = NULL; 946 | PFNGLVERTEXATTRIBI2UIVPROC glad_glVertexAttribI2uiv = NULL; 947 | PFNGLVERTEXATTRIBI3IPROC glad_glVertexAttribI3i = NULL; 948 | PFNGLVERTEXATTRIBI3IVPROC glad_glVertexAttribI3iv = NULL; 949 | PFNGLVERTEXATTRIBI3UIPROC glad_glVertexAttribI3ui = NULL; 950 | PFNGLVERTEXATTRIBI3UIVPROC glad_glVertexAttribI3uiv = NULL; 951 | PFNGLVERTEXATTRIBI4BVPROC glad_glVertexAttribI4bv = NULL; 952 | PFNGLVERTEXATTRIBI4IPROC glad_glVertexAttribI4i = NULL; 953 | PFNGLVERTEXATTRIBI4IVPROC glad_glVertexAttribI4iv = NULL; 954 | PFNGLVERTEXATTRIBI4SVPROC glad_glVertexAttribI4sv = NULL; 955 | PFNGLVERTEXATTRIBI4UBVPROC glad_glVertexAttribI4ubv = NULL; 956 | PFNGLVERTEXATTRIBI4UIPROC glad_glVertexAttribI4ui = NULL; 957 | PFNGLVERTEXATTRIBI4UIVPROC glad_glVertexAttribI4uiv = NULL; 958 | PFNGLVERTEXATTRIBI4USVPROC glad_glVertexAttribI4usv = NULL; 959 | PFNGLVERTEXATTRIBIPOINTERPROC glad_glVertexAttribIPointer = NULL; 960 | PFNGLVERTEXATTRIBP1UIPROC glad_glVertexAttribP1ui = NULL; 961 | PFNGLVERTEXATTRIBP1UIVPROC glad_glVertexAttribP1uiv = NULL; 962 | PFNGLVERTEXATTRIBP2UIPROC glad_glVertexAttribP2ui = NULL; 963 | PFNGLVERTEXATTRIBP2UIVPROC glad_glVertexAttribP2uiv = NULL; 964 | PFNGLVERTEXATTRIBP3UIPROC glad_glVertexAttribP3ui = NULL; 965 | PFNGLVERTEXATTRIBP3UIVPROC glad_glVertexAttribP3uiv = NULL; 966 | PFNGLVERTEXATTRIBP4UIPROC glad_glVertexAttribP4ui = NULL; 967 | PFNGLVERTEXATTRIBP4UIVPROC glad_glVertexAttribP4uiv = NULL; 968 | PFNGLVERTEXATTRIBPOINTERPROC glad_glVertexAttribPointer = NULL; 969 | PFNGLVERTEXP2UIPROC glad_glVertexP2ui = NULL; 970 | PFNGLVERTEXP2UIVPROC glad_glVertexP2uiv = NULL; 971 | PFNGLVERTEXP3UIPROC glad_glVertexP3ui = NULL; 972 | PFNGLVERTEXP3UIVPROC glad_glVertexP3uiv = NULL; 973 | PFNGLVERTEXP4UIPROC glad_glVertexP4ui = NULL; 974 | PFNGLVERTEXP4UIVPROC glad_glVertexP4uiv = NULL; 975 | PFNGLVERTEXPOINTERPROC glad_glVertexPointer = NULL; 976 | PFNGLVIEWPORTPROC glad_glViewport = NULL; 977 | PFNGLWAITSYNCPROC glad_glWaitSync = NULL; 978 | PFNGLWINDOWPOS2DPROC glad_glWindowPos2d = NULL; 979 | PFNGLWINDOWPOS2DVPROC glad_glWindowPos2dv = NULL; 980 | PFNGLWINDOWPOS2FPROC glad_glWindowPos2f = NULL; 981 | PFNGLWINDOWPOS2FVPROC glad_glWindowPos2fv = NULL; 982 | PFNGLWINDOWPOS2IPROC glad_glWindowPos2i = NULL; 983 | PFNGLWINDOWPOS2IVPROC glad_glWindowPos2iv = NULL; 984 | PFNGLWINDOWPOS2SPROC glad_glWindowPos2s = NULL; 985 | PFNGLWINDOWPOS2SVPROC glad_glWindowPos2sv = NULL; 986 | PFNGLWINDOWPOS3DPROC glad_glWindowPos3d = NULL; 987 | PFNGLWINDOWPOS3DVPROC glad_glWindowPos3dv = NULL; 988 | PFNGLWINDOWPOS3FPROC glad_glWindowPos3f = NULL; 989 | PFNGLWINDOWPOS3FVPROC glad_glWindowPos3fv = NULL; 990 | PFNGLWINDOWPOS3IPROC glad_glWindowPos3i = NULL; 991 | PFNGLWINDOWPOS3IVPROC glad_glWindowPos3iv = NULL; 992 | PFNGLWINDOWPOS3SPROC glad_glWindowPos3s = NULL; 993 | PFNGLWINDOWPOS3SVPROC glad_glWindowPos3sv = NULL; 994 | static void load_GL_VERSION_1_0(GLADloadproc load) { 995 | if(!GLAD_GL_VERSION_1_0) return; 996 | glad_glCullFace = (PFNGLCULLFACEPROC)load("glCullFace"); 997 | glad_glFrontFace = (PFNGLFRONTFACEPROC)load("glFrontFace"); 998 | glad_glHint = (PFNGLHINTPROC)load("glHint"); 999 | glad_glLineWidth = (PFNGLLINEWIDTHPROC)load("glLineWidth"); 1000 | glad_glPointSize = (PFNGLPOINTSIZEPROC)load("glPointSize"); 1001 | glad_glPolygonMode = (PFNGLPOLYGONMODEPROC)load("glPolygonMode"); 1002 | glad_glScissor = (PFNGLSCISSORPROC)load("glScissor"); 1003 | glad_glTexParameterf = (PFNGLTEXPARAMETERFPROC)load("glTexParameterf"); 1004 | glad_glTexParameterfv = (PFNGLTEXPARAMETERFVPROC)load("glTexParameterfv"); 1005 | glad_glTexParameteri = (PFNGLTEXPARAMETERIPROC)load("glTexParameteri"); 1006 | glad_glTexParameteriv = (PFNGLTEXPARAMETERIVPROC)load("glTexParameteriv"); 1007 | glad_glTexImage1D = (PFNGLTEXIMAGE1DPROC)load("glTexImage1D"); 1008 | glad_glTexImage2D = (PFNGLTEXIMAGE2DPROC)load("glTexImage2D"); 1009 | glad_glDrawBuffer = (PFNGLDRAWBUFFERPROC)load("glDrawBuffer"); 1010 | glad_glClear = (PFNGLCLEARPROC)load("glClear"); 1011 | glad_glClearColor = (PFNGLCLEARCOLORPROC)load("glClearColor"); 1012 | glad_glClearStencil = (PFNGLCLEARSTENCILPROC)load("glClearStencil"); 1013 | glad_glClearDepth = (PFNGLCLEARDEPTHPROC)load("glClearDepth"); 1014 | glad_glStencilMask = (PFNGLSTENCILMASKPROC)load("glStencilMask"); 1015 | glad_glColorMask = (PFNGLCOLORMASKPROC)load("glColorMask"); 1016 | glad_glDepthMask = (PFNGLDEPTHMASKPROC)load("glDepthMask"); 1017 | glad_glDisable = (PFNGLDISABLEPROC)load("glDisable"); 1018 | glad_glEnable = (PFNGLENABLEPROC)load("glEnable"); 1019 | glad_glFinish = (PFNGLFINISHPROC)load("glFinish"); 1020 | glad_glFlush = (PFNGLFLUSHPROC)load("glFlush"); 1021 | glad_glBlendFunc = (PFNGLBLENDFUNCPROC)load("glBlendFunc"); 1022 | glad_glLogicOp = (PFNGLLOGICOPPROC)load("glLogicOp"); 1023 | glad_glStencilFunc = (PFNGLSTENCILFUNCPROC)load("glStencilFunc"); 1024 | glad_glStencilOp = (PFNGLSTENCILOPPROC)load("glStencilOp"); 1025 | glad_glDepthFunc = (PFNGLDEPTHFUNCPROC)load("glDepthFunc"); 1026 | glad_glPixelStoref = (PFNGLPIXELSTOREFPROC)load("glPixelStoref"); 1027 | glad_glPixelStorei = (PFNGLPIXELSTOREIPROC)load("glPixelStorei"); 1028 | glad_glReadBuffer = (PFNGLREADBUFFERPROC)load("glReadBuffer"); 1029 | glad_glReadPixels = (PFNGLREADPIXELSPROC)load("glReadPixels"); 1030 | glad_glGetBooleanv = (PFNGLGETBOOLEANVPROC)load("glGetBooleanv"); 1031 | glad_glGetDoublev = (PFNGLGETDOUBLEVPROC)load("glGetDoublev"); 1032 | glad_glGetError = (PFNGLGETERRORPROC)load("glGetError"); 1033 | glad_glGetFloatv = (PFNGLGETFLOATVPROC)load("glGetFloatv"); 1034 | glad_glGetIntegerv = (PFNGLGETINTEGERVPROC)load("glGetIntegerv"); 1035 | glad_glGetString = (PFNGLGETSTRINGPROC)load("glGetString"); 1036 | glad_glGetTexImage = (PFNGLGETTEXIMAGEPROC)load("glGetTexImage"); 1037 | glad_glGetTexParameterfv = (PFNGLGETTEXPARAMETERFVPROC)load("glGetTexParameterfv"); 1038 | glad_glGetTexParameteriv = (PFNGLGETTEXPARAMETERIVPROC)load("glGetTexParameteriv"); 1039 | glad_glGetTexLevelParameterfv = (PFNGLGETTEXLEVELPARAMETERFVPROC)load("glGetTexLevelParameterfv"); 1040 | glad_glGetTexLevelParameteriv = (PFNGLGETTEXLEVELPARAMETERIVPROC)load("glGetTexLevelParameteriv"); 1041 | glad_glIsEnabled = (PFNGLISENABLEDPROC)load("glIsEnabled"); 1042 | glad_glDepthRange = (PFNGLDEPTHRANGEPROC)load("glDepthRange"); 1043 | glad_glViewport = (PFNGLVIEWPORTPROC)load("glViewport"); 1044 | glad_glNewList = (PFNGLNEWLISTPROC)load("glNewList"); 1045 | glad_glEndList = (PFNGLENDLISTPROC)load("glEndList"); 1046 | glad_glCallList = (PFNGLCALLLISTPROC)load("glCallList"); 1047 | glad_glCallLists = (PFNGLCALLLISTSPROC)load("glCallLists"); 1048 | glad_glDeleteLists = (PFNGLDELETELISTSPROC)load("glDeleteLists"); 1049 | glad_glGenLists = (PFNGLGENLISTSPROC)load("glGenLists"); 1050 | glad_glListBase = (PFNGLLISTBASEPROC)load("glListBase"); 1051 | glad_glBegin = (PFNGLBEGINPROC)load("glBegin"); 1052 | glad_glBitmap = (PFNGLBITMAPPROC)load("glBitmap"); 1053 | glad_glColor3b = (PFNGLCOLOR3BPROC)load("glColor3b"); 1054 | glad_glColor3bv = (PFNGLCOLOR3BVPROC)load("glColor3bv"); 1055 | glad_glColor3d = (PFNGLCOLOR3DPROC)load("glColor3d"); 1056 | glad_glColor3dv = (PFNGLCOLOR3DVPROC)load("glColor3dv"); 1057 | glad_glColor3f = (PFNGLCOLOR3FPROC)load("glColor3f"); 1058 | glad_glColor3fv = (PFNGLCOLOR3FVPROC)load("glColor3fv"); 1059 | glad_glColor3i = (PFNGLCOLOR3IPROC)load("glColor3i"); 1060 | glad_glColor3iv = (PFNGLCOLOR3IVPROC)load("glColor3iv"); 1061 | glad_glColor3s = (PFNGLCOLOR3SPROC)load("glColor3s"); 1062 | glad_glColor3sv = (PFNGLCOLOR3SVPROC)load("glColor3sv"); 1063 | glad_glColor3ub = (PFNGLCOLOR3UBPROC)load("glColor3ub"); 1064 | glad_glColor3ubv = (PFNGLCOLOR3UBVPROC)load("glColor3ubv"); 1065 | glad_glColor3ui = (PFNGLCOLOR3UIPROC)load("glColor3ui"); 1066 | glad_glColor3uiv = (PFNGLCOLOR3UIVPROC)load("glColor3uiv"); 1067 | glad_glColor3us = (PFNGLCOLOR3USPROC)load("glColor3us"); 1068 | glad_glColor3usv = (PFNGLCOLOR3USVPROC)load("glColor3usv"); 1069 | glad_glColor4b = (PFNGLCOLOR4BPROC)load("glColor4b"); 1070 | glad_glColor4bv = (PFNGLCOLOR4BVPROC)load("glColor4bv"); 1071 | glad_glColor4d = (PFNGLCOLOR4DPROC)load("glColor4d"); 1072 | glad_glColor4dv = (PFNGLCOLOR4DVPROC)load("glColor4dv"); 1073 | glad_glColor4f = (PFNGLCOLOR4FPROC)load("glColor4f"); 1074 | glad_glColor4fv = (PFNGLCOLOR4FVPROC)load("glColor4fv"); 1075 | glad_glColor4i = (PFNGLCOLOR4IPROC)load("glColor4i"); 1076 | glad_glColor4iv = (PFNGLCOLOR4IVPROC)load("glColor4iv"); 1077 | glad_glColor4s = (PFNGLCOLOR4SPROC)load("glColor4s"); 1078 | glad_glColor4sv = (PFNGLCOLOR4SVPROC)load("glColor4sv"); 1079 | glad_glColor4ub = (PFNGLCOLOR4UBPROC)load("glColor4ub"); 1080 | glad_glColor4ubv = (PFNGLCOLOR4UBVPROC)load("glColor4ubv"); 1081 | glad_glColor4ui = (PFNGLCOLOR4UIPROC)load("glColor4ui"); 1082 | glad_glColor4uiv = (PFNGLCOLOR4UIVPROC)load("glColor4uiv"); 1083 | glad_glColor4us = (PFNGLCOLOR4USPROC)load("glColor4us"); 1084 | glad_glColor4usv = (PFNGLCOLOR4USVPROC)load("glColor4usv"); 1085 | glad_glEdgeFlag = (PFNGLEDGEFLAGPROC)load("glEdgeFlag"); 1086 | glad_glEdgeFlagv = (PFNGLEDGEFLAGVPROC)load("glEdgeFlagv"); 1087 | glad_glEnd = (PFNGLENDPROC)load("glEnd"); 1088 | glad_glIndexd = (PFNGLINDEXDPROC)load("glIndexd"); 1089 | glad_glIndexdv = (PFNGLINDEXDVPROC)load("glIndexdv"); 1090 | glad_glIndexf = (PFNGLINDEXFPROC)load("glIndexf"); 1091 | glad_glIndexfv = (PFNGLINDEXFVPROC)load("glIndexfv"); 1092 | glad_glIndexi = (PFNGLINDEXIPROC)load("glIndexi"); 1093 | glad_glIndexiv = (PFNGLINDEXIVPROC)load("glIndexiv"); 1094 | glad_glIndexs = (PFNGLINDEXSPROC)load("glIndexs"); 1095 | glad_glIndexsv = (PFNGLINDEXSVPROC)load("glIndexsv"); 1096 | glad_glNormal3b = (PFNGLNORMAL3BPROC)load("glNormal3b"); 1097 | glad_glNormal3bv = (PFNGLNORMAL3BVPROC)load("glNormal3bv"); 1098 | glad_glNormal3d = (PFNGLNORMAL3DPROC)load("glNormal3d"); 1099 | glad_glNormal3dv = (PFNGLNORMAL3DVPROC)load("glNormal3dv"); 1100 | glad_glNormal3f = (PFNGLNORMAL3FPROC)load("glNormal3f"); 1101 | glad_glNormal3fv = (PFNGLNORMAL3FVPROC)load("glNormal3fv"); 1102 | glad_glNormal3i = (PFNGLNORMAL3IPROC)load("glNormal3i"); 1103 | glad_glNormal3iv = (PFNGLNORMAL3IVPROC)load("glNormal3iv"); 1104 | glad_glNormal3s = (PFNGLNORMAL3SPROC)load("glNormal3s"); 1105 | glad_glNormal3sv = (PFNGLNORMAL3SVPROC)load("glNormal3sv"); 1106 | glad_glRasterPos2d = (PFNGLRASTERPOS2DPROC)load("glRasterPos2d"); 1107 | glad_glRasterPos2dv = (PFNGLRASTERPOS2DVPROC)load("glRasterPos2dv"); 1108 | glad_glRasterPos2f = (PFNGLRASTERPOS2FPROC)load("glRasterPos2f"); 1109 | glad_glRasterPos2fv = (PFNGLRASTERPOS2FVPROC)load("glRasterPos2fv"); 1110 | glad_glRasterPos2i = (PFNGLRASTERPOS2IPROC)load("glRasterPos2i"); 1111 | glad_glRasterPos2iv = (PFNGLRASTERPOS2IVPROC)load("glRasterPos2iv"); 1112 | glad_glRasterPos2s = (PFNGLRASTERPOS2SPROC)load("glRasterPos2s"); 1113 | glad_glRasterPos2sv = (PFNGLRASTERPOS2SVPROC)load("glRasterPos2sv"); 1114 | glad_glRasterPos3d = (PFNGLRASTERPOS3DPROC)load("glRasterPos3d"); 1115 | glad_glRasterPos3dv = (PFNGLRASTERPOS3DVPROC)load("glRasterPos3dv"); 1116 | glad_glRasterPos3f = (PFNGLRASTERPOS3FPROC)load("glRasterPos3f"); 1117 | glad_glRasterPos3fv = (PFNGLRASTERPOS3FVPROC)load("glRasterPos3fv"); 1118 | glad_glRasterPos3i = (PFNGLRASTERPOS3IPROC)load("glRasterPos3i"); 1119 | glad_glRasterPos3iv = (PFNGLRASTERPOS3IVPROC)load("glRasterPos3iv"); 1120 | glad_glRasterPos3s = (PFNGLRASTERPOS3SPROC)load("glRasterPos3s"); 1121 | glad_glRasterPos3sv = (PFNGLRASTERPOS3SVPROC)load("glRasterPos3sv"); 1122 | glad_glRasterPos4d = (PFNGLRASTERPOS4DPROC)load("glRasterPos4d"); 1123 | glad_glRasterPos4dv = (PFNGLRASTERPOS4DVPROC)load("glRasterPos4dv"); 1124 | glad_glRasterPos4f = (PFNGLRASTERPOS4FPROC)load("glRasterPos4f"); 1125 | glad_glRasterPos4fv = (PFNGLRASTERPOS4FVPROC)load("glRasterPos4fv"); 1126 | glad_glRasterPos4i = (PFNGLRASTERPOS4IPROC)load("glRasterPos4i"); 1127 | glad_glRasterPos4iv = (PFNGLRASTERPOS4IVPROC)load("glRasterPos4iv"); 1128 | glad_glRasterPos4s = (PFNGLRASTERPOS4SPROC)load("glRasterPos4s"); 1129 | glad_glRasterPos4sv = (PFNGLRASTERPOS4SVPROC)load("glRasterPos4sv"); 1130 | glad_glRectd = (PFNGLRECTDPROC)load("glRectd"); 1131 | glad_glRectdv = (PFNGLRECTDVPROC)load("glRectdv"); 1132 | glad_glRectf = (PFNGLRECTFPROC)load("glRectf"); 1133 | glad_glRectfv = (PFNGLRECTFVPROC)load("glRectfv"); 1134 | glad_glRecti = (PFNGLRECTIPROC)load("glRecti"); 1135 | glad_glRectiv = (PFNGLRECTIVPROC)load("glRectiv"); 1136 | glad_glRects = (PFNGLRECTSPROC)load("glRects"); 1137 | glad_glRectsv = (PFNGLRECTSVPROC)load("glRectsv"); 1138 | glad_glTexCoord1d = (PFNGLTEXCOORD1DPROC)load("glTexCoord1d"); 1139 | glad_glTexCoord1dv = (PFNGLTEXCOORD1DVPROC)load("glTexCoord1dv"); 1140 | glad_glTexCoord1f = (PFNGLTEXCOORD1FPROC)load("glTexCoord1f"); 1141 | glad_glTexCoord1fv = (PFNGLTEXCOORD1FVPROC)load("glTexCoord1fv"); 1142 | glad_glTexCoord1i = (PFNGLTEXCOORD1IPROC)load("glTexCoord1i"); 1143 | glad_glTexCoord1iv = (PFNGLTEXCOORD1IVPROC)load("glTexCoord1iv"); 1144 | glad_glTexCoord1s = (PFNGLTEXCOORD1SPROC)load("glTexCoord1s"); 1145 | glad_glTexCoord1sv = (PFNGLTEXCOORD1SVPROC)load("glTexCoord1sv"); 1146 | glad_glTexCoord2d = (PFNGLTEXCOORD2DPROC)load("glTexCoord2d"); 1147 | glad_glTexCoord2dv = (PFNGLTEXCOORD2DVPROC)load("glTexCoord2dv"); 1148 | glad_glTexCoord2f = (PFNGLTEXCOORD2FPROC)load("glTexCoord2f"); 1149 | glad_glTexCoord2fv = (PFNGLTEXCOORD2FVPROC)load("glTexCoord2fv"); 1150 | glad_glTexCoord2i = (PFNGLTEXCOORD2IPROC)load("glTexCoord2i"); 1151 | glad_glTexCoord2iv = (PFNGLTEXCOORD2IVPROC)load("glTexCoord2iv"); 1152 | glad_glTexCoord2s = (PFNGLTEXCOORD2SPROC)load("glTexCoord2s"); 1153 | glad_glTexCoord2sv = (PFNGLTEXCOORD2SVPROC)load("glTexCoord2sv"); 1154 | glad_glTexCoord3d = (PFNGLTEXCOORD3DPROC)load("glTexCoord3d"); 1155 | glad_glTexCoord3dv = (PFNGLTEXCOORD3DVPROC)load("glTexCoord3dv"); 1156 | glad_glTexCoord3f = (PFNGLTEXCOORD3FPROC)load("glTexCoord3f"); 1157 | glad_glTexCoord3fv = (PFNGLTEXCOORD3FVPROC)load("glTexCoord3fv"); 1158 | glad_glTexCoord3i = (PFNGLTEXCOORD3IPROC)load("glTexCoord3i"); 1159 | glad_glTexCoord3iv = (PFNGLTEXCOORD3IVPROC)load("glTexCoord3iv"); 1160 | glad_glTexCoord3s = (PFNGLTEXCOORD3SPROC)load("glTexCoord3s"); 1161 | glad_glTexCoord3sv = (PFNGLTEXCOORD3SVPROC)load("glTexCoord3sv"); 1162 | glad_glTexCoord4d = (PFNGLTEXCOORD4DPROC)load("glTexCoord4d"); 1163 | glad_glTexCoord4dv = (PFNGLTEXCOORD4DVPROC)load("glTexCoord4dv"); 1164 | glad_glTexCoord4f = (PFNGLTEXCOORD4FPROC)load("glTexCoord4f"); 1165 | glad_glTexCoord4fv = (PFNGLTEXCOORD4FVPROC)load("glTexCoord4fv"); 1166 | glad_glTexCoord4i = (PFNGLTEXCOORD4IPROC)load("glTexCoord4i"); 1167 | glad_glTexCoord4iv = (PFNGLTEXCOORD4IVPROC)load("glTexCoord4iv"); 1168 | glad_glTexCoord4s = (PFNGLTEXCOORD4SPROC)load("glTexCoord4s"); 1169 | glad_glTexCoord4sv = (PFNGLTEXCOORD4SVPROC)load("glTexCoord4sv"); 1170 | glad_glVertex2d = (PFNGLVERTEX2DPROC)load("glVertex2d"); 1171 | glad_glVertex2dv = (PFNGLVERTEX2DVPROC)load("glVertex2dv"); 1172 | glad_glVertex2f = (PFNGLVERTEX2FPROC)load("glVertex2f"); 1173 | glad_glVertex2fv = (PFNGLVERTEX2FVPROC)load("glVertex2fv"); 1174 | glad_glVertex2i = (PFNGLVERTEX2IPROC)load("glVertex2i"); 1175 | glad_glVertex2iv = (PFNGLVERTEX2IVPROC)load("glVertex2iv"); 1176 | glad_glVertex2s = (PFNGLVERTEX2SPROC)load("glVertex2s"); 1177 | glad_glVertex2sv = (PFNGLVERTEX2SVPROC)load("glVertex2sv"); 1178 | glad_glVertex3d = (PFNGLVERTEX3DPROC)load("glVertex3d"); 1179 | glad_glVertex3dv = (PFNGLVERTEX3DVPROC)load("glVertex3dv"); 1180 | glad_glVertex3f = (PFNGLVERTEX3FPROC)load("glVertex3f"); 1181 | glad_glVertex3fv = (PFNGLVERTEX3FVPROC)load("glVertex3fv"); 1182 | glad_glVertex3i = (PFNGLVERTEX3IPROC)load("glVertex3i"); 1183 | glad_glVertex3iv = (PFNGLVERTEX3IVPROC)load("glVertex3iv"); 1184 | glad_glVertex3s = (PFNGLVERTEX3SPROC)load("glVertex3s"); 1185 | glad_glVertex3sv = (PFNGLVERTEX3SVPROC)load("glVertex3sv"); 1186 | glad_glVertex4d = (PFNGLVERTEX4DPROC)load("glVertex4d"); 1187 | glad_glVertex4dv = (PFNGLVERTEX4DVPROC)load("glVertex4dv"); 1188 | glad_glVertex4f = (PFNGLVERTEX4FPROC)load("glVertex4f"); 1189 | glad_glVertex4fv = (PFNGLVERTEX4FVPROC)load("glVertex4fv"); 1190 | glad_glVertex4i = (PFNGLVERTEX4IPROC)load("glVertex4i"); 1191 | glad_glVertex4iv = (PFNGLVERTEX4IVPROC)load("glVertex4iv"); 1192 | glad_glVertex4s = (PFNGLVERTEX4SPROC)load("glVertex4s"); 1193 | glad_glVertex4sv = (PFNGLVERTEX4SVPROC)load("glVertex4sv"); 1194 | glad_glClipPlane = (PFNGLCLIPPLANEPROC)load("glClipPlane"); 1195 | glad_glColorMaterial = (PFNGLCOLORMATERIALPROC)load("glColorMaterial"); 1196 | glad_glFogf = (PFNGLFOGFPROC)load("glFogf"); 1197 | glad_glFogfv = (PFNGLFOGFVPROC)load("glFogfv"); 1198 | glad_glFogi = (PFNGLFOGIPROC)load("glFogi"); 1199 | glad_glFogiv = (PFNGLFOGIVPROC)load("glFogiv"); 1200 | glad_glLightf = (PFNGLLIGHTFPROC)load("glLightf"); 1201 | glad_glLightfv = (PFNGLLIGHTFVPROC)load("glLightfv"); 1202 | glad_glLighti = (PFNGLLIGHTIPROC)load("glLighti"); 1203 | glad_glLightiv = (PFNGLLIGHTIVPROC)load("glLightiv"); 1204 | glad_glLightModelf = (PFNGLLIGHTMODELFPROC)load("glLightModelf"); 1205 | glad_glLightModelfv = (PFNGLLIGHTMODELFVPROC)load("glLightModelfv"); 1206 | glad_glLightModeli = (PFNGLLIGHTMODELIPROC)load("glLightModeli"); 1207 | glad_glLightModeliv = (PFNGLLIGHTMODELIVPROC)load("glLightModeliv"); 1208 | glad_glLineStipple = (PFNGLLINESTIPPLEPROC)load("glLineStipple"); 1209 | glad_glMaterialf = (PFNGLMATERIALFPROC)load("glMaterialf"); 1210 | glad_glMaterialfv = (PFNGLMATERIALFVPROC)load("glMaterialfv"); 1211 | glad_glMateriali = (PFNGLMATERIALIPROC)load("glMateriali"); 1212 | glad_glMaterialiv = (PFNGLMATERIALIVPROC)load("glMaterialiv"); 1213 | glad_glPolygonStipple = (PFNGLPOLYGONSTIPPLEPROC)load("glPolygonStipple"); 1214 | glad_glShadeModel = (PFNGLSHADEMODELPROC)load("glShadeModel"); 1215 | glad_glTexEnvf = (PFNGLTEXENVFPROC)load("glTexEnvf"); 1216 | glad_glTexEnvfv = (PFNGLTEXENVFVPROC)load("glTexEnvfv"); 1217 | glad_glTexEnvi = (PFNGLTEXENVIPROC)load("glTexEnvi"); 1218 | glad_glTexEnviv = (PFNGLTEXENVIVPROC)load("glTexEnviv"); 1219 | glad_glTexGend = (PFNGLTEXGENDPROC)load("glTexGend"); 1220 | glad_glTexGendv = (PFNGLTEXGENDVPROC)load("glTexGendv"); 1221 | glad_glTexGenf = (PFNGLTEXGENFPROC)load("glTexGenf"); 1222 | glad_glTexGenfv = (PFNGLTEXGENFVPROC)load("glTexGenfv"); 1223 | glad_glTexGeni = (PFNGLTEXGENIPROC)load("glTexGeni"); 1224 | glad_glTexGeniv = (PFNGLTEXGENIVPROC)load("glTexGeniv"); 1225 | glad_glFeedbackBuffer = (PFNGLFEEDBACKBUFFERPROC)load("glFeedbackBuffer"); 1226 | glad_glSelectBuffer = (PFNGLSELECTBUFFERPROC)load("glSelectBuffer"); 1227 | glad_glRenderMode = (PFNGLRENDERMODEPROC)load("glRenderMode"); 1228 | glad_glInitNames = (PFNGLINITNAMESPROC)load("glInitNames"); 1229 | glad_glLoadName = (PFNGLLOADNAMEPROC)load("glLoadName"); 1230 | glad_glPassThrough = (PFNGLPASSTHROUGHPROC)load("glPassThrough"); 1231 | glad_glPopName = (PFNGLPOPNAMEPROC)load("glPopName"); 1232 | glad_glPushName = (PFNGLPUSHNAMEPROC)load("glPushName"); 1233 | glad_glClearAccum = (PFNGLCLEARACCUMPROC)load("glClearAccum"); 1234 | glad_glClearIndex = (PFNGLCLEARINDEXPROC)load("glClearIndex"); 1235 | glad_glIndexMask = (PFNGLINDEXMASKPROC)load("glIndexMask"); 1236 | glad_glAccum = (PFNGLACCUMPROC)load("glAccum"); 1237 | glad_glPopAttrib = (PFNGLPOPATTRIBPROC)load("glPopAttrib"); 1238 | glad_glPushAttrib = (PFNGLPUSHATTRIBPROC)load("glPushAttrib"); 1239 | glad_glMap1d = (PFNGLMAP1DPROC)load("glMap1d"); 1240 | glad_glMap1f = (PFNGLMAP1FPROC)load("glMap1f"); 1241 | glad_glMap2d = (PFNGLMAP2DPROC)load("glMap2d"); 1242 | glad_glMap2f = (PFNGLMAP2FPROC)load("glMap2f"); 1243 | glad_glMapGrid1d = (PFNGLMAPGRID1DPROC)load("glMapGrid1d"); 1244 | glad_glMapGrid1f = (PFNGLMAPGRID1FPROC)load("glMapGrid1f"); 1245 | glad_glMapGrid2d = (PFNGLMAPGRID2DPROC)load("glMapGrid2d"); 1246 | glad_glMapGrid2f = (PFNGLMAPGRID2FPROC)load("glMapGrid2f"); 1247 | glad_glEvalCoord1d = (PFNGLEVALCOORD1DPROC)load("glEvalCoord1d"); 1248 | glad_glEvalCoord1dv = (PFNGLEVALCOORD1DVPROC)load("glEvalCoord1dv"); 1249 | glad_glEvalCoord1f = (PFNGLEVALCOORD1FPROC)load("glEvalCoord1f"); 1250 | glad_glEvalCoord1fv = (PFNGLEVALCOORD1FVPROC)load("glEvalCoord1fv"); 1251 | glad_glEvalCoord2d = (PFNGLEVALCOORD2DPROC)load("glEvalCoord2d"); 1252 | glad_glEvalCoord2dv = (PFNGLEVALCOORD2DVPROC)load("glEvalCoord2dv"); 1253 | glad_glEvalCoord2f = (PFNGLEVALCOORD2FPROC)load("glEvalCoord2f"); 1254 | glad_glEvalCoord2fv = (PFNGLEVALCOORD2FVPROC)load("glEvalCoord2fv"); 1255 | glad_glEvalMesh1 = (PFNGLEVALMESH1PROC)load("glEvalMesh1"); 1256 | glad_glEvalPoint1 = (PFNGLEVALPOINT1PROC)load("glEvalPoint1"); 1257 | glad_glEvalMesh2 = (PFNGLEVALMESH2PROC)load("glEvalMesh2"); 1258 | glad_glEvalPoint2 = (PFNGLEVALPOINT2PROC)load("glEvalPoint2"); 1259 | glad_glAlphaFunc = (PFNGLALPHAFUNCPROC)load("glAlphaFunc"); 1260 | glad_glPixelZoom = (PFNGLPIXELZOOMPROC)load("glPixelZoom"); 1261 | glad_glPixelTransferf = (PFNGLPIXELTRANSFERFPROC)load("glPixelTransferf"); 1262 | glad_glPixelTransferi = (PFNGLPIXELTRANSFERIPROC)load("glPixelTransferi"); 1263 | glad_glPixelMapfv = (PFNGLPIXELMAPFVPROC)load("glPixelMapfv"); 1264 | glad_glPixelMapuiv = (PFNGLPIXELMAPUIVPROC)load("glPixelMapuiv"); 1265 | glad_glPixelMapusv = (PFNGLPIXELMAPUSVPROC)load("glPixelMapusv"); 1266 | glad_glCopyPixels = (PFNGLCOPYPIXELSPROC)load("glCopyPixels"); 1267 | glad_glDrawPixels = (PFNGLDRAWPIXELSPROC)load("glDrawPixels"); 1268 | glad_glGetClipPlane = (PFNGLGETCLIPPLANEPROC)load("glGetClipPlane"); 1269 | glad_glGetLightfv = (PFNGLGETLIGHTFVPROC)load("glGetLightfv"); 1270 | glad_glGetLightiv = (PFNGLGETLIGHTIVPROC)load("glGetLightiv"); 1271 | glad_glGetMapdv = (PFNGLGETMAPDVPROC)load("glGetMapdv"); 1272 | glad_glGetMapfv = (PFNGLGETMAPFVPROC)load("glGetMapfv"); 1273 | glad_glGetMapiv = (PFNGLGETMAPIVPROC)load("glGetMapiv"); 1274 | glad_glGetMaterialfv = (PFNGLGETMATERIALFVPROC)load("glGetMaterialfv"); 1275 | glad_glGetMaterialiv = (PFNGLGETMATERIALIVPROC)load("glGetMaterialiv"); 1276 | glad_glGetPixelMapfv = (PFNGLGETPIXELMAPFVPROC)load("glGetPixelMapfv"); 1277 | glad_glGetPixelMapuiv = (PFNGLGETPIXELMAPUIVPROC)load("glGetPixelMapuiv"); 1278 | glad_glGetPixelMapusv = (PFNGLGETPIXELMAPUSVPROC)load("glGetPixelMapusv"); 1279 | glad_glGetPolygonStipple = (PFNGLGETPOLYGONSTIPPLEPROC)load("glGetPolygonStipple"); 1280 | glad_glGetTexEnvfv = (PFNGLGETTEXENVFVPROC)load("glGetTexEnvfv"); 1281 | glad_glGetTexEnviv = (PFNGLGETTEXENVIVPROC)load("glGetTexEnviv"); 1282 | glad_glGetTexGendv = (PFNGLGETTEXGENDVPROC)load("glGetTexGendv"); 1283 | glad_glGetTexGenfv = (PFNGLGETTEXGENFVPROC)load("glGetTexGenfv"); 1284 | glad_glGetTexGeniv = (PFNGLGETTEXGENIVPROC)load("glGetTexGeniv"); 1285 | glad_glIsList = (PFNGLISLISTPROC)load("glIsList"); 1286 | glad_glFrustum = (PFNGLFRUSTUMPROC)load("glFrustum"); 1287 | glad_glLoadIdentity = (PFNGLLOADIDENTITYPROC)load("glLoadIdentity"); 1288 | glad_glLoadMatrixf = (PFNGLLOADMATRIXFPROC)load("glLoadMatrixf"); 1289 | glad_glLoadMatrixd = (PFNGLLOADMATRIXDPROC)load("glLoadMatrixd"); 1290 | glad_glMatrixMode = (PFNGLMATRIXMODEPROC)load("glMatrixMode"); 1291 | glad_glMultMatrixf = (PFNGLMULTMATRIXFPROC)load("glMultMatrixf"); 1292 | glad_glMultMatrixd = (PFNGLMULTMATRIXDPROC)load("glMultMatrixd"); 1293 | glad_glOrtho = (PFNGLORTHOPROC)load("glOrtho"); 1294 | glad_glPopMatrix = (PFNGLPOPMATRIXPROC)load("glPopMatrix"); 1295 | glad_glPushMatrix = (PFNGLPUSHMATRIXPROC)load("glPushMatrix"); 1296 | glad_glRotated = (PFNGLROTATEDPROC)load("glRotated"); 1297 | glad_glRotatef = (PFNGLROTATEFPROC)load("glRotatef"); 1298 | glad_glScaled = (PFNGLSCALEDPROC)load("glScaled"); 1299 | glad_glScalef = (PFNGLSCALEFPROC)load("glScalef"); 1300 | glad_glTranslated = (PFNGLTRANSLATEDPROC)load("glTranslated"); 1301 | glad_glTranslatef = (PFNGLTRANSLATEFPROC)load("glTranslatef"); 1302 | } 1303 | static void load_GL_VERSION_1_1(GLADloadproc load) { 1304 | if(!GLAD_GL_VERSION_1_1) return; 1305 | glad_glDrawArrays = (PFNGLDRAWARRAYSPROC)load("glDrawArrays"); 1306 | glad_glDrawElements = (PFNGLDRAWELEMENTSPROC)load("glDrawElements"); 1307 | glad_glGetPointerv = (PFNGLGETPOINTERVPROC)load("glGetPointerv"); 1308 | glad_glPolygonOffset = (PFNGLPOLYGONOFFSETPROC)load("glPolygonOffset"); 1309 | glad_glCopyTexImage1D = (PFNGLCOPYTEXIMAGE1DPROC)load("glCopyTexImage1D"); 1310 | glad_glCopyTexImage2D = (PFNGLCOPYTEXIMAGE2DPROC)load("glCopyTexImage2D"); 1311 | glad_glCopyTexSubImage1D = (PFNGLCOPYTEXSUBIMAGE1DPROC)load("glCopyTexSubImage1D"); 1312 | glad_glCopyTexSubImage2D = (PFNGLCOPYTEXSUBIMAGE2DPROC)load("glCopyTexSubImage2D"); 1313 | glad_glTexSubImage1D = (PFNGLTEXSUBIMAGE1DPROC)load("glTexSubImage1D"); 1314 | glad_glTexSubImage2D = (PFNGLTEXSUBIMAGE2DPROC)load("glTexSubImage2D"); 1315 | glad_glBindTexture = (PFNGLBINDTEXTUREPROC)load("glBindTexture"); 1316 | glad_glDeleteTextures = (PFNGLDELETETEXTURESPROC)load("glDeleteTextures"); 1317 | glad_glGenTextures = (PFNGLGENTEXTURESPROC)load("glGenTextures"); 1318 | glad_glIsTexture = (PFNGLISTEXTUREPROC)load("glIsTexture"); 1319 | glad_glArrayElement = (PFNGLARRAYELEMENTPROC)load("glArrayElement"); 1320 | glad_glColorPointer = (PFNGLCOLORPOINTERPROC)load("glColorPointer"); 1321 | glad_glDisableClientState = (PFNGLDISABLECLIENTSTATEPROC)load("glDisableClientState"); 1322 | glad_glEdgeFlagPointer = (PFNGLEDGEFLAGPOINTERPROC)load("glEdgeFlagPointer"); 1323 | glad_glEnableClientState = (PFNGLENABLECLIENTSTATEPROC)load("glEnableClientState"); 1324 | glad_glIndexPointer = (PFNGLINDEXPOINTERPROC)load("glIndexPointer"); 1325 | glad_glInterleavedArrays = (PFNGLINTERLEAVEDARRAYSPROC)load("glInterleavedArrays"); 1326 | glad_glNormalPointer = (PFNGLNORMALPOINTERPROC)load("glNormalPointer"); 1327 | glad_glTexCoordPointer = (PFNGLTEXCOORDPOINTERPROC)load("glTexCoordPointer"); 1328 | glad_glVertexPointer = (PFNGLVERTEXPOINTERPROC)load("glVertexPointer"); 1329 | glad_glAreTexturesResident = (PFNGLARETEXTURESRESIDENTPROC)load("glAreTexturesResident"); 1330 | glad_glPrioritizeTextures = (PFNGLPRIORITIZETEXTURESPROC)load("glPrioritizeTextures"); 1331 | glad_glIndexub = (PFNGLINDEXUBPROC)load("glIndexub"); 1332 | glad_glIndexubv = (PFNGLINDEXUBVPROC)load("glIndexubv"); 1333 | glad_glPopClientAttrib = (PFNGLPOPCLIENTATTRIBPROC)load("glPopClientAttrib"); 1334 | glad_glPushClientAttrib = (PFNGLPUSHCLIENTATTRIBPROC)load("glPushClientAttrib"); 1335 | } 1336 | static void load_GL_VERSION_1_2(GLADloadproc load) { 1337 | if(!GLAD_GL_VERSION_1_2) return; 1338 | glad_glDrawRangeElements = (PFNGLDRAWRANGEELEMENTSPROC)load("glDrawRangeElements"); 1339 | glad_glTexImage3D = (PFNGLTEXIMAGE3DPROC)load("glTexImage3D"); 1340 | glad_glTexSubImage3D = (PFNGLTEXSUBIMAGE3DPROC)load("glTexSubImage3D"); 1341 | glad_glCopyTexSubImage3D = (PFNGLCOPYTEXSUBIMAGE3DPROC)load("glCopyTexSubImage3D"); 1342 | } 1343 | static void load_GL_VERSION_1_3(GLADloadproc load) { 1344 | if(!GLAD_GL_VERSION_1_3) return; 1345 | glad_glActiveTexture = (PFNGLACTIVETEXTUREPROC)load("glActiveTexture"); 1346 | glad_glSampleCoverage = (PFNGLSAMPLECOVERAGEPROC)load("glSampleCoverage"); 1347 | glad_glCompressedTexImage3D = (PFNGLCOMPRESSEDTEXIMAGE3DPROC)load("glCompressedTexImage3D"); 1348 | glad_glCompressedTexImage2D = (PFNGLCOMPRESSEDTEXIMAGE2DPROC)load("glCompressedTexImage2D"); 1349 | glad_glCompressedTexImage1D = (PFNGLCOMPRESSEDTEXIMAGE1DPROC)load("glCompressedTexImage1D"); 1350 | glad_glCompressedTexSubImage3D = (PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC)load("glCompressedTexSubImage3D"); 1351 | glad_glCompressedTexSubImage2D = (PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC)load("glCompressedTexSubImage2D"); 1352 | glad_glCompressedTexSubImage1D = (PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC)load("glCompressedTexSubImage1D"); 1353 | glad_glGetCompressedTexImage = (PFNGLGETCOMPRESSEDTEXIMAGEPROC)load("glGetCompressedTexImage"); 1354 | glad_glClientActiveTexture = (PFNGLCLIENTACTIVETEXTUREPROC)load("glClientActiveTexture"); 1355 | glad_glMultiTexCoord1d = (PFNGLMULTITEXCOORD1DPROC)load("glMultiTexCoord1d"); 1356 | glad_glMultiTexCoord1dv = (PFNGLMULTITEXCOORD1DVPROC)load("glMultiTexCoord1dv"); 1357 | glad_glMultiTexCoord1f = (PFNGLMULTITEXCOORD1FPROC)load("glMultiTexCoord1f"); 1358 | glad_glMultiTexCoord1fv = (PFNGLMULTITEXCOORD1FVPROC)load("glMultiTexCoord1fv"); 1359 | glad_glMultiTexCoord1i = (PFNGLMULTITEXCOORD1IPROC)load("glMultiTexCoord1i"); 1360 | glad_glMultiTexCoord1iv = (PFNGLMULTITEXCOORD1IVPROC)load("glMultiTexCoord1iv"); 1361 | glad_glMultiTexCoord1s = (PFNGLMULTITEXCOORD1SPROC)load("glMultiTexCoord1s"); 1362 | glad_glMultiTexCoord1sv = (PFNGLMULTITEXCOORD1SVPROC)load("glMultiTexCoord1sv"); 1363 | glad_glMultiTexCoord2d = (PFNGLMULTITEXCOORD2DPROC)load("glMultiTexCoord2d"); 1364 | glad_glMultiTexCoord2dv = (PFNGLMULTITEXCOORD2DVPROC)load("glMultiTexCoord2dv"); 1365 | glad_glMultiTexCoord2f = (PFNGLMULTITEXCOORD2FPROC)load("glMultiTexCoord2f"); 1366 | glad_glMultiTexCoord2fv = (PFNGLMULTITEXCOORD2FVPROC)load("glMultiTexCoord2fv"); 1367 | glad_glMultiTexCoord2i = (PFNGLMULTITEXCOORD2IPROC)load("glMultiTexCoord2i"); 1368 | glad_glMultiTexCoord2iv = (PFNGLMULTITEXCOORD2IVPROC)load("glMultiTexCoord2iv"); 1369 | glad_glMultiTexCoord2s = (PFNGLMULTITEXCOORD2SPROC)load("glMultiTexCoord2s"); 1370 | glad_glMultiTexCoord2sv = (PFNGLMULTITEXCOORD2SVPROC)load("glMultiTexCoord2sv"); 1371 | glad_glMultiTexCoord3d = (PFNGLMULTITEXCOORD3DPROC)load("glMultiTexCoord3d"); 1372 | glad_glMultiTexCoord3dv = (PFNGLMULTITEXCOORD3DVPROC)load("glMultiTexCoord3dv"); 1373 | glad_glMultiTexCoord3f = (PFNGLMULTITEXCOORD3FPROC)load("glMultiTexCoord3f"); 1374 | glad_glMultiTexCoord3fv = (PFNGLMULTITEXCOORD3FVPROC)load("glMultiTexCoord3fv"); 1375 | glad_glMultiTexCoord3i = (PFNGLMULTITEXCOORD3IPROC)load("glMultiTexCoord3i"); 1376 | glad_glMultiTexCoord3iv = (PFNGLMULTITEXCOORD3IVPROC)load("glMultiTexCoord3iv"); 1377 | glad_glMultiTexCoord3s = (PFNGLMULTITEXCOORD3SPROC)load("glMultiTexCoord3s"); 1378 | glad_glMultiTexCoord3sv = (PFNGLMULTITEXCOORD3SVPROC)load("glMultiTexCoord3sv"); 1379 | glad_glMultiTexCoord4d = (PFNGLMULTITEXCOORD4DPROC)load("glMultiTexCoord4d"); 1380 | glad_glMultiTexCoord4dv = (PFNGLMULTITEXCOORD4DVPROC)load("glMultiTexCoord4dv"); 1381 | glad_glMultiTexCoord4f = (PFNGLMULTITEXCOORD4FPROC)load("glMultiTexCoord4f"); 1382 | glad_glMultiTexCoord4fv = (PFNGLMULTITEXCOORD4FVPROC)load("glMultiTexCoord4fv"); 1383 | glad_glMultiTexCoord4i = (PFNGLMULTITEXCOORD4IPROC)load("glMultiTexCoord4i"); 1384 | glad_glMultiTexCoord4iv = (PFNGLMULTITEXCOORD4IVPROC)load("glMultiTexCoord4iv"); 1385 | glad_glMultiTexCoord4s = (PFNGLMULTITEXCOORD4SPROC)load("glMultiTexCoord4s"); 1386 | glad_glMultiTexCoord4sv = (PFNGLMULTITEXCOORD4SVPROC)load("glMultiTexCoord4sv"); 1387 | glad_glLoadTransposeMatrixf = (PFNGLLOADTRANSPOSEMATRIXFPROC)load("glLoadTransposeMatrixf"); 1388 | glad_glLoadTransposeMatrixd = (PFNGLLOADTRANSPOSEMATRIXDPROC)load("glLoadTransposeMatrixd"); 1389 | glad_glMultTransposeMatrixf = (PFNGLMULTTRANSPOSEMATRIXFPROC)load("glMultTransposeMatrixf"); 1390 | glad_glMultTransposeMatrixd = (PFNGLMULTTRANSPOSEMATRIXDPROC)load("glMultTransposeMatrixd"); 1391 | } 1392 | static void load_GL_VERSION_1_4(GLADloadproc load) { 1393 | if(!GLAD_GL_VERSION_1_4) return; 1394 | glad_glBlendFuncSeparate = (PFNGLBLENDFUNCSEPARATEPROC)load("glBlendFuncSeparate"); 1395 | glad_glMultiDrawArrays = (PFNGLMULTIDRAWARRAYSPROC)load("glMultiDrawArrays"); 1396 | glad_glMultiDrawElements = (PFNGLMULTIDRAWELEMENTSPROC)load("glMultiDrawElements"); 1397 | glad_glPointParameterf = (PFNGLPOINTPARAMETERFPROC)load("glPointParameterf"); 1398 | glad_glPointParameterfv = (PFNGLPOINTPARAMETERFVPROC)load("glPointParameterfv"); 1399 | glad_glPointParameteri = (PFNGLPOINTPARAMETERIPROC)load("glPointParameteri"); 1400 | glad_glPointParameteriv = (PFNGLPOINTPARAMETERIVPROC)load("glPointParameteriv"); 1401 | glad_glFogCoordf = (PFNGLFOGCOORDFPROC)load("glFogCoordf"); 1402 | glad_glFogCoordfv = (PFNGLFOGCOORDFVPROC)load("glFogCoordfv"); 1403 | glad_glFogCoordd = (PFNGLFOGCOORDDPROC)load("glFogCoordd"); 1404 | glad_glFogCoorddv = (PFNGLFOGCOORDDVPROC)load("glFogCoorddv"); 1405 | glad_glFogCoordPointer = (PFNGLFOGCOORDPOINTERPROC)load("glFogCoordPointer"); 1406 | glad_glSecondaryColor3b = (PFNGLSECONDARYCOLOR3BPROC)load("glSecondaryColor3b"); 1407 | glad_glSecondaryColor3bv = (PFNGLSECONDARYCOLOR3BVPROC)load("glSecondaryColor3bv"); 1408 | glad_glSecondaryColor3d = (PFNGLSECONDARYCOLOR3DPROC)load("glSecondaryColor3d"); 1409 | glad_glSecondaryColor3dv = (PFNGLSECONDARYCOLOR3DVPROC)load("glSecondaryColor3dv"); 1410 | glad_glSecondaryColor3f = (PFNGLSECONDARYCOLOR3FPROC)load("glSecondaryColor3f"); 1411 | glad_glSecondaryColor3fv = (PFNGLSECONDARYCOLOR3FVPROC)load("glSecondaryColor3fv"); 1412 | glad_glSecondaryColor3i = (PFNGLSECONDARYCOLOR3IPROC)load("glSecondaryColor3i"); 1413 | glad_glSecondaryColor3iv = (PFNGLSECONDARYCOLOR3IVPROC)load("glSecondaryColor3iv"); 1414 | glad_glSecondaryColor3s = (PFNGLSECONDARYCOLOR3SPROC)load("glSecondaryColor3s"); 1415 | glad_glSecondaryColor3sv = (PFNGLSECONDARYCOLOR3SVPROC)load("glSecondaryColor3sv"); 1416 | glad_glSecondaryColor3ub = (PFNGLSECONDARYCOLOR3UBPROC)load("glSecondaryColor3ub"); 1417 | glad_glSecondaryColor3ubv = (PFNGLSECONDARYCOLOR3UBVPROC)load("glSecondaryColor3ubv"); 1418 | glad_glSecondaryColor3ui = (PFNGLSECONDARYCOLOR3UIPROC)load("glSecondaryColor3ui"); 1419 | glad_glSecondaryColor3uiv = (PFNGLSECONDARYCOLOR3UIVPROC)load("glSecondaryColor3uiv"); 1420 | glad_glSecondaryColor3us = (PFNGLSECONDARYCOLOR3USPROC)load("glSecondaryColor3us"); 1421 | glad_glSecondaryColor3usv = (PFNGLSECONDARYCOLOR3USVPROC)load("glSecondaryColor3usv"); 1422 | glad_glSecondaryColorPointer = (PFNGLSECONDARYCOLORPOINTERPROC)load("glSecondaryColorPointer"); 1423 | glad_glWindowPos2d = (PFNGLWINDOWPOS2DPROC)load("glWindowPos2d"); 1424 | glad_glWindowPos2dv = (PFNGLWINDOWPOS2DVPROC)load("glWindowPos2dv"); 1425 | glad_glWindowPos2f = (PFNGLWINDOWPOS2FPROC)load("glWindowPos2f"); 1426 | glad_glWindowPos2fv = (PFNGLWINDOWPOS2FVPROC)load("glWindowPos2fv"); 1427 | glad_glWindowPos2i = (PFNGLWINDOWPOS2IPROC)load("glWindowPos2i"); 1428 | glad_glWindowPos2iv = (PFNGLWINDOWPOS2IVPROC)load("glWindowPos2iv"); 1429 | glad_glWindowPos2s = (PFNGLWINDOWPOS2SPROC)load("glWindowPos2s"); 1430 | glad_glWindowPos2sv = (PFNGLWINDOWPOS2SVPROC)load("glWindowPos2sv"); 1431 | glad_glWindowPos3d = (PFNGLWINDOWPOS3DPROC)load("glWindowPos3d"); 1432 | glad_glWindowPos3dv = (PFNGLWINDOWPOS3DVPROC)load("glWindowPos3dv"); 1433 | glad_glWindowPos3f = (PFNGLWINDOWPOS3FPROC)load("glWindowPos3f"); 1434 | glad_glWindowPos3fv = (PFNGLWINDOWPOS3FVPROC)load("glWindowPos3fv"); 1435 | glad_glWindowPos3i = (PFNGLWINDOWPOS3IPROC)load("glWindowPos3i"); 1436 | glad_glWindowPos3iv = (PFNGLWINDOWPOS3IVPROC)load("glWindowPos3iv"); 1437 | glad_glWindowPos3s = (PFNGLWINDOWPOS3SPROC)load("glWindowPos3s"); 1438 | glad_glWindowPos3sv = (PFNGLWINDOWPOS3SVPROC)load("glWindowPos3sv"); 1439 | glad_glBlendColor = (PFNGLBLENDCOLORPROC)load("glBlendColor"); 1440 | glad_glBlendEquation = (PFNGLBLENDEQUATIONPROC)load("glBlendEquation"); 1441 | } 1442 | static void load_GL_VERSION_1_5(GLADloadproc load) { 1443 | if(!GLAD_GL_VERSION_1_5) return; 1444 | glad_glGenQueries = (PFNGLGENQUERIESPROC)load("glGenQueries"); 1445 | glad_glDeleteQueries = (PFNGLDELETEQUERIESPROC)load("glDeleteQueries"); 1446 | glad_glIsQuery = (PFNGLISQUERYPROC)load("glIsQuery"); 1447 | glad_glBeginQuery = (PFNGLBEGINQUERYPROC)load("glBeginQuery"); 1448 | glad_glEndQuery = (PFNGLENDQUERYPROC)load("glEndQuery"); 1449 | glad_glGetQueryiv = (PFNGLGETQUERYIVPROC)load("glGetQueryiv"); 1450 | glad_glGetQueryObjectiv = (PFNGLGETQUERYOBJECTIVPROC)load("glGetQueryObjectiv"); 1451 | glad_glGetQueryObjectuiv = (PFNGLGETQUERYOBJECTUIVPROC)load("glGetQueryObjectuiv"); 1452 | glad_glBindBuffer = (PFNGLBINDBUFFERPROC)load("glBindBuffer"); 1453 | glad_glDeleteBuffers = (PFNGLDELETEBUFFERSPROC)load("glDeleteBuffers"); 1454 | glad_glGenBuffers = (PFNGLGENBUFFERSPROC)load("glGenBuffers"); 1455 | glad_glIsBuffer = (PFNGLISBUFFERPROC)load("glIsBuffer"); 1456 | glad_glBufferData = (PFNGLBUFFERDATAPROC)load("glBufferData"); 1457 | glad_glBufferSubData = (PFNGLBUFFERSUBDATAPROC)load("glBufferSubData"); 1458 | glad_glGetBufferSubData = (PFNGLGETBUFFERSUBDATAPROC)load("glGetBufferSubData"); 1459 | glad_glMapBuffer = (PFNGLMAPBUFFERPROC)load("glMapBuffer"); 1460 | glad_glUnmapBuffer = (PFNGLUNMAPBUFFERPROC)load("glUnmapBuffer"); 1461 | glad_glGetBufferParameteriv = (PFNGLGETBUFFERPARAMETERIVPROC)load("glGetBufferParameteriv"); 1462 | glad_glGetBufferPointerv = (PFNGLGETBUFFERPOINTERVPROC)load("glGetBufferPointerv"); 1463 | } 1464 | static void load_GL_VERSION_2_0(GLADloadproc load) { 1465 | if(!GLAD_GL_VERSION_2_0) return; 1466 | glad_glBlendEquationSeparate = (PFNGLBLENDEQUATIONSEPARATEPROC)load("glBlendEquationSeparate"); 1467 | glad_glDrawBuffers = (PFNGLDRAWBUFFERSPROC)load("glDrawBuffers"); 1468 | glad_glStencilOpSeparate = (PFNGLSTENCILOPSEPARATEPROC)load("glStencilOpSeparate"); 1469 | glad_glStencilFuncSeparate = (PFNGLSTENCILFUNCSEPARATEPROC)load("glStencilFuncSeparate"); 1470 | glad_glStencilMaskSeparate = (PFNGLSTENCILMASKSEPARATEPROC)load("glStencilMaskSeparate"); 1471 | glad_glAttachShader = (PFNGLATTACHSHADERPROC)load("glAttachShader"); 1472 | glad_glBindAttribLocation = (PFNGLBINDATTRIBLOCATIONPROC)load("glBindAttribLocation"); 1473 | glad_glCompileShader = (PFNGLCOMPILESHADERPROC)load("glCompileShader"); 1474 | glad_glCreateProgram = (PFNGLCREATEPROGRAMPROC)load("glCreateProgram"); 1475 | glad_glCreateShader = (PFNGLCREATESHADERPROC)load("glCreateShader"); 1476 | glad_glDeleteProgram = (PFNGLDELETEPROGRAMPROC)load("glDeleteProgram"); 1477 | glad_glDeleteShader = (PFNGLDELETESHADERPROC)load("glDeleteShader"); 1478 | glad_glDetachShader = (PFNGLDETACHSHADERPROC)load("glDetachShader"); 1479 | glad_glDisableVertexAttribArray = (PFNGLDISABLEVERTEXATTRIBARRAYPROC)load("glDisableVertexAttribArray"); 1480 | glad_glEnableVertexAttribArray = (PFNGLENABLEVERTEXATTRIBARRAYPROC)load("glEnableVertexAttribArray"); 1481 | glad_glGetActiveAttrib = (PFNGLGETACTIVEATTRIBPROC)load("glGetActiveAttrib"); 1482 | glad_glGetActiveUniform = (PFNGLGETACTIVEUNIFORMPROC)load("glGetActiveUniform"); 1483 | glad_glGetAttachedShaders = (PFNGLGETATTACHEDSHADERSPROC)load("glGetAttachedShaders"); 1484 | glad_glGetAttribLocation = (PFNGLGETATTRIBLOCATIONPROC)load("glGetAttribLocation"); 1485 | glad_glGetProgramiv = (PFNGLGETPROGRAMIVPROC)load("glGetProgramiv"); 1486 | glad_glGetProgramInfoLog = (PFNGLGETPROGRAMINFOLOGPROC)load("glGetProgramInfoLog"); 1487 | glad_glGetShaderiv = (PFNGLGETSHADERIVPROC)load("glGetShaderiv"); 1488 | glad_glGetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC)load("glGetShaderInfoLog"); 1489 | glad_glGetShaderSource = (PFNGLGETSHADERSOURCEPROC)load("glGetShaderSource"); 1490 | glad_glGetUniformLocation = (PFNGLGETUNIFORMLOCATIONPROC)load("glGetUniformLocation"); 1491 | glad_glGetUniformfv = (PFNGLGETUNIFORMFVPROC)load("glGetUniformfv"); 1492 | glad_glGetUniformiv = (PFNGLGETUNIFORMIVPROC)load("glGetUniformiv"); 1493 | glad_glGetVertexAttribdv = (PFNGLGETVERTEXATTRIBDVPROC)load("glGetVertexAttribdv"); 1494 | glad_glGetVertexAttribfv = (PFNGLGETVERTEXATTRIBFVPROC)load("glGetVertexAttribfv"); 1495 | glad_glGetVertexAttribiv = (PFNGLGETVERTEXATTRIBIVPROC)load("glGetVertexAttribiv"); 1496 | glad_glGetVertexAttribPointerv = (PFNGLGETVERTEXATTRIBPOINTERVPROC)load("glGetVertexAttribPointerv"); 1497 | glad_glIsProgram = (PFNGLISPROGRAMPROC)load("glIsProgram"); 1498 | glad_glIsShader = (PFNGLISSHADERPROC)load("glIsShader"); 1499 | glad_glLinkProgram = (PFNGLLINKPROGRAMPROC)load("glLinkProgram"); 1500 | glad_glShaderSource = (PFNGLSHADERSOURCEPROC)load("glShaderSource"); 1501 | glad_glUseProgram = (PFNGLUSEPROGRAMPROC)load("glUseProgram"); 1502 | glad_glUniform1f = (PFNGLUNIFORM1FPROC)load("glUniform1f"); 1503 | glad_glUniform2f = (PFNGLUNIFORM2FPROC)load("glUniform2f"); 1504 | glad_glUniform3f = (PFNGLUNIFORM3FPROC)load("glUniform3f"); 1505 | glad_glUniform4f = (PFNGLUNIFORM4FPROC)load("glUniform4f"); 1506 | glad_glUniform1i = (PFNGLUNIFORM1IPROC)load("glUniform1i"); 1507 | glad_glUniform2i = (PFNGLUNIFORM2IPROC)load("glUniform2i"); 1508 | glad_glUniform3i = (PFNGLUNIFORM3IPROC)load("glUniform3i"); 1509 | glad_glUniform4i = (PFNGLUNIFORM4IPROC)load("glUniform4i"); 1510 | glad_glUniform1fv = (PFNGLUNIFORM1FVPROC)load("glUniform1fv"); 1511 | glad_glUniform2fv = (PFNGLUNIFORM2FVPROC)load("glUniform2fv"); 1512 | glad_glUniform3fv = (PFNGLUNIFORM3FVPROC)load("glUniform3fv"); 1513 | glad_glUniform4fv = (PFNGLUNIFORM4FVPROC)load("glUniform4fv"); 1514 | glad_glUniform1iv = (PFNGLUNIFORM1IVPROC)load("glUniform1iv"); 1515 | glad_glUniform2iv = (PFNGLUNIFORM2IVPROC)load("glUniform2iv"); 1516 | glad_glUniform3iv = (PFNGLUNIFORM3IVPROC)load("glUniform3iv"); 1517 | glad_glUniform4iv = (PFNGLUNIFORM4IVPROC)load("glUniform4iv"); 1518 | glad_glUniformMatrix2fv = (PFNGLUNIFORMMATRIX2FVPROC)load("glUniformMatrix2fv"); 1519 | glad_glUniformMatrix3fv = (PFNGLUNIFORMMATRIX3FVPROC)load("glUniformMatrix3fv"); 1520 | glad_glUniformMatrix4fv = (PFNGLUNIFORMMATRIX4FVPROC)load("glUniformMatrix4fv"); 1521 | glad_glValidateProgram = (PFNGLVALIDATEPROGRAMPROC)load("glValidateProgram"); 1522 | glad_glVertexAttrib1d = (PFNGLVERTEXATTRIB1DPROC)load("glVertexAttrib1d"); 1523 | glad_glVertexAttrib1dv = (PFNGLVERTEXATTRIB1DVPROC)load("glVertexAttrib1dv"); 1524 | glad_glVertexAttrib1f = (PFNGLVERTEXATTRIB1FPROC)load("glVertexAttrib1f"); 1525 | glad_glVertexAttrib1fv = (PFNGLVERTEXATTRIB1FVPROC)load("glVertexAttrib1fv"); 1526 | glad_glVertexAttrib1s = (PFNGLVERTEXATTRIB1SPROC)load("glVertexAttrib1s"); 1527 | glad_glVertexAttrib1sv = (PFNGLVERTEXATTRIB1SVPROC)load("glVertexAttrib1sv"); 1528 | glad_glVertexAttrib2d = (PFNGLVERTEXATTRIB2DPROC)load("glVertexAttrib2d"); 1529 | glad_glVertexAttrib2dv = (PFNGLVERTEXATTRIB2DVPROC)load("glVertexAttrib2dv"); 1530 | glad_glVertexAttrib2f = (PFNGLVERTEXATTRIB2FPROC)load("glVertexAttrib2f"); 1531 | glad_glVertexAttrib2fv = (PFNGLVERTEXATTRIB2FVPROC)load("glVertexAttrib2fv"); 1532 | glad_glVertexAttrib2s = (PFNGLVERTEXATTRIB2SPROC)load("glVertexAttrib2s"); 1533 | glad_glVertexAttrib2sv = (PFNGLVERTEXATTRIB2SVPROC)load("glVertexAttrib2sv"); 1534 | glad_glVertexAttrib3d = (PFNGLVERTEXATTRIB3DPROC)load("glVertexAttrib3d"); 1535 | glad_glVertexAttrib3dv = (PFNGLVERTEXATTRIB3DVPROC)load("glVertexAttrib3dv"); 1536 | glad_glVertexAttrib3f = (PFNGLVERTEXATTRIB3FPROC)load("glVertexAttrib3f"); 1537 | glad_glVertexAttrib3fv = (PFNGLVERTEXATTRIB3FVPROC)load("glVertexAttrib3fv"); 1538 | glad_glVertexAttrib3s = (PFNGLVERTEXATTRIB3SPROC)load("glVertexAttrib3s"); 1539 | glad_glVertexAttrib3sv = (PFNGLVERTEXATTRIB3SVPROC)load("glVertexAttrib3sv"); 1540 | glad_glVertexAttrib4Nbv = (PFNGLVERTEXATTRIB4NBVPROC)load("glVertexAttrib4Nbv"); 1541 | glad_glVertexAttrib4Niv = (PFNGLVERTEXATTRIB4NIVPROC)load("glVertexAttrib4Niv"); 1542 | glad_glVertexAttrib4Nsv = (PFNGLVERTEXATTRIB4NSVPROC)load("glVertexAttrib4Nsv"); 1543 | glad_glVertexAttrib4Nub = (PFNGLVERTEXATTRIB4NUBPROC)load("glVertexAttrib4Nub"); 1544 | glad_glVertexAttrib4Nubv = (PFNGLVERTEXATTRIB4NUBVPROC)load("glVertexAttrib4Nubv"); 1545 | glad_glVertexAttrib4Nuiv = (PFNGLVERTEXATTRIB4NUIVPROC)load("glVertexAttrib4Nuiv"); 1546 | glad_glVertexAttrib4Nusv = (PFNGLVERTEXATTRIB4NUSVPROC)load("glVertexAttrib4Nusv"); 1547 | glad_glVertexAttrib4bv = (PFNGLVERTEXATTRIB4BVPROC)load("glVertexAttrib4bv"); 1548 | glad_glVertexAttrib4d = (PFNGLVERTEXATTRIB4DPROC)load("glVertexAttrib4d"); 1549 | glad_glVertexAttrib4dv = (PFNGLVERTEXATTRIB4DVPROC)load("glVertexAttrib4dv"); 1550 | glad_glVertexAttrib4f = (PFNGLVERTEXATTRIB4FPROC)load("glVertexAttrib4f"); 1551 | glad_glVertexAttrib4fv = (PFNGLVERTEXATTRIB4FVPROC)load("glVertexAttrib4fv"); 1552 | glad_glVertexAttrib4iv = (PFNGLVERTEXATTRIB4IVPROC)load("glVertexAttrib4iv"); 1553 | glad_glVertexAttrib4s = (PFNGLVERTEXATTRIB4SPROC)load("glVertexAttrib4s"); 1554 | glad_glVertexAttrib4sv = (PFNGLVERTEXATTRIB4SVPROC)load("glVertexAttrib4sv"); 1555 | glad_glVertexAttrib4ubv = (PFNGLVERTEXATTRIB4UBVPROC)load("glVertexAttrib4ubv"); 1556 | glad_glVertexAttrib4uiv = (PFNGLVERTEXATTRIB4UIVPROC)load("glVertexAttrib4uiv"); 1557 | glad_glVertexAttrib4usv = (PFNGLVERTEXATTRIB4USVPROC)load("glVertexAttrib4usv"); 1558 | glad_glVertexAttribPointer = (PFNGLVERTEXATTRIBPOINTERPROC)load("glVertexAttribPointer"); 1559 | } 1560 | static void load_GL_VERSION_2_1(GLADloadproc load) { 1561 | if(!GLAD_GL_VERSION_2_1) return; 1562 | glad_glUniformMatrix2x3fv = (PFNGLUNIFORMMATRIX2X3FVPROC)load("glUniformMatrix2x3fv"); 1563 | glad_glUniformMatrix3x2fv = (PFNGLUNIFORMMATRIX3X2FVPROC)load("glUniformMatrix3x2fv"); 1564 | glad_glUniformMatrix2x4fv = (PFNGLUNIFORMMATRIX2X4FVPROC)load("glUniformMatrix2x4fv"); 1565 | glad_glUniformMatrix4x2fv = (PFNGLUNIFORMMATRIX4X2FVPROC)load("glUniformMatrix4x2fv"); 1566 | glad_glUniformMatrix3x4fv = (PFNGLUNIFORMMATRIX3X4FVPROC)load("glUniformMatrix3x4fv"); 1567 | glad_glUniformMatrix4x3fv = (PFNGLUNIFORMMATRIX4X3FVPROC)load("glUniformMatrix4x3fv"); 1568 | } 1569 | static void load_GL_VERSION_3_0(GLADloadproc load) { 1570 | if(!GLAD_GL_VERSION_3_0) return; 1571 | glad_glColorMaski = (PFNGLCOLORMASKIPROC)load("glColorMaski"); 1572 | glad_glGetBooleani_v = (PFNGLGETBOOLEANI_VPROC)load("glGetBooleani_v"); 1573 | glad_glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC)load("glGetIntegeri_v"); 1574 | glad_glEnablei = (PFNGLENABLEIPROC)load("glEnablei"); 1575 | glad_glDisablei = (PFNGLDISABLEIPROC)load("glDisablei"); 1576 | glad_glIsEnabledi = (PFNGLISENABLEDIPROC)load("glIsEnabledi"); 1577 | glad_glBeginTransformFeedback = (PFNGLBEGINTRANSFORMFEEDBACKPROC)load("glBeginTransformFeedback"); 1578 | glad_glEndTransformFeedback = (PFNGLENDTRANSFORMFEEDBACKPROC)load("glEndTransformFeedback"); 1579 | glad_glBindBufferRange = (PFNGLBINDBUFFERRANGEPROC)load("glBindBufferRange"); 1580 | glad_glBindBufferBase = (PFNGLBINDBUFFERBASEPROC)load("glBindBufferBase"); 1581 | glad_glTransformFeedbackVaryings = (PFNGLTRANSFORMFEEDBACKVARYINGSPROC)load("glTransformFeedbackVaryings"); 1582 | glad_glGetTransformFeedbackVarying = (PFNGLGETTRANSFORMFEEDBACKVARYINGPROC)load("glGetTransformFeedbackVarying"); 1583 | glad_glClampColor = (PFNGLCLAMPCOLORPROC)load("glClampColor"); 1584 | glad_glBeginConditionalRender = (PFNGLBEGINCONDITIONALRENDERPROC)load("glBeginConditionalRender"); 1585 | glad_glEndConditionalRender = (PFNGLENDCONDITIONALRENDERPROC)load("glEndConditionalRender"); 1586 | glad_glVertexAttribIPointer = (PFNGLVERTEXATTRIBIPOINTERPROC)load("glVertexAttribIPointer"); 1587 | glad_glGetVertexAttribIiv = (PFNGLGETVERTEXATTRIBIIVPROC)load("glGetVertexAttribIiv"); 1588 | glad_glGetVertexAttribIuiv = (PFNGLGETVERTEXATTRIBIUIVPROC)load("glGetVertexAttribIuiv"); 1589 | glad_glVertexAttribI1i = (PFNGLVERTEXATTRIBI1IPROC)load("glVertexAttribI1i"); 1590 | glad_glVertexAttribI2i = (PFNGLVERTEXATTRIBI2IPROC)load("glVertexAttribI2i"); 1591 | glad_glVertexAttribI3i = (PFNGLVERTEXATTRIBI3IPROC)load("glVertexAttribI3i"); 1592 | glad_glVertexAttribI4i = (PFNGLVERTEXATTRIBI4IPROC)load("glVertexAttribI4i"); 1593 | glad_glVertexAttribI1ui = (PFNGLVERTEXATTRIBI1UIPROC)load("glVertexAttribI1ui"); 1594 | glad_glVertexAttribI2ui = (PFNGLVERTEXATTRIBI2UIPROC)load("glVertexAttribI2ui"); 1595 | glad_glVertexAttribI3ui = (PFNGLVERTEXATTRIBI3UIPROC)load("glVertexAttribI3ui"); 1596 | glad_glVertexAttribI4ui = (PFNGLVERTEXATTRIBI4UIPROC)load("glVertexAttribI4ui"); 1597 | glad_glVertexAttribI1iv = (PFNGLVERTEXATTRIBI1IVPROC)load("glVertexAttribI1iv"); 1598 | glad_glVertexAttribI2iv = (PFNGLVERTEXATTRIBI2IVPROC)load("glVertexAttribI2iv"); 1599 | glad_glVertexAttribI3iv = (PFNGLVERTEXATTRIBI3IVPROC)load("glVertexAttribI3iv"); 1600 | glad_glVertexAttribI4iv = (PFNGLVERTEXATTRIBI4IVPROC)load("glVertexAttribI4iv"); 1601 | glad_glVertexAttribI1uiv = (PFNGLVERTEXATTRIBI1UIVPROC)load("glVertexAttribI1uiv"); 1602 | glad_glVertexAttribI2uiv = (PFNGLVERTEXATTRIBI2UIVPROC)load("glVertexAttribI2uiv"); 1603 | glad_glVertexAttribI3uiv = (PFNGLVERTEXATTRIBI3UIVPROC)load("glVertexAttribI3uiv"); 1604 | glad_glVertexAttribI4uiv = (PFNGLVERTEXATTRIBI4UIVPROC)load("glVertexAttribI4uiv"); 1605 | glad_glVertexAttribI4bv = (PFNGLVERTEXATTRIBI4BVPROC)load("glVertexAttribI4bv"); 1606 | glad_glVertexAttribI4sv = (PFNGLVERTEXATTRIBI4SVPROC)load("glVertexAttribI4sv"); 1607 | glad_glVertexAttribI4ubv = (PFNGLVERTEXATTRIBI4UBVPROC)load("glVertexAttribI4ubv"); 1608 | glad_glVertexAttribI4usv = (PFNGLVERTEXATTRIBI4USVPROC)load("glVertexAttribI4usv"); 1609 | glad_glGetUniformuiv = (PFNGLGETUNIFORMUIVPROC)load("glGetUniformuiv"); 1610 | glad_glBindFragDataLocation = (PFNGLBINDFRAGDATALOCATIONPROC)load("glBindFragDataLocation"); 1611 | glad_glGetFragDataLocation = (PFNGLGETFRAGDATALOCATIONPROC)load("glGetFragDataLocation"); 1612 | glad_glUniform1ui = (PFNGLUNIFORM1UIPROC)load("glUniform1ui"); 1613 | glad_glUniform2ui = (PFNGLUNIFORM2UIPROC)load("glUniform2ui"); 1614 | glad_glUniform3ui = (PFNGLUNIFORM3UIPROC)load("glUniform3ui"); 1615 | glad_glUniform4ui = (PFNGLUNIFORM4UIPROC)load("glUniform4ui"); 1616 | glad_glUniform1uiv = (PFNGLUNIFORM1UIVPROC)load("glUniform1uiv"); 1617 | glad_glUniform2uiv = (PFNGLUNIFORM2UIVPROC)load("glUniform2uiv"); 1618 | glad_glUniform3uiv = (PFNGLUNIFORM3UIVPROC)load("glUniform3uiv"); 1619 | glad_glUniform4uiv = (PFNGLUNIFORM4UIVPROC)load("glUniform4uiv"); 1620 | glad_glTexParameterIiv = (PFNGLTEXPARAMETERIIVPROC)load("glTexParameterIiv"); 1621 | glad_glTexParameterIuiv = (PFNGLTEXPARAMETERIUIVPROC)load("glTexParameterIuiv"); 1622 | glad_glGetTexParameterIiv = (PFNGLGETTEXPARAMETERIIVPROC)load("glGetTexParameterIiv"); 1623 | glad_glGetTexParameterIuiv = (PFNGLGETTEXPARAMETERIUIVPROC)load("glGetTexParameterIuiv"); 1624 | glad_glClearBufferiv = (PFNGLCLEARBUFFERIVPROC)load("glClearBufferiv"); 1625 | glad_glClearBufferuiv = (PFNGLCLEARBUFFERUIVPROC)load("glClearBufferuiv"); 1626 | glad_glClearBufferfv = (PFNGLCLEARBUFFERFVPROC)load("glClearBufferfv"); 1627 | glad_glClearBufferfi = (PFNGLCLEARBUFFERFIPROC)load("glClearBufferfi"); 1628 | glad_glGetStringi = (PFNGLGETSTRINGIPROC)load("glGetStringi"); 1629 | glad_glIsRenderbuffer = (PFNGLISRENDERBUFFERPROC)load("glIsRenderbuffer"); 1630 | glad_glBindRenderbuffer = (PFNGLBINDRENDERBUFFERPROC)load("glBindRenderbuffer"); 1631 | glad_glDeleteRenderbuffers = (PFNGLDELETERENDERBUFFERSPROC)load("glDeleteRenderbuffers"); 1632 | glad_glGenRenderbuffers = (PFNGLGENRENDERBUFFERSPROC)load("glGenRenderbuffers"); 1633 | glad_glRenderbufferStorage = (PFNGLRENDERBUFFERSTORAGEPROC)load("glRenderbufferStorage"); 1634 | glad_glGetRenderbufferParameteriv = (PFNGLGETRENDERBUFFERPARAMETERIVPROC)load("glGetRenderbufferParameteriv"); 1635 | glad_glIsFramebuffer = (PFNGLISFRAMEBUFFERPROC)load("glIsFramebuffer"); 1636 | glad_glBindFramebuffer = (PFNGLBINDFRAMEBUFFERPROC)load("glBindFramebuffer"); 1637 | glad_glDeleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSPROC)load("glDeleteFramebuffers"); 1638 | glad_glGenFramebuffers = (PFNGLGENFRAMEBUFFERSPROC)load("glGenFramebuffers"); 1639 | glad_glCheckFramebufferStatus = (PFNGLCHECKFRAMEBUFFERSTATUSPROC)load("glCheckFramebufferStatus"); 1640 | glad_glFramebufferTexture1D = (PFNGLFRAMEBUFFERTEXTURE1DPROC)load("glFramebufferTexture1D"); 1641 | glad_glFramebufferTexture2D = (PFNGLFRAMEBUFFERTEXTURE2DPROC)load("glFramebufferTexture2D"); 1642 | glad_glFramebufferTexture3D = (PFNGLFRAMEBUFFERTEXTURE3DPROC)load("glFramebufferTexture3D"); 1643 | glad_glFramebufferRenderbuffer = (PFNGLFRAMEBUFFERRENDERBUFFERPROC)load("glFramebufferRenderbuffer"); 1644 | glad_glGetFramebufferAttachmentParameteriv = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)load("glGetFramebufferAttachmentParameteriv"); 1645 | glad_glGenerateMipmap = (PFNGLGENERATEMIPMAPPROC)load("glGenerateMipmap"); 1646 | glad_glBlitFramebuffer = (PFNGLBLITFRAMEBUFFERPROC)load("glBlitFramebuffer"); 1647 | glad_glRenderbufferStorageMultisample = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)load("glRenderbufferStorageMultisample"); 1648 | glad_glFramebufferTextureLayer = (PFNGLFRAMEBUFFERTEXTURELAYERPROC)load("glFramebufferTextureLayer"); 1649 | glad_glMapBufferRange = (PFNGLMAPBUFFERRANGEPROC)load("glMapBufferRange"); 1650 | glad_glFlushMappedBufferRange = (PFNGLFLUSHMAPPEDBUFFERRANGEPROC)load("glFlushMappedBufferRange"); 1651 | glad_glBindVertexArray = (PFNGLBINDVERTEXARRAYPROC)load("glBindVertexArray"); 1652 | glad_glDeleteVertexArrays = (PFNGLDELETEVERTEXARRAYSPROC)load("glDeleteVertexArrays"); 1653 | glad_glGenVertexArrays = (PFNGLGENVERTEXARRAYSPROC)load("glGenVertexArrays"); 1654 | glad_glIsVertexArray = (PFNGLISVERTEXARRAYPROC)load("glIsVertexArray"); 1655 | } 1656 | static void load_GL_VERSION_3_1(GLADloadproc load) { 1657 | if(!GLAD_GL_VERSION_3_1) return; 1658 | glad_glDrawArraysInstanced = (PFNGLDRAWARRAYSINSTANCEDPROC)load("glDrawArraysInstanced"); 1659 | glad_glDrawElementsInstanced = (PFNGLDRAWELEMENTSINSTANCEDPROC)load("glDrawElementsInstanced"); 1660 | glad_glTexBuffer = (PFNGLTEXBUFFERPROC)load("glTexBuffer"); 1661 | glad_glPrimitiveRestartIndex = (PFNGLPRIMITIVERESTARTINDEXPROC)load("glPrimitiveRestartIndex"); 1662 | glad_glCopyBufferSubData = (PFNGLCOPYBUFFERSUBDATAPROC)load("glCopyBufferSubData"); 1663 | glad_glGetUniformIndices = (PFNGLGETUNIFORMINDICESPROC)load("glGetUniformIndices"); 1664 | glad_glGetActiveUniformsiv = (PFNGLGETACTIVEUNIFORMSIVPROC)load("glGetActiveUniformsiv"); 1665 | glad_glGetActiveUniformName = (PFNGLGETACTIVEUNIFORMNAMEPROC)load("glGetActiveUniformName"); 1666 | glad_glGetUniformBlockIndex = (PFNGLGETUNIFORMBLOCKINDEXPROC)load("glGetUniformBlockIndex"); 1667 | glad_glGetActiveUniformBlockiv = (PFNGLGETACTIVEUNIFORMBLOCKIVPROC)load("glGetActiveUniformBlockiv"); 1668 | glad_glGetActiveUniformBlockName = (PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC)load("glGetActiveUniformBlockName"); 1669 | glad_glUniformBlockBinding = (PFNGLUNIFORMBLOCKBINDINGPROC)load("glUniformBlockBinding"); 1670 | glad_glBindBufferRange = (PFNGLBINDBUFFERRANGEPROC)load("glBindBufferRange"); 1671 | glad_glBindBufferBase = (PFNGLBINDBUFFERBASEPROC)load("glBindBufferBase"); 1672 | glad_glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC)load("glGetIntegeri_v"); 1673 | } 1674 | static void load_GL_VERSION_3_2(GLADloadproc load) { 1675 | if(!GLAD_GL_VERSION_3_2) return; 1676 | glad_glDrawElementsBaseVertex = (PFNGLDRAWELEMENTSBASEVERTEXPROC)load("glDrawElementsBaseVertex"); 1677 | glad_glDrawRangeElementsBaseVertex = (PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC)load("glDrawRangeElementsBaseVertex"); 1678 | glad_glDrawElementsInstancedBaseVertex = (PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC)load("glDrawElementsInstancedBaseVertex"); 1679 | glad_glMultiDrawElementsBaseVertex = (PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC)load("glMultiDrawElementsBaseVertex"); 1680 | glad_glProvokingVertex = (PFNGLPROVOKINGVERTEXPROC)load("glProvokingVertex"); 1681 | glad_glFenceSync = (PFNGLFENCESYNCPROC)load("glFenceSync"); 1682 | glad_glIsSync = (PFNGLISSYNCPROC)load("glIsSync"); 1683 | glad_glDeleteSync = (PFNGLDELETESYNCPROC)load("glDeleteSync"); 1684 | glad_glClientWaitSync = (PFNGLCLIENTWAITSYNCPROC)load("glClientWaitSync"); 1685 | glad_glWaitSync = (PFNGLWAITSYNCPROC)load("glWaitSync"); 1686 | glad_glGetInteger64v = (PFNGLGETINTEGER64VPROC)load("glGetInteger64v"); 1687 | glad_glGetSynciv = (PFNGLGETSYNCIVPROC)load("glGetSynciv"); 1688 | glad_glGetInteger64i_v = (PFNGLGETINTEGER64I_VPROC)load("glGetInteger64i_v"); 1689 | glad_glGetBufferParameteri64v = (PFNGLGETBUFFERPARAMETERI64VPROC)load("glGetBufferParameteri64v"); 1690 | glad_glFramebufferTexture = (PFNGLFRAMEBUFFERTEXTUREPROC)load("glFramebufferTexture"); 1691 | glad_glTexImage2DMultisample = (PFNGLTEXIMAGE2DMULTISAMPLEPROC)load("glTexImage2DMultisample"); 1692 | glad_glTexImage3DMultisample = (PFNGLTEXIMAGE3DMULTISAMPLEPROC)load("glTexImage3DMultisample"); 1693 | glad_glGetMultisamplefv = (PFNGLGETMULTISAMPLEFVPROC)load("glGetMultisamplefv"); 1694 | glad_glSampleMaski = (PFNGLSAMPLEMASKIPROC)load("glSampleMaski"); 1695 | } 1696 | static void load_GL_VERSION_3_3(GLADloadproc load) { 1697 | if(!GLAD_GL_VERSION_3_3) return; 1698 | glad_glBindFragDataLocationIndexed = (PFNGLBINDFRAGDATALOCATIONINDEXEDPROC)load("glBindFragDataLocationIndexed"); 1699 | glad_glGetFragDataIndex = (PFNGLGETFRAGDATAINDEXPROC)load("glGetFragDataIndex"); 1700 | glad_glGenSamplers = (PFNGLGENSAMPLERSPROC)load("glGenSamplers"); 1701 | glad_glDeleteSamplers = (PFNGLDELETESAMPLERSPROC)load("glDeleteSamplers"); 1702 | glad_glIsSampler = (PFNGLISSAMPLERPROC)load("glIsSampler"); 1703 | glad_glBindSampler = (PFNGLBINDSAMPLERPROC)load("glBindSampler"); 1704 | glad_glSamplerParameteri = (PFNGLSAMPLERPARAMETERIPROC)load("glSamplerParameteri"); 1705 | glad_glSamplerParameteriv = (PFNGLSAMPLERPARAMETERIVPROC)load("glSamplerParameteriv"); 1706 | glad_glSamplerParameterf = (PFNGLSAMPLERPARAMETERFPROC)load("glSamplerParameterf"); 1707 | glad_glSamplerParameterfv = (PFNGLSAMPLERPARAMETERFVPROC)load("glSamplerParameterfv"); 1708 | glad_glSamplerParameterIiv = (PFNGLSAMPLERPARAMETERIIVPROC)load("glSamplerParameterIiv"); 1709 | glad_glSamplerParameterIuiv = (PFNGLSAMPLERPARAMETERIUIVPROC)load("glSamplerParameterIuiv"); 1710 | glad_glGetSamplerParameteriv = (PFNGLGETSAMPLERPARAMETERIVPROC)load("glGetSamplerParameteriv"); 1711 | glad_glGetSamplerParameterIiv = (PFNGLGETSAMPLERPARAMETERIIVPROC)load("glGetSamplerParameterIiv"); 1712 | glad_glGetSamplerParameterfv = (PFNGLGETSAMPLERPARAMETERFVPROC)load("glGetSamplerParameterfv"); 1713 | glad_glGetSamplerParameterIuiv = (PFNGLGETSAMPLERPARAMETERIUIVPROC)load("glGetSamplerParameterIuiv"); 1714 | glad_glQueryCounter = (PFNGLQUERYCOUNTERPROC)load("glQueryCounter"); 1715 | glad_glGetQueryObjecti64v = (PFNGLGETQUERYOBJECTI64VPROC)load("glGetQueryObjecti64v"); 1716 | glad_glGetQueryObjectui64v = (PFNGLGETQUERYOBJECTUI64VPROC)load("glGetQueryObjectui64v"); 1717 | glad_glVertexAttribDivisor = (PFNGLVERTEXATTRIBDIVISORPROC)load("glVertexAttribDivisor"); 1718 | glad_glVertexAttribP1ui = (PFNGLVERTEXATTRIBP1UIPROC)load("glVertexAttribP1ui"); 1719 | glad_glVertexAttribP1uiv = (PFNGLVERTEXATTRIBP1UIVPROC)load("glVertexAttribP1uiv"); 1720 | glad_glVertexAttribP2ui = (PFNGLVERTEXATTRIBP2UIPROC)load("glVertexAttribP2ui"); 1721 | glad_glVertexAttribP2uiv = (PFNGLVERTEXATTRIBP2UIVPROC)load("glVertexAttribP2uiv"); 1722 | glad_glVertexAttribP3ui = (PFNGLVERTEXATTRIBP3UIPROC)load("glVertexAttribP3ui"); 1723 | glad_glVertexAttribP3uiv = (PFNGLVERTEXATTRIBP3UIVPROC)load("glVertexAttribP3uiv"); 1724 | glad_glVertexAttribP4ui = (PFNGLVERTEXATTRIBP4UIPROC)load("glVertexAttribP4ui"); 1725 | glad_glVertexAttribP4uiv = (PFNGLVERTEXATTRIBP4UIVPROC)load("glVertexAttribP4uiv"); 1726 | glad_glVertexP2ui = (PFNGLVERTEXP2UIPROC)load("glVertexP2ui"); 1727 | glad_glVertexP2uiv = (PFNGLVERTEXP2UIVPROC)load("glVertexP2uiv"); 1728 | glad_glVertexP3ui = (PFNGLVERTEXP3UIPROC)load("glVertexP3ui"); 1729 | glad_glVertexP3uiv = (PFNGLVERTEXP3UIVPROC)load("glVertexP3uiv"); 1730 | glad_glVertexP4ui = (PFNGLVERTEXP4UIPROC)load("glVertexP4ui"); 1731 | glad_glVertexP4uiv = (PFNGLVERTEXP4UIVPROC)load("glVertexP4uiv"); 1732 | glad_glTexCoordP1ui = (PFNGLTEXCOORDP1UIPROC)load("glTexCoordP1ui"); 1733 | glad_glTexCoordP1uiv = (PFNGLTEXCOORDP1UIVPROC)load("glTexCoordP1uiv"); 1734 | glad_glTexCoordP2ui = (PFNGLTEXCOORDP2UIPROC)load("glTexCoordP2ui"); 1735 | glad_glTexCoordP2uiv = (PFNGLTEXCOORDP2UIVPROC)load("glTexCoordP2uiv"); 1736 | glad_glTexCoordP3ui = (PFNGLTEXCOORDP3UIPROC)load("glTexCoordP3ui"); 1737 | glad_glTexCoordP3uiv = (PFNGLTEXCOORDP3UIVPROC)load("glTexCoordP3uiv"); 1738 | glad_glTexCoordP4ui = (PFNGLTEXCOORDP4UIPROC)load("glTexCoordP4ui"); 1739 | glad_glTexCoordP4uiv = (PFNGLTEXCOORDP4UIVPROC)load("glTexCoordP4uiv"); 1740 | glad_glMultiTexCoordP1ui = (PFNGLMULTITEXCOORDP1UIPROC)load("glMultiTexCoordP1ui"); 1741 | glad_glMultiTexCoordP1uiv = (PFNGLMULTITEXCOORDP1UIVPROC)load("glMultiTexCoordP1uiv"); 1742 | glad_glMultiTexCoordP2ui = (PFNGLMULTITEXCOORDP2UIPROC)load("glMultiTexCoordP2ui"); 1743 | glad_glMultiTexCoordP2uiv = (PFNGLMULTITEXCOORDP2UIVPROC)load("glMultiTexCoordP2uiv"); 1744 | glad_glMultiTexCoordP3ui = (PFNGLMULTITEXCOORDP3UIPROC)load("glMultiTexCoordP3ui"); 1745 | glad_glMultiTexCoordP3uiv = (PFNGLMULTITEXCOORDP3UIVPROC)load("glMultiTexCoordP3uiv"); 1746 | glad_glMultiTexCoordP4ui = (PFNGLMULTITEXCOORDP4UIPROC)load("glMultiTexCoordP4ui"); 1747 | glad_glMultiTexCoordP4uiv = (PFNGLMULTITEXCOORDP4UIVPROC)load("glMultiTexCoordP4uiv"); 1748 | glad_glNormalP3ui = (PFNGLNORMALP3UIPROC)load("glNormalP3ui"); 1749 | glad_glNormalP3uiv = (PFNGLNORMALP3UIVPROC)load("glNormalP3uiv"); 1750 | glad_glColorP3ui = (PFNGLCOLORP3UIPROC)load("glColorP3ui"); 1751 | glad_glColorP3uiv = (PFNGLCOLORP3UIVPROC)load("glColorP3uiv"); 1752 | glad_glColorP4ui = (PFNGLCOLORP4UIPROC)load("glColorP4ui"); 1753 | glad_glColorP4uiv = (PFNGLCOLORP4UIVPROC)load("glColorP4uiv"); 1754 | glad_glSecondaryColorP3ui = (PFNGLSECONDARYCOLORP3UIPROC)load("glSecondaryColorP3ui"); 1755 | glad_glSecondaryColorP3uiv = (PFNGLSECONDARYCOLORP3UIVPROC)load("glSecondaryColorP3uiv"); 1756 | } 1757 | static int find_extensionsGL(void) { 1758 | if (!get_exts()) return 0; 1759 | (void)&has_ext; 1760 | free_exts(); 1761 | return 1; 1762 | } 1763 | 1764 | static void find_coreGL(void) { 1765 | 1766 | /* Thank you @elmindreda 1767 | * https://github.com/elmindreda/greg/blob/master/templates/greg.c.in#L176 1768 | * https://github.com/glfw/glfw/blob/master/src/context.c#L36 1769 | */ 1770 | int i, major, minor; 1771 | 1772 | const char* version; 1773 | const char* prefixes[] = { 1774 | "OpenGL ES-CM ", 1775 | "OpenGL ES-CL ", 1776 | "OpenGL ES ", 1777 | NULL 1778 | }; 1779 | 1780 | version = (const char*) glGetString(GL_VERSION); 1781 | if (!version) return; 1782 | 1783 | for (i = 0; prefixes[i]; i++) { 1784 | const size_t length = strlen(prefixes[i]); 1785 | if (strncmp(version, prefixes[i], length) == 0) { 1786 | version += length; 1787 | break; 1788 | } 1789 | } 1790 | 1791 | /* PR #18 */ 1792 | #ifdef _MSC_VER 1793 | sscanf_s(version, "%d.%d", &major, &minor); 1794 | #else 1795 | sscanf(version, "%d.%d", &major, &minor); 1796 | #endif 1797 | 1798 | GLVersion.major = major; GLVersion.minor = minor; 1799 | max_loaded_major = major; max_loaded_minor = minor; 1800 | GLAD_GL_VERSION_1_0 = (major == 1 && minor >= 0) || major > 1; 1801 | GLAD_GL_VERSION_1_1 = (major == 1 && minor >= 1) || major > 1; 1802 | GLAD_GL_VERSION_1_2 = (major == 1 && minor >= 2) || major > 1; 1803 | GLAD_GL_VERSION_1_3 = (major == 1 && minor >= 3) || major > 1; 1804 | GLAD_GL_VERSION_1_4 = (major == 1 && minor >= 4) || major > 1; 1805 | GLAD_GL_VERSION_1_5 = (major == 1 && minor >= 5) || major > 1; 1806 | GLAD_GL_VERSION_2_0 = (major == 2 && minor >= 0) || major > 2; 1807 | GLAD_GL_VERSION_2_1 = (major == 2 && minor >= 1) || major > 2; 1808 | GLAD_GL_VERSION_3_0 = (major == 3 && minor >= 0) || major > 3; 1809 | GLAD_GL_VERSION_3_1 = (major == 3 && minor >= 1) || major > 3; 1810 | GLAD_GL_VERSION_3_2 = (major == 3 && minor >= 2) || major > 3; 1811 | GLAD_GL_VERSION_3_3 = (major == 3 && minor >= 3) || major > 3; 1812 | if (GLVersion.major > 3 || (GLVersion.major >= 3 && GLVersion.minor >= 3)) { 1813 | max_loaded_major = 3; 1814 | max_loaded_minor = 3; 1815 | } 1816 | } 1817 | 1818 | int gladLoadGLLoader(GLADloadproc load) { 1819 | GLVersion.major = 0; GLVersion.minor = 0; 1820 | glGetString = (PFNGLGETSTRINGPROC)load("glGetString"); 1821 | if(glGetString == NULL) return 0; 1822 | if(glGetString(GL_VERSION) == NULL) return 0; 1823 | find_coreGL(); 1824 | load_GL_VERSION_1_0(load); 1825 | load_GL_VERSION_1_1(load); 1826 | load_GL_VERSION_1_2(load); 1827 | load_GL_VERSION_1_3(load); 1828 | load_GL_VERSION_1_4(load); 1829 | load_GL_VERSION_1_5(load); 1830 | load_GL_VERSION_2_0(load); 1831 | load_GL_VERSION_2_1(load); 1832 | load_GL_VERSION_3_0(load); 1833 | load_GL_VERSION_3_1(load); 1834 | load_GL_VERSION_3_2(load); 1835 | load_GL_VERSION_3_3(load); 1836 | 1837 | if (!find_extensionsGL()) return 0; 1838 | return GLVersion.major != 0 || GLVersion.minor != 0; 1839 | } 1840 | 1841 | -------------------------------------------------------------------------------- /include/KHR/khrplatform.h: -------------------------------------------------------------------------------- 1 | #ifndef __khrplatform_h_ 2 | #define __khrplatform_h_ 3 | 4 | /* 5 | ** Copyright (c) 2008-2018 The Khronos Group Inc. 6 | ** 7 | ** Permission is hereby granted, free of charge, to any person obtaining a 8 | ** copy of this software and/or associated documentation files (the 9 | ** "Materials"), to deal in the Materials without restriction, including 10 | ** without limitation the rights to use, copy, modify, merge, publish, 11 | ** distribute, sublicense, and/or sell copies of the Materials, and to 12 | ** permit persons to whom the Materials are furnished to do so, subject to 13 | ** the following conditions: 14 | ** 15 | ** The above copyright notice and this permission notice shall be included 16 | ** in all copies or substantial portions of the Materials. 17 | ** 18 | ** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 19 | ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20 | ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 21 | ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 22 | ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23 | ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24 | ** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. 25 | */ 26 | 27 | /* Khronos platform-specific types and definitions. 28 | * 29 | * The master copy of khrplatform.h is maintained in the Khronos EGL 30 | * Registry repository at https://github.com/KhronosGroup/EGL-Registry 31 | * The last semantic modification to khrplatform.h was at commit ID: 32 | * 67a3e0864c2d75ea5287b9f3d2eb74a745936692 33 | * 34 | * Adopters may modify this file to suit their platform. Adopters are 35 | * encouraged to submit platform specific modifications to the Khronos 36 | * group so that they can be included in future versions of this file. 37 | * Please submit changes by filing pull requests or issues on 38 | * the EGL Registry repository linked above. 39 | * 40 | * 41 | * See the Implementer's Guidelines for information about where this file 42 | * should be located on your system and for more details of its use: 43 | * http://www.khronos.org/registry/implementers_guide.pdf 44 | * 45 | * This file should be included as 46 | * #include 47 | * by Khronos client API header files that use its types and defines. 48 | * 49 | * The types in khrplatform.h should only be used to define API-specific types. 50 | * 51 | * Types defined in khrplatform.h: 52 | * khronos_int8_t signed 8 bit 53 | * khronos_uint8_t unsigned 8 bit 54 | * khronos_int16_t signed 16 bit 55 | * khronos_uint16_t unsigned 16 bit 56 | * khronos_int32_t signed 32 bit 57 | * khronos_uint32_t unsigned 32 bit 58 | * khronos_int64_t signed 64 bit 59 | * khronos_uint64_t unsigned 64 bit 60 | * khronos_intptr_t signed same number of bits as a pointer 61 | * khronos_uintptr_t unsigned same number of bits as a pointer 62 | * khronos_ssize_t signed size 63 | * khronos_usize_t unsigned size 64 | * khronos_float_t signed 32 bit floating point 65 | * khronos_time_ns_t unsigned 64 bit time in nanoseconds 66 | * khronos_utime_nanoseconds_t unsigned time interval or absolute time in 67 | * nanoseconds 68 | * khronos_stime_nanoseconds_t signed time interval in nanoseconds 69 | * khronos_boolean_enum_t enumerated boolean type. This should 70 | * only be used as a base type when a client API's boolean type is 71 | * an enum. Client APIs which use an integer or other type for 72 | * booleans cannot use this as the base type for their boolean. 73 | * 74 | * Tokens defined in khrplatform.h: 75 | * 76 | * KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values. 77 | * 78 | * KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0. 79 | * KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0. 80 | * 81 | * Calling convention macros defined in this file: 82 | * KHRONOS_APICALL 83 | * KHRONOS_APIENTRY 84 | * KHRONOS_APIATTRIBUTES 85 | * 86 | * These may be used in function prototypes as: 87 | * 88 | * KHRONOS_APICALL void KHRONOS_APIENTRY funcname( 89 | * int arg1, 90 | * int arg2) KHRONOS_APIATTRIBUTES; 91 | */ 92 | 93 | #if defined(__SCITECH_SNAP__) && !defined(KHRONOS_STATIC) 94 | # define KHRONOS_STATIC 1 95 | #endif 96 | 97 | /*------------------------------------------------------------------------- 98 | * Definition of KHRONOS_APICALL 99 | *------------------------------------------------------------------------- 100 | * This precedes the return type of the function in the function prototype. 101 | */ 102 | #if defined(KHRONOS_STATIC) 103 | /* If the preprocessor constant KHRONOS_STATIC is defined, make the 104 | * header compatible with static linking. */ 105 | # define KHRONOS_APICALL 106 | #elif defined(_WIN32) 107 | # define KHRONOS_APICALL __declspec(dllimport) 108 | #elif defined (__SYMBIAN32__) 109 | # define KHRONOS_APICALL IMPORT_C 110 | #elif defined(__ANDROID__) 111 | # define KHRONOS_APICALL __attribute__((visibility("default"))) 112 | #else 113 | # define KHRONOS_APICALL 114 | #endif 115 | 116 | /*------------------------------------------------------------------------- 117 | * Definition of KHRONOS_APIENTRY 118 | *------------------------------------------------------------------------- 119 | * This follows the return type of the function and precedes the function 120 | * name in the function prototype. 121 | */ 122 | #if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(KHRONOS_STATIC) 123 | /* Win32 but not WinCE */ 124 | # define KHRONOS_APIENTRY __stdcall 125 | #else 126 | # define KHRONOS_APIENTRY 127 | #endif 128 | 129 | /*------------------------------------------------------------------------- 130 | * Definition of KHRONOS_APIATTRIBUTES 131 | *------------------------------------------------------------------------- 132 | * This follows the closing parenthesis of the function prototype arguments. 133 | */ 134 | #if defined (__ARMCC_2__) 135 | #define KHRONOS_APIATTRIBUTES __softfp 136 | #else 137 | #define KHRONOS_APIATTRIBUTES 138 | #endif 139 | 140 | /*------------------------------------------------------------------------- 141 | * basic type definitions 142 | *-----------------------------------------------------------------------*/ 143 | #if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__) 144 | 145 | 146 | /* 147 | * Using 148 | */ 149 | #include 150 | typedef int32_t khronos_int32_t; 151 | typedef uint32_t khronos_uint32_t; 152 | typedef int64_t khronos_int64_t; 153 | typedef uint64_t khronos_uint64_t; 154 | #define KHRONOS_SUPPORT_INT64 1 155 | #define KHRONOS_SUPPORT_FLOAT 1 156 | 157 | #elif defined(__VMS ) || defined(__sgi) 158 | 159 | /* 160 | * Using 161 | */ 162 | #include 163 | typedef int32_t khronos_int32_t; 164 | typedef uint32_t khronos_uint32_t; 165 | typedef int64_t khronos_int64_t; 166 | typedef uint64_t khronos_uint64_t; 167 | #define KHRONOS_SUPPORT_INT64 1 168 | #define KHRONOS_SUPPORT_FLOAT 1 169 | 170 | #elif defined(_WIN32) && !defined(__SCITECH_SNAP__) 171 | 172 | /* 173 | * Win32 174 | */ 175 | typedef __int32 khronos_int32_t; 176 | typedef unsigned __int32 khronos_uint32_t; 177 | typedef __int64 khronos_int64_t; 178 | typedef unsigned __int64 khronos_uint64_t; 179 | #define KHRONOS_SUPPORT_INT64 1 180 | #define KHRONOS_SUPPORT_FLOAT 1 181 | 182 | #elif defined(__sun__) || defined(__digital__) 183 | 184 | /* 185 | * Sun or Digital 186 | */ 187 | typedef int khronos_int32_t; 188 | typedef unsigned int khronos_uint32_t; 189 | #if defined(__arch64__) || defined(_LP64) 190 | typedef long int khronos_int64_t; 191 | typedef unsigned long int khronos_uint64_t; 192 | #else 193 | typedef long long int khronos_int64_t; 194 | typedef unsigned long long int khronos_uint64_t; 195 | #endif /* __arch64__ */ 196 | #define KHRONOS_SUPPORT_INT64 1 197 | #define KHRONOS_SUPPORT_FLOAT 1 198 | 199 | #elif 0 200 | 201 | /* 202 | * Hypothetical platform with no float or int64 support 203 | */ 204 | typedef int khronos_int32_t; 205 | typedef unsigned int khronos_uint32_t; 206 | #define KHRONOS_SUPPORT_INT64 0 207 | #define KHRONOS_SUPPORT_FLOAT 0 208 | 209 | #else 210 | 211 | /* 212 | * Generic fallback 213 | */ 214 | #include 215 | typedef int32_t khronos_int32_t; 216 | typedef uint32_t khronos_uint32_t; 217 | typedef int64_t khronos_int64_t; 218 | typedef uint64_t khronos_uint64_t; 219 | #define KHRONOS_SUPPORT_INT64 1 220 | #define KHRONOS_SUPPORT_FLOAT 1 221 | 222 | #endif 223 | 224 | 225 | /* 226 | * Types that are (so far) the same on all platforms 227 | */ 228 | typedef signed char khronos_int8_t; 229 | typedef unsigned char khronos_uint8_t; 230 | typedef signed short int khronos_int16_t; 231 | typedef unsigned short int khronos_uint16_t; 232 | 233 | /* 234 | * Types that differ between LLP64 and LP64 architectures - in LLP64, 235 | * pointers are 64 bits, but 'long' is still 32 bits. Win64 appears 236 | * to be the only LLP64 architecture in current use. 237 | */ 238 | #ifdef _WIN64 239 | typedef signed long long int khronos_intptr_t; 240 | typedef unsigned long long int khronos_uintptr_t; 241 | typedef signed long long int khronos_ssize_t; 242 | typedef unsigned long long int khronos_usize_t; 243 | #else 244 | typedef signed long int khronos_intptr_t; 245 | typedef unsigned long int khronos_uintptr_t; 246 | typedef signed long int khronos_ssize_t; 247 | typedef unsigned long int khronos_usize_t; 248 | #endif 249 | 250 | #if KHRONOS_SUPPORT_FLOAT 251 | /* 252 | * Float type 253 | */ 254 | typedef float khronos_float_t; 255 | #endif 256 | 257 | #if KHRONOS_SUPPORT_INT64 258 | /* Time types 259 | * 260 | * These types can be used to represent a time interval in nanoseconds or 261 | * an absolute Unadjusted System Time. Unadjusted System Time is the number 262 | * of nanoseconds since some arbitrary system event (e.g. since the last 263 | * time the system booted). The Unadjusted System Time is an unsigned 264 | * 64 bit value that wraps back to 0 every 584 years. Time intervals 265 | * may be either signed or unsigned. 266 | */ 267 | typedef khronos_uint64_t khronos_utime_nanoseconds_t; 268 | typedef khronos_int64_t khronos_stime_nanoseconds_t; 269 | #endif 270 | 271 | /* 272 | * Dummy value used to pad enum types to 32 bits. 273 | */ 274 | #ifndef KHRONOS_MAX_ENUM 275 | #define KHRONOS_MAX_ENUM 0x7FFFFFFF 276 | #endif 277 | 278 | /* 279 | * Enumerated boolean type 280 | * 281 | * Values other than zero should be considered to be true. Therefore 282 | * comparisons should not be made against KHRONOS_TRUE. 283 | */ 284 | typedef enum { 285 | KHRONOS_FALSE = 0, 286 | KHRONOS_TRUE = 1, 287 | KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM 288 | } khronos_boolean_enum_t; 289 | 290 | #endif /* __khrplatform_h_ */ 291 | -------------------------------------------------------------------------------- /none.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MegaLoler/Vector-Display-Simulation/3fe902703bdd27fc46be462c70632d3260e7f2d4/none.gif -------------------------------------------------------------------------------- /phosphor.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MegaLoler/Vector-Display-Simulation/3fe902703bdd27fc46be462c70632d3260e7f2d4/phosphor.gif -------------------------------------------------------------------------------- /shader.frag: -------------------------------------------------------------------------------- 1 | #version 330 core 2 | 3 | out vec4 FragColor; 4 | 5 | uniform vec2 resolution; 6 | 7 | // bloom parameters 8 | uniform int kernel_diameter; 9 | uniform float brightness; 10 | 11 | // phosphor optical properties 12 | uniform vec3 reflectance; 13 | 14 | // phosphor texture 15 | uniform sampler2D source; 16 | 17 | // convolution kernel texture 18 | uniform sampler2D kernel; 19 | 20 | vec3 sample_phosphor (vec2 position) { 21 | if (position.x < 0 || position.x >= resolution.x || position.y < 0 || position.y >= resolution.y) 22 | return vec3 (0.0, 0.0, 0.0); 23 | else 24 | return texture (source, position / resolution).rgb + reflectance; 25 | } 26 | 27 | float sample_kernel (vec2 position) { 28 | return texture (kernel, position / (kernel_diameter - 1)).r; 29 | } 30 | 31 | void main () { 32 | // absolute pixel coordinates 33 | vec2 position = gl_FragCoord.xy; 34 | 35 | // the accumulator 36 | vec3 color = vec3 (0.0, 0.0, 0.0); 37 | 38 | // if diameter is 0 then disable bloom lol 39 | if (kernel_diameter > 0) { 40 | // convolve 41 | float kernel_radius = floor (kernel_diameter / 2.0); 42 | for (int i = 0; i < kernel_diameter * kernel_diameter; i++) { 43 | // get the kernel position 44 | float x = mod (float (i), kernel_diameter); 45 | float y = floor (float (i) / kernel_diameter); 46 | vec2 kernel_position = vec2 (x, y); 47 | 48 | // get the corresponding source position 49 | vec2 offset = kernel_position - kernel_radius; 50 | vec2 source_position = position + offset; 51 | 52 | // sample and accumulate 53 | float kernel_sample = sample_kernel (kernel_position); 54 | vec3 source_sample = sample_phosphor (source_position); 55 | color += source_sample * kernel_sample; 56 | } 57 | } else { 58 | color = sample_phosphor (position); 59 | } 60 | 61 | // adjust brightness 62 | FragColor = vec4(color * brightness, 1.0f); 63 | } 64 | -------------------------------------------------------------------------------- /shader.vert: -------------------------------------------------------------------------------- 1 | #version 330 core 2 | 3 | layout (location = 0) in vec2 position; 4 | 5 | void main () { 6 | gl_Position = vec4 (position, 0.0, 1.0); 7 | } 8 | -------------------------------------------------------------------------------- /source.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MegaLoler/Vector-Display-Simulation/3fe902703bdd27fc46be462c70632d3260e7f2d4/source.png -------------------------------------------------------------------------------- /tv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MegaLoler/Vector-Display-Simulation/3fe902703bdd27fc46be462c70632d3260e7f2d4/tv.png -------------------------------------------------------------------------------- /vector.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #define STB_IMAGE_IMPLEMENTATION 7 | #include "stb_image.h" 8 | 9 | // simulation mode 10 | // color crt mode simulates a color crt that draws scanlines 11 | // other mode is monochrome vector display 12 | const bool color_crt_mode = true; 13 | const bool shadow_mask = false; 14 | const bool electron_guide = true; // minimize lost electrons 15 | 16 | // drawing parameters 17 | const bool light_pen_mode = false; // follows mouse cursor instead of drawing rotating cube 18 | const float drawing_jitter = color_crt_mode ? 0.0000025 : 0; 19 | 20 | // power supply parameters 21 | const float power_supply_smoothing = color_crt_mode ? 0 : 3; // per frame 22 | 23 | // electron beam parameters 24 | const int electron_count = color_crt_mode ? 120000 : 40000; // per frame 25 | const float electron_intensity = color_crt_mode ? (shadow_mask ? 48000 : 24000) : 500; // total energy emitted per frame 26 | const float electron_scattering = color_crt_mode ? 0.05 : 0.25; // impurity of the beam 27 | 28 | // phosphor parameters 29 | const bool enable_phosphor_filter = color_crt_mode ? true : true; 30 | const float phosphor_persistence = color_crt_mode ? 1 : 5; // divides how much emittance remains after one frame 31 | const float phosphor_reflectance_red = 0.003; 32 | const float phosphor_reflectance_green = 0.003; 33 | const float phosphor_reflectance_blue = 0.003; 34 | // amber 35 | //const float phosphor_emittance_red = 1; 36 | //const float phosphor_emittance_green = 0.749; 37 | //const float phosphor_emittance_blue = 0; 38 | // green 39 | const float phosphor_emittance_red = 0.2; 40 | const float phosphor_emittance_green = 1; 41 | const float phosphor_emittance_blue = 0.2; 42 | // red? 43 | //const float phosphor_emittance_red = 1; 44 | //const float phosphor_emittance_green = 0.2; 45 | //const float phosphor_emittance_blue = 0.2; 46 | // blue? 47 | //const float phosphor_emittance_red = 0.2; 48 | //const float phosphor_emittance_green = 0.2; 49 | //const float phosphor_emittance_blue = 1; 50 | 51 | // bloom parameters 52 | const int bloom_kernel_diameter = 10; // 0 to disable bloom 53 | const float bloom_brightness = color_crt_mode ? 8 : 15; 54 | const float bloom_spread = color_crt_mode ? 40 : 100; 55 | 56 | // screen dimensions 57 | // TODO: allow screen resizing 58 | const int width = 256 * 3; 59 | const int height = 144 * 4; 60 | const int size = width * height; 61 | 62 | // 4x4 matrix representation 63 | struct mat4 { 64 | float xx; 65 | float xy; 66 | float xz; 67 | float xw; 68 | 69 | float yx; 70 | float yy; 71 | float yz; 72 | float yw; 73 | 74 | float zx; 75 | float zy; 76 | float zz; 77 | float zw; 78 | 79 | float wx; 80 | float wy; 81 | float wz; 82 | float ww; 83 | 84 | mat4 (float xx = 1, float xy = 0, float xz = 0, float xw = 0, 85 | float yx = 0, float yy = 1, float yz = 0, float yw = 0, 86 | float zx = 0, float zy = 0, float zz = 1, float zw = 0, 87 | float wx = 0, float wy = 0, float wz = 0, float ww = 1) 88 | : xx (xx), xy (xy), xz (xz), xw (xw), 89 | yx (yx), yy (yy), yz (yz), yw (yw), 90 | zx (zx), zy (zy), zz (zz), zw (zw), 91 | wx (wx), wy (wy), wz (wz), ww (ww) 92 | {} 93 | 94 | mat4 operator * (mat4 m) { 95 | mat4 result; 96 | 97 | result.xx = xx * m.xx + yx * m.xy + zx * m.xz + wx * m.xw; 98 | result.xy = xy * m.xx + yy * m.xy + zy * m.xz + wy * m.xw; 99 | result.xz = xz * m.xx + yz * m.xy + zz * m.xz + wz * m.xw; 100 | result.xw = xw * m.xx + yw * m.xy + zw * m.xz + ww * m.xw; 101 | 102 | result.yx = xx * m.yx + yx * m.yy + zx * m.yz + wx * m.yw; 103 | result.yy = xy * m.yx + yy * m.yy + zy * m.yz + wy * m.yw; 104 | result.yz = xz * m.yx + yz * m.yy + zz * m.yz + wz * m.yw; 105 | result.yw = xw * m.yx + yw * m.yy + zw * m.yz + ww * m.yw; 106 | 107 | result.zx = xx * m.zx + yx * m.zy + zx * m.zz + wx * m.zw; 108 | result.zy = xy * m.zx + yy * m.zy + zy * m.zz + wy * m.zw; 109 | result.zz = xz * m.zx + yz * m.zy + zz * m.zz + wz * m.zw; 110 | result.zw = xw * m.zx + yw * m.zy + zw * m.zz + ww * m.zw; 111 | 112 | result.wx = xx * m.wx + yx * m.wy + zx * m.wz + wx * m.ww; 113 | result.wy = xy * m.wx + yy * m.wy + zy * m.wz + wy * m.ww; 114 | result.wz = xz * m.wx + yz * m.wy + zz * m.wz + wz * m.ww; 115 | result.ww = xw * m.wx + yw * m.wy + zw * m.wz + ww * m.ww; 116 | 117 | return result; 118 | } 119 | }; 120 | 121 | // 2d vector representation 122 | struct vec2 { 123 | float x; 124 | float y; 125 | vec2 (float x = 0, float y = 0) : x (x), y (y) {} 126 | vec2 map () { 127 | // map to screen coordinates 128 | return vec2 ((x + 1) * width / 2.0, (y + 1) * height / 2.0); 129 | } 130 | }; 131 | 132 | // 3d vector representation 133 | struct vec3 { 134 | float x; 135 | float y; 136 | float z; 137 | vec3 (float x = 0, float y = 0, float z = 0) : x (x), y (y), z (z) {} 138 | vec3 (vec2 v) : vec3 (v.x, v.y) {}; 139 | vec2 project () { 140 | return vec2 (x / (z + 1), y / (z + 1)); 141 | } 142 | vec3 operator * (mat4 m) { 143 | vec3 result; 144 | 145 | result.x = x * m.xx + y * m.xy + z * m.xz; 146 | result.y = x * m.yx + y * m.yy + z * m.yz; 147 | result.z = x * m.zx + y * m.zy + z * m.zz; 148 | 149 | return result; 150 | } 151 | }; 152 | 153 | mat4 scale (float x, float y, float z) { 154 | return mat4 (x, 0, 0, 0, 0, y, 0, 0, 0, 0, z, 0, 0, 0, 0, 1); 155 | } 156 | 157 | mat4 translate (float x, float y, float z) { 158 | return mat4 (1, 0, 0, x, 0, 1, 0, y, 0, 0, 1, z, 0, 0, 0, 1); 159 | } 160 | 161 | mat4 rotate_z (float angle) { 162 | return mat4 (cos (angle), -sin (angle), 0, 1, sin (angle), cos (angle), 0, 1, 0, 0, 0, 1, 0, 0, 0, 1); 163 | } 164 | 165 | mat4 rotate_y (float angle) { 166 | return mat4 (cos (angle), 0, sin (angle), 0, 0, 1, 0, 0, -sin (angle), 0, cos (angle), 0, 0, 0, 0, 1); 167 | } 168 | 169 | mat4 rotate_x (float angle) { 170 | return mat4 (1, 0, 0, 0, 0, cos (angle), -sin (angle), 0, 0, sin (angle), cos (angle), 0, 0, 0, 0, 1); 171 | } 172 | 173 | // precalculations 174 | const float intensity_per_electron = electron_intensity / electron_count; 175 | const float electron_delta = 1.0 / electron_count; 176 | const float phosphor_decay = 1.0 / (1 + phosphor_persistence); 177 | const float power_supply_decay = 1.0 / (1 + power_supply_smoothing) / electron_count; 178 | const int bloom_kernel_radius = bloom_kernel_diameter / 2; 179 | const int bloom_kernel_size = bloom_kernel_diameter * bloom_kernel_diameter; 180 | const float center_x = width / 2.0; 181 | const float center_y = height / 2.0; 182 | 183 | // state variables 184 | float power_supply_in = 1; // power input; 1 = normal, 0 = off 185 | float power_supply_out = 0; // smoothed output of power supply 186 | float color_red = 1; // current value for red beam 187 | float color_green = 1; // current value for red beam 188 | float color_blue = 1; // current value for red beam 189 | int frame = 0; // the frame counter 190 | 191 | // normalized mouse coordinates 192 | vec2 mouse; 193 | vec2 previous_mouse; 194 | 195 | // electron buffer 196 | // new electrons hitting the screen 197 | // adjusted for decay after time hit between current and last frame 198 | float electron_buffer[size]; 199 | 200 | // phosphor buffer 201 | // total emittance of phosphor at each pixel 202 | // rgb color 203 | float phosphor_buffer[size * 3]; 204 | 205 | // phoshor colors 206 | float color_mask[size * 3]; 207 | 208 | // convolution kernel for bloom shader 209 | float kernel[bloom_kernel_size]; 210 | 211 | // the image to render in color crt mode 212 | float image[size * 3]; 213 | 214 | // the 3d path for the electron beam to trace 215 | vec3 path[1024]; 216 | int vertex_count = 0; 217 | 218 | // opengl stuff 219 | GLuint vbo, vao, program; 220 | GLuint phosphor_texture, kernel_texture; 221 | 222 | float noise () { 223 | return (float) rand () / RAND_MAX; 224 | } 225 | 226 | // sample the path for the electron beam to trace per frame 227 | // project to 2d 228 | // 0 <= n <= 1 229 | // TODO: add bezier smoothing or something 230 | // TODO: vblank simulation in color crt mode 231 | // TODO: phase drift 232 | vec2 sample_path (float n) { 233 | if (vertex_count == 0) 234 | return vec2 ().map (); 235 | else if (vertex_count == 1) 236 | return path[0].project ().map (); 237 | 238 | float n2 = n * (vertex_count / 2); 239 | int i = floor (n2); 240 | n = n2 - i; 241 | i *= 2; 242 | vec3 p1 = path[i]; 243 | vec3 p2 = path[i + 1]; 244 | vec3 delta = vec3 ((p2.x - p1.x) * n, (p2.y - p1.y) * n, (p2.z - p1.z) * n); 245 | return vec3 (p1.x + delta.x, p1.y + delta.y, p1.z + delta.z).project ().map (); 246 | } 247 | 248 | // generate the delta gun pattern 249 | void generate_color_mask () { 250 | if (color_crt_mode) { 251 | for (int y = 0; y < height / 4; y++) { 252 | for (int x = 0; x < width / 3; x++) { 253 | int px = x * 3; 254 | int py = y * 4; 255 | int py_mid = py; 256 | int py_side = py + 2; 257 | if (x % 2 == 0) { 258 | py_mid = py + 2; 259 | py_side = py; 260 | } 261 | int px1 = px + 1; 262 | int py1 = py_mid; 263 | int px2 = px; 264 | int py2 = py_side; 265 | int px3 = px + 2; 266 | int py3 = py_side; 267 | 268 | // middle dot 269 | color_mask[(px1 + py1 * width) * 3 + 0] = 1; // red 270 | color_mask[(px1 + py1 * width) * 3 + 1] = 0; // green 271 | color_mask[(px1 + py1 * width) * 3 + 2] = 0; // blue 272 | 273 | // left dot 274 | color_mask[(px2 + py2 * width) * 3 + 0] = 0; // red 275 | color_mask[(px2 + py2 * width) * 3 + 1] = 1; // green 276 | color_mask[(px2 + py2 * width) * 3 + 2] = 0; // blue 277 | 278 | // right dot 279 | color_mask[(px3 + py3 * width) * 3 + 0] = 0; // red 280 | color_mask[(px3 + py3 * width) * 3 + 1] = 0; // green 281 | color_mask[(px3 + py3 * width) * 3 + 2] = 1; // blue 282 | } 283 | } 284 | } else { 285 | for (int i = 0; i < size * 3; i += 3) { 286 | color_mask[i + 0] = phosphor_emittance_red; 287 | color_mask[i + 1] = phosphor_emittance_green; 288 | color_mask[i + 2] = phosphor_emittance_blue; 289 | } 290 | } 291 | } 292 | 293 | // generate the convolution kernel to pass to the bloom shader 294 | void generate_kernel () { 295 | for (int i = 0; i < bloom_kernel_size; i++) { 296 | float x = i % bloom_kernel_diameter; 297 | float y = i / bloom_kernel_diameter; 298 | float offset_x = x - bloom_kernel_radius; 299 | float offset_y = y - bloom_kernel_radius; 300 | float radius = sqrt (offset_x * offset_x + offset_y * offset_y) / bloom_kernel_diameter; 301 | float value = pow (radius, 1.0 / bloom_spread); 302 | kernel[i] = fmax (0, 1 - value); 303 | } 304 | } 305 | 306 | void prepare_path (float time) { 307 | vertex_count = 0; 308 | 309 | if (light_pen_mode) { 310 | path[vertex_count++] = vec3 (previous_mouse); 311 | path[vertex_count++] = vec3 (mouse); 312 | return; 313 | } 314 | 315 | if (color_crt_mode) { 316 | // prepare scanlines 317 | for (int i = height - 4; i >= 0; i -= 4) { 318 | float y = (float) (i + 2) / height * 2 - 1; 319 | path[vertex_count++] = vec3 (-1, y, 0); 320 | path[vertex_count++] = vec3 (1, y, 0); 321 | } 322 | } else { 323 | 324 | // rotating cube 325 | 326 | // normalized vertices 327 | vec3 p000 = vec3 (-1, -1, -1); 328 | vec3 p001 = vec3 (-1, -1, 1); 329 | vec3 p010 = vec3 (-1, 1, -1); 330 | vec3 p011 = vec3 (-1, 1, 1); 331 | vec3 p100 = vec3 (1, -1, -1); 332 | vec3 p101 = vec3 (1, -1, 1); 333 | vec3 p110 = vec3 (1, 1, -1); 334 | vec3 p111 = vec3 (1, 1, 1); 335 | 336 | // transformed vertices 337 | mat4 transform = mat4 () * scale (0.3, 0.3, 0.3); 338 | float angle = time * M_PI * 2 / 8; 339 | transform = transform * rotate_y (angle); 340 | transform = transform * rotate_x (angle); 341 | vec3 p000_ = p000 * transform; 342 | vec3 p001_ = p001 * transform; 343 | vec3 p010_ = p010 * transform; 344 | vec3 p011_ = p011 * transform; 345 | vec3 p100_ = p100 * transform; 346 | vec3 p101_ = p101 * transform; 347 | vec3 p110_ = p110 * transform; 348 | vec3 p111_ = p111 * transform; 349 | 350 | // edges 351 | path[vertex_count++] = p000_; 352 | path[vertex_count++] = p001_; 353 | path[vertex_count++] = p010_; 354 | path[vertex_count++] = p011_; 355 | path[vertex_count++] = p100_; 356 | path[vertex_count++] = p101_; 357 | path[vertex_count++] = p110_; 358 | path[vertex_count++] = p111_; 359 | 360 | path[vertex_count++] = p000_; 361 | path[vertex_count++] = p010_; 362 | path[vertex_count++] = p001_; 363 | path[vertex_count++] = p011_; 364 | path[vertex_count++] = p100_; 365 | path[vertex_count++] = p110_; 366 | path[vertex_count++] = p101_; 367 | path[vertex_count++] = p111_; 368 | 369 | path[vertex_count++] = p000_; 370 | path[vertex_count++] = p100_; 371 | path[vertex_count++] = p001_; 372 | path[vertex_count++] = p101_; 373 | path[vertex_count++] = p010_; 374 | path[vertex_count++] = p110_; 375 | path[vertex_count++] = p011_; 376 | path[vertex_count++] = p111_; 377 | } 378 | } 379 | 380 | void sample_color (float n) { 381 | float nn = n * height / 4; 382 | int line = floor (nn); // the scanline 383 | int y = floor (line * 2 / 3) + (frame % 2 == 0 ? 0 : 1); 384 | int x = floor ((nn - line) * width) / 3; 385 | int i = (x + y * width) * 3; 386 | color_red = image[i]; 387 | color_green = image[i + 1]; 388 | color_blue = image[i + 2]; 389 | } 390 | 391 | void render (float time) { 392 | 393 | // TODO: make unit time 1 second and incorporate variable delta time 394 | 395 | // create the path to trace 396 | prepare_path (time); 397 | 398 | // prepare the electron buffer 399 | std::fill_n (electron_buffer, size, 0); // clear it first 400 | for (float n = 0; n < 1; n += electron_delta) { 401 | 402 | // update the power supply 403 | power_supply_out += (power_supply_in - power_supply_out) * power_supply_decay; 404 | float power_supply_out_compliment = 1 - power_supply_out; 405 | 406 | // add jitter to the sampling position 407 | float sample = n + noise () * drawing_jitter; 408 | 409 | // sample the ideal point on the path to be traced 410 | vec2 point = sample_path (sample); 411 | 412 | if (color_crt_mode) 413 | sample_color (sample); 414 | 415 | // TODO: add electron gun inertia for curving and overshoots 416 | 417 | // calculate random scattering 418 | float offset_radius = tan (noise () * 2) * electron_scattering; 419 | float offset_angle = noise() * M_PI * 2; 420 | float offset_x = cos (offset_angle) * offset_radius; 421 | float offset_y = sin (offset_angle) * offset_radius; 422 | 423 | // calculate final dot position 424 | float x = point.x + offset_x; 425 | float y = point.y + offset_y; 426 | x += (center_x - x) * power_supply_out_compliment; 427 | y += (center_y - y) * power_supply_out_compliment; 428 | 429 | if (color_crt_mode) { 430 | if (electron_guide) { 431 | point.x = floor (point.x / 3) * 3; 432 | point.y = floor (point.y / 4) * 4; 433 | x = floor (x / 3) * 3; 434 | y = floor (y / 4) * 4; 435 | } 436 | } 437 | 438 | // clip 439 | // TODO: better clipping 440 | if (x < 0 || y < 0 || x >= width - 2 || y >= height - 2) 441 | continue; 442 | 443 | // calculate intensity and adjust for decay at this time 444 | // TODO: idk a good curve, find a better one? 445 | float decay_curve = 1 - n * n; 446 | float intensity = intensity_per_electron * power_supply_out; 447 | if (enable_phosphor_filter) 448 | intensity -= intensity * phosphor_decay * decay_curve; 449 | 450 | if (color_crt_mode) { 451 | // in this mode there are three electron beams in a delta gun pattern 452 | int x_ = floor (point.x); 453 | if (shadow_mask) { 454 | if (int (x) % 3 > 0 || int (y) % 4 > 0) { 455 | continue; 456 | } 457 | } 458 | float y_mid = y; 459 | float y_side = y + 2; 460 | if (x_ % 2 == 0) { 461 | y_mid = y + 2; 462 | y_side = y; 463 | } 464 | float intensity1, intensity2, intensity3; 465 | if (x_ % 3 == 0) { 466 | intensity1 = color_red; 467 | intensity2 = color_green; 468 | intensity3 = color_blue; 469 | } else if (x_ % 3 == 1) { 470 | intensity1 = color_blue; 471 | intensity2 = color_red; 472 | intensity3 = color_green; 473 | } else { 474 | intensity1 = color_green; 475 | intensity2 = color_blue; 476 | intensity3 = color_red; 477 | } 478 | electron_buffer[int (x) + 1 + int (y_mid) * width] += intensity * intensity1; 479 | electron_buffer[int (x) + int (y_side) * width] += intensity * intensity2; 480 | electron_buffer[int (x) + 2 + int (y_side) * width] += intensity * intensity3; 481 | } else { 482 | // plot the result on the electron buffer 483 | electron_buffer[int (x) + int (y) * width] += intensity; 484 | } 485 | } 486 | 487 | // update the phosphor buffer 488 | for (int i = 0; i < size * 3; i++) { 489 | float target = color_mask[i] * electron_buffer[i / 3]; 490 | if (enable_phosphor_filter) 491 | phosphor_buffer[i] += (target - phosphor_buffer[i]) * phosphor_decay; 492 | else 493 | phosphor_buffer[i] = target; 494 | } 495 | 496 | // render the phosphor buffer with bloom filter 497 | glActiveTexture(GL_TEXTURE0 + 0); 498 | glBindTexture (GL_TEXTURE_2D, phosphor_texture); 499 | glTexImage2D (GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_FLOAT, phosphor_buffer); 500 | glActiveTexture(GL_TEXTURE0 + 1); 501 | glBindTexture (GL_TEXTURE_2D, kernel_texture); 502 | glUseProgram (program); 503 | glBindVertexArray (vao); 504 | glDrawArrays (GL_TRIANGLE_STRIP, 0, 4); 505 | } 506 | 507 | std::string read_file (const char *filename) { 508 | // https://stackoverflow.com/questions/18398167/how-to-copy-a-txt-file-to-a-char-array-in-c 509 | std::ifstream in (filename); 510 | std::string contents ((std::istreambuf_iterator (in)), 511 | std::istreambuf_iterator ()); 512 | return contents; 513 | } 514 | 515 | void init_opengl () { 516 | float vertices[] = { 517 | -1, -1, 518 | 1, -1, 519 | -1, 1, 520 | 1, 1, 521 | }; 522 | 523 | glGenVertexArrays (1, &vao); 524 | glBindVertexArray (vao); 525 | 526 | glGenBuffers (1, &vbo); 527 | glBindBuffer (GL_ARRAY_BUFFER, vbo); 528 | glBufferData (GL_ARRAY_BUFFER, sizeof (vertices), vertices, GL_STATIC_DRAW); 529 | 530 | glVertexAttribPointer (0, 2, GL_FLOAT, GL_FALSE, 2 * sizeof (float), (void *) 0); 531 | glEnableVertexAttribArray (0); 532 | 533 | glGenTextures (1, &phosphor_texture); 534 | glBindTexture (GL_TEXTURE_2D, phosphor_texture); 535 | glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 536 | 537 | glGenTextures (1, &kernel_texture); 538 | glBindTexture (GL_TEXTURE_2D, kernel_texture); 539 | glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 540 | glTexImage2D (GL_TEXTURE_2D, 0, GL_RED, bloom_kernel_diameter, bloom_kernel_diameter, 0, GL_RED, GL_FLOAT, kernel); 541 | 542 | glBindVertexArray (0); 543 | 544 | // compile shaders 545 | GLuint vertex_shader, fragment_shader; 546 | int success; 547 | const int log_size = 512; 548 | char log[log_size]; 549 | std::string vertex_shader_source_string = read_file ("shader.vert"); 550 | std::string fragment_shader_source_string = read_file ("shader.frag"); 551 | const char *vertex_shader_source = vertex_shader_source_string.c_str (); 552 | const char *fragment_shader_source = fragment_shader_source_string.c_str (); 553 | vertex_shader = glCreateShader (GL_VERTEX_SHADER); 554 | fragment_shader = glCreateShader (GL_FRAGMENT_SHADER); 555 | glShaderSource (vertex_shader, 1, &vertex_shader_source, NULL); 556 | glShaderSource (fragment_shader, 1, &fragment_shader_source, NULL); 557 | glCompileShader (vertex_shader); 558 | glCompileShader (fragment_shader); 559 | glGetShaderiv (vertex_shader, GL_COMPILE_STATUS, &success); 560 | if (!success) { 561 | glGetShaderInfoLog (vertex_shader, log_size, NULL, log); 562 | std::cerr << "Could not compile vertex shader:\n" << log << std::endl; 563 | exit (EXIT_FAILURE); 564 | } 565 | glGetShaderiv (fragment_shader, GL_COMPILE_STATUS, &success); 566 | if (!success) { 567 | glGetShaderInfoLog (fragment_shader, log_size, NULL, log); 568 | std::cerr << "Could not compile fragment shader:\n" << log << std::endl; 569 | exit (EXIT_FAILURE); 570 | } 571 | 572 | // create shader program 573 | program = glCreateProgram (); 574 | glAttachShader (program, vertex_shader); 575 | glAttachShader (program, fragment_shader); 576 | glLinkProgram (program); 577 | glGetProgramiv (program, GL_LINK_STATUS, &success); 578 | if (!success) { 579 | glGetProgramInfoLog (program, log_size, NULL, log); 580 | std::cerr << "Could not link shader program:\n" << log << std::endl; 581 | exit (EXIT_FAILURE); 582 | } 583 | glDeleteShader (vertex_shader); 584 | glDeleteShader (fragment_shader); 585 | 586 | // set parameters 587 | glUseProgram (program); 588 | glUniform1i (glGetUniformLocation (program, "kernel_diameter"), bloom_kernel_diameter); 589 | glUniform1f (glGetUniformLocation (program, "brightness"), bloom_brightness); 590 | glUniform3f (glGetUniformLocation (program, "reflectance"), phosphor_reflectance_red, phosphor_reflectance_green, phosphor_reflectance_blue); 591 | 592 | glUniform1i (glGetUniformLocation (program, "source"), 0); 593 | glUniform1i (glGetUniformLocation (program, "kernel"), 1); 594 | 595 | glUniform2f (glGetUniformLocation (program, "resolution"), width, height); 596 | } 597 | 598 | void on_resize (GLFWwindow *window, int width, int height) { 599 | // TODO: allow for window resizing 600 | //glViewport (0, 0, width, height); 601 | } 602 | 603 | void process_input (GLFWwindow *window) { 604 | if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS) 605 | glfwSetWindowShouldClose (window, true); 606 | 607 | double x, y; 608 | glfwGetCursorPos (window, &x, &y); 609 | previous_mouse = mouse; 610 | mouse = vec2 (x / width * 2 - 1, -(y / height * 2 - 1)); 611 | } 612 | 613 | void on_keyboard (GLFWwindow* window, int key, int scancode, int action, int mods) { 614 | if (key == GLFW_KEY_SPACE && action == GLFW_PRESS) 615 | power_supply_in = !power_supply_in; 616 | } 617 | 618 | void load_image () { 619 | 620 | int w, h, n; 621 | unsigned char *source = stbi_load ("source.png", &w, &h, &n, 3); 622 | for(int i = 0; i < w * h * n;i++){ 623 | image[i] = source[i] / 255.0; 624 | } 625 | stbi_image_free(source); 626 | } 627 | 628 | int main (int argc, const char **argv) { 629 | 630 | load_image (); 631 | generate_color_mask (); 632 | generate_kernel (); 633 | srand (time (0)); 634 | 635 | glfwInit(); 636 | glfwWindowHint (GLFW_CONTEXT_VERSION_MAJOR, 3); 637 | glfwWindowHint (GLFW_CONTEXT_VERSION_MINOR, 3); 638 | glfwWindowHint (GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); 639 | 640 | GLFWwindow *window = glfwCreateWindow (width, height, "Vector Display Simulator", NULL, NULL); 641 | if (window == NULL) { 642 | std::cerr << "Could not create GLFW window" << std::endl; 643 | glfwTerminate(); 644 | exit (EXIT_FAILURE); 645 | } 646 | glfwMakeContextCurrent (window); 647 | 648 | if (!gladLoadGLLoader ((GLADloadproc) glfwGetProcAddress)) { 649 | std::cerr << "Could not initialize GLAD" << std::endl; 650 | exit (EXIT_FAILURE); 651 | } 652 | 653 | glViewport (0, 0, width, height); 654 | glfwSetFramebufferSizeCallback (window, on_resize); 655 | glfwSetKeyCallback (window, on_keyboard); 656 | 657 | init_opengl (); 658 | 659 | while (!glfwWindowShouldClose (window)) { 660 | process_input (window); 661 | render (glfwGetTime ()); 662 | glfwSwapBuffers (window); 663 | glfwPollEvents (); 664 | frame++; 665 | } 666 | 667 | glfwTerminate(); 668 | return 0; 669 | } 670 | --------------------------------------------------------------------------------