1/*
2 * Copyright 2013 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#include <EGL/egl.h>
18#include "gl3stub.h"
19
20GLboolean gl3stubInit()
21{
22#define FIND_PROC(s) s = (void*)eglGetProcAddress(#s);
23    FIND_PROC( glReadBuffer );
24    FIND_PROC( glDrawRangeElements );
25    FIND_PROC( glTexImage3D );
26    FIND_PROC( glTexSubImage3D );
27    FIND_PROC( glCopyTexSubImage3D );
28    FIND_PROC( glCompressedTexImage3D );
29    FIND_PROC( glCompressedTexSubImage3D );
30    FIND_PROC( glGenQueries );
31    FIND_PROC( glDeleteQueries );
32    FIND_PROC( glIsQuery );
33    FIND_PROC( glBeginQuery );
34    FIND_PROC( glEndQuery );
35    FIND_PROC( glGetQueryiv );
36    FIND_PROC( glGetQueryObjectuiv );
37    FIND_PROC( glUnmapBuffer );
38    FIND_PROC( glGetBufferPointerv );
39    FIND_PROC( glDrawBuffers );
40    FIND_PROC( glUniformMatrix2x3fv );
41    FIND_PROC( glUniformMatrix3x2fv );
42    FIND_PROC( glUniformMatrix2x4fv );
43    FIND_PROC( glUniformMatrix4x2fv );
44    FIND_PROC( glUniformMatrix3x4fv );
45    FIND_PROC( glUniformMatrix4x3fv );
46    FIND_PROC( glBlitFramebuffer );
47    FIND_PROC( glRenderbufferStorageMultisample );
48    FIND_PROC( glFramebufferTextureLayer );
49    FIND_PROC( glMapBufferRange );
50    FIND_PROC( glFlushMappedBufferRange );
51    FIND_PROC( glBindVertexArray );
52    FIND_PROC( glDeleteVertexArrays );
53    FIND_PROC( glGenVertexArrays );
54    FIND_PROC( glIsVertexArray );
55    FIND_PROC( glGetIntegeri_v );
56    FIND_PROC( glBeginTransformFeedback );
57    FIND_PROC( glEndTransformFeedback );
58    FIND_PROC( glBindBufferRange );
59    FIND_PROC( glBindBufferBase );
60    FIND_PROC( glTransformFeedbackVaryings );
61    FIND_PROC( glGetTransformFeedbackVarying );
62    FIND_PROC( glVertexAttribIPointer );
63    FIND_PROC( glGetVertexAttribIiv );
64    FIND_PROC( glGetVertexAttribIuiv );
65    FIND_PROC( glVertexAttribI4i );
66    FIND_PROC( glVertexAttribI4ui );
67    FIND_PROC( glVertexAttribI4iv );
68    FIND_PROC( glVertexAttribI4uiv );
69    FIND_PROC( glGetUniformuiv );
70    FIND_PROC( glGetFragDataLocation );
71    FIND_PROC( glUniform1ui );
72    FIND_PROC( glUniform2ui );
73    FIND_PROC( glUniform3ui );
74    FIND_PROC( glUniform4ui );
75    FIND_PROC( glUniform1uiv );
76    FIND_PROC( glUniform2uiv );
77    FIND_PROC( glUniform3uiv );
78    FIND_PROC( glUniform4uiv );
79    FIND_PROC( glClearBufferiv );
80    FIND_PROC( glClearBufferuiv );
81    FIND_PROC( glClearBufferfv );
82    FIND_PROC( glClearBufferfi );
83    FIND_PROC( glGetStringi );
84    FIND_PROC( glCopyBufferSubData );
85    FIND_PROC( glGetUniformIndices );
86    FIND_PROC( glGetActiveUniformsiv );
87    FIND_PROC( glGetUniformBlockIndex );
88    FIND_PROC( glGetActiveUniformBlockiv );
89    FIND_PROC( glGetActiveUniformBlockName );
90    FIND_PROC( glUniformBlockBinding );
91    FIND_PROC( glDrawArraysInstanced );
92    FIND_PROC( glDrawElementsInstanced );
93    FIND_PROC( glFenceSync );
94    FIND_PROC( glIsSync );
95    FIND_PROC( glDeleteSync );
96    FIND_PROC( glClientWaitSync );
97    FIND_PROC( glWaitSync );
98    FIND_PROC( glGetInteger64v );
99    FIND_PROC( glGetSynciv );
100    FIND_PROC( glGetInteger64i_v );
101    FIND_PROC( glGetBufferParameteri64v );
102    FIND_PROC( glGenSamplers );
103    FIND_PROC( glDeleteSamplers );
104    FIND_PROC( glIsSampler );
105    FIND_PROC( glBindSampler );
106    FIND_PROC( glSamplerParameteri );
107    FIND_PROC( glSamplerParameteriv );
108    FIND_PROC( glSamplerParameterf );
109    FIND_PROC( glSamplerParameterfv );
110    FIND_PROC( glGetSamplerParameteriv );
111    FIND_PROC( glGetSamplerParameterfv );
112    FIND_PROC( glVertexAttribDivisor );
113    FIND_PROC( glBindTransformFeedback );
114    FIND_PROC( glDeleteTransformFeedbacks );
115    FIND_PROC( glGenTransformFeedbacks );
116    FIND_PROC( glIsTransformFeedback );
117    FIND_PROC( glPauseTransformFeedback );
118    FIND_PROC( glResumeTransformFeedback );
119    FIND_PROC( glGetProgramBinary );
120    FIND_PROC( glProgramBinary );
121    FIND_PROC( glProgramParameteri );
122    FIND_PROC( glInvalidateFramebuffer );
123    FIND_PROC( glInvalidateSubFramebuffer );
124    FIND_PROC( glTexStorage2D );
125    FIND_PROC( glTexStorage3D );
126    FIND_PROC( glGetInternalformativ );
127#undef FIND_PROC
128
129    if( !glReadBuffer || !glDrawRangeElements || !glTexImage3D || !glTexSubImage3D
130            || !glCopyTexSubImage3D || !glCompressedTexImage3D
131            || !glCompressedTexSubImage3D || !glGenQueries || !glDeleteQueries
132            || !glIsQuery || !glBeginQuery || !glEndQuery || !glGetQueryiv
133            || !glGetQueryObjectuiv || !glUnmapBuffer || !glGetBufferPointerv
134            || !glDrawBuffers || !glUniformMatrix2x3fv || !glUniformMatrix3x2fv
135            || !glUniformMatrix2x4fv || !glUniformMatrix4x2fv || !glUniformMatrix3x4fv
136            || !glUniformMatrix4x3fv || !glBlitFramebuffer
137            || !glRenderbufferStorageMultisample || !glFramebufferTextureLayer
138            || !glMapBufferRange || !glFlushMappedBufferRange || !glBindVertexArray
139            || !glDeleteVertexArrays || !glGenVertexArrays || !glIsVertexArray
140            || !glGetIntegeri_v || !glBeginTransformFeedback || !glEndTransformFeedback
141            || !glBindBufferRange || !glBindBufferBase || !glTransformFeedbackVaryings
142            || !glGetTransformFeedbackVarying || !glVertexAttribIPointer
143            || !glGetVertexAttribIiv || !glGetVertexAttribIuiv || !glVertexAttribI4i
144            || !glVertexAttribI4ui || !glVertexAttribI4iv || !glVertexAttribI4uiv
145            || !glGetUniformuiv || !glGetFragDataLocation || !glUniform1ui
146            || !glUniform2ui || !glUniform3ui || !glUniform4ui || !glUniform1uiv
147            || !glUniform2uiv || !glUniform3uiv || !glUniform4uiv || !glClearBufferiv
148            || !glClearBufferuiv || !glClearBufferfv || !glClearBufferfi || !glGetStringi
149            || !glCopyBufferSubData || !glGetUniformIndices || !glGetActiveUniformsiv
150            || !glGetUniformBlockIndex || !glGetActiveUniformBlockiv
151            || !glGetActiveUniformBlockName || !glUniformBlockBinding
152            || !glDrawArraysInstanced || !glDrawElementsInstanced || !glFenceSync
153            || !glIsSync || !glDeleteSync || !glClientWaitSync || !glWaitSync
154            || !glGetInteger64v || !glGetSynciv || !glGetInteger64i_v
155            || !glGetBufferParameteri64v || !glGenSamplers || !glDeleteSamplers
156            || !glIsSampler || !glBindSampler || !glSamplerParameteri
157            || !glSamplerParameteriv || !glSamplerParameterf || !glSamplerParameterfv
158            || !glGetSamplerParameteriv || !glGetSamplerParameterfv
159            || !glVertexAttribDivisor || !glBindTransformFeedback
160            || !glDeleteTransformFeedbacks || !glGenTransformFeedbacks
161            || !glIsTransformFeedback || !glPauseTransformFeedback
162            || !glResumeTransformFeedback || !glGetProgramBinary || !glProgramBinary
163            || !glProgramParameteri || !glInvalidateFramebuffer
164            || !glInvalidateSubFramebuffer || !glTexStorage2D || !glTexStorage3D
165            || !glGetInternalformativ )
166    {
167        return GL_FALSE;
168    }
169
170    return GL_TRUE;
171}
172
173/* Function pointer definitions */GL_APICALL void (* GL_APIENTRY glReadBuffer)( GLenum mode );
174GL_APICALL void (* GL_APIENTRY glDrawRangeElements)( GLenum mode,
175        GLuint start,
176        GLuint end,
177        GLsizei count,
178        GLenum type,
179        const GLvoid* indices );
180GL_APICALL void (* GL_APIENTRY glTexImage3D)( GLenum target,
181        GLint level,
182        GLint internalformat,
183        GLsizei width,
184        GLsizei height,
185        GLsizei depth,
186        GLint border,
187        GLenum format,
188        GLenum type,
189        const GLvoid* pixels );
190GL_APICALL void (* GL_APIENTRY glTexSubImage3D)( GLenum target,
191        GLint level,
192        GLint xoffset,
193        GLint yoffset,
194        GLint zoffset,
195        GLsizei width,
196        GLsizei height,
197        GLsizei depth,
198        GLenum format,
199        GLenum type,
200        const GLvoid* pixels );
201GL_APICALL void (* GL_APIENTRY glCopyTexSubImage3D)( GLenum target,
202        GLint level,
203        GLint xoffset,
204        GLint yoffset,
205        GLint zoffset,
206        GLint x,
207        GLint y,
208        GLsizei width,
209        GLsizei height );
210GL_APICALL void (* GL_APIENTRY glCompressedTexImage3D)( GLenum target,
211        GLint level,
212        GLenum internalformat,
213        GLsizei width,
214        GLsizei height,
215        GLsizei depth,
216        GLint border,
217        GLsizei imageSize,
218        const GLvoid* data );
219GL_APICALL void (* GL_APIENTRY glCompressedTexSubImage3D)( GLenum target,
220        GLint level,
221        GLint xoffset,
222        GLint yoffset,
223        GLint zoffset,
224        GLsizei width,
225        GLsizei height,
226        GLsizei depth,
227        GLenum format,
228        GLsizei imageSize,
229        const GLvoid* data );
230GL_APICALL void (* GL_APIENTRY glGenQueries)( GLsizei n, GLuint* ids );
231GL_APICALL void (* GL_APIENTRY glDeleteQueries)( GLsizei n, const GLuint* ids );
232GL_APICALL GLboolean (* GL_APIENTRY glIsQuery)( GLuint id );
233GL_APICALL void (* GL_APIENTRY glBeginQuery)( GLenum target, GLuint id );
234GL_APICALL void (* GL_APIENTRY glEndQuery)( GLenum target );
235GL_APICALL void (* GL_APIENTRY glGetQueryiv)( GLenum target, GLenum pname, GLint* params );
236GL_APICALL void (* GL_APIENTRY glGetQueryObjectuiv)( GLuint id,
237        GLenum pname,
238        GLuint* params );
239GL_APICALL GLboolean (* GL_APIENTRY glUnmapBuffer)( GLenum target );
240GL_APICALL void (* GL_APIENTRY glGetBufferPointerv)( GLenum target,
241        GLenum pname,
242        GLvoid** params );
243GL_APICALL void (* GL_APIENTRY glDrawBuffers)( GLsizei n, const GLenum* bufs );
244GL_APICALL void (* GL_APIENTRY glUniformMatrix2x3fv)( GLint location,
245        GLsizei count,
246        GLboolean transpose,
247        const GLfloat* value );
248GL_APICALL void (* GL_APIENTRY glUniformMatrix3x2fv)( GLint location,
249        GLsizei count,
250        GLboolean transpose,
251        const GLfloat* value );
252GL_APICALL void (* GL_APIENTRY glUniformMatrix2x4fv)( GLint location,
253        GLsizei count,
254        GLboolean transpose,
255        const GLfloat* value );
256GL_APICALL void (* GL_APIENTRY glUniformMatrix4x2fv)( GLint location,
257        GLsizei count,
258        GLboolean transpose,
259        const GLfloat* value );
260GL_APICALL void (* GL_APIENTRY glUniformMatrix3x4fv)( GLint location,
261        GLsizei count,
262        GLboolean transpose,
263        const GLfloat* value );
264GL_APICALL void (* GL_APIENTRY glUniformMatrix4x3fv)( GLint location,
265        GLsizei count,
266        GLboolean transpose,
267        const GLfloat* value );
268GL_APICALL void (* GL_APIENTRY glBlitFramebuffer)( GLint srcX0,
269        GLint srcY0,
270        GLint srcX1,
271        GLint srcY1,
272        GLint dstX0,
273        GLint dstY0,
274        GLint dstX1,
275        GLint dstY1,
276        GLbitfield mask,
277        GLenum filter );
278GL_APICALL void (* GL_APIENTRY glRenderbufferStorageMultisample)( GLenum target,
279        GLsizei samples,
280        GLenum internalformat,
281        GLsizei width,
282        GLsizei height );
283GL_APICALL void (* GL_APIENTRY glFramebufferTextureLayer)( GLenum target,
284        GLenum attachment,
285        GLuint texture,
286        GLint level,
287        GLint layer );
288GL_APICALL GLvoid* (* GL_APIENTRY glMapBufferRange)( GLenum target,
289        GLintptr offset,
290        GLsizeiptr length,
291        GLbitfield access );
292GL_APICALL void (* GL_APIENTRY glFlushMappedBufferRange)( GLenum target,
293        GLintptr offset,
294        GLsizeiptr length );
295GL_APICALL void (* GL_APIENTRY glBindVertexArray)( GLuint array );
296GL_APICALL void (* GL_APIENTRY glDeleteVertexArrays)( GLsizei n, const GLuint* arrays );
297GL_APICALL void (* GL_APIENTRY glGenVertexArrays)( GLsizei n, GLuint* arrays );
298GL_APICALL GLboolean (* GL_APIENTRY glIsVertexArray)( GLuint array );
299GL_APICALL void (* GL_APIENTRY glGetIntegeri_v)( GLenum target,
300        GLuint index,
301        GLint* data );
302GL_APICALL void (* GL_APIENTRY glBeginTransformFeedback)( GLenum primitiveMode );
303GL_APICALL void (* GL_APIENTRY glEndTransformFeedback)( void );
304GL_APICALL void (* GL_APIENTRY glBindBufferRange)( GLenum target,
305        GLuint index,
306        GLuint buffer,
307        GLintptr offset,
308        GLsizeiptr size );
309GL_APICALL void (* GL_APIENTRY glBindBufferBase)( GLenum target,
310        GLuint index,
311        GLuint buffer );
312GL_APICALL void (* GL_APIENTRY glTransformFeedbackVaryings)( GLuint program,
313        GLsizei count,
314        const GLchar* const * varyings,
315        GLenum bufferMode );
316GL_APICALL void (* GL_APIENTRY glGetTransformFeedbackVarying)( GLuint program,
317        GLuint index,
318        GLsizei bufSize,
319        GLsizei* length,
320        GLsizei* size,
321        GLenum* type,
322        GLchar* name );
323GL_APICALL void (* GL_APIENTRY glVertexAttribIPointer)( GLuint index,
324        GLint size,
325        GLenum type,
326        GLsizei stride,
327        const GLvoid* pointer );
328GL_APICALL void (* GL_APIENTRY glGetVertexAttribIiv)( GLuint index,
329        GLenum pname,
330        GLint* params );
331GL_APICALL void (* GL_APIENTRY glGetVertexAttribIuiv)( GLuint index,
332        GLenum pname,
333        GLuint* params );
334GL_APICALL void (* GL_APIENTRY glVertexAttribI4i)( GLuint index,
335        GLint x,
336        GLint y,
337        GLint z,
338        GLint w );
339GL_APICALL void (* GL_APIENTRY glVertexAttribI4ui)( GLuint index,
340        GLuint x,
341        GLuint y,
342        GLuint z,
343        GLuint w );
344GL_APICALL void (* GL_APIENTRY glVertexAttribI4iv)( GLuint index, const GLint* v );
345GL_APICALL void (* GL_APIENTRY glVertexAttribI4uiv)( GLuint index, const GLuint* v );
346GL_APICALL void (* GL_APIENTRY glGetUniformuiv)( GLuint program,
347        GLint location,
348        GLuint* params );
349GL_APICALL GLint (* GL_APIENTRY glGetFragDataLocation)( GLuint program,
350        const GLchar *name );
351GL_APICALL void (* GL_APIENTRY glUniform1ui)( GLint location, GLuint v0 );
352GL_APICALL void (* GL_APIENTRY glUniform2ui)( GLint location, GLuint v0, GLuint v1 );
353GL_APICALL void (* GL_APIENTRY glUniform3ui)( GLint location,
354        GLuint v0,
355        GLuint v1,
356        GLuint v2 );
357GL_APICALL void (* GL_APIENTRY glUniform4ui)( GLint location,
358        GLuint v0,
359        GLuint v1,
360        GLuint v2,
361        GLuint v3 );
362GL_APICALL void (* GL_APIENTRY glUniform1uiv)( GLint location,
363        GLsizei count,
364        const GLuint* value );
365GL_APICALL void (* GL_APIENTRY glUniform2uiv)( GLint location,
366        GLsizei count,
367        const GLuint* value );
368GL_APICALL void (* GL_APIENTRY glUniform3uiv)( GLint location,
369        GLsizei count,
370        const GLuint* value );
371GL_APICALL void (* GL_APIENTRY glUniform4uiv)( GLint location,
372        GLsizei count,
373        const GLuint* value );
374GL_APICALL void (* GL_APIENTRY glClearBufferiv)( GLenum buffer,
375        GLint drawbuffer,
376        const GLint* value );
377GL_APICALL void (* GL_APIENTRY glClearBufferuiv)( GLenum buffer,
378        GLint drawbuffer,
379        const GLuint* value );
380GL_APICALL void (* GL_APIENTRY glClearBufferfv)( GLenum buffer,
381        GLint drawbuffer,
382        const GLfloat* value );
383GL_APICALL void (* GL_APIENTRY glClearBufferfi)( GLenum buffer,
384        GLint drawbuffer,
385        GLfloat depth,
386        GLint stencil );
387GL_APICALL const GLubyte* (* GL_APIENTRY glGetStringi)( GLenum name, GLuint index );
388GL_APICALL void (* GL_APIENTRY glCopyBufferSubData)( GLenum readTarget,
389        GLenum writeTarget,
390        GLintptr readOffset,
391        GLintptr writeOffset,
392        GLsizeiptr size );
393GL_APICALL void (* GL_APIENTRY glGetUniformIndices)( GLuint program,
394        GLsizei uniformCount,
395        const GLchar* const * uniformNames,
396        GLuint* uniformIndices );
397GL_APICALL void (* GL_APIENTRY glGetActiveUniformsiv)( GLuint program,
398        GLsizei uniformCount,
399        const GLuint* uniformIndices,
400        GLenum pname,
401        GLint* params );
402GL_APICALL GLuint (* GL_APIENTRY glGetUniformBlockIndex)( GLuint program,
403        const GLchar* uniformBlockName );
404GL_APICALL void (* GL_APIENTRY glGetActiveUniformBlockiv)( GLuint program,
405        GLuint uniformBlockIndex,
406        GLenum pname,
407        GLint* params );
408GL_APICALL void (* GL_APIENTRY glGetActiveUniformBlockName)( GLuint program,
409        GLuint uniformBlockIndex,
410        GLsizei bufSize,
411        GLsizei* length,
412        GLchar* uniformBlockName );
413GL_APICALL void (* GL_APIENTRY glUniformBlockBinding)( GLuint program,
414        GLuint uniformBlockIndex,
415        GLuint uniformBlockBinding );
416GL_APICALL void (* GL_APIENTRY glDrawArraysInstanced)( GLenum mode,
417        GLint first,
418        GLsizei count,
419        GLsizei instanceCount );
420GL_APICALL void (* GL_APIENTRY glDrawElementsInstanced)( GLenum mode,
421        GLsizei count,
422        GLenum type,
423        const GLvoid* indices,
424        GLsizei instanceCount );
425GL_APICALL GLsync (* GL_APIENTRY glFenceSync)( GLenum condition, GLbitfield flags );
426GL_APICALL GLboolean (* GL_APIENTRY glIsSync)( GLsync sync );
427GL_APICALL void (* GL_APIENTRY glDeleteSync)( GLsync sync );
428GL_APICALL GLenum (* GL_APIENTRY glClientWaitSync)( GLsync sync,
429        GLbitfield flags,
430        GLuint64 timeout );
431GL_APICALL void (* GL_APIENTRY glWaitSync)( GLsync sync,
432        GLbitfield flags,
433        GLuint64 timeout );
434GL_APICALL void (* GL_APIENTRY glGetInteger64v)( GLenum pname, GLint64* params );
435GL_APICALL void (* GL_APIENTRY glGetSynciv)( GLsync sync,
436        GLenum pname,
437        GLsizei bufSize,
438        GLsizei* length,
439        GLint* values );
440GL_APICALL void (* GL_APIENTRY glGetInteger64i_v)( GLenum target,
441        GLuint index,
442        GLint64* data );
443GL_APICALL void (* GL_APIENTRY glGetBufferParameteri64v)( GLenum target,
444        GLenum pname,
445        GLint64* params );
446GL_APICALL void (* GL_APIENTRY glGenSamplers)( GLsizei count, GLuint* samplers );
447GL_APICALL void (* GL_APIENTRY glDeleteSamplers)( GLsizei count, const GLuint* samplers );
448GL_APICALL GLboolean (* GL_APIENTRY glIsSampler)( GLuint sampler );
449GL_APICALL void (* GL_APIENTRY glBindSampler)( GLuint unit, GLuint sampler );
450GL_APICALL void (* GL_APIENTRY glSamplerParameteri)( GLuint sampler,
451        GLenum pname,
452        GLint param );
453GL_APICALL void (* GL_APIENTRY glSamplerParameteriv)( GLuint sampler,
454        GLenum pname,
455        const GLint* param );
456GL_APICALL void (* GL_APIENTRY glSamplerParameterf)( GLuint sampler,
457        GLenum pname,
458        GLfloat param );
459GL_APICALL void (* GL_APIENTRY glSamplerParameterfv)( GLuint sampler,
460        GLenum pname,
461        const GLfloat* param );
462GL_APICALL void (* GL_APIENTRY glGetSamplerParameteriv)( GLuint sampler,
463        GLenum pname,
464        GLint* params );
465GL_APICALL void (* GL_APIENTRY glGetSamplerParameterfv)( GLuint sampler,
466        GLenum pname,
467        GLfloat* params );
468GL_APICALL void (* GL_APIENTRY glVertexAttribDivisor)( GLuint index, GLuint divisor );
469GL_APICALL void (* GL_APIENTRY glBindTransformFeedback)( GLenum target, GLuint id );
470GL_APICALL void (* GL_APIENTRY glDeleteTransformFeedbacks)( GLsizei n, const GLuint* ids );
471GL_APICALL void (* GL_APIENTRY glGenTransformFeedbacks)( GLsizei n, GLuint* ids );
472GL_APICALL GLboolean (* GL_APIENTRY glIsTransformFeedback)( GLuint id );
473GL_APICALL void (* GL_APIENTRY glPauseTransformFeedback)( void );
474GL_APICALL void (* GL_APIENTRY glResumeTransformFeedback)( void );
475GL_APICALL void (* GL_APIENTRY glGetProgramBinary)( GLuint program,
476        GLsizei bufSize,
477        GLsizei* length,
478        GLenum* binaryFormat,
479        GLvoid* binary );
480GL_APICALL void (* GL_APIENTRY glProgramBinary)( GLuint program,
481        GLenum binaryFormat,
482        const GLvoid* binary,
483        GLsizei length );
484GL_APICALL void (* GL_APIENTRY glProgramParameteri)( GLuint program,
485        GLenum pname,
486        GLint value );
487GL_APICALL void (* GL_APIENTRY glInvalidateFramebuffer)( GLenum target,
488        GLsizei numAttachments,
489        const GLenum* attachments );
490GL_APICALL void (* GL_APIENTRY glInvalidateSubFramebuffer)( GLenum target,
491        GLsizei numAttachments,
492        const GLenum* attachments,
493        GLint x,
494        GLint y,
495        GLsizei width,
496        GLsizei height );
497GL_APICALL void (* GL_APIENTRY glTexStorage2D)( GLenum target,
498        GLsizei levels,
499        GLenum internalformat,
500        GLsizei width,
501        GLsizei height );
502GL_APICALL void (* GL_APIENTRY glTexStorage3D)( GLenum target,
503        GLsizei levels,
504        GLenum internalformat,
505        GLsizei width,
506        GLsizei height,
507        GLsizei depth );
508GL_APICALL void (* GL_APIENTRY glGetInternalformativ)( GLenum target,
509        GLenum internalformat,
510        GLenum pname,
511        GLsizei bufSize,
512        GLint* params );
513