| /* |
| * 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 "gl3stub.h" |
| #include <dlfcn.h> |
| |
| |
| GLboolean gl3stubInit() { |
| void* so = dlopen("libGLESv3.so", RTLD_NOW | RTLD_GLOBAL); |
| if (!so) |
| return GL_FALSE; |
| |
| #define DLSYM(s) s = dlsym(so, #s) |
| DLSYM(glReadBuffer); |
| DLSYM(glDrawRangeElements); |
| DLSYM(glTexImage3D); |
| DLSYM(glTexSubImage3D); |
| DLSYM(glCopyTexSubImage3D); |
| DLSYM(glCompressedTexImage3D); |
| DLSYM(glCompressedTexSubImage3D); |
| DLSYM(glGenQueries); |
| DLSYM(glDeleteQueries); |
| DLSYM(glIsQuery); |
| DLSYM(glBeginQuery); |
| DLSYM(glEndQuery); |
| DLSYM(glGetQueryiv); |
| DLSYM(glGetQueryObjectuiv); |
| DLSYM(glUnmapBuffer); |
| DLSYM(glGetBufferPointerv); |
| DLSYM(glDrawBuffers); |
| DLSYM(glUniformMatrix2x3fv); |
| DLSYM(glUniformMatrix3x2fv); |
| DLSYM(glUniformMatrix2x4fv); |
| DLSYM(glUniformMatrix4x2fv); |
| DLSYM(glUniformMatrix3x4fv); |
| DLSYM(glUniformMatrix4x3fv); |
| DLSYM(glBlitFramebuffer); |
| DLSYM(glRenderbufferStorageMultisample); |
| DLSYM(glFramebufferTextureLayer); |
| DLSYM(glMapBufferRange); |
| DLSYM(glFlushMappedBufferRange); |
| DLSYM(glBindVertexArray); |
| DLSYM(glDeleteVertexArrays); |
| DLSYM(glGenVertexArrays); |
| DLSYM(glIsVertexArray); |
| DLSYM(glGetIntegeri_v); |
| DLSYM(glBeginTransformFeedback); |
| DLSYM(glEndTransformFeedback); |
| DLSYM(glBindBufferRange); |
| DLSYM(glBindBufferBase); |
| DLSYM(glTransformFeedbackVaryings); |
| DLSYM(glGetTransformFeedbackVarying); |
| DLSYM(glVertexAttribIPointer); |
| DLSYM(glGetVertexAttribIiv); |
| DLSYM(glGetVertexAttribIuiv); |
| DLSYM(glVertexAttribI4i); |
| DLSYM(glVertexAttribI4ui); |
| DLSYM(glVertexAttribI4iv); |
| DLSYM(glVertexAttribI4uiv); |
| DLSYM(glGetUniformuiv); |
| DLSYM(glGetFragDataLocation); |
| DLSYM(glUniform1ui); |
| DLSYM(glUniform2ui); |
| DLSYM(glUniform3ui); |
| DLSYM(glUniform4ui); |
| DLSYM(glUniform1uiv); |
| DLSYM(glUniform2uiv); |
| DLSYM(glUniform3uiv); |
| DLSYM(glUniform4uiv); |
| DLSYM(glClearBufferiv); |
| DLSYM(glClearBufferuiv); |
| DLSYM(glClearBufferfv); |
| DLSYM(glClearBufferfi); |
| DLSYM(glGetStringi); |
| DLSYM(glCopyBufferSubData); |
| DLSYM(glGetUniformIndices); |
| DLSYM(glGetActiveUniformsiv); |
| DLSYM(glGetUniformBlockIndex); |
| DLSYM(glGetActiveUniformBlockiv); |
| DLSYM(glGetActiveUniformBlockName); |
| DLSYM(glUniformBlockBinding); |
| DLSYM(glDrawArraysInstanced); |
| DLSYM(glDrawElementsInstanced); |
| DLSYM(glFenceSync); |
| DLSYM(glIsSync); |
| DLSYM(glDeleteSync); |
| DLSYM(glClientWaitSync); |
| DLSYM(glWaitSync); |
| DLSYM(glGetInteger64v); |
| DLSYM(glGetSynciv); |
| DLSYM(glGetInteger64i_v); |
| DLSYM(glGetBufferParameteri64v); |
| DLSYM(glGenSamplers); |
| DLSYM(glDeleteSamplers); |
| DLSYM(glIsSampler); |
| DLSYM(glBindSampler); |
| DLSYM(glSamplerParameteri); |
| DLSYM(glSamplerParameteriv); |
| DLSYM(glSamplerParameterf); |
| DLSYM(glSamplerParameterfv); |
| DLSYM(glGetSamplerParameteriv); |
| DLSYM(glGetSamplerParameterfv); |
| DLSYM(glVertexAttribDivisor); |
| DLSYM(glBindTransformFeedback); |
| DLSYM(glDeleteTransformFeedbacks); |
| DLSYM(glGenTransformFeedbacks); |
| DLSYM(glIsTransformFeedback); |
| DLSYM(glPauseTransformFeedback); |
| DLSYM(glResumeTransformFeedback); |
| DLSYM(glGetProgramBinary); |
| DLSYM(glProgramBinary); |
| DLSYM(glProgramParameteri); |
| DLSYM(glInvalidateFramebuffer); |
| DLSYM(glInvalidateSubFramebuffer); |
| DLSYM(glTexStorage2D); |
| DLSYM(glTexStorage3D); |
| DLSYM(glGetInternalformativ); |
| #undef DLSYM |
| |
| 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) |
| { |
| dlclose(so); |
| 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); |