/*
 * Copyright 2013 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include <EGL/egl.h>
#include "gl3stub.h"

GLboolean gl3stubInit()
{
#define FIND_PROC(s) s = (void*)eglGetProcAddress(#s);
    FIND_PROC( glReadBuffer );
    FIND_PROC( glDrawRangeElements );
    FIND_PROC( glTexImage3D );
    FIND_PROC( glTexSubImage3D );
    FIND_PROC( glCopyTexSubImage3D );
    FIND_PROC( glCompressedTexImage3D );
    FIND_PROC( glCompressedTexSubImage3D );
    FIND_PROC( glGenQueries );
    FIND_PROC( glDeleteQueries );
    FIND_PROC( glIsQuery );
    FIND_PROC( glBeginQuery );
    FIND_PROC( glEndQuery );
    FIND_PROC( glGetQueryiv );
    FIND_PROC( glGetQueryObjectuiv );
    FIND_PROC( glUnmapBuffer );
    FIND_PROC( glGetBufferPointerv );
    FIND_PROC( glDrawBuffers );
    FIND_PROC( glUniformMatrix2x3fv );
    FIND_PROC( glUniformMatrix3x2fv );
    FIND_PROC( glUniformMatrix2x4fv );
    FIND_PROC( glUniformMatrix4x2fv );
    FIND_PROC( glUniformMatrix3x4fv );
    FIND_PROC( glUniformMatrix4x3fv );
    FIND_PROC( glBlitFramebuffer );
    FIND_PROC( glRenderbufferStorageMultisample );
    FIND_PROC( glFramebufferTextureLayer );
    FIND_PROC( glMapBufferRange );
    FIND_PROC( glFlushMappedBufferRange );
    FIND_PROC( glBindVertexArray );
    FIND_PROC( glDeleteVertexArrays );
    FIND_PROC( glGenVertexArrays );
    FIND_PROC( glIsVertexArray );
    FIND_PROC( glGetIntegeri_v );
    FIND_PROC( glBeginTransformFeedback );
    FIND_PROC( glEndTransformFeedback );
    FIND_PROC( glBindBufferRange );
    FIND_PROC( glBindBufferBase );
    FIND_PROC( glTransformFeedbackVaryings );
    FIND_PROC( glGetTransformFeedbackVarying );
    FIND_PROC( glVertexAttribIPointer );
    FIND_PROC( glGetVertexAttribIiv );
    FIND_PROC( glGetVertexAttribIuiv );
    FIND_PROC( glVertexAttribI4i );
    FIND_PROC( glVertexAttribI4ui );
    FIND_PROC( glVertexAttribI4iv );
    FIND_PROC( glVertexAttribI4uiv );
    FIND_PROC( glGetUniformuiv );
    FIND_PROC( glGetFragDataLocation );
    FIND_PROC( glUniform1ui );
    FIND_PROC( glUniform2ui );
    FIND_PROC( glUniform3ui );
    FIND_PROC( glUniform4ui );
    FIND_PROC( glUniform1uiv );
    FIND_PROC( glUniform2uiv );
    FIND_PROC( glUniform3uiv );
    FIND_PROC( glUniform4uiv );
    FIND_PROC( glClearBufferiv );
    FIND_PROC( glClearBufferuiv );
    FIND_PROC( glClearBufferfv );
    FIND_PROC( glClearBufferfi );
    FIND_PROC( glGetStringi );
    FIND_PROC( glCopyBufferSubData );
    FIND_PROC( glGetUniformIndices );
    FIND_PROC( glGetActiveUniformsiv );
    FIND_PROC( glGetUniformBlockIndex );
    FIND_PROC( glGetActiveUniformBlockiv );
    FIND_PROC( glGetActiveUniformBlockName );
    FIND_PROC( glUniformBlockBinding );
    FIND_PROC( glDrawArraysInstanced );
    FIND_PROC( glDrawElementsInstanced );
    FIND_PROC( glFenceSync );
    FIND_PROC( glIsSync );
    FIND_PROC( glDeleteSync );
    FIND_PROC( glClientWaitSync );
    FIND_PROC( glWaitSync );
    FIND_PROC( glGetInteger64v );
    FIND_PROC( glGetSynciv );
    FIND_PROC( glGetInteger64i_v );
    FIND_PROC( glGetBufferParameteri64v );
    FIND_PROC( glGenSamplers );
    FIND_PROC( glDeleteSamplers );
    FIND_PROC( glIsSampler );
    FIND_PROC( glBindSampler );
    FIND_PROC( glSamplerParameteri );
    FIND_PROC( glSamplerParameteriv );
    FIND_PROC( glSamplerParameterf );
    FIND_PROC( glSamplerParameterfv );
    FIND_PROC( glGetSamplerParameteriv );
    FIND_PROC( glGetSamplerParameterfv );
    FIND_PROC( glVertexAttribDivisor );
    FIND_PROC( glBindTransformFeedback );
    FIND_PROC( glDeleteTransformFeedbacks );
    FIND_PROC( glGenTransformFeedbacks );
    FIND_PROC( glIsTransformFeedback );
    FIND_PROC( glPauseTransformFeedback );
    FIND_PROC( glResumeTransformFeedback );
    FIND_PROC( glGetProgramBinary );
    FIND_PROC( glProgramBinary );
    FIND_PROC( glProgramParameteri );
    FIND_PROC( glInvalidateFramebuffer );
    FIND_PROC( glInvalidateSubFramebuffer );
    FIND_PROC( glTexStorage2D );
    FIND_PROC( glTexStorage3D );
    FIND_PROC( glGetInternalformativ );
#undef FIND_PROC

    if( !glReadBuffer || !glDrawRangeElements || !glTexImage3D || !glTexSubImage3D
            || !glCopyTexSubImage3D || !glCompressedTexImage3D
            || !glCompressedTexSubImage3D || !glGenQueries || !glDeleteQueries
            || !glIsQuery || !glBeginQuery || !glEndQuery || !glGetQueryiv
            || !glGetQueryObjectuiv || !glUnmapBuffer || !glGetBufferPointerv
            || !glDrawBuffers || !glUniformMatrix2x3fv || !glUniformMatrix3x2fv
            || !glUniformMatrix2x4fv || !glUniformMatrix4x2fv || !glUniformMatrix3x4fv
            || !glUniformMatrix4x3fv || !glBlitFramebuffer
            || !glRenderbufferStorageMultisample || !glFramebufferTextureLayer
            || !glMapBufferRange || !glFlushMappedBufferRange || !glBindVertexArray
            || !glDeleteVertexArrays || !glGenVertexArrays || !glIsVertexArray
            || !glGetIntegeri_v || !glBeginTransformFeedback || !glEndTransformFeedback
            || !glBindBufferRange || !glBindBufferBase || !glTransformFeedbackVaryings
            || !glGetTransformFeedbackVarying || !glVertexAttribIPointer
            || !glGetVertexAttribIiv || !glGetVertexAttribIuiv || !glVertexAttribI4i
            || !glVertexAttribI4ui || !glVertexAttribI4iv || !glVertexAttribI4uiv
            || !glGetUniformuiv || !glGetFragDataLocation || !glUniform1ui
            || !glUniform2ui || !glUniform3ui || !glUniform4ui || !glUniform1uiv
            || !glUniform2uiv || !glUniform3uiv || !glUniform4uiv || !glClearBufferiv
            || !glClearBufferuiv || !glClearBufferfv || !glClearBufferfi || !glGetStringi
            || !glCopyBufferSubData || !glGetUniformIndices || !glGetActiveUniformsiv
            || !glGetUniformBlockIndex || !glGetActiveUniformBlockiv
            || !glGetActiveUniformBlockName || !glUniformBlockBinding
            || !glDrawArraysInstanced || !glDrawElementsInstanced || !glFenceSync
            || !glIsSync || !glDeleteSync || !glClientWaitSync || !glWaitSync
            || !glGetInteger64v || !glGetSynciv || !glGetInteger64i_v
            || !glGetBufferParameteri64v || !glGenSamplers || !glDeleteSamplers
            || !glIsSampler || !glBindSampler || !glSamplerParameteri
            || !glSamplerParameteriv || !glSamplerParameterf || !glSamplerParameterfv
            || !glGetSamplerParameteriv || !glGetSamplerParameterfv
            || !glVertexAttribDivisor || !glBindTransformFeedback
            || !glDeleteTransformFeedbacks || !glGenTransformFeedbacks
            || !glIsTransformFeedback || !glPauseTransformFeedback
            || !glResumeTransformFeedback || !glGetProgramBinary || !glProgramBinary
            || !glProgramParameteri || !glInvalidateFramebuffer
            || !glInvalidateSubFramebuffer || !glTexStorage2D || !glTexStorage3D
            || !glGetInternalformativ )
    {
        return GL_FALSE;
    }

    return GL_TRUE;
}

/* Function pointer definitions */GL_APICALL void (* GL_APIENTRY glReadBuffer)( GLenum mode );
GL_APICALL void (* GL_APIENTRY glDrawRangeElements)( GLenum mode,
        GLuint start,
        GLuint end,
        GLsizei count,
        GLenum type,
        const GLvoid* indices );
GL_APICALL void (* GL_APIENTRY glTexImage3D)( GLenum target,
        GLint level,
        GLint internalformat,
        GLsizei width,
        GLsizei height,
        GLsizei depth,
        GLint border,
        GLenum format,
        GLenum type,
        const GLvoid* pixels );
GL_APICALL void (* GL_APIENTRY glTexSubImage3D)( GLenum target,
        GLint level,
        GLint xoffset,
        GLint yoffset,
        GLint zoffset,
        GLsizei width,
        GLsizei height,
        GLsizei depth,
        GLenum format,
        GLenum type,
        const GLvoid* pixels );
GL_APICALL void (* GL_APIENTRY glCopyTexSubImage3D)( GLenum target,
        GLint level,
        GLint xoffset,
        GLint yoffset,
        GLint zoffset,
        GLint x,
        GLint y,
        GLsizei width,
        GLsizei height );
GL_APICALL void (* GL_APIENTRY glCompressedTexImage3D)( GLenum target,
        GLint level,
        GLenum internalformat,
        GLsizei width,
        GLsizei height,
        GLsizei depth,
        GLint border,
        GLsizei imageSize,
        const GLvoid* data );
GL_APICALL void (* GL_APIENTRY glCompressedTexSubImage3D)( GLenum target,
        GLint level,
        GLint xoffset,
        GLint yoffset,
        GLint zoffset,
        GLsizei width,
        GLsizei height,
        GLsizei depth,
        GLenum format,
        GLsizei imageSize,
        const GLvoid* data );
GL_APICALL void (* GL_APIENTRY glGenQueries)( GLsizei n, GLuint* ids );
GL_APICALL void (* GL_APIENTRY glDeleteQueries)( GLsizei n, const GLuint* ids );
GL_APICALL GLboolean (* GL_APIENTRY glIsQuery)( GLuint id );
GL_APICALL void (* GL_APIENTRY glBeginQuery)( GLenum target, GLuint id );
GL_APICALL void (* GL_APIENTRY glEndQuery)( GLenum target );
GL_APICALL void (* GL_APIENTRY glGetQueryiv)( GLenum target, GLenum pname, GLint* params );
GL_APICALL void (* GL_APIENTRY glGetQueryObjectuiv)( GLuint id,
        GLenum pname,
        GLuint* params );
GL_APICALL GLboolean (* GL_APIENTRY glUnmapBuffer)( GLenum target );
GL_APICALL void (* GL_APIENTRY glGetBufferPointerv)( GLenum target,
        GLenum pname,
        GLvoid** params );
GL_APICALL void (* GL_APIENTRY glDrawBuffers)( GLsizei n, const GLenum* bufs );
GL_APICALL void (* GL_APIENTRY glUniformMatrix2x3fv)( GLint location,
        GLsizei count,
        GLboolean transpose,
        const GLfloat* value );
GL_APICALL void (* GL_APIENTRY glUniformMatrix3x2fv)( GLint location,
        GLsizei count,
        GLboolean transpose,
        const GLfloat* value );
GL_APICALL void (* GL_APIENTRY glUniformMatrix2x4fv)( GLint location,
        GLsizei count,
        GLboolean transpose,
        const GLfloat* value );
GL_APICALL void (* GL_APIENTRY glUniformMatrix4x2fv)( GLint location,
        GLsizei count,
        GLboolean transpose,
        const GLfloat* value );
GL_APICALL void (* GL_APIENTRY glUniformMatrix3x4fv)( GLint location,
        GLsizei count,
        GLboolean transpose,
        const GLfloat* value );
GL_APICALL void (* GL_APIENTRY glUniformMatrix4x3fv)( GLint location,
        GLsizei count,
        GLboolean transpose,
        const GLfloat* value );
GL_APICALL void (* GL_APIENTRY glBlitFramebuffer)( GLint srcX0,
        GLint srcY0,
        GLint srcX1,
        GLint srcY1,
        GLint dstX0,
        GLint dstY0,
        GLint dstX1,
        GLint dstY1,
        GLbitfield mask,
        GLenum filter );
GL_APICALL void (* GL_APIENTRY glRenderbufferStorageMultisample)( GLenum target,
        GLsizei samples,
        GLenum internalformat,
        GLsizei width,
        GLsizei height );
GL_APICALL void (* GL_APIENTRY glFramebufferTextureLayer)( GLenum target,
        GLenum attachment,
        GLuint texture,
        GLint level,
        GLint layer );
GL_APICALL GLvoid* (* GL_APIENTRY glMapBufferRange)( GLenum target,
        GLintptr offset,
        GLsizeiptr length,
        GLbitfield access );
GL_APICALL void (* GL_APIENTRY glFlushMappedBufferRange)( GLenum target,
        GLintptr offset,
        GLsizeiptr length );
GL_APICALL void (* GL_APIENTRY glBindVertexArray)( GLuint array );
GL_APICALL void (* GL_APIENTRY glDeleteVertexArrays)( GLsizei n, const GLuint* arrays );
GL_APICALL void (* GL_APIENTRY glGenVertexArrays)( GLsizei n, GLuint* arrays );
GL_APICALL GLboolean (* GL_APIENTRY glIsVertexArray)( GLuint array );
GL_APICALL void (* GL_APIENTRY glGetIntegeri_v)( GLenum target,
        GLuint index,
        GLint* data );
GL_APICALL void (* GL_APIENTRY glBeginTransformFeedback)( GLenum primitiveMode );
GL_APICALL void (* GL_APIENTRY glEndTransformFeedback)( void );
GL_APICALL void (* GL_APIENTRY glBindBufferRange)( GLenum target,
        GLuint index,
        GLuint buffer,
        GLintptr offset,
        GLsizeiptr size );
GL_APICALL void (* GL_APIENTRY glBindBufferBase)( GLenum target,
        GLuint index,
        GLuint buffer );
GL_APICALL void (* GL_APIENTRY glTransformFeedbackVaryings)( GLuint program,
        GLsizei count,
        const GLchar* const * varyings,
        GLenum bufferMode );
GL_APICALL void (* GL_APIENTRY glGetTransformFeedbackVarying)( GLuint program,
        GLuint index,
        GLsizei bufSize,
        GLsizei* length,
        GLsizei* size,
        GLenum* type,
        GLchar* name );
GL_APICALL void (* GL_APIENTRY glVertexAttribIPointer)( GLuint index,
        GLint size,
        GLenum type,
        GLsizei stride,
        const GLvoid* pointer );
GL_APICALL void (* GL_APIENTRY glGetVertexAttribIiv)( GLuint index,
        GLenum pname,
        GLint* params );
GL_APICALL void (* GL_APIENTRY glGetVertexAttribIuiv)( GLuint index,
        GLenum pname,
        GLuint* params );
GL_APICALL void (* GL_APIENTRY glVertexAttribI4i)( GLuint index,
        GLint x,
        GLint y,
        GLint z,
        GLint w );
GL_APICALL void (* GL_APIENTRY glVertexAttribI4ui)( GLuint index,
        GLuint x,
        GLuint y,
        GLuint z,
        GLuint w );
GL_APICALL void (* GL_APIENTRY glVertexAttribI4iv)( GLuint index, const GLint* v );
GL_APICALL void (* GL_APIENTRY glVertexAttribI4uiv)( GLuint index, const GLuint* v );
GL_APICALL void (* GL_APIENTRY glGetUniformuiv)( GLuint program,
        GLint location,
        GLuint* params );
GL_APICALL GLint (* GL_APIENTRY glGetFragDataLocation)( GLuint program,
        const GLchar *name );
GL_APICALL void (* GL_APIENTRY glUniform1ui)( GLint location, GLuint v0 );
GL_APICALL void (* GL_APIENTRY glUniform2ui)( GLint location, GLuint v0, GLuint v1 );
GL_APICALL void (* GL_APIENTRY glUniform3ui)( GLint location,
        GLuint v0,
        GLuint v1,
        GLuint v2 );
GL_APICALL void (* GL_APIENTRY glUniform4ui)( GLint location,
        GLuint v0,
        GLuint v1,
        GLuint v2,
        GLuint v3 );
GL_APICALL void (* GL_APIENTRY glUniform1uiv)( GLint location,
        GLsizei count,
        const GLuint* value );
GL_APICALL void (* GL_APIENTRY glUniform2uiv)( GLint location,
        GLsizei count,
        const GLuint* value );
GL_APICALL void (* GL_APIENTRY glUniform3uiv)( GLint location,
        GLsizei count,
        const GLuint* value );
GL_APICALL void (* GL_APIENTRY glUniform4uiv)( GLint location,
        GLsizei count,
        const GLuint* value );
GL_APICALL void (* GL_APIENTRY glClearBufferiv)( GLenum buffer,
        GLint drawbuffer,
        const GLint* value );
GL_APICALL void (* GL_APIENTRY glClearBufferuiv)( GLenum buffer,
        GLint drawbuffer,
        const GLuint* value );
GL_APICALL void (* GL_APIENTRY glClearBufferfv)( GLenum buffer,
        GLint drawbuffer,
        const GLfloat* value );
GL_APICALL void (* GL_APIENTRY glClearBufferfi)( GLenum buffer,
        GLint drawbuffer,
        GLfloat depth,
        GLint stencil );
GL_APICALL const GLubyte* (* GL_APIENTRY glGetStringi)( GLenum name, GLuint index );
GL_APICALL void (* GL_APIENTRY glCopyBufferSubData)( GLenum readTarget,
        GLenum writeTarget,
        GLintptr readOffset,
        GLintptr writeOffset,
        GLsizeiptr size );
GL_APICALL void (* GL_APIENTRY glGetUniformIndices)( GLuint program,
        GLsizei uniformCount,
        const GLchar* const * uniformNames,
        GLuint* uniformIndices );
GL_APICALL void (* GL_APIENTRY glGetActiveUniformsiv)( GLuint program,
        GLsizei uniformCount,
        const GLuint* uniformIndices,
        GLenum pname,
        GLint* params );
GL_APICALL GLuint (* GL_APIENTRY glGetUniformBlockIndex)( GLuint program,
        const GLchar* uniformBlockName );
GL_APICALL void (* GL_APIENTRY glGetActiveUniformBlockiv)( GLuint program,
        GLuint uniformBlockIndex,
        GLenum pname,
        GLint* params );
GL_APICALL void (* GL_APIENTRY glGetActiveUniformBlockName)( GLuint program,
        GLuint uniformBlockIndex,
        GLsizei bufSize,
        GLsizei* length,
        GLchar* uniformBlockName );
GL_APICALL void (* GL_APIENTRY glUniformBlockBinding)( GLuint program,
        GLuint uniformBlockIndex,
        GLuint uniformBlockBinding );
GL_APICALL void (* GL_APIENTRY glDrawArraysInstanced)( GLenum mode,
        GLint first,
        GLsizei count,
        GLsizei instanceCount );
GL_APICALL void (* GL_APIENTRY glDrawElementsInstanced)( GLenum mode,
        GLsizei count,
        GLenum type,
        const GLvoid* indices,
        GLsizei instanceCount );
GL_APICALL GLsync (* GL_APIENTRY glFenceSync)( GLenum condition, GLbitfield flags );
GL_APICALL GLboolean (* GL_APIENTRY glIsSync)( GLsync sync );
GL_APICALL void (* GL_APIENTRY glDeleteSync)( GLsync sync );
GL_APICALL GLenum (* GL_APIENTRY glClientWaitSync)( GLsync sync,
        GLbitfield flags,
        GLuint64 timeout );
GL_APICALL void (* GL_APIENTRY glWaitSync)( GLsync sync,
        GLbitfield flags,
        GLuint64 timeout );
GL_APICALL void (* GL_APIENTRY glGetInteger64v)( GLenum pname, GLint64* params );
GL_APICALL void (* GL_APIENTRY glGetSynciv)( GLsync sync,
        GLenum pname,
        GLsizei bufSize,
        GLsizei* length,
        GLint* values );
GL_APICALL void (* GL_APIENTRY glGetInteger64i_v)( GLenum target,
        GLuint index,
        GLint64* data );
GL_APICALL void (* GL_APIENTRY glGetBufferParameteri64v)( GLenum target,
        GLenum pname,
        GLint64* params );
GL_APICALL void (* GL_APIENTRY glGenSamplers)( GLsizei count, GLuint* samplers );
GL_APICALL void (* GL_APIENTRY glDeleteSamplers)( GLsizei count, const GLuint* samplers );
GL_APICALL GLboolean (* GL_APIENTRY glIsSampler)( GLuint sampler );
GL_APICALL void (* GL_APIENTRY glBindSampler)( GLuint unit, GLuint sampler );
GL_APICALL void (* GL_APIENTRY glSamplerParameteri)( GLuint sampler,
        GLenum pname,
        GLint param );
GL_APICALL void (* GL_APIENTRY glSamplerParameteriv)( GLuint sampler,
        GLenum pname,
        const GLint* param );
GL_APICALL void (* GL_APIENTRY glSamplerParameterf)( GLuint sampler,
        GLenum pname,
        GLfloat param );
GL_APICALL void (* GL_APIENTRY glSamplerParameterfv)( GLuint sampler,
        GLenum pname,
        const GLfloat* param );
GL_APICALL void (* GL_APIENTRY glGetSamplerParameteriv)( GLuint sampler,
        GLenum pname,
        GLint* params );
GL_APICALL void (* GL_APIENTRY glGetSamplerParameterfv)( GLuint sampler,
        GLenum pname,
        GLfloat* params );
GL_APICALL void (* GL_APIENTRY glVertexAttribDivisor)( GLuint index, GLuint divisor );
GL_APICALL void (* GL_APIENTRY glBindTransformFeedback)( GLenum target, GLuint id );
GL_APICALL void (* GL_APIENTRY glDeleteTransformFeedbacks)( GLsizei n, const GLuint* ids );
GL_APICALL void (* GL_APIENTRY glGenTransformFeedbacks)( GLsizei n, GLuint* ids );
GL_APICALL GLboolean (* GL_APIENTRY glIsTransformFeedback)( GLuint id );
GL_APICALL void (* GL_APIENTRY glPauseTransformFeedback)( void );
GL_APICALL void (* GL_APIENTRY glResumeTransformFeedback)( void );
GL_APICALL void (* GL_APIENTRY glGetProgramBinary)( GLuint program,
        GLsizei bufSize,
        GLsizei* length,
        GLenum* binaryFormat,
        GLvoid* binary );
GL_APICALL void (* GL_APIENTRY glProgramBinary)( GLuint program,
        GLenum binaryFormat,
        const GLvoid* binary,
        GLsizei length );
GL_APICALL void (* GL_APIENTRY glProgramParameteri)( GLuint program,
        GLenum pname,
        GLint value );
GL_APICALL void (* GL_APIENTRY glInvalidateFramebuffer)( GLenum target,
        GLsizei numAttachments,
        const GLenum* attachments );
GL_APICALL void (* GL_APIENTRY glInvalidateSubFramebuffer)( GLenum target,
        GLsizei numAttachments,
        const GLenum* attachments,
        GLint x,
        GLint y,
        GLsizei width,
        GLsizei height );
GL_APICALL void (* GL_APIENTRY glTexStorage2D)( GLenum target,
        GLsizei levels,
        GLenum internalformat,
        GLsizei width,
        GLsizei height );
GL_APICALL void (* GL_APIENTRY glTexStorage3D)( GLenum target,
        GLsizei levels,
        GLenum internalformat,
        GLsizei width,
        GLsizei height,
        GLsizei depth );
GL_APICALL void (* GL_APIENTRY glGetInternalformativ)( GLenum target,
        GLenum internalformat,
        GLenum pname,
        GLsizei bufSize,
        GLint* params );
