root/OpenSceneGraph/trunk/include/osg/GL2Extensions @ 13041

Revision 13041, 47.3 kB (checked in by robert, 3 years ago)

Ran script to remove trailing spaces and tabs

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield
2 * Copyright (C) 2003-2005 3Dlabs Inc. Ltd.
3 * Copyright (C) 2004-2005 Nathan Cournia
4 * Copyright (C) 2007 Art Tevs
5 * Copyright (C) 2008 Zebra Imaging
6 * Copyright (C) 2010 VIRES Simulationstechnologie GmbH
7 *
8 * This application is open source and may be redistributed and/or modified
9 * freely and without restriction, both in commercial and non commercial
10 * applications, as long as this copyright notice is maintained.
11 *
12 * This application is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15*/
16
17/* file:        include/osg/GL2Extensions
18 * author:      Mike Weiblen 2008-01-02
19 *              Holger Helmich 2010-10-21
20*/
21
22#ifndef OSG_GL2EXTENSIONS
23#define OSG_GL2EXTENSIONS 1
24
25#include <osg/Referenced>
26#include <osg/GL>
27
28#include <string>
29
30#ifndef GL_SAMPLER_2D_ARRAY_EXT
31    #define GL_SAMPLER_1D_ARRAY_EXT           0x8DC0
32    #define GL_SAMPLER_2D_ARRAY_EXT           0x8DC1
33    #define GL_SAMPLER_1D_ARRAY_SHADOW_EXT    0x8DC3
34    #define GL_SAMPLER_2D_ARRAY_SHADOW_EXT    0x8DC4
35#endif
36
37#if !defined(GL_VERSION_2_0)
38typedef char GLchar;
39#endif
40
41#if !defined(GL_VERSION_2_0)
42    #define GL_VERTEX_PROGRAM_POINT_SIZE      0x8642
43    #define GL_VERTEX_PROGRAM_TWO_SIDE        0x8643
44#endif
45
46#if !defined(GL_VERSION_2_0) && !defined(GL_ES_VERSION_2_0)
47#define GL_VERSION_2_0 1
48#define GL_BLEND_EQUATION_RGB             GL_BLEND_EQUATION
49#define GL_VERTEX_ATTRIB_ARRAY_ENABLED    0x8622
50#define GL_VERTEX_ATTRIB_ARRAY_SIZE       0x8623
51#define GL_VERTEX_ATTRIB_ARRAY_STRIDE     0x8624
52#define GL_VERTEX_ATTRIB_ARRAY_TYPE       0x8625
53#define GL_CURRENT_VERTEX_ATTRIB          0x8626
54#define GL_VERTEX_ATTRIB_ARRAY_POINTER    0x8645
55#define GL_STENCIL_BACK_FUNC              0x8800
56#define GL_STENCIL_BACK_FAIL              0x8801
57#define GL_STENCIL_BACK_PASS_DEPTH_FAIL   0x8802
58#define GL_STENCIL_BACK_PASS_DEPTH_PASS   0x8803
59#define GL_MAX_DRAW_BUFFERS               0x8824
60#define GL_DRAW_BUFFER0                   0x8825
61#define GL_DRAW_BUFFER1                   0x8826
62#define GL_DRAW_BUFFER2                   0x8827
63#define GL_DRAW_BUFFER3                   0x8828
64#define GL_DRAW_BUFFER4                   0x8829
65#define GL_DRAW_BUFFER5                   0x882A
66#define GL_DRAW_BUFFER6                   0x882B
67#define GL_DRAW_BUFFER7                   0x882C
68#define GL_DRAW_BUFFER8                   0x882D
69#define GL_DRAW_BUFFER9                   0x882E
70#define GL_DRAW_BUFFER10                  0x882F
71#define GL_DRAW_BUFFER11                  0x8830
72#define GL_DRAW_BUFFER12                  0x8831
73#define GL_DRAW_BUFFER13                  0x8832
74#define GL_DRAW_BUFFER14                  0x8833
75#define GL_DRAW_BUFFER15                  0x8834
76#define GL_BLEND_EQUATION_ALPHA           0x883D
77#define GL_POINT_SPRITE                   0x8861
78#define GL_COORD_REPLACE                  0x8862
79#define GL_MAX_VERTEX_ATTRIBS             0x8869
80#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A
81#define GL_MAX_TEXTURE_COORDS             0x8871
82#define GL_MAX_TEXTURE_IMAGE_UNITS        0x8872
83#define GL_FRAGMENT_SHADER                0x8B30
84#define GL_VERTEX_SHADER                  0x8B31
85#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49
86#define GL_MAX_VERTEX_UNIFORM_COMPONENTS  0x8B4A
87#define GL_MAX_VARYING_FLOATS             0x8B4B
88#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C
89#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D
90#define GL_SHADER_TYPE                    0x8B4F
91#define GL_FLOAT_VEC2                     0x8B50
92#define GL_FLOAT_VEC3                     0x8B51
93#define GL_FLOAT_VEC4                     0x8B52
94#define GL_INT_VEC2                       0x8B53
95#define GL_INT_VEC3                       0x8B54
96#define GL_INT_VEC4                       0x8B55
97#define GL_BOOL                           0x8B56
98#define GL_BOOL_VEC2                      0x8B57
99#define GL_BOOL_VEC3                      0x8B58
100#define GL_BOOL_VEC4                      0x8B59
101#define GL_FLOAT_MAT2                     0x8B5A
102#define GL_FLOAT_MAT3                     0x8B5B
103#define GL_FLOAT_MAT4                     0x8B5C
104#define GL_SAMPLER_1D                     0x8B5D
105#define GL_SAMPLER_2D                     0x8B5E
106#define GL_SAMPLER_3D                     0x8B5F
107#define GL_SAMPLER_CUBE                   0x8B60
108#define GL_SAMPLER_1D_SHADOW              0x8B61
109#define GL_SAMPLER_2D_SHADOW              0x8B62
110#define GL_DELETE_STATUS                  0x8B80
111#define GL_COMPILE_STATUS                 0x8B81
112#define GL_LINK_STATUS                    0x8B82
113#define GL_VALIDATE_STATUS                0x8B83
114#define GL_INFO_LOG_LENGTH                0x8B84
115#define GL_ATTACHED_SHADERS               0x8B85
116#define GL_ACTIVE_UNIFORMS                0x8B86
117#define GL_ACTIVE_UNIFORM_MAX_LENGTH      0x8B87
118#define GL_SHADER_SOURCE_LENGTH           0x8B88
119#define GL_ACTIVE_ATTRIBUTES              0x8B89
120#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH    0x8B8A
121#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B
122#define GL_SHADING_LANGUAGE_VERSION       0x8B8C
123#define GL_CURRENT_PROGRAM                0x8B8D
124#define GL_POINT_SPRITE_COORD_ORIGIN      0x8CA0
125#define GL_LOWER_LEFT                     0x8CA1
126#define GL_UPPER_LEFT                     0x8CA2
127#define GL_STENCIL_BACK_REF               0x8CA3
128#define GL_STENCIL_BACK_VALUE_MASK        0x8CA4
129#define GL_STENCIL_BACK_WRITEMASK         0x8CA5
130#endif
131
132#ifndef GL_VERSION_2_1
133#define GL_VERSION_2_1 1
134#define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F
135#define GL_PIXEL_PACK_BUFFER              0x88EB
136#define GL_PIXEL_UNPACK_BUFFER            0x88EC
137#define GL_PIXEL_PACK_BUFFER_BINDING      0x88ED
138#define GL_PIXEL_UNPACK_BUFFER_BINDING    0x88EF
139#define GL_FLOAT_MAT2x3                   0x8B65
140#define GL_FLOAT_MAT2x4                   0x8B66
141#define GL_FLOAT_MAT3x2                   0x8B67
142#define GL_FLOAT_MAT3x4                   0x8B68
143#define GL_FLOAT_MAT4x2                   0x8B69
144#define GL_FLOAT_MAT4x3                   0x8B6A
145#define GL_SRGB                           0x8C40
146#define GL_SRGB8                          0x8C41
147#define GL_SRGB_ALPHA                     0x8C42
148#define GL_SRGB8_ALPHA8                   0x8C43
149#define GL_SLUMINANCE_ALPHA               0x8C44
150#define GL_SLUMINANCE8_ALPHA8             0x8C45
151#define GL_SLUMINANCE                     0x8C46
152#define GL_SLUMINANCE8                    0x8C47
153#define GL_COMPRESSED_SRGB                0x8C48
154#define GL_COMPRESSED_SRGB_ALPHA          0x8C49
155#define GL_COMPRESSED_SLUMINANCE          0x8C4A
156#define GL_COMPRESSED_SLUMINANCE_ALPHA    0x8C4B
157#endif
158
159// EXT_geometry_shader4
160#ifndef GL_GEOMETRY_SHADER_EXT
161#define GL_GEOMETRY_SHADER_EXT                       0x8DD9
162#define GL_GEOMETRY_VERTICES_OUT_EXT                 0x8DDA
163#define GL_GEOMETRY_INPUT_TYPE_EXT                   0x8DDB
164#define GL_GEOMETRY_OUTPUT_TYPE_EXT                  0x8DDC
165#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT      0x8C29
166#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT       0x8DDD
167#define GL_MAX_VERTEX_VARYING_COMPONENTS_EXT         0x8DDE
168#define GL_MAX_VARYING_COMPONENTS_EXT                0x8B4B
169#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT       0x8DDF
170#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT          0x8DE0
171#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT  0x8DE1
172#define GL_LINES_ADJACENCY_EXT                       0x000A
173#define GL_LINE_STRIP_ADJACENCY_EXT                  0x000B
174#define GL_TRIANGLES_ADJACENCY_EXT                   0x000C
175#define GL_TRIANGLE_STRIP_ADJACENCY_EXT              0x000D
176#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT  0x8DA8
177#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT    0x8DA9
178#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT        0x8DA7
179#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT  0x8CD4
180#define GL_PROGRAM_POINT_SIZE_EXT                    0x8642
181#endif
182
183// ARB_tesselation_shader
184#ifndef GL_TESS_EVALUATION_SHADER
185#define GL_PATCHES                                             0x000E
186#define GL_PATCH_VERTICES                                      0x8E72
187#define GL_PATCH_DEFAULT_INNER_LEVEL                           0x8E73
188#define GL_PATCH_DEFAULT_OUTER_LEVEL                           0x8E74
189#define GL_MAX_PATCH_VERTICES                                  0x8E7D
190#define GL_MAX_TESS_GEN_LEVEL                                  0x8E7E
191#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS                 0x8E7F
192#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS              0x8E80
193#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS                0x8E81
194#define GL_MAX_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS         0x8E82
195#define GL_MAX_MAX_TESS_CONTROL_OUTPUT_COMPONENTS              0x8E83
196#define GL_MAX_MAX_TESS_PATCH_COMPONENTS                       0x8E84
197#define GL_MAX_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS        0x8E85
198#define GL_MAX_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS           0x8E86
199#define GL_MAX_MAX_TESS_CONTROL_UNIFORM_BLOCKS                 0x8E89
200#define GL_MAX_MAX_TESS_EVALUATION_UNIFORM_BLOCKS              0x8E8A
201#define GL_MAX_MAX_TESS_CONTROL_INPUT_COMPONENTS               0x886C
202#define GL_MAX_MAX_TESS_EVALUATION_INPUT_COMPONENTS            0x886D
203#define GL_MAX_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS    0x8E1E
204#define GL_MAX_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E1F
205#define GL_TESS_EVALUATION_SHADER                              0x8E87
206#define GL_TESS_CONTROL_SHADER                                 0x8E88
207#define GL_TESS_CONTROL_OUTPUT_VERTICES                        0x8E75
208#define GL_TESS_GEN_MODE                                       0x8E76
209#define GL_TESS_GEN_SPACING                                    0x8E77
210#define GL_TESS_GEN_VERTEX_ORDER                               0x8E78
211#define GL_TESS_GEN_POINT_MODE                                 0x8E79
212#define GL_ISOLINES                                            0x8E7A
213#define GL_FRACTIONAL_ODD                                      0x8E7B
214#define GL_FRACTIONAL_EVEN                                     0x8E7C
215#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER     0x84F0
216#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER  0x84F1
217#endif
218
219// EXT_gpu_shader4
220#ifndef GL_INT_SAMPLER_2D_EXT
221#define GL_SAMPLER_1D_ARRAY_EXT               0x8DC0
222#define GL_SAMPLER_2D_ARRAY_EXT               0x8DC1
223#define GL_SAMPLER_BUFFER_EXT                 0x8DC2
224#define GL_SAMPLER_1D_ARRAY_SHADOW_EXT        0x8DC3
225#define GL_SAMPLER_2D_ARRAY_SHADOW_EXT        0x8DC4
226#define GL_SAMPLER_CUBE_SHADOW_EXT            0x8DC5
227#define GL_UNSIGNED_INT_VEC2_EXT              0x8DC6
228#define GL_UNSIGNED_INT_VEC3_EXT              0x8DC7
229#define GL_UNSIGNED_INT_VEC4_EXT              0x8DC8
230#define GL_INT_SAMPLER_1D_EXT                 0x8DC9
231#define GL_INT_SAMPLER_2D_EXT                 0x8DCA
232#define GL_INT_SAMPLER_3D_EXT                 0x8DCB
233#define GL_INT_SAMPLER_CUBE_EXT               0x8DCC
234#define GL_INT_SAMPLER_2D_RECT_EXT            0x8DCD
235#define GL_INT_SAMPLER_1D_ARRAY_EXT           0x8DCE
236#define GL_INT_SAMPLER_2D_ARRAY_EXT           0x8DCF
237#define GL_INT_SAMPLER_BUFFER_EXT             0x8DD0
238#define GL_UNSIGNED_INT_SAMPLER_1D_EXT        0x8DD1
239#define GL_UNSIGNED_INT_SAMPLER_2D_EXT        0x8DD2
240#define GL_UNSIGNED_INT_SAMPLER_3D_EXT        0x8DD3
241#define GL_UNSIGNED_INT_SAMPLER_CUBE_EXT      0x8DD4
242#define GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT   0x8DD5
243#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT  0x8DD6
244#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT  0x8DD7
245#define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT    0x8DD8
246#define GL_MIN_PROGRAM_TEXEL_OFFSET_EXT       0x8904
247#define GL_MAX_PROGRAM_TEXEL_OFFSET_EXT       0x8905
248#endif
249
250// ARB_uniform_buffer_object
251#ifndef GL_UNIFORM_BUFFER
252#define GL_UNIFORM_BUFFER                 0x8A11
253#define GL_UNIFORM_BUFFER_BINDING         0x8A28
254#define GL_UNIFORM_BUFFER_START           0x8A29
255#define GL_UNIFORM_BUFFER_SIZE            0x8A2A
256#define GL_MAX_VERTEX_UNIFORM_BLOCKS      0x8A2B
257#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS    0x8A2C
258#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS    0x8A2D
259#define GL_MAX_COMBINED_UNIFORM_BLOCKS    0x8A2E
260#define GL_MAX_UNIFORM_BUFFER_BINDINGS    0x8A2F
261#define GL_MAX_UNIFORM_BLOCK_SIZE         0x8A30
262#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31
263#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32
264#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33
265#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34
266#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35
267#define GL_ACTIVE_UNIFORM_BLOCKS          0x8A36
268#define GL_UNIFORM_TYPE                   0x8A37
269#define GL_UNIFORM_SIZE                   0x8A38
270#define GL_UNIFORM_NAME_LENGTH            0x8A39
271#define GL_UNIFORM_BLOCK_INDEX            0x8A3A
272#define GL_UNIFORM_OFFSET                 0x8A3B
273#define GL_UNIFORM_ARRAY_STRIDE           0x8A3C
274#define GL_UNIFORM_MATRIX_STRIDE          0x8A3D
275#define GL_UNIFORM_IS_ROW_MAJOR           0x8A3E
276#define GL_UNIFORM_BLOCK_BINDING          0x8A3F
277#define GL_UNIFORM_BLOCK_DATA_SIZE        0x8A40
278#define GL_UNIFORM_BLOCK_NAME_LENGTH      0x8A41
279#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS  0x8A42
280#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43
281#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44
282#define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45
283#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46
284#define GL_INVALID_INDEX                  0xFFFFFFFFu
285#endif
286
287//ARB_get_program_binary
288#ifndef GL_PROGRAM_BINARY_RETRIEVABLE_HINT
289#define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257
290#define GL_PROGRAM_BINARY_LENGTH           0x8741
291#define GL_NUM_PROGRAM_BINARY_FORMATS      0x87FE
292#define GL_PROGRAM_BINARY_FORMATS          0x87FF
293#endif
294
295namespace osg {
296
297class OSG_EXPORT GL2Extensions : public osg::Referenced
298{
299    public:
300        GL2Extensions(unsigned int contextID);
301        GL2Extensions(const GL2Extensions& rhs);
302
303        void lowestCommonDenominator(const GL2Extensions& rhs);
304
305        void setupGL2Extensions(unsigned int contextID);
306
307        /** Does the GL driver support OpenGL Shading Language? */
308        bool isGlslSupported() const;
309
310        float getGlVersion() const { return _glVersion; }
311        float getLanguageVersion() const { return _glslLanguageVersion; }
312
313        void setShaderObjectsSupported(bool flag) { _isShaderObjectsSupported = flag; }
314        bool isShaderObjectsSupported() const { return _isShaderObjectsSupported; }
315
316        void setVertexShaderSupported(bool flag) { _isVertexShaderSupported = flag; }
317        bool isVertexShaderSupported() const { return _isVertexShaderSupported; }
318
319        void setFragmentShaderSupported(bool flag) { _isFragmentShaderSupported = flag; }
320        bool isFragmentShaderSupported() const { return _isFragmentShaderSupported; }
321
322        void setLanguage100Supported(bool flag) { _isLanguage100Supported = flag; }
323        bool isLanguage100Supported() const { return _isLanguage100Supported; }
324
325        void setGeometryShader4Supported(bool flag) { _isGeometryShader4Supported = flag; }
326        bool isGeometryShader4Supported() const { return _isGeometryShader4Supported; }
327
328        void setTessellationShadersSupported(bool flag) { _areTessellationShadersSupported = flag; }
329        bool areTessellationShadersSupported() const { return _areTessellationShadersSupported; }
330
331        void setGpuShader4Supported(bool flag) { _isGpuShader4Supported = flag; }
332        bool isGpuShader4Supported() const { return _isGpuShader4Supported; }
333
334        void setUniformBufferObjectSupported(bool flag) { _isUniformBufferObjectSupported = flag; }
335        bool isUniformBufferObjectSupported() {return _isUniformBufferObjectSupported; }
336
337        void setGetProgramBinarySupported(bool flag) { _isGetProgramBinarySupported = flag; }
338        bool isGetProgramBinarySupported() {return _isGetProgramBinarySupported; }
339
340        /** Function to call to get the extension of a specified context.
341          * If the Exentsion object for that context has not yet been created then
342          * and the 'createIfNotInitalized' flag been set to false then returns NULL.
343          * If 'createIfNotInitalized' is true then the Extensions object is
344          * automatically created.  However, in this case the extension object
345          * only be created with the graphics context associated with ContextID..*/
346        static GL2Extensions* Get(unsigned int contextID,bool createIfNotInitalized);
347
348        /** allows users to override the extensions across graphics contexts.
349          * typically used when you have different extensions supported across graphics pipes
350          * but need to ensure that they all use the same low common denominator extensions.*/
351        static void Set(unsigned int contextID, GL2Extensions* extensions);
352
353
354        void glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha) const;
355        void glDrawBuffers(GLsizei n, const GLenum *bufs) const;
356        void glStencilOpSeparate(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass) const;
357        void glStencilFuncSeparate(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask) const;
358        void glStencilMaskSeparate(GLenum face, GLuint mask) const;
359        void glAttachShader(GLuint program, GLuint shader) const;
360        void glBindAttribLocation(GLuint program, GLuint index, const GLchar *name) const;
361        void glCompileShader(GLuint shader) const;
362        GLuint glCreateProgram(void) const;
363        GLuint glCreateShader(GLenum type) const;
364        void glDeleteProgram(GLuint program) const;
365        void glDeleteShader(GLuint shader) const;
366        void glDetachShader(GLuint program, GLuint shader) const;
367        void glDisableVertexAttribArray(GLuint index) const;
368        void glEnableVertexAttribArray(GLuint index) const;
369        void glGetActiveAttrib(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name) const;
370        void glGetActiveUniform(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name) const;
371        void glGetAttachedShaders(GLuint program, GLsizei maxCount, GLsizei *count, GLuint *obj) const;
372        GLint glGetAttribLocation(GLuint program, const GLchar *name) const;
373        void glGetProgramiv(GLuint program, GLenum pname, GLint *params) const;
374        void glGetProgramInfoLog(GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog) const;
375        void glGetShaderiv(GLuint shader, GLenum pname, GLint *params) const;
376        void glGetShaderInfoLog(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog) const;
377        void glGetShaderSource(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source) const;
378        GLint glGetUniformLocation(GLuint program, const GLchar *name) const;
379        void glGetUniformfv(GLuint program, GLint location, GLfloat *params) const;
380        void glGetUniformiv(GLuint program, GLint location, GLint *params) const;
381        void glGetVertexAttribdv(GLuint index, GLenum pname, GLdouble *params) const;
382        void glGetVertexAttribfv(GLuint index, GLenum pname, GLfloat *params) const;
383        void glGetVertexAttribiv(GLuint index, GLenum pname, GLint *params) const;
384        void glGetVertexAttribPointerv(GLuint index, GLenum pname, GLvoid* *pointer) const;
385        GLboolean glIsProgram(GLuint program) const;
386        GLboolean glIsShader(GLuint shader) const;
387        void glLinkProgram(GLuint program) const;
388        void glShaderSource(GLuint shader, GLsizei count, const GLchar* *string, const GLint *length) const;
389        void glUseProgram(GLuint program) const;
390        void glUniform1f(GLint location, GLfloat v0) const;
391        void glUniform2f(GLint location, GLfloat v0, GLfloat v1) const;
392        void glUniform3f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2) const;
393        void glUniform4f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) const;
394        void glUniform1i(GLint location, GLint v0) const;
395        void glUniform2i(GLint location, GLint v0, GLint v1) const;
396        void glUniform3i(GLint location, GLint v0, GLint v1, GLint v2) const;
397        void glUniform4i(GLint location, GLint v0, GLint v1, GLint v2, GLint v3) const;
398        void glUniform1fv(GLint location, GLsizei count, const GLfloat *value) const;
399        void glUniform2fv(GLint location, GLsizei count, const GLfloat *value) const;
400        void glUniform3fv(GLint location, GLsizei count, const GLfloat *value) const;
401        void glUniform4fv(GLint location, GLsizei count, const GLfloat *value) const;
402        void glUniform1iv(GLint location, GLsizei count, const GLint *value) const;
403        void glUniform2iv(GLint location, GLsizei count, const GLint *value) const;
404        void glUniform3iv(GLint location, GLsizei count, const GLint *value) const;
405        void glUniform4iv(GLint location, GLsizei count, const GLint *value) const;
406        void glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) const;
407        void glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) const;
408        void glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) const;
409        void glValidateProgram(GLuint program) const;
410        void glVertexAttrib1d(GLuint index, GLdouble x) const;
411        void glVertexAttrib1dv(GLuint index, const GLdouble *v) const;
412        void glVertexAttrib1f(GLuint index, GLfloat x) const;
413        void glVertexAttrib1fv(GLuint index, const GLfloat *v) const;
414        void glVertexAttrib1s(GLuint index, GLshort x) const;
415        void glVertexAttrib1sv(GLuint index, const GLshort *v) const;
416        void glVertexAttrib2d(GLuint index, GLdouble x, GLdouble y) const;
417        void glVertexAttrib2dv(GLuint index, const GLdouble *v) const;
418        void glVertexAttrib2f(GLuint index, GLfloat x, GLfloat y) const;
419        void glVertexAttrib2fv(GLuint index, const GLfloat *v) const;
420        void glVertexAttrib2s(GLuint index, GLshort x, GLshort y) const;
421        void glVertexAttrib2sv(GLuint index, const GLshort *v) const;
422        void glVertexAttrib3d(GLuint index, GLdouble x, GLdouble y, GLdouble z) const;
423        void glVertexAttrib3dv(GLuint index, const GLdouble *v) const;
424        void glVertexAttrib3f(GLuint index, GLfloat x, GLfloat y, GLfloat z) const;
425        void glVertexAttrib3fv(GLuint index, const GLfloat *v) const;
426        void glVertexAttrib3s(GLuint index, GLshort x, GLshort y, GLshort z) const;
427        void glVertexAttrib3sv(GLuint index, const GLshort *v) const;
428        void glVertexAttrib4Nbv(GLuint index, const GLbyte *v) const;
429        void glVertexAttrib4Niv(GLuint index, const GLint *v) const;
430        void glVertexAttrib4Nsv(GLuint index, const GLshort *v) const;
431        void glVertexAttrib4Nub(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w) const;
432        void glVertexAttrib4Nubv(GLuint index, const GLubyte *v) const;
433        void glVertexAttrib4Nuiv(GLuint index, const GLuint *v) const;
434        void glVertexAttrib4Nusv(GLuint index, const GLushort *v) const;
435        void glVertexAttrib4bv(GLuint index, const GLbyte *v) const;
436        void glVertexAttrib4d(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) const;
437        void glVertexAttrib4dv(GLuint index, const GLdouble *v) const;
438        void glVertexAttrib4f(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) const;
439        void glVertexAttrib4fv(GLuint index, const GLfloat *v) const;
440        void glVertexAttrib4iv(GLuint index, const GLint *v) const;
441        void glVertexAttrib4s(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w) const;
442        void glVertexAttrib4sv(GLuint index, const GLshort *v) const;
443        void glVertexAttrib4ubv(GLuint index, const GLubyte *v) const;
444        void glVertexAttrib4uiv(GLuint index, const GLuint *v) const;
445        void glVertexAttrib4usv(GLuint index, const GLushort *v) const;
446        void glVertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer) const;
447
448        // C++-friendly convenience wrapper methods
449        GLuint getCurrentProgram() const;
450        bool getProgramInfoLog( GLuint program, std::string& result ) const;
451        bool getShaderInfoLog( GLuint shader, std::string& result ) const;
452        bool getAttribLocation( const char* attribName, GLuint& slot ) const;
453        bool getFragDataLocation( const char* fragDataName, GLuint& slot) const;
454
455        // GL 2.1
456        void glUniformMatrix2x3fv( GLint location, GLsizei count, GLboolean transpose, const GLfloat* value ) const;
457        void glUniformMatrix3x2fv( GLint location, GLsizei count, GLboolean transpose, const GLfloat* value ) const;
458        void glUniformMatrix2x4fv( GLint location, GLsizei count, GLboolean transpose, const GLfloat* value ) const;
459        void glUniformMatrix4x2fv( GLint location, GLsizei count, GLboolean transpose, const GLfloat* value ) const;
460        void glUniformMatrix3x4fv( GLint location, GLsizei count, GLboolean transpose, const GLfloat* value ) const;
461        void glUniformMatrix4x3fv( GLint location, GLsizei count, GLboolean transpose, const GLfloat* value ) const;
462
463        // EXT_geometry_shader4
464        void glProgramParameteri( GLuint program, GLenum pname, GLint value ) const;
465        void glFramebufferTexture( GLenum target, GLenum attachment, GLuint texture, GLint level ) const;
466        void glFramebufferTextureLayer( GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer ) const;
467        void glFramebufferTextureFace( GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face ) const;
468
469        // ARB_tessellation_shader
470        void glPatchParameteri(GLenum pname, GLint value) const;
471        void glPatchParameterfv(GLenum pname, const GLfloat *values) const;
472
473        // EXT_gpu_shader4
474        void glGetUniformuiv( GLuint program, GLint location, GLuint *params ) const;
475        void glBindFragDataLocation( GLuint program, GLuint color, const GLchar *name ) const;
476        GLint glGetFragDataLocation( GLuint program, const GLchar *name ) const;
477        void glUniform1ui( GLint location, GLuint v0 ) const;
478        void glUniform2ui( GLint location, GLuint v0, GLuint v1 ) const;
479        void glUniform3ui( GLint location, GLuint v0, GLuint v1, GLuint v2 ) const;
480        void glUniform4ui( GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3 ) const;
481        void glUniform1uiv( GLint location, GLsizei count, const GLuint *value ) const;
482        void glUniform2uiv( GLint location, GLsizei count, const GLuint *value ) const;
483        void glUniform3uiv( GLint location, GLsizei count, const GLuint *value ) const;
484        void glUniform4uiv( GLint location, GLsizei count, const GLuint *value ) const;
485
486        // ARB_uniform_buffer_object
487        void glGetUniformIndices(GLuint program, GLsizei uniformCount, const GLchar* *uniformNames, GLuint *uniformIndices) const;
488        void glGetActiveUniformsiv(GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params) const;
489        void glGetActiveUniformName(GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName) const;
490        GLuint glGetUniformBlockIndex(GLuint program, const GLchar *uniformBlockName) const;
491        void glGetActiveUniformBlockiv(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params) const;
492        void glGetActiveUniformBlockName(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName) const;
493        void glUniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding) const;
494
495        // ARB_get_program_binary
496        void glGetProgramBinary(GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary) const;
497        void glProgramBinary(GLuint program, GLenum binaryFormat, const GLvoid *binary, GLsizei length) const;
498
499    protected:
500        ~GL2Extensions() {}
501
502        float _glVersion;
503        float _glslLanguageVersion;
504
505        bool _isShaderObjectsSupported;
506        bool _isVertexShaderSupported;
507        bool _isFragmentShaderSupported;
508        bool _isLanguage100Supported;
509        bool _isGeometryShader4Supported;
510        bool _areTessellationShadersSupported;
511        bool _isGpuShader4Supported;
512        bool _isUniformBufferObjectSupported;
513        bool _isGetProgramBinarySupported;
514
515        typedef void (GL_APIENTRY * BlendEquationSeparateProc)(GLenum modeRGB, GLenum modeAlpha);
516        typedef void (GL_APIENTRY * DrawBuffersProc)(GLsizei n, const GLenum *bufs);
517        typedef void (GL_APIENTRY * StencilOpSeparateProc)(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
518        typedef void (GL_APIENTRY * StencilFuncSeparateProc)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
519        typedef void (GL_APIENTRY * StencilMaskSeparateProc)(GLenum face, GLuint mask);
520        typedef void (GL_APIENTRY * AttachShaderProc)(GLuint program, GLuint shader);
521        typedef void (GL_APIENTRY * BindAttribLocationProc)(GLuint program, GLuint index, const GLchar *name);
522        typedef void (GL_APIENTRY * CompileShaderProc)(GLuint shader);
523        typedef GLuint (GL_APIENTRY * CreateProgramProc)(void);
524        typedef GLuint (GL_APIENTRY * CreateShaderProc)(GLenum type);
525        typedef void (GL_APIENTRY * DeleteProgramProc)(GLuint program);
526        typedef void (GL_APIENTRY * DeleteObjectARBProc)(GLuint program);
527        typedef void (GL_APIENTRY * DeleteShaderProc)(GLuint shader);
528        typedef void (GL_APIENTRY * DetachShaderProc)(GLuint program, GLuint shader);
529        typedef void (GL_APIENTRY * DisableVertexAttribArrayProc)(GLuint index);
530        typedef void (GL_APIENTRY * EnableVertexAttribArrayProc)(GLuint index);
531        typedef void (GL_APIENTRY * GetActiveAttribProc)(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
532        typedef void (GL_APIENTRY * GetActiveUniformProc)(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
533        typedef void (GL_APIENTRY * GetAttachedShadersProc)(GLuint program, GLsizei maxCount, GLsizei *count, GLuint *obj);
534        typedef GLint (GL_APIENTRY * GetAttribLocationProc)(GLuint program, const GLchar *name);
535        typedef void (GL_APIENTRY * GetProgramivProc)(GLuint program, GLenum pname, GLint *params);
536        typedef void (GL_APIENTRY * GetObjectParameterivARBProc)(GLuint program, GLenum pname, GLint *params);
537        typedef void (GL_APIENTRY * GetProgramInfoLogProc)(GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
538        typedef void (GL_APIENTRY * GetInfoLogARBProc)(GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
539        typedef void (GL_APIENTRY * GetShaderivProc)(GLuint shader, GLenum pname, GLint *params);
540        typedef void (GL_APIENTRY * GetShaderInfoLogProc)(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
541        typedef void (GL_APIENTRY * GetShaderSourceProc)(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);
542        typedef GLint (GL_APIENTRY * GetUniformLocationProc)(GLuint program, const GLchar *name);
543        typedef void (GL_APIENTRY * GetUniformfvProc)(GLuint program, GLint location, GLfloat *params);
544        typedef void (GL_APIENTRY * GetUniformivProc)(GLuint program, GLint location, GLint *params);
545        typedef void (GL_APIENTRY * GetVertexAttribdvProc)(GLuint index, GLenum pname, GLdouble *params);
546        typedef void (GL_APIENTRY * GetVertexAttribfvProc)(GLuint index, GLenum pname, GLfloat *params);
547        typedef void (GL_APIENTRY * GetVertexAttribivProc)(GLuint index, GLenum pname, GLint *params);
548        typedef void (GL_APIENTRY * GetVertexAttribPointervProc)(GLuint index, GLenum pname, GLvoid* *pointer);
549        typedef GLboolean (GL_APIENTRY * IsProgramProc)(GLuint program);
550        typedef GLboolean (GL_APIENTRY * IsShaderProc)(GLuint shader);
551        typedef void (GL_APIENTRY * LinkProgramProc)(GLuint program);
552        typedef void (GL_APIENTRY * ShaderSourceProc)(GLuint shader, GLsizei count, const GLchar* *string, const GLint *length);
553        typedef void (GL_APIENTRY * UseProgramProc)(GLuint program);
554        typedef void (GL_APIENTRY * Uniform1fProc)(GLint location, GLfloat v0);
555        typedef void (GL_APIENTRY * Uniform2fProc)(GLint location, GLfloat v0, GLfloat v1);
556        typedef void (GL_APIENTRY * Uniform3fProc)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
557        typedef void (GL_APIENTRY * Uniform4fProc)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
558        typedef void (GL_APIENTRY * Uniform1iProc)(GLint location, GLint v0);
559        typedef void (GL_APIENTRY * Uniform2iProc)(GLint location, GLint v0, GLint v1);
560        typedef void (GL_APIENTRY * Uniform3iProc)(GLint location, GLint v0, GLint v1, GLint v2);
561        typedef void (GL_APIENTRY * Uniform4iProc)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
562        typedef void (GL_APIENTRY * Uniform1fvProc)(GLint location, GLsizei count, const GLfloat *value);
563        typedef void (GL_APIENTRY * Uniform2fvProc)(GLint location, GLsizei count, const GLfloat *value);
564        typedef void (GL_APIENTRY * Uniform3fvProc)(GLint location, GLsizei count, const GLfloat *value);
565        typedef void (GL_APIENTRY * Uniform4fvProc)(GLint location, GLsizei count, const GLfloat *value);
566        typedef void (GL_APIENTRY * Uniform1ivProc)(GLint location, GLsizei count, const GLint *value);
567        typedef void (GL_APIENTRY * Uniform2ivProc)(GLint location, GLsizei count, const GLint *value);
568        typedef void (GL_APIENTRY * Uniform3ivProc)(GLint location, GLsizei count, const GLint *value);
569        typedef void (GL_APIENTRY * Uniform4ivProc)(GLint location, GLsizei count, const GLint *value);
570        typedef void (GL_APIENTRY * UniformMatrix2fvProc)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
571        typedef void (GL_APIENTRY * UniformMatrix3fvProc)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
572        typedef void (GL_APIENTRY * UniformMatrix4fvProc)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
573        typedef void (GL_APIENTRY * ValidateProgramProc)(GLuint program);
574        typedef void (GL_APIENTRY * VertexAttrib1dProc)(GLuint index, GLdouble x);
575        typedef void (GL_APIENTRY * VertexAttrib1dvProc)(GLuint index, const GLdouble *v);
576        typedef void (GL_APIENTRY * VertexAttrib1fProc)(GLuint index, GLfloat x);
577        typedef void (GL_APIENTRY * VertexAttrib1fvProc)(GLuint index, const GLfloat *v);
578        typedef void (GL_APIENTRY * VertexAttrib1sProc)(GLuint index, GLshort x);
579        typedef void (GL_APIENTRY * VertexAttrib1svProc)(GLuint index, const GLshort *v);
580        typedef void (GL_APIENTRY * VertexAttrib2dProc)(GLuint index, GLdouble x, GLdouble y);
581        typedef void (GL_APIENTRY * VertexAttrib2dvProc)(GLuint index, const GLdouble *v);
582        typedef void (GL_APIENTRY * VertexAttrib2fProc)(GLuint index, GLfloat x, GLfloat y);
583        typedef void (GL_APIENTRY * VertexAttrib2fvProc)(GLuint index, const GLfloat *v);
584        typedef void (GL_APIENTRY * VertexAttrib2sProc)(GLuint index, GLshort x, GLshort y);
585        typedef void (GL_APIENTRY * VertexAttrib2svProc)(GLuint index, const GLshort *v);
586        typedef void (GL_APIENTRY * VertexAttrib3dProc)(GLuint index, GLdouble x, GLdouble y, GLdouble z);
587        typedef void (GL_APIENTRY * VertexAttrib3dvProc)(GLuint index, const GLdouble *v);
588        typedef void (GL_APIENTRY * VertexAttrib3fProc)(GLuint index, GLfloat x, GLfloat y, GLfloat z);
589        typedef void (GL_APIENTRY * VertexAttrib3fvProc)(GLuint index, const GLfloat *v);
590        typedef void (GL_APIENTRY * VertexAttrib3sProc)(GLuint index, GLshort x, GLshort y, GLshort z);
591        typedef void (GL_APIENTRY * VertexAttrib3svProc)(GLuint index, const GLshort *v);
592        typedef void (GL_APIENTRY * VertexAttrib4NbvProc)(GLuint index, const GLbyte *v);
593        typedef void (GL_APIENTRY * VertexAttrib4NivProc)(GLuint index, const GLint *v);
594        typedef void (GL_APIENTRY * VertexAttrib4NsvProc)(GLuint index, const GLshort *v);
595        typedef void (GL_APIENTRY * VertexAttrib4NubProc)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
596        typedef void (GL_APIENTRY * VertexAttrib4NubvProc)(GLuint index, const GLubyte *v);
597        typedef void (GL_APIENTRY * VertexAttrib4NuivProc)(GLuint index, const GLuint *v);
598        typedef void (GL_APIENTRY * VertexAttrib4NusvProc)(GLuint index, const GLushort *v);
599        typedef void (GL_APIENTRY * VertexAttrib4bvProc)(GLuint index, const GLbyte *v);
600        typedef void (GL_APIENTRY * VertexAttrib4dProc)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
601        typedef void (GL_APIENTRY * VertexAttrib4dvProc)(GLuint index, const GLdouble *v);
602        typedef void (GL_APIENTRY * VertexAttrib4fProc)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
603        typedef void (GL_APIENTRY * VertexAttrib4fvProc)(GLuint index, const GLfloat *v);
604        typedef void (GL_APIENTRY * VertexAttrib4ivProc)(GLuint index, const GLint *v);
605        typedef void (GL_APIENTRY * VertexAttrib4sProc)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
606        typedef void (GL_APIENTRY * VertexAttrib4svProc)(GLuint index, const GLshort *v);
607        typedef void (GL_APIENTRY * VertexAttrib4ubvProc)(GLuint index, const GLubyte *v);
608        typedef void (GL_APIENTRY * VertexAttrib4uivProc)(GLuint index, const GLuint *v);
609        typedef void (GL_APIENTRY * VertexAttrib4usvProc)(GLuint index, const GLushort *v);
610        typedef void (GL_APIENTRY * VertexAttribPointerProc)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);
611        typedef void (GL_APIENTRY * UniformMatrix2x3fvProc)( GLint location, GLsizei count, GLboolean transpose, const GLfloat* value );
612        typedef void (GL_APIENTRY * UniformMatrix3x2fvProc)( GLint location, GLsizei count, GLboolean transpose, const GLfloat* value );
613        typedef void (GL_APIENTRY * UniformMatrix2x4fvProc)( GLint location, GLsizei count, GLboolean transpose, const GLfloat* value );
614        typedef void (GL_APIENTRY * UniformMatrix4x2fvProc)( GLint location, GLsizei count, GLboolean transpose, const GLfloat* value );
615        typedef void (GL_APIENTRY * UniformMatrix3x4fvProc)( GLint location, GLsizei count, GLboolean transpose, const GLfloat* value );
616        typedef void (GL_APIENTRY * UniformMatrix4x3fvProc)( GLint location, GLsizei count, GLboolean transpose, const GLfloat* value );
617        typedef void (GL_APIENTRY * ProgramParameteriProc)( GLuint program, GLenum pname, GLint value );
618        typedef void (GL_APIENTRY * FramebufferTextureProc)( GLenum target, GLenum attachment, GLuint texture, GLint level );
619        typedef void (GL_APIENTRY * FramebufferTextureLayerProc)( GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer );
620        typedef void (GL_APIENTRY * FramebufferTextureFaceProc)( GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face );
621        typedef void (GL_APIENTRY * PatchParameteriProc)( GLenum pname, GLint value );
622        typedef void (GL_APIENTRY * PatchParameterfvProc)( GLenum pname, const GLfloat* values );
623        typedef void (GL_APIENTRY * GetUniformuivProc)( GLuint program, GLint location, GLuint* params );
624        typedef void (GL_APIENTRY * BindFragDataLocationProc)( GLuint program, GLuint color, const GLchar* name );
625        typedef GLint (GL_APIENTRY * GetFragDataLocationProc)( GLuint program, const GLchar* name );
626        typedef void (GL_APIENTRY * Uniform1uiProc)( GLint location, GLuint v0 );
627        typedef void (GL_APIENTRY * Uniform2uiProc)( GLint location, GLuint v0, GLuint v1 );
628        typedef void (GL_APIENTRY * Uniform3uiProc)( GLint location, GLuint v0, GLuint v1, GLuint v2 );
629        typedef void (GL_APIENTRY * Uniform4uiProc)( GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3 );
630        typedef void (GL_APIENTRY * Uniform1uivProc)( GLint location, GLsizei count, const GLuint *value );
631        typedef void (GL_APIENTRY * Uniform2uivProc)( GLint location, GLsizei count, const GLuint *value );
632        typedef void (GL_APIENTRY * Uniform3uivProc)( GLint location, GLsizei count, const GLuint *value );
633        typedef void (GL_APIENTRY * Uniform4uivProc)( GLint location, GLsizei count, const GLuint *value );
634        typedef GLuint (GL_APIENTRY * GetHandleProc) (GLenum pname);
635        typedef void (GL_APIENTRY * GetUniformIndicesProc)(GLuint program, GLsizei uniformCount, const GLchar* *uniformNames, GLuint *uniformIndices);
636        typedef void (GL_APIENTRY * GetActiveUniformsivProc)(GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params);
637        typedef void (GL_APIENTRY * GetActiveUniformNameProc)(GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName);
638        typedef GLuint (GL_APIENTRY * GetUniformBlockIndexProc)(GLuint program, const GLchar *uniformBlockName);
639        typedef void (GL_APIENTRY * GetActiveUniformBlockivProc)(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params);
640        typedef void (GL_APIENTRY * GetActiveUniformBlockNameProc)(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName);
641        typedef void (GL_APIENTRY * UniformBlockBindingProc)(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
642        typedef void (GL_APIENTRY * GetProgramBinaryProc)(GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary);
643        typedef void (GL_APIENTRY * ProgramBinaryProc)(GLuint program, GLenum binaryFormat, const GLvoid *binary, GLsizei length);
644
645        BlendEquationSeparateProc _glBlendEquationSeparate;
646        DrawBuffersProc _glDrawBuffers;
647        StencilOpSeparateProc _glStencilOpSeparate;
648        StencilFuncSeparateProc _glStencilFuncSeparate;
649        StencilMaskSeparateProc _glStencilMaskSeparate;
650        AttachShaderProc _glAttachShader;
651        BindAttribLocationProc _glBindAttribLocation;
652        CompileShaderProc _glCompileShader;
653        CreateProgramProc _glCreateProgram;
654        CreateShaderProc _glCreateShader;
655        DeleteProgramProc _glDeleteProgram;
656        DeleteShaderProc _glDeleteShader;
657        DetachShaderProc _glDetachShader;
658        DisableVertexAttribArrayProc _glDisableVertexAttribArray;
659        EnableVertexAttribArrayProc _glEnableVertexAttribArray;
660        GetActiveAttribProc _glGetActiveAttrib;
661        GetActiveUniformProc _glGetActiveUniform;
662        GetAttachedShadersProc _glGetAttachedShaders;
663        GetAttribLocationProc _glGetAttribLocation;
664        GetProgramivProc _glGetProgramiv;
665        GetProgramInfoLogProc _glGetProgramInfoLog;
666        GetShaderivProc _glGetShaderiv;
667        GetShaderInfoLogProc _glGetShaderInfoLog;
668        GetShaderSourceProc _glGetShaderSource;
669        GetUniformLocationProc _glGetUniformLocation;
670        GetUniformfvProc _glGetUniformfv;
671        GetUniformivProc _glGetUniformiv;
672        GetVertexAttribdvProc _glGetVertexAttribdv;
673        GetVertexAttribfvProc _glGetVertexAttribfv;
674        GetVertexAttribivProc _glGetVertexAttribiv;
675        GetVertexAttribPointervProc _glGetVertexAttribPointerv;
676        IsProgramProc _glIsProgram;
677        IsShaderProc _glIsShader;
678        LinkProgramProc _glLinkProgram;
679        ShaderSourceProc _glShaderSource;
680        UseProgramProc _glUseProgram;
681        Uniform1fProc _glUniform1f;
682        Uniform2fProc _glUniform2f;
683        Uniform3fProc _glUniform3f;
684        Uniform4fProc _glUniform4f;
685        Uniform1iProc _glUniform1i;
686        Uniform2iProc _glUniform2i;
687        Uniform3iProc _glUniform3i;
688        Uniform4iProc _glUniform4i;
689        Uniform1fvProc _glUniform1fv;
690        Uniform2fvProc _glUniform2fv;
691        Uniform3fvProc _glUniform3fv;
692        Uniform4fvProc _glUniform4fv;
693        Uniform1ivProc _glUniform1iv;
694        Uniform2ivProc _glUniform2iv;
695        Uniform3ivProc _glUniform3iv;
696        Uniform4ivProc _glUniform4iv;
697        UniformMatrix2fvProc _glUniformMatrix2fv;
698        UniformMatrix3fvProc _glUniformMatrix3fv;
699        UniformMatrix4fvProc _glUniformMatrix4fv;
700        ValidateProgramProc _glValidateProgram;
701        VertexAttrib1dProc _glVertexAttrib1d;
702        VertexAttrib1dvProc _glVertexAttrib1dv;
703        VertexAttrib1fProc _glVertexAttrib1f;
704        VertexAttrib1fvProc _glVertexAttrib1fv;
705        VertexAttrib1sProc _glVertexAttrib1s;
706        VertexAttrib1svProc _glVertexAttrib1sv;
707        VertexAttrib2dProc _glVertexAttrib2d;
708        VertexAttrib2dvProc _glVertexAttrib2dv;
709        VertexAttrib2fProc _glVertexAttrib2f;
710        VertexAttrib2fvProc _glVertexAttrib2fv;
711        VertexAttrib2sProc _glVertexAttrib2s;
712        VertexAttrib2svProc _glVertexAttrib2sv;
713        VertexAttrib3dProc _glVertexAttrib3d;
714        VertexAttrib3dvProc _glVertexAttrib3dv;
715        VertexAttrib3fProc _glVertexAttrib3f;
716        VertexAttrib3fvProc _glVertexAttrib3fv;
717        VertexAttrib3sProc _glVertexAttrib3s;
718        VertexAttrib3svProc _glVertexAttrib3sv;
719        VertexAttrib4NbvProc _glVertexAttrib4Nbv;
720        VertexAttrib4NivProc _glVertexAttrib4Niv;
721        VertexAttrib4NsvProc _glVertexAttrib4Nsv;
722        VertexAttrib4NubProc _glVertexAttrib4Nub;
723        VertexAttrib4NubvProc _glVertexAttrib4Nubv;
724        VertexAttrib4NuivProc _glVertexAttrib4Nuiv;
725        VertexAttrib4NusvProc _glVertexAttrib4Nusv;
726        VertexAttrib4bvProc _glVertexAttrib4bv;
727        VertexAttrib4dProc _glVertexAttrib4d;
728        VertexAttrib4dvProc _glVertexAttrib4dv;
729        VertexAttrib4fProc _glVertexAttrib4f;
730        VertexAttrib4fvProc _glVertexAttrib4fv;
731        VertexAttrib4ivProc _glVertexAttrib4iv;
732        VertexAttrib4sProc _glVertexAttrib4s;
733        VertexAttrib4svProc _glVertexAttrib4sv;
734        VertexAttrib4ubvProc _glVertexAttrib4ubv;
735        VertexAttrib4uivProc _glVertexAttrib4uiv;
736        VertexAttrib4usvProc _glVertexAttrib4usv;
737        VertexAttribPointerProc _glVertexAttribPointer;
738
739        GetInfoLogARBProc _glGetInfoLogARB;
740        GetObjectParameterivARBProc _glGetObjectParameterivARB;
741        DeleteObjectARBProc _glDeleteObjectARB;
742        GetHandleProc _glGetHandleARB;
743
744        // GL 2.1
745        UniformMatrix2x3fvProc _glUniformMatrix2x3fv;
746        UniformMatrix3x2fvProc _glUniformMatrix3x2fv;
747        UniformMatrix2x4fvProc _glUniformMatrix2x4fv;
748        UniformMatrix4x2fvProc _glUniformMatrix4x2fv;
749        UniformMatrix3x4fvProc _glUniformMatrix3x4fv;
750        UniformMatrix4x3fvProc _glUniformMatrix4x3fv;
751
752        // EXT_geometry_shader4
753        ProgramParameteriProc _glProgramParameteri;
754        FramebufferTextureProc _glFramebufferTexture;
755        FramebufferTextureLayerProc _glFramebufferTextureLayer;
756        FramebufferTextureFaceProc _glFramebufferTextureFace;
757
758        // ARB_tesselation_shader
759        PatchParameteriProc _glPatchParameteri;
760        PatchParameterfvProc _glPatchParameterfv;
761
762        // EXT_gpu_shader4
763        GetUniformuivProc _glGetUniformuiv;
764        BindFragDataLocationProc _glBindFragDataLocation;
765        GetFragDataLocationProc _glGetFragDataLocation;
766        Uniform1uiProc _glUniform1ui;
767        Uniform2uiProc _glUniform2ui;
768        Uniform3uiProc _glUniform3ui;
769        Uniform4uiProc _glUniform4ui;
770        Uniform1uivProc _glUniform1uiv;
771        Uniform2uivProc _glUniform2uiv;
772        Uniform3uivProc _glUniform3uiv;
773        Uniform4uivProc _glUniform4uiv;
774
775        // ARB_uniform_buffer_object
776        GetUniformIndicesProc _glGetUniformIndices;
777        GetActiveUniformsivProc _glGetActiveUniformsiv;
778        GetActiveUniformNameProc _glGetActiveUniformName;
779        GetUniformBlockIndexProc _glGetUniformBlockIndex;
780        GetActiveUniformBlockivProc _glGetActiveUniformBlockiv;
781        GetActiveUniformBlockNameProc _glGetActiveUniformBlockName;
782        UniformBlockBindingProc _glUniformBlockBinding;
783
784        //ARB_get_program_binary
785        GetProgramBinaryProc _glGetProgramBinary;
786        ProgramBinaryProc _glProgramBinary;
787};
788
789}
790
791#endif
Note: See TracBrowser for help on using the browser.