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