1 
2 //          Copyright 2018 - 2021 Michael D. Parker
3 // Distributed under the Boost Software License, Version 1.0.
4 //    (See accompanying file LICENSE_1_0.txt or copy at
5 //          http://www.boost.org/LICENSE_1_0.txt)
6 
7 module bindbc.opengl.bind.gl20;
8 
9 import bindbc.loader : SharedLib;
10 import bindbc.opengl.config,
11        bindbc.opengl.context;
12 import bindbc.opengl.bind.types;
13 
14 public import bindbc.opengl.bind.gl15;
15 version(GL_AllowDeprecated)
16     public import bindbc.opengl.bind.dep.dep20;
17 
18 enum : uint {
19     GL_BLEND_EQUATION_RGB             = 0x8009,
20     GL_VERTEX_ATTRIB_ARRAY_ENABLED    = 0x8622,
21     GL_VERTEX_ATTRIB_ARRAY_SIZE       = 0x8623,
22     GL_VERTEX_ATTRIB_ARRAY_STRIDE     = 0x8624,
23     GL_VERTEX_ATTRIB_ARRAY_TYPE       = 0x8625,
24     GL_CURRENT_VERTEX_ATTRIB          = 0x8626,
25     GL_VERTEX_PROGRAM_POINT_SIZE      = 0x8642,
26     GL_VERTEX_ATTRIB_ARRAY_POINTER    = 0x8645,
27     GL_STENCIL_BACK_FUNC              = 0x8800,
28     GL_STENCIL_BACK_FAIL              = 0x8801,
29     GL_STENCIL_BACK_PASS_DEPTH_FAIL   = 0x8802,
30     GL_STENCIL_BACK_PASS_DEPTH_PASS   = 0x8803,
31     GL_MAX_DRAW_BUFFERS               = 0x8824,
32     GL_DRAW_BUFFER0                   = 0x8825,
33     GL_DRAW_BUFFER1                   = 0x8826,
34     GL_DRAW_BUFFER2                   = 0x8827,
35     GL_DRAW_BUFFER3                   = 0x8828,
36     GL_DRAW_BUFFER4                   = 0x8829,
37     GL_DRAW_BUFFER5                   = 0x882A,
38     GL_DRAW_BUFFER6                   = 0x882B,
39     GL_DRAW_BUFFER7                   = 0x882C,
40     GL_DRAW_BUFFER8                   = 0x882D,
41     GL_DRAW_BUFFER9                   = 0x882E,
42     GL_DRAW_BUFFER10                  = 0x882F,
43     GL_DRAW_BUFFER11                  = 0x8830,
44     GL_DRAW_BUFFER12                  = 0x8831,
45     GL_DRAW_BUFFER13                  = 0x8832,
46     GL_DRAW_BUFFER14                  = 0x8833,
47     GL_DRAW_BUFFER15                  = 0x8834,
48     GL_BLEND_EQUATION_ALPHA           = 0x883D,
49     GL_MAX_VERTEX_ATTRIBS             = 0x8869,
50     GL_VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886A,
51     GL_MAX_TEXTURE_IMAGE_UNITS        = 0x8872,
52     GL_FRAGMENT_SHADER                = 0x8B30,
53     GL_VERTEX_SHADER                  = 0x8B31,
54     GL_MAX_FRAGMENT_UNIFORM_COMPONENTS = 0x8B49,
55     GL_MAX_VERTEX_UNIFORM_COMPONENTS  = 0x8B4A,
56     GL_MAX_VARYING_FLOATS             = 0x8B4B,
57     GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8B4C,
58     GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D,
59     GL_SHADER_TYPE                    = 0x8B4F,
60     GL_FLOAT_VEC2                     = 0x8B50,
61     GL_FLOAT_VEC3                     = 0x8B51,
62     GL_FLOAT_VEC4                     = 0x8B52,
63     GL_INT_VEC2                       = 0x8B53,
64     GL_INT_VEC3                       = 0x8B54,
65     GL_INT_VEC4                       = 0x8B55,
66     GL_BOOL                           = 0x8B56,
67     GL_BOOL_VEC2                      = 0x8B57,
68     GL_BOOL_VEC3                      = 0x8B58,
69     GL_BOOL_VEC4                      = 0x8B59,
70     GL_FLOAT_MAT2                     = 0x8B5A,
71     GL_FLOAT_MAT3                     = 0x8B5B,
72     GL_FLOAT_MAT4                     = 0x8B5C,
73     GL_SAMPLER_1D                     = 0x8B5D,
74     GL_SAMPLER_2D                     = 0x8B5E,
75     GL_SAMPLER_3D                     = 0x8B5F,
76     GL_SAMPLER_CUBE                   = 0x8B60,
77     GL_SAMPLER_1D_SHADOW              = 0x8B61,
78     GL_SAMPLER_2D_SHADOW              = 0x8B62,
79     GL_DELETE_STATUS                  = 0x8B80,
80     GL_COMPILE_STATUS                 = 0x8B81,
81     GL_LINK_STATUS                    = 0x8B82,
82     GL_VALIDATE_STATUS                = 0x8B83,
83     GL_INFO_LOG_LENGTH                = 0x8B84,
84     GL_ATTACHED_SHADERS               = 0x8B85,
85     GL_ACTIVE_UNIFORMS                = 0x8B86,
86     GL_ACTIVE_UNIFORM_MAX_LENGTH      = 0x8B87,
87     GL_SHADER_SOURCE_LENGTH           = 0x8B88,
88     GL_ACTIVE_ATTRIBUTES              = 0x8B89,
89     GL_ACTIVE_ATTRIBUTE_MAX_LENGTH    = 0x8B8A,
90     GL_FRAGMENT_SHADER_DERIVATIVE_HINT = 0x8B8B,
91     GL_SHADING_LANGUAGE_VERSION       = 0x8B8C,
92     GL_CURRENT_PROGRAM                = 0x8B8D,
93     GL_POINT_SPRITE_COORD_ORIGIN      = 0x8CA0,
94     GL_LOWER_LEFT                     = 0x8CA1,
95     GL_UPPER_LEFT                     = 0x8CA2,
96     GL_STENCIL_BACK_REF               = 0x8CA3,
97     GL_STENCIL_BACK_VALUE_MASK        = 0x8CA4,
98     GL_STENCIL_BACK_WRITEMASK         = 0x8CA5,
99 }
100 
101 extern(System) @nogc nothrow {
102     alias pglBlendEquationSeparate = void function(GLenum,GLenum);
103     alias pglDrawBuffers = void function(GLsizei,const(GLenum)*);
104     alias pglStencilOpSeparate = void function(GLenum,GLenum,GLenum,GLenum);
105     alias pglStencilFuncSeparate = void function(GLenum,GLenum,GLint,GLuint);
106     alias pglStencilMaskSeparate = void function(GLenum,GLuint);
107     alias pglAttachShader = void function(GLuint,GLuint);
108     alias pglBindAttribLocation = void function(GLuint,GLuint,const(GLchar)*);
109     alias pglCompileShader = void function(GLuint);
110     alias pglCreateProgram = GLuint function();
111     alias pglCreateShader = GLuint function(GLenum);
112     alias pglDeleteProgram = void function(GLuint);
113     alias pglDeleteShader = void function(GLuint);
114     alias pglDetachShader = void function(GLuint,GLuint);
115     alias pglDisableVertexAttribArray = void function(GLuint);
116     alias pglEnableVertexAttribArray = void function(GLuint);
117     alias pglGetActiveAttrib = void function(GLuint,GLuint,GLsizei,GLsizei*,GLint*,GLenum*,GLchar*);
118     alias pglGetActiveUniform = void function(GLuint,GLuint,GLsizei,GLsizei*,GLint*,GLenum*,GLchar*);
119     alias pglGetAttachedShaders = void function(GLuint,GLsizei,GLsizei*,GLuint*);
120     alias pglGetAttribLocation = GLint function(GLuint,const(GLchar)*);
121     alias pglGetProgramiv = void function(GLuint,GLenum,GLint*);
122     alias pglGetProgramInfoLog = void function(GLuint,GLsizei,GLsizei*,GLchar*);
123     alias pglGetShaderiv = void function(GLuint,GLenum,GLint*);
124     alias pglGetShaderInfoLog = void function(GLuint,GLsizei,GLsizei*,GLchar*);
125     alias pglGetShaderSource = void function(GLuint,GLsizei,GLsizei*,GLchar*);
126     alias pglGetUniformLocation = GLint function(GLuint,const(GLchar)*);
127     alias pglGetUniformfv = void function(GLuint,GLint,GLfloat*);
128     alias pglGetUniformiv = void function(GLuint,GLint,GLint*);
129     alias pglGetVertexAttribdv = void function(GLuint,GLenum,GLdouble*);
130     alias pglGetVertexAttribfv = void function(GLuint,GLenum,GLfloat*);
131     alias pglGetVertexAttribiv = void function(GLuint,GLenum,GLint*);
132     alias pglGetVertexAttribPointerv = void function(GLuint,GLenum,GLvoid*);
133     alias pglIsProgram = GLboolean function(GLuint);
134     alias pglIsShader = GLboolean function(GLuint);
135     alias pglLinkProgram = void function(GLuint);
136     alias pglShaderSource = void function(GLuint,GLsizei,const(GLchar*)*,const(GLint)*);
137     alias pglUseProgram = void function(GLuint);
138     alias pglUniform1f = void function(GLint,GLfloat);
139     alias pglUniform2f = void function(GLint,GLfloat,GLfloat);
140     alias pglUniform3f = void function(GLint,GLfloat,GLfloat,GLfloat);
141     alias pglUniform4f = void function(GLint,GLfloat,GLfloat,GLfloat,GLfloat);
142     alias pglUniform1i = void function(GLint,GLint);
143     alias pglUniform2i = void function(GLint,GLint,GLint);
144     alias pglUniform3i = void function(GLint,GLint,GLint,GLint);
145     alias pglUniform4i = void function(GLint,GLint,GLint,GLint,GLint);
146     alias pglUniform1fv = void function(GLint,GLsizei,const(GLfloat)*);
147     alias pglUniform2fv = void function(GLint,GLsizei,const(GLfloat)*);
148     alias pglUniform3fv = void function(GLint,GLsizei,const(GLfloat)*);
149     alias pglUniform4fv = void function(GLint,GLsizei,const(GLfloat)*);
150     alias pglUniform1iv = void function(GLint,GLsizei,const(GLint)*);
151     alias pglUniform2iv = void function(GLint,GLsizei,const(GLint)*);
152     alias pglUniform3iv = void function(GLint,GLsizei,const(GLint)*);
153     alias pglUniform4iv = void function(GLint,GLsizei,const(GLint)*);
154     alias pglUniformMatrix2fv = void function(GLint,GLsizei,GLboolean,const(GLfloat)*);
155     alias pglUniformMatrix3fv = void function(GLint,GLsizei,GLboolean,const(GLfloat)*);
156     alias pglUniformMatrix4fv = void function(GLint,GLsizei,GLboolean,const(GLfloat)*);
157     alias pglValidateProgram = void function(GLuint);
158     alias pglVertexAttrib1d = void function(GLuint,GLdouble);
159     alias pglVertexAttrib1dv = void function(GLuint,const(GLdouble)*);
160     alias pglVertexAttrib1f = void function(GLuint,GLfloat);
161     alias pglVertexAttrib1fv = void function(GLuint,const(GLfloat)*);
162     alias pglVertexAttrib1s = void function(GLuint,GLshort);
163     alias pglVertexAttrib1sv = void function(GLuint,const(GLshort)*);
164     alias pglVertexAttrib2d = void function(GLuint,GLdouble,GLdouble);
165     alias pglVertexAttrib2dv = void function(GLuint,const(GLdouble)*);
166     alias pglVertexAttrib2f = void function(GLuint,GLfloat,GLfloat);
167     alias pglVertexAttrib2fv = void function(GLuint,const(GLfloat)*);
168     alias pglVertexAttrib2s = void function(GLuint,GLshort,GLshort);
169     alias pglVertexAttrib2sv = void function(GLuint,const(GLshort)*);
170     alias pglVertexAttrib3d = void function(GLuint,GLdouble,GLdouble,GLdouble);
171     alias pglVertexAttrib3dv = void function(GLuint,const(GLdouble)*);
172     alias pglVertexAttrib3f = void function(GLuint,GLfloat,GLfloat,GLfloat);
173     alias pglVertexAttrib3fv = void function(GLuint,const(GLfloat)*);
174     alias pglVertexAttrib3s = void function(GLuint,GLshort,GLshort,GLshort);
175     alias pglVertexAttrib3sv = void function(GLuint,const(GLshort)*);
176     alias pglVertexAttrib4Nbv = void function(GLuint,const(GLbyte)*);
177     alias pglVertexAttrib4Niv = void function(GLuint,const(GLint)*);
178     alias pglVertexAttrib4Nsv = void function(GLuint,const(GLshort)*);
179     alias pglVertexAttrib4Nub = void function(GLuint,GLubyte,GLubyte,GLubyte,GLubyte);
180     alias pglVertexAttrib4Nubv = void function(GLuint,const(GLubyte)*);
181     alias pglVertexAttrib4Nuiv = void function(GLuint,const(GLuint)*);
182     alias pglVertexAttrib4Nusv = void function(GLuint,const(GLushort)*);
183     alias pglVertexAttrib4bv = void function(GLuint,const(GLbyte)*);
184     alias pglVertexAttrib4d = void function(GLuint,GLdouble,GLdouble,GLdouble,GLdouble);
185     alias pglVertexAttrib4dv = void function(GLuint,const(GLdouble)*);
186     alias pglVertexAttrib4f = void function(GLuint,GLfloat,GLfloat,GLfloat,GLfloat);
187     alias pglVertexAttrib4fv = void function(GLuint,const(GLfloat)*);
188     alias pglVertexAttrib4iv = void function(GLuint,const(GLint)*);
189     alias pglVertexAttrib4s = void function(GLuint,GLshort,GLshort,GLshort,GLshort);
190     alias pglVertexAttrib4sv = void function(GLuint,const(GLshort)*);
191     alias pglVertexAttrib4ubv = void function(GLuint,const(GLubyte)*);
192     alias pglVertexAttrib4uiv = void function(GLuint,const(GLuint)*);
193     alias pglVertexAttrib4usv = void function(GLuint,const(GLushort)*);
194     alias pglVertexAttribPointer = void function(GLuint,GLint,GLenum,GLboolean,GLsizei,const(GLvoid)*);
195 }
196 
197 __gshared {
198     pglBlendEquationSeparate glBlendEquationSeparate;
199     pglDrawBuffers glDrawBuffers;
200     pglStencilOpSeparate glStencilOpSeparate;
201     pglStencilFuncSeparate glStencilFuncSeparate;
202     pglStencilMaskSeparate glStencilMaskSeparate;
203     pglAttachShader glAttachShader;
204     pglBindAttribLocation glBindAttribLocation;
205     pglCompileShader glCompileShader;
206     pglCreateProgram glCreateProgram;
207     pglCreateShader glCreateShader;
208     pglDeleteProgram glDeleteProgram;
209     pglDeleteShader glDeleteShader;
210     pglDetachShader glDetachShader;
211     pglDisableVertexAttribArray glDisableVertexAttribArray;
212     pglEnableVertexAttribArray glEnableVertexAttribArray;
213     pglGetActiveAttrib glGetActiveAttrib;
214     pglGetActiveUniform glGetActiveUniform;
215     pglGetAttachedShaders glGetAttachedShaders;
216     pglGetAttribLocation glGetAttribLocation;
217     pglGetProgramiv glGetProgramiv;
218     pglGetProgramInfoLog glGetProgramInfoLog;
219     pglGetShaderiv glGetShaderiv;
220     pglGetShaderInfoLog glGetShaderInfoLog;
221     pglGetShaderSource glGetShaderSource;
222     pglGetUniformLocation glGetUniformLocation;
223     pglGetUniformfv glGetUniformfv;
224     pglGetUniformiv glGetUniformiv;
225     pglGetVertexAttribdv glGetVertexAttribdv;
226     pglGetVertexAttribfv glGetVertexAttribfv;
227     pglGetVertexAttribiv glGetVertexAttribiv;
228     pglGetVertexAttribPointerv glGetVertexAttribPointerv;
229     pglIsProgram glIsProgram;
230     pglIsShader glIsShader;
231     pglLinkProgram glLinkProgram;
232     pglShaderSource glShaderSource;
233     pglUseProgram glUseProgram;
234     pglUniform1f glUniform1f;
235     pglUniform2f glUniform2f;
236     pglUniform3f glUniform3f;
237     pglUniform4f glUniform4f;
238     pglUniform1i glUniform1i;
239     pglUniform2i glUniform2i;
240     pglUniform3i glUniform3i;
241     pglUniform4i glUniform4i;
242     pglUniform1fv glUniform1fv;
243     pglUniform2fv glUniform2fv;
244     pglUniform3fv glUniform3fv;
245     pglUniform4fv glUniform4fv;
246     pglUniform1iv glUniform1iv;
247     pglUniform2iv glUniform2iv;
248     pglUniform3iv glUniform3iv;
249     pglUniform4iv glUniform4iv;
250     pglUniformMatrix2fv glUniformMatrix2fv;
251     pglUniformMatrix3fv glUniformMatrix3fv;
252     pglUniformMatrix4fv glUniformMatrix4fv;
253     pglValidateProgram glValidateProgram;
254     pglVertexAttrib1d glVertexAttrib1d;
255     pglVertexAttrib1dv glVertexAttrib1dv;
256     pglVertexAttrib1f glVertexAttrib1f;
257     pglVertexAttrib1fv glVertexAttrib1fv;
258     pglVertexAttrib1s glVertexAttrib1s;
259     pglVertexAttrib1sv glVertexAttrib1sv;
260     pglVertexAttrib2d glVertexAttrib2d;
261     pglVertexAttrib2dv glVertexAttrib2dv;
262     pglVertexAttrib2f glVertexAttrib2f;
263     pglVertexAttrib2fv glVertexAttrib2fv;
264     pglVertexAttrib2s glVertexAttrib2s;
265     pglVertexAttrib2sv glVertexAttrib2sv;
266     pglVertexAttrib3d glVertexAttrib3d;
267     pglVertexAttrib3dv glVertexAttrib3dv;
268     pglVertexAttrib3f glVertexAttrib3f;
269     pglVertexAttrib3fv glVertexAttrib3fv;
270     pglVertexAttrib3s glVertexAttrib3s;
271     pglVertexAttrib3sv glVertexAttrib3sv;
272     pglVertexAttrib4Nbv glVertexAttrib4Nbv;
273     pglVertexAttrib4Niv glVertexAttrib4Niv;
274     pglVertexAttrib4Nsv glVertexAttrib4Nsv;
275     pglVertexAttrib4Nub glVertexAttrib4Nub;
276     pglVertexAttrib4Nubv glVertexAttrib4Nubv;
277     pglVertexAttrib4Nuiv glVertexAttrib4Nuiv;
278     pglVertexAttrib4Nusv glVertexAttrib4Nusv;
279     pglVertexAttrib4bv glVertexAttrib4bv;
280     pglVertexAttrib4d glVertexAttrib4d;
281     pglVertexAttrib4dv glVertexAttrib4dv;
282     pglVertexAttrib4f glVertexAttrib4f;
283     pglVertexAttrib4fv glVertexAttrib4fv;
284     pglVertexAttrib4iv glVertexAttrib4iv;
285     pglVertexAttrib4s glVertexAttrib4s;
286     pglVertexAttrib4sv glVertexAttrib4sv;
287     pglVertexAttrib4ubv glVertexAttrib4ubv;
288     pglVertexAttrib4uiv glVertexAttrib4uiv;
289     pglVertexAttrib4usv glVertexAttrib4usv;
290     pglVertexAttribPointer glVertexAttribPointer;
291 }
292 
293 package(bindbc.opengl) @nogc nothrow
294 bool loadGL20(SharedLib lib, GLSupport contextVersion)
295 {
296     if(contextVersion > GLSupport.gl15) {
297         lib.bindGLSymbol(cast(void**)&glBlendEquationSeparate, "glBlendEquationSeparate");
298         lib.bindGLSymbol(cast(void**)&glDrawBuffers, "glDrawBuffers");
299         lib.bindGLSymbol(cast(void**)&glStencilOpSeparate, "glStencilOpSeparate");
300         lib.bindGLSymbol(cast(void**)&glStencilFuncSeparate, "glStencilFuncSeparate");
301         lib.bindGLSymbol(cast(void**)&glStencilMaskSeparate, "glStencilMaskSeparate");
302         lib.bindGLSymbol(cast(void**)&glAttachShader, "glAttachShader");
303         lib.bindGLSymbol(cast(void**)&glBindAttribLocation, "glBindAttribLocation");
304         lib.bindGLSymbol(cast(void**)&glCompileShader, "glCompileShader");
305         lib.bindGLSymbol(cast(void**)&glCreateProgram, "glCreateProgram");
306         lib.bindGLSymbol(cast(void**)&glCreateShader, "glCreateShader");
307         lib.bindGLSymbol(cast(void**)&glDeleteProgram, "glDeleteProgram");
308         lib.bindGLSymbol(cast(void**)&glDeleteShader, "glDeleteShader");
309         lib.bindGLSymbol(cast(void**)&glDetachShader, "glDetachShader");
310         lib.bindGLSymbol(cast(void**)&glDisableVertexAttribArray, "glDisableVertexAttribArray");
311         lib.bindGLSymbol(cast(void**)&glEnableVertexAttribArray, "glEnableVertexAttribArray");
312         lib.bindGLSymbol(cast(void**)&glGetActiveAttrib, "glGetActiveAttrib");
313         lib.bindGLSymbol(cast(void**)&glGetActiveUniform, "glGetActiveUniform");
314         lib.bindGLSymbol(cast(void**)&glGetAttachedShaders, "glGetAttachedShaders");
315         lib.bindGLSymbol(cast(void**)&glGetAttribLocation, "glGetAttribLocation");
316         lib.bindGLSymbol(cast(void**)&glGetProgramiv, "glGetProgramiv");
317         lib.bindGLSymbol(cast(void**)&glGetProgramInfoLog, "glGetProgramInfoLog");
318         lib.bindGLSymbol(cast(void**)&glGetShaderiv, "glGetShaderiv");
319         lib.bindGLSymbol(cast(void**)&glGetShaderInfoLog, "glGetShaderInfoLog");
320         lib.bindGLSymbol(cast(void**)&glGetShaderSource, "glGetShaderSource");
321         lib.bindGLSymbol(cast(void**)&glGetUniformLocation, "glGetUniformLocation");
322         lib.bindGLSymbol(cast(void**)&glGetUniformfv, "glGetUniformfv");
323         lib.bindGLSymbol(cast(void**)&glGetUniformiv, "glGetUniformiv");
324         lib.bindGLSymbol(cast(void**)&glGetVertexAttribdv, "glGetVertexAttribdv");
325         lib.bindGLSymbol(cast(void**)&glGetVertexAttribfv, "glGetVertexAttribfv");
326         lib.bindGLSymbol(cast(void**)&glGetVertexAttribiv, "glGetVertexAttribiv");
327         lib.bindGLSymbol(cast(void**)&glGetVertexAttribPointerv, "glGetVertexAttribPointerv");
328         lib.bindGLSymbol(cast(void**)&glIsProgram, "glIsProgram");
329         lib.bindGLSymbol(cast(void**)&glIsShader, "glIsShader");
330         lib.bindGLSymbol(cast(void**)&glLinkProgram, "glLinkProgram");
331         lib.bindGLSymbol(cast(void**)&glShaderSource, "glShaderSource");
332         lib.bindGLSymbol(cast(void**)&glUseProgram, "glUseProgram");
333         lib.bindGLSymbol(cast(void**)&glUniform1f, "glUniform1f");
334         lib.bindGLSymbol(cast(void**)&glUniform2f, "glUniform2f");
335         lib.bindGLSymbol(cast(void**)&glUniform3f, "glUniform3f");
336         lib.bindGLSymbol(cast(void**)&glUniform4f, "glUniform4f");
337         lib.bindGLSymbol(cast(void**)&glUniform1i, "glUniform1i");
338         lib.bindGLSymbol(cast(void**)&glUniform2i, "glUniform2i");
339         lib.bindGLSymbol(cast(void**)&glUniform3i, "glUniform3i");
340         lib.bindGLSymbol(cast(void**)&glUniform4i, "glUniform4i");
341         lib.bindGLSymbol(cast(void**)&glUniform1fv, "glUniform1fv");
342         lib.bindGLSymbol(cast(void**)&glUniform2fv, "glUniform2fv");
343         lib.bindGLSymbol(cast(void**)&glUniform3fv, "glUniform3fv");
344         lib.bindGLSymbol(cast(void**)&glUniform4fv, "glUniform4fv");
345         lib.bindGLSymbol(cast(void**)&glUniform1iv, "glUniform1iv");
346         lib.bindGLSymbol(cast(void**)&glUniform2iv, "glUniform2iv");
347         lib.bindGLSymbol(cast(void**)&glUniform3iv, "glUniform3iv");
348         lib.bindGLSymbol(cast(void**)&glUniform4iv, "glUniform4iv");
349         lib.bindGLSymbol(cast(void**)&glUniformMatrix2fv, "glUniformMatrix2fv");
350         lib.bindGLSymbol(cast(void**)&glUniformMatrix3fv, "glUniformMatrix3fv");
351         lib.bindGLSymbol(cast(void**)&glUniformMatrix4fv, "glUniformMatrix4fv");
352         lib.bindGLSymbol(cast(void**)&glValidateProgram, "glValidateProgram");
353         lib.bindGLSymbol(cast(void**)&glVertexAttrib1d, "glVertexAttrib1d");
354         lib.bindGLSymbol(cast(void**)&glVertexAttrib1dv, "glVertexAttrib1dv");
355         lib.bindGLSymbol(cast(void**)&glVertexAttrib1f, "glVertexAttrib1f");
356         lib.bindGLSymbol(cast(void**)&glVertexAttrib1fv, "glVertexAttrib1fv");
357         lib.bindGLSymbol(cast(void**)&glVertexAttrib1s, "glVertexAttrib1s");
358         lib.bindGLSymbol(cast(void**)&glVertexAttrib1sv, "glVertexAttrib1sv");
359         lib.bindGLSymbol(cast(void**)&glVertexAttrib2d, "glVertexAttrib2d");
360         lib.bindGLSymbol(cast(void**)&glVertexAttrib2dv, "glVertexAttrib2dv");
361         lib.bindGLSymbol(cast(void**)&glVertexAttrib2f, "glVertexAttrib2f");
362         lib.bindGLSymbol(cast(void**)&glVertexAttrib2fv, "glVertexAttrib2fv");
363         lib.bindGLSymbol(cast(void**)&glVertexAttrib2s, "glVertexAttrib2s");
364         lib.bindGLSymbol(cast(void**)&glVertexAttrib2sv, "glVertexAttrib2sv");
365         lib.bindGLSymbol(cast(void**)&glVertexAttrib3d, "glVertexAttrib3d");
366         lib.bindGLSymbol(cast(void**)&glVertexAttrib3dv, "glVertexAttrib3dv");
367         lib.bindGLSymbol(cast(void**)&glVertexAttrib3f, "glVertexAttrib3f");
368         lib.bindGLSymbol(cast(void**)&glVertexAttrib3fv, "glVertexAttrib3fv");
369         lib.bindGLSymbol(cast(void**)&glVertexAttrib3s, "glVertexAttrib3s");
370         lib.bindGLSymbol(cast(void**)&glVertexAttrib3sv, "glVertexAttrib3sv");
371         lib.bindGLSymbol(cast(void**)&glVertexAttrib4Nbv, "glVertexAttrib4Nbv");
372         lib.bindGLSymbol(cast(void**)&glVertexAttrib4Niv, "glVertexAttrib4Niv");
373         lib.bindGLSymbol(cast(void**)&glVertexAttrib4Nsv, "glVertexAttrib4Nsv");
374         lib.bindGLSymbol(cast(void**)&glVertexAttrib4Nub, "glVertexAttrib4Nub");
375         lib.bindGLSymbol(cast(void**)&glVertexAttrib4Nubv, "glVertexAttrib4Nubv");
376         lib.bindGLSymbol(cast(void**)&glVertexAttrib4Nuiv, "glVertexAttrib4Nuiv");
377         lib.bindGLSymbol(cast(void**)&glVertexAttrib4Nusv, "glVertexAttrib4Nusv");
378         lib.bindGLSymbol(cast(void**)&glVertexAttrib4bv, "glVertexAttrib4bv");
379         lib.bindGLSymbol(cast(void**)&glVertexAttrib4d, "glVertexAttrib4d");
380         lib.bindGLSymbol(cast(void**)&glVertexAttrib4dv, "glVertexAttrib4dv");
381         lib.bindGLSymbol(cast(void**)&glVertexAttrib4f, "glVertexAttrib4f");
382         lib.bindGLSymbol(cast(void**)&glVertexAttrib4fv, "glVertexAttrib4fv");
383         lib.bindGLSymbol(cast(void**)&glVertexAttrib4iv, "glVertexAttrib4iv");
384         lib.bindGLSymbol(cast(void**)&glVertexAttrib4s, "glVertexAttrib4s");
385         lib.bindGLSymbol(cast(void**)&glVertexAttrib4sv, "glVertexAttrib4sv");
386         lib.bindGLSymbol(cast(void**)&glVertexAttrib4ubv, "glVertexAttrib4ubv");
387         lib.bindGLSymbol(cast(void**)&glVertexAttrib4uiv, "glVertexAttrib4uiv");
388         lib.bindGLSymbol(cast(void**)&glVertexAttrib4usv, "glVertexAttrib4usv");
389         lib.bindGLSymbol(cast(void**)&glVertexAttribPointer, "glVertexAttribPointer");
390         if(errorCountGL() == 0) return true;
391     }
392     return false;
393 }