gl3w.c
Go to the documentation of this file.
1 /*
2  * This file was generated with gl3w_gen.py, part of gl3w
3  * (hosted at https://github.com/skaslev/gl3w)
4  *
5  * This is free and unencumbered software released into the public domain.
6  *
7  * Anyone is free to copy, modify, publish, use, compile, sell, or
8  * distribute this software, either in source code form or as a compiled
9  * binary, for any purpose, commercial or non-commercial, and by any
10  * means.
11  *
12  * In jurisdictions that recognize copyright laws, the author or authors
13  * of this software dedicate any and all copyright interest in the
14  * software to the public domain. We make this dedication for the benefit
15  * of the public at large and to the detriment of our heirs and
16  * successors. We intend this dedication to be an overt act of
17  * relinquishment in perpetuity of all present and future rights to this
18  * software under copyright law.
19  *
20  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
23  * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
24  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
25  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
26  * OTHER DEALINGS IN THE SOFTWARE.
27  */
28 
29 #include <GL/gl3w.h>
30 #include <stdlib.h>
31 
32 #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
33 
34 #if defined(_WIN32)
35 #ifndef WIN32_LEAN_AND_MEAN
36 #define WIN32_LEAN_AND_MEAN 1 // Exclude advanced Windows headers
37 #endif // WIN32_LEAN_AND_MEAN
38 #include <windows.h>
39 
40 static HMODULE libgl;
41 typedef PROC(__stdcall* GL3WglGetProcAddr)(LPCSTR);
42 static GL3WglGetProcAddr wgl_get_proc_address;
43 
44 static int open_libgl(void)
45 {
46  libgl = LoadLibraryA("opengl32.dll");
47  if (!libgl)
49 
50  wgl_get_proc_address = (GL3WglGetProcAddr)GetProcAddress(libgl, "wglGetProcAddress");
51  return GL3W_OK;
52 }
53 
54 static void close_libgl(void)
55 {
56  FreeLibrary(libgl);
57 }
58 
59 static GL3WglProc get_proc(const char *proc)
60 {
61  GL3WglProc res;
62 
63  res = (GL3WglProc)wgl_get_proc_address(proc);
64  if (!res)
65  res = (GL3WglProc)GetProcAddress(libgl, proc);
66  return res;
67 }
68 #elif defined(__APPLE__)
69 #include <dlfcn.h>
70 
71 static void *libgl;
72 
73 static int open_libgl(void)
74 {
75  libgl = dlopen("/System/Library/Frameworks/OpenGL.framework/OpenGL", RTLD_LAZY | RTLD_LOCAL);
76  if (!libgl)
78 
79  return GL3W_OK;
80 }
81 
82 static void close_libgl(void)
83 {
84  dlclose(libgl);
85 }
86 
87 static GL3WglProc get_proc(const char *proc)
88 {
89  GL3WglProc res;
90 
91  *(void **)(&res) = dlsym(libgl, proc);
92  return res;
93 }
94 #else
95 #include <dlfcn.h>
96 
97 static void *libgl;
99 
100 static int open_libgl(void)
101 {
102  libgl = dlopen("libGL.so.1", RTLD_LAZY | RTLD_LOCAL);
103  if (!libgl)
105 
106  *(void **)(&glx_get_proc_address) = dlsym(libgl, "glXGetProcAddressARB");
107  return GL3W_OK;
108 }
109 
110 static void close_libgl(void)
111 {
112  dlclose(libgl);
113 }
114 
115 static GL3WglProc get_proc(const char *proc)
116 {
117  GL3WglProc res;
118 
119  res = glx_get_proc_address((const GLubyte *)proc);
120  if (!res)
121  *(void **)(&res) = dlsym(libgl, proc);
122  return res;
123 }
124 #endif
125 
126 static struct {
127  int major, minor;
128 } version;
129 
130 static int parse_version(void)
131 {
132  if (!glGetIntegerv)
133  return GL3W_ERROR_INIT;
134 
137 
138  if (version.major < 3)
140  return GL3W_OK;
141 }
142 
143 static void load_procs(GL3WGetProcAddressProc proc);
144 
145 int gl3wInit(void)
146 {
147  int res;
148 
149  res = open_libgl();
150  if (res)
151  return res;
152 
153  atexit(close_libgl);
154  return gl3wInit2(get_proc);
155 }
156 
158 {
159  load_procs(proc);
160  return parse_version();
161 }
162 
164 {
165  if (major < 3)
166  return 0;
167  if (version.major == major)
168  return version.minor >= minor;
169  return version.major >= major;
170 }
171 
173 {
174  return get_proc(proc);
175 }
176 
177 static const char *proc_names[] = {
178  "glActiveShaderProgram",
179  "glActiveTexture",
180  "glAttachShader",
181  "glBeginConditionalRender",
182  "glBeginQuery",
183  "glBeginQueryIndexed",
184  "glBeginTransformFeedback",
185  "glBindAttribLocation",
186  "glBindBuffer",
187  "glBindBufferBase",
188  "glBindBufferRange",
189  "glBindBuffersBase",
190  "glBindBuffersRange",
191  "glBindFragDataLocation",
192  "glBindFragDataLocationIndexed",
193  "glBindFramebuffer",
194  "glBindImageTexture",
195  "glBindImageTextures",
196  "glBindProgramPipeline",
197  "glBindRenderbuffer",
198  "glBindSampler",
199  "glBindSamplers",
200  "glBindTexture",
201  "glBindTextureUnit",
202  "glBindTextures",
203  "glBindTransformFeedback",
204  "glBindVertexArray",
205  "glBindVertexBuffer",
206  "glBindVertexBuffers",
207  "glBlendColor",
208  "glBlendEquation",
209  "glBlendEquationSeparate",
210  "glBlendEquationSeparatei",
211  "glBlendEquationi",
212  "glBlendFunc",
213  "glBlendFuncSeparate",
214  "glBlendFuncSeparatei",
215  "glBlendFunci",
216  "glBlitFramebuffer",
217  "glBlitNamedFramebuffer",
218  "glBufferData",
219  "glBufferStorage",
220  "glBufferSubData",
221  "glCheckFramebufferStatus",
222  "glCheckNamedFramebufferStatus",
223  "glClampColor",
224  "glClear",
225  "glClearBufferData",
226  "glClearBufferSubData",
227  "glClearBufferfi",
228  "glClearBufferfv",
229  "glClearBufferiv",
230  "glClearBufferuiv",
231  "glClearColor",
232  "glClearDepth",
233  "glClearDepthf",
234  "glClearNamedBufferData",
235  "glClearNamedBufferSubData",
236  "glClearNamedFramebufferfi",
237  "glClearNamedFramebufferfv",
238  "glClearNamedFramebufferiv",
239  "glClearNamedFramebufferuiv",
240  "glClearStencil",
241  "glClearTexImage",
242  "glClearTexSubImage",
243  "glClientWaitSync",
244  "glClipControl",
245  "glColorMask",
246  "glColorMaski",
247  "glCompileShader",
248  "glCompressedTexImage1D",
249  "glCompressedTexImage2D",
250  "glCompressedTexImage3D",
251  "glCompressedTexSubImage1D",
252  "glCompressedTexSubImage2D",
253  "glCompressedTexSubImage3D",
254  "glCompressedTextureSubImage1D",
255  "glCompressedTextureSubImage2D",
256  "glCompressedTextureSubImage3D",
257  "glCopyBufferSubData",
258  "glCopyImageSubData",
259  "glCopyNamedBufferSubData",
260  "glCopyTexImage1D",
261  "glCopyTexImage2D",
262  "glCopyTexSubImage1D",
263  "glCopyTexSubImage2D",
264  "glCopyTexSubImage3D",
265  "glCopyTextureSubImage1D",
266  "glCopyTextureSubImage2D",
267  "glCopyTextureSubImage3D",
268  "glCreateBuffers",
269  "glCreateFramebuffers",
270  "glCreateProgram",
271  "glCreateProgramPipelines",
272  "glCreateQueries",
273  "glCreateRenderbuffers",
274  "glCreateSamplers",
275  "glCreateShader",
276  "glCreateShaderProgramv",
277  "glCreateTextures",
278  "glCreateTransformFeedbacks",
279  "glCreateVertexArrays",
280  "glCullFace",
281  "glDebugMessageCallback",
282  "glDebugMessageControl",
283  "glDebugMessageInsert",
284  "glDeleteBuffers",
285  "glDeleteFramebuffers",
286  "glDeleteProgram",
287  "glDeleteProgramPipelines",
288  "glDeleteQueries",
289  "glDeleteRenderbuffers",
290  "glDeleteSamplers",
291  "glDeleteShader",
292  "glDeleteSync",
293  "glDeleteTextures",
294  "glDeleteTransformFeedbacks",
295  "glDeleteVertexArrays",
296  "glDepthFunc",
297  "glDepthMask",
298  "glDepthRange",
299  "glDepthRangeArrayv",
300  "glDepthRangeIndexed",
301  "glDepthRangef",
302  "glDetachShader",
303  "glDisable",
304  "glDisableVertexArrayAttrib",
305  "glDisableVertexAttribArray",
306  "glDisablei",
307  "glDispatchCompute",
308  "glDispatchComputeIndirect",
309  "glDrawArrays",
310  "glDrawArraysIndirect",
311  "glDrawArraysInstanced",
312  "glDrawArraysInstancedBaseInstance",
313  "glDrawBuffer",
314  "glDrawBuffers",
315  "glDrawElements",
316  "glDrawElementsBaseVertex",
317  "glDrawElementsIndirect",
318  "glDrawElementsInstanced",
319  "glDrawElementsInstancedBaseInstance",
320  "glDrawElementsInstancedBaseVertex",
321  "glDrawElementsInstancedBaseVertexBaseInstance",
322  "glDrawRangeElements",
323  "glDrawRangeElementsBaseVertex",
324  "glDrawTransformFeedback",
325  "glDrawTransformFeedbackInstanced",
326  "glDrawTransformFeedbackStream",
327  "glDrawTransformFeedbackStreamInstanced",
328  "glEnable",
329  "glEnableVertexArrayAttrib",
330  "glEnableVertexAttribArray",
331  "glEnablei",
332  "glEndConditionalRender",
333  "glEndQuery",
334  "glEndQueryIndexed",
335  "glEndTransformFeedback",
336  "glFenceSync",
337  "glFinish",
338  "glFlush",
339  "glFlushMappedBufferRange",
340  "glFlushMappedNamedBufferRange",
341  "glFramebufferParameteri",
342  "glFramebufferParameteriMESA",
343  "glFramebufferRenderbuffer",
344  "glFramebufferTexture",
345  "glFramebufferTexture1D",
346  "glFramebufferTexture2D",
347  "glFramebufferTexture3D",
348  "glFramebufferTextureLayer",
349  "glFrontFace",
350  "glGenBuffers",
351  "glGenFramebuffers",
352  "glGenProgramPipelines",
353  "glGenQueries",
354  "glGenRenderbuffers",
355  "glGenSamplers",
356  "glGenTextures",
357  "glGenTransformFeedbacks",
358  "glGenVertexArrays",
359  "glGenerateMipmap",
360  "glGenerateTextureMipmap",
361  "glGetActiveAtomicCounterBufferiv",
362  "glGetActiveAttrib",
363  "glGetActiveSubroutineName",
364  "glGetActiveSubroutineUniformName",
365  "glGetActiveSubroutineUniformiv",
366  "glGetActiveUniform",
367  "glGetActiveUniformBlockName",
368  "glGetActiveUniformBlockiv",
369  "glGetActiveUniformName",
370  "glGetActiveUniformsiv",
371  "glGetAttachedShaders",
372  "glGetAttribLocation",
373  "glGetBooleani_v",
374  "glGetBooleanv",
375  "glGetBufferParameteri64v",
376  "glGetBufferParameteriv",
377  "glGetBufferPointerv",
378  "glGetBufferSubData",
379  "glGetCompressedTexImage",
380  "glGetCompressedTextureImage",
381  "glGetCompressedTextureSubImage",
382  "glGetDebugMessageLog",
383  "glGetDoublei_v",
384  "glGetDoublev",
385  "glGetError",
386  "glGetFloati_v",
387  "glGetFloatv",
388  "glGetFragDataIndex",
389  "glGetFragDataLocation",
390  "glGetFramebufferAttachmentParameteriv",
391  "glGetFramebufferParameteriv",
392  "glGetFramebufferParameterivMESA",
393  "glGetGraphicsResetStatus",
394  "glGetInteger64i_v",
395  "glGetInteger64v",
396  "glGetIntegeri_v",
397  "glGetIntegerv",
398  "glGetInternalformati64v",
399  "glGetInternalformativ",
400  "glGetMultisamplefv",
401  "glGetNamedBufferParameteri64v",
402  "glGetNamedBufferParameteriv",
403  "glGetNamedBufferPointerv",
404  "glGetNamedBufferSubData",
405  "glGetNamedFramebufferAttachmentParameteriv",
406  "glGetNamedFramebufferParameteriv",
407  "glGetNamedRenderbufferParameteriv",
408  "glGetObjectLabel",
409  "glGetObjectPtrLabel",
410  "glGetPointerv",
411  "glGetProgramBinary",
412  "glGetProgramInfoLog",
413  "glGetProgramInterfaceiv",
414  "glGetProgramPipelineInfoLog",
415  "glGetProgramPipelineiv",
416  "glGetProgramResourceIndex",
417  "glGetProgramResourceLocation",
418  "glGetProgramResourceLocationIndex",
419  "glGetProgramResourceName",
420  "glGetProgramResourceiv",
421  "glGetProgramStageiv",
422  "glGetProgramiv",
423  "glGetQueryBufferObjecti64v",
424  "glGetQueryBufferObjectiv",
425  "glGetQueryBufferObjectui64v",
426  "glGetQueryBufferObjectuiv",
427  "glGetQueryIndexediv",
428  "glGetQueryObjecti64v",
429  "glGetQueryObjectiv",
430  "glGetQueryObjectui64v",
431  "glGetQueryObjectuiv",
432  "glGetQueryiv",
433  "glGetRenderbufferParameteriv",
434  "glGetSamplerParameterIiv",
435  "glGetSamplerParameterIuiv",
436  "glGetSamplerParameterfv",
437  "glGetSamplerParameteriv",
438  "glGetShaderInfoLog",
439  "glGetShaderPrecisionFormat",
440  "glGetShaderSource",
441  "glGetShaderiv",
442  "glGetString",
443  "glGetStringi",
444  "glGetSubroutineIndex",
445  "glGetSubroutineUniformLocation",
446  "glGetSynciv",
447  "glGetTexImage",
448  "glGetTexLevelParameterfv",
449  "glGetTexLevelParameteriv",
450  "glGetTexParameterIiv",
451  "glGetTexParameterIuiv",
452  "glGetTexParameterfv",
453  "glGetTexParameteriv",
454  "glGetTextureImage",
455  "glGetTextureLevelParameterfv",
456  "glGetTextureLevelParameteriv",
457  "glGetTextureParameterIiv",
458  "glGetTextureParameterIuiv",
459  "glGetTextureParameterfv",
460  "glGetTextureParameteriv",
461  "glGetTextureSubImage",
462  "glGetTransformFeedbackVarying",
463  "glGetTransformFeedbacki64_v",
464  "glGetTransformFeedbacki_v",
465  "glGetTransformFeedbackiv",
466  "glGetUniformBlockIndex",
467  "glGetUniformIndices",
468  "glGetUniformLocation",
469  "glGetUniformSubroutineuiv",
470  "glGetUniformdv",
471  "glGetUniformfv",
472  "glGetUniformiv",
473  "glGetUniformuiv",
474  "glGetVertexArrayIndexed64iv",
475  "glGetVertexArrayIndexediv",
476  "glGetVertexArrayiv",
477  "glGetVertexAttribIiv",
478  "glGetVertexAttribIuiv",
479  "glGetVertexAttribLdv",
480  "glGetVertexAttribPointerv",
481  "glGetVertexAttribdv",
482  "glGetVertexAttribfv",
483  "glGetVertexAttribiv",
484  "glGetnCompressedTexImage",
485  "glGetnTexImage",
486  "glGetnUniformdv",
487  "glGetnUniformfv",
488  "glGetnUniformiv",
489  "glGetnUniformuiv",
490  "glHint",
491  "glInvalidateBufferData",
492  "glInvalidateBufferSubData",
493  "glInvalidateFramebuffer",
494  "glInvalidateNamedFramebufferData",
495  "glInvalidateNamedFramebufferSubData",
496  "glInvalidateSubFramebuffer",
497  "glInvalidateTexImage",
498  "glInvalidateTexSubImage",
499  "glIsBuffer",
500  "glIsEnabled",
501  "glIsEnabledi",
502  "glIsFramebuffer",
503  "glIsProgram",
504  "glIsProgramPipeline",
505  "glIsQuery",
506  "glIsRenderbuffer",
507  "glIsSampler",
508  "glIsShader",
509  "glIsSync",
510  "glIsTexture",
511  "glIsTransformFeedback",
512  "glIsVertexArray",
513  "glLineWidth",
514  "glLinkProgram",
515  "glLogicOp",
516  "glMapBuffer",
517  "glMapBufferRange",
518  "glMapNamedBuffer",
519  "glMapNamedBufferRange",
520  "glMemoryBarrier",
521  "glMemoryBarrierByRegion",
522  "glMinSampleShading",
523  "glMultiDrawArrays",
524  "glMultiDrawArraysIndirect",
525  "glMultiDrawArraysIndirectCount",
526  "glMultiDrawElements",
527  "glMultiDrawElementsBaseVertex",
528  "glMultiDrawElementsIndirect",
529  "glMultiDrawElementsIndirectCount",
530  "glNamedBufferData",
531  "glNamedBufferStorage",
532  "glNamedBufferSubData",
533  "glNamedFramebufferDrawBuffer",
534  "glNamedFramebufferDrawBuffers",
535  "glNamedFramebufferParameteri",
536  "glNamedFramebufferReadBuffer",
537  "glNamedFramebufferRenderbuffer",
538  "glNamedFramebufferTexture",
539  "glNamedFramebufferTextureLayer",
540  "glNamedRenderbufferStorage",
541  "glNamedRenderbufferStorageMultisample",
542  "glObjectLabel",
543  "glObjectPtrLabel",
544  "glPatchParameterfv",
545  "glPatchParameteri",
546  "glPauseTransformFeedback",
547  "glPixelStoref",
548  "glPixelStorei",
549  "glPointParameterf",
550  "glPointParameterfv",
551  "glPointParameteri",
552  "glPointParameteriv",
553  "glPointSize",
554  "glPolygonMode",
555  "glPolygonOffset",
556  "glPolygonOffsetClamp",
557  "glPopDebugGroup",
558  "glPrimitiveRestartIndex",
559  "glProgramBinary",
560  "glProgramParameteri",
561  "glProgramUniform1d",
562  "glProgramUniform1dv",
563  "glProgramUniform1f",
564  "glProgramUniform1fv",
565  "glProgramUniform1i",
566  "glProgramUniform1iv",
567  "glProgramUniform1ui",
568  "glProgramUniform1uiv",
569  "glProgramUniform2d",
570  "glProgramUniform2dv",
571  "glProgramUniform2f",
572  "glProgramUniform2fv",
573  "glProgramUniform2i",
574  "glProgramUniform2iv",
575  "glProgramUniform2ui",
576  "glProgramUniform2uiv",
577  "glProgramUniform3d",
578  "glProgramUniform3dv",
579  "glProgramUniform3f",
580  "glProgramUniform3fv",
581  "glProgramUniform3i",
582  "glProgramUniform3iv",
583  "glProgramUniform3ui",
584  "glProgramUniform3uiv",
585  "glProgramUniform4d",
586  "glProgramUniform4dv",
587  "glProgramUniform4f",
588  "glProgramUniform4fv",
589  "glProgramUniform4i",
590  "glProgramUniform4iv",
591  "glProgramUniform4ui",
592  "glProgramUniform4uiv",
593  "glProgramUniformMatrix2dv",
594  "glProgramUniformMatrix2fv",
595  "glProgramUniformMatrix2x3dv",
596  "glProgramUniformMatrix2x3fv",
597  "glProgramUniformMatrix2x4dv",
598  "glProgramUniformMatrix2x4fv",
599  "glProgramUniformMatrix3dv",
600  "glProgramUniformMatrix3fv",
601  "glProgramUniformMatrix3x2dv",
602  "glProgramUniformMatrix3x2fv",
603  "glProgramUniformMatrix3x4dv",
604  "glProgramUniformMatrix3x4fv",
605  "glProgramUniformMatrix4dv",
606  "glProgramUniformMatrix4fv",
607  "glProgramUniformMatrix4x2dv",
608  "glProgramUniformMatrix4x2fv",
609  "glProgramUniformMatrix4x3dv",
610  "glProgramUniformMatrix4x3fv",
611  "glProvokingVertex",
612  "glPushDebugGroup",
613  "glQueryCounter",
614  "glReadBuffer",
615  "glReadPixels",
616  "glReadnPixels",
617  "glReleaseShaderCompiler",
618  "glRenderbufferStorage",
619  "glRenderbufferStorageMultisample",
620  "glResumeTransformFeedback",
621  "glSampleCoverage",
622  "glSampleMaski",
623  "glSamplerParameterIiv",
624  "glSamplerParameterIuiv",
625  "glSamplerParameterf",
626  "glSamplerParameterfv",
627  "glSamplerParameteri",
628  "glSamplerParameteriv",
629  "glScissor",
630  "glScissorArrayv",
631  "glScissorIndexed",
632  "glScissorIndexedv",
633  "glShaderBinary",
634  "glShaderSource",
635  "glShaderStorageBlockBinding",
636  "glSpecializeShader",
637  "glStencilFunc",
638  "glStencilFuncSeparate",
639  "glStencilMask",
640  "glStencilMaskSeparate",
641  "glStencilOp",
642  "glStencilOpSeparate",
643  "glTexBuffer",
644  "glTexBufferRange",
645  "glTexImage1D",
646  "glTexImage2D",
647  "glTexImage2DMultisample",
648  "glTexImage3D",
649  "glTexImage3DMultisample",
650  "glTexParameterIiv",
651  "glTexParameterIuiv",
652  "glTexParameterf",
653  "glTexParameterfv",
654  "glTexParameteri",
655  "glTexParameteriv",
656  "glTexStorage1D",
657  "glTexStorage2D",
658  "glTexStorage2DMultisample",
659  "glTexStorage3D",
660  "glTexStorage3DMultisample",
661  "glTexSubImage1D",
662  "glTexSubImage2D",
663  "glTexSubImage3D",
664  "glTextureBarrier",
665  "glTextureBuffer",
666  "glTextureBufferRange",
667  "glTextureParameterIiv",
668  "glTextureParameterIuiv",
669  "glTextureParameterf",
670  "glTextureParameterfv",
671  "glTextureParameteri",
672  "glTextureParameteriv",
673  "glTextureStorage1D",
674  "glTextureStorage2D",
675  "glTextureStorage2DMultisample",
676  "glTextureStorage3D",
677  "glTextureStorage3DMultisample",
678  "glTextureSubImage1D",
679  "glTextureSubImage2D",
680  "glTextureSubImage3D",
681  "glTextureView",
682  "glTransformFeedbackBufferBase",
683  "glTransformFeedbackBufferRange",
684  "glTransformFeedbackVaryings",
685  "glUniform1d",
686  "glUniform1dv",
687  "glUniform1f",
688  "glUniform1fv",
689  "glUniform1i",
690  "glUniform1iv",
691  "glUniform1ui",
692  "glUniform1uiv",
693  "glUniform2d",
694  "glUniform2dv",
695  "glUniform2f",
696  "glUniform2fv",
697  "glUniform2i",
698  "glUniform2iv",
699  "glUniform2ui",
700  "glUniform2uiv",
701  "glUniform3d",
702  "glUniform3dv",
703  "glUniform3f",
704  "glUniform3fv",
705  "glUniform3i",
706  "glUniform3iv",
707  "glUniform3ui",
708  "glUniform3uiv",
709  "glUniform4d",
710  "glUniform4dv",
711  "glUniform4f",
712  "glUniform4fv",
713  "glUniform4i",
714  "glUniform4iv",
715  "glUniform4ui",
716  "glUniform4uiv",
717  "glUniformBlockBinding",
718  "glUniformMatrix2dv",
719  "glUniformMatrix2fv",
720  "glUniformMatrix2x3dv",
721  "glUniformMatrix2x3fv",
722  "glUniformMatrix2x4dv",
723  "glUniformMatrix2x4fv",
724  "glUniformMatrix3dv",
725  "glUniformMatrix3fv",
726  "glUniformMatrix3x2dv",
727  "glUniformMatrix3x2fv",
728  "glUniformMatrix3x4dv",
729  "glUniformMatrix3x4fv",
730  "glUniformMatrix4dv",
731  "glUniformMatrix4fv",
732  "glUniformMatrix4x2dv",
733  "glUniformMatrix4x2fv",
734  "glUniformMatrix4x3dv",
735  "glUniformMatrix4x3fv",
736  "glUniformSubroutinesuiv",
737  "glUnmapBuffer",
738  "glUnmapNamedBuffer",
739  "glUseProgram",
740  "glUseProgramStages",
741  "glValidateProgram",
742  "glValidateProgramPipeline",
743  "glVertexArrayAttribBinding",
744  "glVertexArrayAttribFormat",
745  "glVertexArrayAttribIFormat",
746  "glVertexArrayAttribLFormat",
747  "glVertexArrayBindingDivisor",
748  "glVertexArrayElementBuffer",
749  "glVertexArrayVertexBuffer",
750  "glVertexArrayVertexBuffers",
751  "glVertexAttrib1d",
752  "glVertexAttrib1dv",
753  "glVertexAttrib1f",
754  "glVertexAttrib1fv",
755  "glVertexAttrib1s",
756  "glVertexAttrib1sv",
757  "glVertexAttrib2d",
758  "glVertexAttrib2dv",
759  "glVertexAttrib2f",
760  "glVertexAttrib2fv",
761  "glVertexAttrib2s",
762  "glVertexAttrib2sv",
763  "glVertexAttrib3d",
764  "glVertexAttrib3dv",
765  "glVertexAttrib3f",
766  "glVertexAttrib3fv",
767  "glVertexAttrib3s",
768  "glVertexAttrib3sv",
769  "glVertexAttrib4Nbv",
770  "glVertexAttrib4Niv",
771  "glVertexAttrib4Nsv",
772  "glVertexAttrib4Nub",
773  "glVertexAttrib4Nubv",
774  "glVertexAttrib4Nuiv",
775  "glVertexAttrib4Nusv",
776  "glVertexAttrib4bv",
777  "glVertexAttrib4d",
778  "glVertexAttrib4dv",
779  "glVertexAttrib4f",
780  "glVertexAttrib4fv",
781  "glVertexAttrib4iv",
782  "glVertexAttrib4s",
783  "glVertexAttrib4sv",
784  "glVertexAttrib4ubv",
785  "glVertexAttrib4uiv",
786  "glVertexAttrib4usv",
787  "glVertexAttribBinding",
788  "glVertexAttribDivisor",
789  "glVertexAttribFormat",
790  "glVertexAttribI1i",
791  "glVertexAttribI1iv",
792  "glVertexAttribI1ui",
793  "glVertexAttribI1uiv",
794  "glVertexAttribI2i",
795  "glVertexAttribI2iv",
796  "glVertexAttribI2ui",
797  "glVertexAttribI2uiv",
798  "glVertexAttribI3i",
799  "glVertexAttribI3iv",
800  "glVertexAttribI3ui",
801  "glVertexAttribI3uiv",
802  "glVertexAttribI4bv",
803  "glVertexAttribI4i",
804  "glVertexAttribI4iv",
805  "glVertexAttribI4sv",
806  "glVertexAttribI4ubv",
807  "glVertexAttribI4ui",
808  "glVertexAttribI4uiv",
809  "glVertexAttribI4usv",
810  "glVertexAttribIFormat",
811  "glVertexAttribIPointer",
812  "glVertexAttribL1d",
813  "glVertexAttribL1dv",
814  "glVertexAttribL2d",
815  "glVertexAttribL2dv",
816  "glVertexAttribL3d",
817  "glVertexAttribL3dv",
818  "glVertexAttribL4d",
819  "glVertexAttribL4dv",
820  "glVertexAttribLFormat",
821  "glVertexAttribLPointer",
822  "glVertexAttribP1ui",
823  "glVertexAttribP1uiv",
824  "glVertexAttribP2ui",
825  "glVertexAttribP2uiv",
826  "glVertexAttribP3ui",
827  "glVertexAttribP3uiv",
828  "glVertexAttribP4ui",
829  "glVertexAttribP4uiv",
830  "glVertexAttribPointer",
831  "glVertexBindingDivisor",
832  "glViewport",
833  "glViewportArrayv",
834  "glViewportIndexedf",
835  "glViewportIndexedfv",
836  "glWaitSync",
837 };
838 
840 
842 {
843  size_t i;
844 
845  for (i = 0; i < ARRAY_SIZE(proc_names); i++)
846  gl3wProcs.ptr[i] = proc(proc_names[i]);
847 }
GL3WGetProcAddressProc
GL3WglProc(* GL3WGetProcAddressProc)(const char *proc)
Definition: gl3w.h:48
libgl
static void * libgl
Definition: gl3w.c:97
glGetIntegerv
#define glGetIntegerv
Definition: gl3w.h:944
GLubyte
khronos_uint8_t GLubyte
Definition: glcorearb.h:71
gl3wInit
int gl3wInit(void)
Definition: gl3w.c:145
parse_version
static int parse_version(void)
Definition: gl3w.c:130
GL3WProcs::ptr
GL3WglProc ptr[659]
Definition: gl3w.h:58
gl3wInit2
int gl3wInit2(GL3WGetProcAddressProc proc)
Definition: gl3w.c:157
gl3wGetProcAddress
GL3WglProc gl3wGetProcAddress(const char *proc)
Definition: gl3w.c:172
get_proc
static GL3WglProc get_proc(const char *proc)
Definition: gl3w.c:115
GL3W_ERROR_INIT
#define GL3W_ERROR_INIT
Definition: gl3w.h:43
gl3w.h
glx_get_proc_address
static GL3WglProc(* glx_get_proc_address)(const GLubyte *)
Definition: gl3w.c:98
GL3W_ERROR_OPENGL_VERSION
#define GL3W_ERROR_OPENGL_VERSION
Definition: gl3w.h:45
major
int major
Definition: gl3w.c:127
GL3WProcs
Definition: gl3w.h:57
GL_MINOR_VERSION
#define GL_MINOR_VERSION
Definition: glcorearb.h:994
close_libgl
static void close_libgl(void)
Definition: gl3w.c:110
GL3W_OK
#define GL3W_OK
Definition: gl3w.h:42
ARRAY_SIZE
#define ARRAY_SIZE(x)
Definition: gl3w.c:32
minor
int minor
Definition: gl3w.c:127
GL_MAJOR_VERSION
#define GL_MAJOR_VERSION
Definition: glcorearb.h:993
version
static struct @1 version
load_procs
static void load_procs(GL3WGetProcAddressProc proc)
Definition: gl3w.c:841
GL3WglProc
void(* GL3WglProc)(void)
Definition: gl3w.h:47
gl3wIsSupported
int gl3wIsSupported(int major, int minor)
Definition: gl3w.c:163
proc_names
static const char * proc_names[]
Definition: gl3w.c:177
open_libgl
static int open_libgl(void)
Definition: gl3w.c:100
gl3wProcs
union GL3WProcs gl3wProcs
Definition: gl3w.c:839
GL3W_ERROR_LIBRARY_OPEN
#define GL3W_ERROR_LIBRARY_OPEN
Definition: gl3w.h:44


quori_face
Author(s):
autogenerated on Wed Mar 2 2022 00:53:20