// Copyright (c) 2009 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // This file contains the implementation of pglGetProcAddress #include #include extern "C" { typedef void (*PGLFunctionPointer)(void); struct PGLFunctionInfo { PGLFunctionPointer func; char const * const name; }; void (*pglGetProcAddress(char const * procname))() { static const struct PGLFunctionInfo gl_functions[] = { { (PGLFunctionPointer)(&glActiveTexture), "glActiveTexture", }, { (PGLFunctionPointer)(&glAttachShader), "glAttachShader", }, { (PGLFunctionPointer)(&glBindAttribLocation), "glBindAttribLocation", }, { (PGLFunctionPointer)(&glBindBuffer), "glBindBuffer", }, { (PGLFunctionPointer)(&glBindFramebuffer), "glBindFramebuffer", }, { (PGLFunctionPointer)(&glBindRenderbuffer), "glBindRenderbuffer", }, { (PGLFunctionPointer)(&glBindTexture), "glBindTexture", }, { (PGLFunctionPointer)(&glBlendColor), "glBlendColor", }, { (PGLFunctionPointer)(&glBlendEquation), "glBlendEquation", }, { (PGLFunctionPointer)(&glBlendEquationSeparate), "glBlendEquationSeparate", }, { (PGLFunctionPointer)(&glBlendFunc), "glBlendFunc", }, { (PGLFunctionPointer)(&glBlendFuncSeparate), "glBlendFuncSeparate", }, { (PGLFunctionPointer)(&glBufferData), "glBufferData", }, { (PGLFunctionPointer)(&glBufferSubData), "glBufferSubData", }, { (PGLFunctionPointer)(&glCheckFramebufferStatus), "glCheckFramebufferStatus", }, { (PGLFunctionPointer)(&glClear), "glClear", }, { (PGLFunctionPointer)(&glClearColor), "glClearColor", }, { (PGLFunctionPointer)(&glClearDepthf), "glClearDepthf", }, { (PGLFunctionPointer)(&glClearStencil), "glClearStencil", }, { (PGLFunctionPointer)(&glColorMask), "glColorMask", }, { (PGLFunctionPointer)(&glCompileShader), "glCompileShader", }, { (PGLFunctionPointer)(&glCompressedTexImage2D), "glCompressedTexImage2D", }, { (PGLFunctionPointer)(&glCompressedTexSubImage2D), "glCompressedTexSubImage2D", }, { (PGLFunctionPointer)(&glCopyTexImage2D), "glCopyTexImage2D", }, { (PGLFunctionPointer)(&glCopyTexSubImage2D), "glCopyTexSubImage2D", }, { (PGLFunctionPointer)(&glCreateProgram), "glCreateProgram", }, { (PGLFunctionPointer)(&glCreateShader), "glCreateShader", }, { (PGLFunctionPointer)(&glCullFace), "glCullFace", }, { (PGLFunctionPointer)(&glDeleteBuffers), "glDeleteBuffers", }, { (PGLFunctionPointer)(&glDeleteFramebuffers), "glDeleteFramebuffers", }, { (PGLFunctionPointer)(&glDeleteProgram), "glDeleteProgram", }, { (PGLFunctionPointer)(&glDeleteRenderbuffers), "glDeleteRenderbuffers", }, { (PGLFunctionPointer)(&glDeleteShader), "glDeleteShader", }, { (PGLFunctionPointer)(&glDeleteTextures), "glDeleteTextures", }, { (PGLFunctionPointer)(&glDepthFunc), "glDepthFunc", }, { (PGLFunctionPointer)(&glDepthMask), "glDepthMask", }, { (PGLFunctionPointer)(&glDepthRangef), "glDepthRangef", }, { (PGLFunctionPointer)(&glDetachShader), "glDetachShader", }, { (PGLFunctionPointer)(&glDisable), "glDisable", }, { (PGLFunctionPointer)(&glDisableVertexAttribArray), "glDisableVertexAttribArray", }, { (PGLFunctionPointer)(&glDrawArrays), "glDrawArrays", }, { (PGLFunctionPointer)(&glDrawElements), "glDrawElements", }, { (PGLFunctionPointer)(&glEnable), "glEnable", }, { (PGLFunctionPointer)(&glEnableVertexAttribArray), "glEnableVertexAttribArray", }, { (PGLFunctionPointer)(&glFinish), "glFinish", }, { (PGLFunctionPointer)(&glFlush), "glFlush", }, { (PGLFunctionPointer)(&glFramebufferRenderbuffer), "glFramebufferRenderbuffer", }, { (PGLFunctionPointer)(&glFramebufferTexture2D), "glFramebufferTexture2D", }, { (PGLFunctionPointer)(&glFrontFace), "glFrontFace", }, { (PGLFunctionPointer)(&glGenBuffers), "glGenBuffers", }, { (PGLFunctionPointer)(&glGenerateMipmap), "glGenerateMipmap", }, { (PGLFunctionPointer)(&glGenFramebuffers), "glGenFramebuffers", }, { (PGLFunctionPointer)(&glGenRenderbuffers), "glGenRenderbuffers", }, { (PGLFunctionPointer)(&glGenTextures), "glGenTextures", }, { (PGLFunctionPointer)(&glGetActiveAttrib), "glGetActiveAttrib", }, { (PGLFunctionPointer)(&glGetActiveUniform), "glGetActiveUniform", }, { (PGLFunctionPointer)(&glGetAttachedShaders), "glGetAttachedShaders", }, { (PGLFunctionPointer)(&glGetAttribLocation), "glGetAttribLocation", }, { (PGLFunctionPointer)(&glGetBooleanv), "glGetBooleanv", }, { (PGLFunctionPointer)(&glGetBufferParameteriv), "glGetBufferParameteriv", }, { (PGLFunctionPointer)(&glGetError), "glGetError", }, { (PGLFunctionPointer)(&glGetFloatv), "glGetFloatv", }, { (PGLFunctionPointer)(&glGetFramebufferAttachmentParameteriv), "glGetFramebufferAttachmentParameteriv", }, { (PGLFunctionPointer)(&glGetIntegerv), "glGetIntegerv", }, { (PGLFunctionPointer)(&glGetProgramiv), "glGetProgramiv", }, { (PGLFunctionPointer)(&glGetProgramInfoLog), "glGetProgramInfoLog", }, { (PGLFunctionPointer)(&glGetRenderbufferParameteriv), "glGetRenderbufferParameteriv", }, { (PGLFunctionPointer)(&glGetShaderiv), "glGetShaderiv", }, { (PGLFunctionPointer)(&glGetShaderInfoLog), "glGetShaderInfoLog", }, { (PGLFunctionPointer)(&glGetShaderPrecisionFormat), "glGetShaderPrecisionFormat", }, { (PGLFunctionPointer)(&glGetShaderSource), "glGetShaderSource", }, { (PGLFunctionPointer)(&glGetString), "glGetString", }, { (PGLFunctionPointer)(&glGetTexParameterfv), "glGetTexParameterfv", }, { (PGLFunctionPointer)(&glGetTexParameteriv), "glGetTexParameteriv", }, { (PGLFunctionPointer)(&glGetUniformfv), "glGetUniformfv", }, { (PGLFunctionPointer)(&glGetUniformiv), "glGetUniformiv", }, { (PGLFunctionPointer)(&glGetUniformLocation), "glGetUniformLocation", }, { (PGLFunctionPointer)(&glGetVertexAttribfv), "glGetVertexAttribfv", }, { (PGLFunctionPointer)(&glGetVertexAttribiv), "glGetVertexAttribiv", }, { (PGLFunctionPointer)(&glGetVertexAttribPointerv), "glGetVertexAttribPointerv", }, { (PGLFunctionPointer)(&glHint), "glHint", }, { (PGLFunctionPointer)(&glIsBuffer), "glIsBuffer", }, { (PGLFunctionPointer)(&glIsEnabled), "glIsEnabled", }, { (PGLFunctionPointer)(&glIsFramebuffer), "glIsFramebuffer", }, { (PGLFunctionPointer)(&glIsProgram), "glIsProgram", }, { (PGLFunctionPointer)(&glIsRenderbuffer), "glIsRenderbuffer", }, { (PGLFunctionPointer)(&glIsShader), "glIsShader", }, { (PGLFunctionPointer)(&glIsTexture), "glIsTexture", }, { (PGLFunctionPointer)(&glLineWidth), "glLineWidth", }, { (PGLFunctionPointer)(&glLinkProgram), "glLinkProgram", }, { (PGLFunctionPointer)(&glPixelStorei), "glPixelStorei", }, { (PGLFunctionPointer)(&glPolygonOffset), "glPolygonOffset", }, { (PGLFunctionPointer)(&glReadPixels), "glReadPixels", }, { (PGLFunctionPointer)(&glReleaseShaderCompiler), "glReleaseShaderCompiler", }, { (PGLFunctionPointer)(&glRenderbufferStorage), "glRenderbufferStorage", }, { (PGLFunctionPointer)(&glSampleCoverage), "glSampleCoverage", }, { (PGLFunctionPointer)(&glScissor), "glScissor", }, { (PGLFunctionPointer)(&glShaderBinary), "glShaderBinary", }, { (PGLFunctionPointer)(&glShaderSource), "glShaderSource", }, { (PGLFunctionPointer)(&glStencilFunc), "glStencilFunc", }, { (PGLFunctionPointer)(&glStencilFuncSeparate), "glStencilFuncSeparate", }, { (PGLFunctionPointer)(&glStencilMask), "glStencilMask", }, { (PGLFunctionPointer)(&glStencilMaskSeparate), "glStencilMaskSeparate", }, { (PGLFunctionPointer)(&glStencilOp), "glStencilOp", }, { (PGLFunctionPointer)(&glStencilOpSeparate), "glStencilOpSeparate", }, { (PGLFunctionPointer)(&glTexImage2D), "glTexImage2D", }, { (PGLFunctionPointer)(&glTexParameterf), "glTexParameterf", }, { (PGLFunctionPointer)(&glTexParameterfv), "glTexParameterfv", }, { (PGLFunctionPointer)(&glTexParameteri), "glTexParameteri", }, { (PGLFunctionPointer)(&glTexParameteriv), "glTexParameteriv", }, { (PGLFunctionPointer)(&glTexSubImage2D), "glTexSubImage2D", }, { (PGLFunctionPointer)(&glUniform1f), "glUniform1f", }, { (PGLFunctionPointer)(&glUniform1fv), "glUniform1fv", }, { (PGLFunctionPointer)(&glUniform1i), "glUniform1i", }, { (PGLFunctionPointer)(&glUniform1iv), "glUniform1iv", }, { (PGLFunctionPointer)(&glUniform2f), "glUniform2f", }, { (PGLFunctionPointer)(&glUniform2fv), "glUniform2fv", }, { (PGLFunctionPointer)(&glUniform2i), "glUniform2i", }, { (PGLFunctionPointer)(&glUniform2iv), "glUniform2iv", }, { (PGLFunctionPointer)(&glUniform3f), "glUniform3f", }, { (PGLFunctionPointer)(&glUniform3fv), "glUniform3fv", }, { (PGLFunctionPointer)(&glUniform3i), "glUniform3i", }, { (PGLFunctionPointer)(&glUniform3iv), "glUniform3iv", }, { (PGLFunctionPointer)(&glUniform4f), "glUniform4f", }, { (PGLFunctionPointer)(&glUniform4fv), "glUniform4fv", }, { (PGLFunctionPointer)(&glUniform4i), "glUniform4i", }, { (PGLFunctionPointer)(&glUniform4iv), "glUniform4iv", }, { (PGLFunctionPointer)(&glUniformMatrix2fv), "glUniformMatrix2fv", }, { (PGLFunctionPointer)(&glUniformMatrix3fv), "glUniformMatrix3fv", }, { (PGLFunctionPointer)(&glUniformMatrix4fv), "glUniformMatrix4fv", }, { (PGLFunctionPointer)(&glUseProgram), "glUseProgram", }, { (PGLFunctionPointer)(&glValidateProgram), "glValidateProgram", }, { (PGLFunctionPointer)(&glVertexAttrib1f), "glVertexAttrib1f", }, { (PGLFunctionPointer)(&glVertexAttrib1fv), "glVertexAttrib1fv", }, { (PGLFunctionPointer)(&glVertexAttrib2f), "glVertexAttrib2f", }, { (PGLFunctionPointer)(&glVertexAttrib2fv), "glVertexAttrib2fv", }, { (PGLFunctionPointer)(&glVertexAttrib3f), "glVertexAttrib3f", }, { (PGLFunctionPointer)(&glVertexAttrib3fv), "glVertexAttrib3fv", }, { (PGLFunctionPointer)(&glVertexAttrib4f), "glVertexAttrib4f", }, { (PGLFunctionPointer)(&glVertexAttrib4fv), "glVertexAttrib4fv", }, { (PGLFunctionPointer)(&glVertexAttribPointer), "glVertexAttribPointer", }, { (PGLFunctionPointer)(&glViewport), "glViewport", }, }; unsigned int num_functions = sizeof(gl_functions) / sizeof(gl_functions[0]); for (unsigned int ii = 0; ii < num_functions; ++ii) { if (strcmp(gl_functions[ii].name, procname) == 0) { return gl_functions[ii].func; } } return NULL; } } // extern "C"