diff options
Diffstat (limited to 'Source/WebCore/platform/graphics/cairo/OpenGLShims.h')
-rw-r--r-- | Source/WebCore/platform/graphics/cairo/OpenGLShims.h | 315 |
1 files changed, 315 insertions, 0 deletions
diff --git a/Source/WebCore/platform/graphics/cairo/OpenGLShims.h b/Source/WebCore/platform/graphics/cairo/OpenGLShims.h new file mode 100644 index 0000000..a431b03 --- /dev/null +++ b/Source/WebCore/platform/graphics/cairo/OpenGLShims.h @@ -0,0 +1,315 @@ +/* + * Copyright (C) 2010 Tieto Corporation. + * Copyright (C) 2011 Igalia S.L. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <GL/gl.h> + +typedef struct _OpenGLFunctionTable OpenGLFunctionTable; + +namespace WebCore { +bool initializeOpenGLShims(); +OpenGLFunctionTable* openGLFunctionTable(); +} + +typedef void (*glActiveTextureType) (GLenum); +typedef void (*glAttachShaderType) (GLuint, GLuint); +typedef void (*glBindAttribLocationType) (GLuint, GLuint, const char*); +typedef void (*glBindBufferType) (GLenum, GLuint); +typedef void (*glBindFramebufferType) (GLenum, GLuint); +typedef void (*glBindRenderbufferType) (GLenum, GLuint); +typedef void (*glBlendColorType) (GLclampf, GLclampf, GLclampf, GLclampf); +typedef void (*glBlendEquationType) (GLenum); +typedef void (*glBlendEquationSeparateType)(GLenum, GLenum); +typedef void (*glBlendFuncSeparateType)(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +typedef void (*glBlitFramebufferType) (GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLbitfield, GLenum); +typedef void (*glBufferDataType) (GLenum, GLsizeiptr, const GLvoid*, GLenum); +typedef void (*glBufferSubDataType) (GLenum, GLintptr, GLsizeiptr, const GLvoid*); +typedef GLenum (*glCheckFramebufferStatusType) (GLenum); +typedef void (*glCompileShaderType) (GLuint); +typedef GLuint (*glCreateProgramType) (); +typedef GLuint (*glCreateShaderType) (GLenum); +typedef void (*glDeleteBuffersType) (GLsizei, const GLuint*); +typedef void (*glDeleteFramebuffersType) (GLsizei n, const GLuint*); +typedef void (*glDeleteProgramType) (GLuint); +typedef void (*glDeleteRenderbuffersType) (GLsizei n, const GLuint*); +typedef void (*glDeleteShaderType) (GLuint); +typedef void (*glDetachShaderType) (GLuint, GLuint); +typedef void (*glDisableVertexAttribArrayType) (GLuint); +typedef void (*glEnableVertexAttribArrayType) (GLuint); +typedef void (*glFramebufferRenderbufferType) (GLenum, GLenum, GLenum, GLuint); +typedef void (*glFramebufferTexture2DType) (GLenum, GLenum, GLenum, GLuint, GLint); +typedef void (*glGenBuffersType) (GLsizei, GLuint*); +typedef void (*glGenerateMipmapType) (GLenum target); +typedef void (*glGenFramebuffersType) (GLsizei, GLuint*); +typedef void (*glGenRenderbuffersType) (GLsizei, GLuint*); +typedef void (*glGetActiveAttribType) (GLuint, GLuint, GLsizei, GLsizei*, GLint*, GLenum*, GLchar*); +typedef void (*glGetActiveUniformType) (GLuint, GLuint, GLsizei, GLsizei*, GLint*, GLenum*, GLchar*); +typedef void (*glGetAttachedShadersType) (GLuint, GLsizei, GLsizei*, GLuint*); +typedef GLint (*glGetAttribLocationType) (GLuint, const char*); +typedef void (*glGetBufferParameterivType) (GLenum, GLenum, GLint*); +typedef void (*glGetFramebufferAttachmentParameterivType) (GLenum, GLenum, GLenum, GLint* params); +typedef void (*glGetProgramInfoLogType) (GLuint, GLsizei, GLsizei*, char*); +typedef void (*glGetProgramivType) (GLuint, GLenum, GLint*); +typedef void (*glGetRenderbufferParameterivType) (GLenum, GLenum, GLint*); +typedef void (*glGetShaderInfoLogType) (GLuint, GLsizei, GLsizei*, char*); +typedef void (*glGetShaderivType) (GLuint, GLenum, GLint*); +typedef void (*glGetShaderSourceType) (GLuint, GLsizei, GLsizei*, char*); +typedef GLint (*glGetUniformLocationType) (GLuint, const char*); +typedef void (*glGetUniformfvType) (GLuint, GLint, GLfloat*); +typedef void (*glGetUniformivType) (GLuint, GLint, GLint*); +typedef void (*glGetVertexAttribfvType) (GLuint, GLenum, GLfloat*); +typedef void (*glGetVertexAttribivType) (GLuint, GLenum, GLint*); +typedef void (*glGetVertexAttribPointervType) (GLuint, GLenum, GLvoid**); +typedef GLboolean (*glIsBufferType) (GLuint); +typedef GLboolean (*glIsFramebufferType) (GLuint); +typedef GLboolean (*glIsProgramType) (GLuint); +typedef GLboolean (*glIsRenderbufferType) (GLuint); +typedef GLboolean (*glIsShaderType) (GLuint); +typedef void (*glLinkProgramType) (GLuint); +typedef void (*glRenderbufferStorageType) (GLenum, GLenum, GLsizei, GLsizei); +typedef void (*glRenderbufferStorageMultisampleType) (GLenum, GLsizei, GLenum, GLsizei, GLsizei); +typedef void (*glSampleCoverageType) (GLclampf, GLboolean); +typedef void (*glShaderSourceType) (GLuint, GLsizei, const char**, const GLint*); +typedef void (*glStencilFuncSeparateType) (GLenum, GLenum, GLint, GLuint); +typedef void (*glStencilMaskSeparateType) (GLenum, GLuint); +typedef void (*glStencilOpSeparateType) (GLenum, GLenum, GLenum, GLenum); +typedef void (*glUniform1fType) (GLint, GLfloat); +typedef void (*glUniform1fvType) (GLint, GLsizei, const GLfloat*); +typedef void (*glUniform1iType) (GLint, GLint); +typedef void (*glUniform1ivType) (GLint, GLsizei, const GLint*); +typedef void (*glUniform2fType) (GLint, GLfloat, GLfloat); +typedef void (*glUniform2fvType) (GLint, GLsizei, const GLfloat*); +typedef void (*glUniform2iType) (GLint, GLint, GLint); +typedef void (*glUniform2ivType) (GLint, GLsizei, const GLint*); +typedef void (*glUniform3fType) (GLint, GLfloat, GLfloat, GLfloat); +typedef void (*glUniform3fvType) (GLint, GLsizei, const GLfloat*); +typedef void (*glUniform3iType) (GLint, GLint, GLint, GLint); +typedef void (*glUniform3ivType) (GLint, GLsizei, const GLint*); +typedef void (*glUniform4fType) (GLint, GLfloat, GLfloat, GLfloat, GLfloat); +typedef void (*glUniform4fvType) (GLint, GLsizei, const GLfloat*); +typedef void (*glUniform4iType) (GLint, GLint, GLint, GLint, GLint); +typedef void (*glUniform4ivType) (GLint, GLsizei, const GLint*); +typedef void (*glUniformMatrix2fvType) (GLint, GLsizei, GLboolean, const GLfloat*); +typedef void (*glUniformMatrix3fvType) (GLint, GLsizei, GLboolean, const GLfloat*); +typedef void (*glUniformMatrix4fvType) (GLint, GLsizei, GLboolean, const GLfloat*); +typedef void (*glUseProgramType) (GLuint); +typedef void (*glValidateProgramType) (GLuint); +typedef void (*glVertexAttrib1fType) (GLuint, const GLfloat); +typedef void (*glVertexAttrib1fvType) (GLuint, const GLfloat*); +typedef void (*glVertexAttrib2fType) (GLuint, const GLfloat, const GLfloat); +typedef void (*glVertexAttrib2fvType) (GLuint, const GLfloat*); +typedef void (*glVertexAttrib3fType) (GLuint, const GLfloat, const GLfloat, const GLfloat); +typedef void (*glVertexAttrib3fvType) (GLuint, const GLfloat*); +typedef void (*glVertexAttrib4fType) (GLuint, const GLfloat, const GLfloat, const GLfloat, const GLfloat); +typedef void (*glVertexAttrib4fvType) (GLuint, const GLfloat*); +typedef void (*glVertexAttribPointerType) (GLuint, GLint, GLenum, GLboolean, GLsizei, const GLvoid*); + +#define FUNCTION_TABLE_ENTRY(FunctionName) FunctionName##Type FunctionName + +typedef struct _OpenGLFunctionTable { + FUNCTION_TABLE_ENTRY(glActiveTexture); + FUNCTION_TABLE_ENTRY(glAttachShader); + FUNCTION_TABLE_ENTRY(glBindAttribLocation); + FUNCTION_TABLE_ENTRY(glBindBuffer); + FUNCTION_TABLE_ENTRY(glBindFramebuffer); + FUNCTION_TABLE_ENTRY(glBindRenderbuffer); + FUNCTION_TABLE_ENTRY(glBlendColor); + FUNCTION_TABLE_ENTRY(glBlendEquation); + FUNCTION_TABLE_ENTRY(glBlendEquationSeparate); + FUNCTION_TABLE_ENTRY(glBlendFuncSeparate); + FUNCTION_TABLE_ENTRY(glBlitFramebuffer); + FUNCTION_TABLE_ENTRY(glBufferData); + FUNCTION_TABLE_ENTRY(glBufferSubData); + FUNCTION_TABLE_ENTRY(glCheckFramebufferStatus); + FUNCTION_TABLE_ENTRY(glCompileShader); + FUNCTION_TABLE_ENTRY(glCreateProgram); + FUNCTION_TABLE_ENTRY(glCreateShader); + FUNCTION_TABLE_ENTRY(glDeleteBuffers); + FUNCTION_TABLE_ENTRY(glDeleteFramebuffers); + FUNCTION_TABLE_ENTRY(glDeleteProgram); + FUNCTION_TABLE_ENTRY(glDeleteRenderbuffers); + FUNCTION_TABLE_ENTRY(glDeleteShader); + FUNCTION_TABLE_ENTRY(glDetachShader); + FUNCTION_TABLE_ENTRY(glDisableVertexAttribArray); + FUNCTION_TABLE_ENTRY(glEnableVertexAttribArray); + FUNCTION_TABLE_ENTRY(glFramebufferRenderbuffer); + FUNCTION_TABLE_ENTRY(glFramebufferTexture2D); + FUNCTION_TABLE_ENTRY(glGenBuffers); + FUNCTION_TABLE_ENTRY(glGenerateMipmap); + FUNCTION_TABLE_ENTRY(glGenFramebuffers); + FUNCTION_TABLE_ENTRY(glGenRenderbuffers); + FUNCTION_TABLE_ENTRY(glGetActiveAttrib); + FUNCTION_TABLE_ENTRY(glGetActiveUniform); + FUNCTION_TABLE_ENTRY(glGetAttachedShaders); + FUNCTION_TABLE_ENTRY(glGetAttribLocation); + FUNCTION_TABLE_ENTRY(glGetBufferParameteriv); + FUNCTION_TABLE_ENTRY(glGetFramebufferAttachmentParameteriv); + FUNCTION_TABLE_ENTRY(glGetProgramInfoLog); + FUNCTION_TABLE_ENTRY(glGetProgramiv); + FUNCTION_TABLE_ENTRY(glGetRenderbufferParameteriv); + FUNCTION_TABLE_ENTRY(glGetShaderInfoLog); + FUNCTION_TABLE_ENTRY(glGetShaderiv); + FUNCTION_TABLE_ENTRY(glGetShaderSource); + FUNCTION_TABLE_ENTRY(glGetUniformfv); + FUNCTION_TABLE_ENTRY(glGetUniformiv); + FUNCTION_TABLE_ENTRY(glGetUniformLocation); + FUNCTION_TABLE_ENTRY(glGetVertexAttribfv); + FUNCTION_TABLE_ENTRY(glGetVertexAttribiv); + FUNCTION_TABLE_ENTRY(glGetVertexAttribPointerv); + FUNCTION_TABLE_ENTRY(glIsBuffer); + FUNCTION_TABLE_ENTRY(glIsFramebuffer); + FUNCTION_TABLE_ENTRY(glIsProgram); + FUNCTION_TABLE_ENTRY(glIsRenderbuffer); + FUNCTION_TABLE_ENTRY(glIsShader); + FUNCTION_TABLE_ENTRY(glLinkProgram); + FUNCTION_TABLE_ENTRY(glRenderbufferStorage); + FUNCTION_TABLE_ENTRY(glRenderbufferStorageMultisample); + FUNCTION_TABLE_ENTRY(glSampleCoverage); + FUNCTION_TABLE_ENTRY(glShaderSource); + FUNCTION_TABLE_ENTRY(glStencilFuncSeparate); + FUNCTION_TABLE_ENTRY(glStencilMaskSeparate); + FUNCTION_TABLE_ENTRY(glStencilOpSeparate); + FUNCTION_TABLE_ENTRY(glUniform1f); + FUNCTION_TABLE_ENTRY(glUniform1fv); + FUNCTION_TABLE_ENTRY(glUniform1i); + FUNCTION_TABLE_ENTRY(glUniform1iv); + FUNCTION_TABLE_ENTRY(glUniform2f); + FUNCTION_TABLE_ENTRY(glUniform2fv); + FUNCTION_TABLE_ENTRY(glUniform2i); + FUNCTION_TABLE_ENTRY(glUniform2iv); + FUNCTION_TABLE_ENTRY(glUniform3f); + FUNCTION_TABLE_ENTRY(glUniform3fv); + FUNCTION_TABLE_ENTRY(glUniform3i); + FUNCTION_TABLE_ENTRY(glUniform3iv); + FUNCTION_TABLE_ENTRY(glUniform4f); + FUNCTION_TABLE_ENTRY(glUniform4fv); + FUNCTION_TABLE_ENTRY(glUniform4i); + FUNCTION_TABLE_ENTRY(glUniform4iv); + FUNCTION_TABLE_ENTRY(glUniformMatrix2fv); + FUNCTION_TABLE_ENTRY(glUniformMatrix3fv); + FUNCTION_TABLE_ENTRY(glUniformMatrix4fv); + FUNCTION_TABLE_ENTRY(glUseProgram); + FUNCTION_TABLE_ENTRY(glValidateProgram); + FUNCTION_TABLE_ENTRY(glVertexAttrib1f); + FUNCTION_TABLE_ENTRY(glVertexAttrib1fv); + FUNCTION_TABLE_ENTRY(glVertexAttrib2f); + FUNCTION_TABLE_ENTRY(glVertexAttrib2fv); + FUNCTION_TABLE_ENTRY(glVertexAttrib3f); + FUNCTION_TABLE_ENTRY(glVertexAttrib3fv); + FUNCTION_TABLE_ENTRY(glVertexAttrib4f); + FUNCTION_TABLE_ENTRY(glVertexAttrib4fv); + FUNCTION_TABLE_ENTRY(glVertexAttribPointer); +} OpenGLFunctionTable; + +// We disable the shims for OpenGLShims.cpp, so that we can set them. +#ifndef DISABLE_SHIMS +#define LOOKUP_GL_FUNCTION(Function) WebCore::openGLFunctionTable()->Function +#define glActiveTexture LOOKUP_GL_FUNCTION(glActiveTexture) +#define glAttachShader LOOKUP_GL_FUNCTION(glAttachShader) +#define glBindAttribLocation LOOKUP_GL_FUNCTION(glBindAttribLocation) +#define glBindBuffer LOOKUP_GL_FUNCTION(glBindBuffer) +#define glBindFramebufferEXT LOOKUP_GL_FUNCTION(glBindFramebuffer) +#define glBindRenderbufferEXT LOOKUP_GL_FUNCTION(glBindRenderbuffer) +#define glBlendColor LOOKUP_GL_FUNCTION(glBlendColor) +#define glBlendEquation LOOKUP_GL_FUNCTION(glBlendEquation) +#define glBlendEquationSeparate LOOKUP_GL_FUNCTION(glBlendEquationSeparate) +#define glBlendFuncSeparate LOOKUP_GL_FUNCTION(glBlendFuncSeparate) +#define glBlitFramebufferEXT LOOKUP_GL_FUNCTION(glBlitFramebuffer) +#define glBufferData LOOKUP_GL_FUNCTION(glBufferData) +#define glBufferSubData LOOKUP_GL_FUNCTION(glBufferSubData) +#define glCheckFramebufferStatusEXT LOOKUP_GL_FUNCTION(glCheckFramebufferStatus) +#define glCompileShader LOOKUP_GL_FUNCTION(glCompileShader) +#define glCreateProgram LOOKUP_GL_FUNCTION(glCreateProgram) +#define glCreateShader LOOKUP_GL_FUNCTION(glCreateShader) +#define glDeleteBuffers LOOKUP_GL_FUNCTION(glDeleteBuffers) +#define glDeleteFramebuffersEXT LOOKUP_GL_FUNCTION(glDeleteFramebuffers) +#define glDeleteProgram LOOKUP_GL_FUNCTION(glDeleteProgram) +#define glDeleteRenderbuffersEXT LOOKUP_GL_FUNCTION(glDeleteRenderbuffers) +#define glDeleteShader LOOKUP_GL_FUNCTION(glDeleteShader) +#define glDetachShader LOOKUP_GL_FUNCTION(glDetachShader) +#define glDisableVertexAttribArray LOOKUP_GL_FUNCTION(glDisableVertexAttribArray) +#define glEnableVertexAttribArray LOOKUP_GL_FUNCTION(glEnableVertexAttribArray) +#define glFramebufferRenderbufferEXT LOOKUP_GL_FUNCTION(glFramebufferRenderbuffer) +#define glFramebufferTexture2DEXT LOOKUP_GL_FUNCTION(glFramebufferTexture2D) +#define glGenBuffers LOOKUP_GL_FUNCTION(glGenBuffers) +#define glGenerateMipmapEXT LOOKUP_GL_FUNCTION(glGenerateMipmap) +#define glGenFramebuffersEXT LOOKUP_GL_FUNCTION(glGenFramebuffers) +#define glGenRenderbuffersEXT LOOKUP_GL_FUNCTION(glGenRenderbuffers) +#define glGetActiveAttrib LOOKUP_GL_FUNCTION(glGetActiveAttrib) +#define glGetActiveUniform LOOKUP_GL_FUNCTION(glGetActiveUniform) +#define glGetAttachedShaders LOOKUP_GL_FUNCTION(glGetAttachedShaders) +#define glGetAttribLocation LOOKUP_GL_FUNCTION(glGetAttribLocation) +#define glGetBufferParameteriv LOOKUP_GL_FUNCTION(glGetBufferParameteriv) +#define glGetBufferParameterivEXT LOOKUP_GL_FUNCTION(glGetBufferParameteriv) +#define glGetFramebufferAttachmentParameterivEXT LOOKUP_GL_FUNCTION(glGetFramebufferAttachmentParameteriv) +#define glGetProgramInfoLog LOOKUP_GL_FUNCTION(glGetProgramInfoLog) +#define glGetProgramiv LOOKUP_GL_FUNCTION(glGetProgramiv) +#define glGetRenderbufferParameterivEXT LOOKUP_GL_FUNCTION(glGetRenderbufferParameteriv) +#define glGetShaderInfoLog LOOKUP_GL_FUNCTION(glGetShaderInfoLog) +#define glGetShaderiv LOOKUP_GL_FUNCTION(glGetShaderiv) +#define glGetShaderSource LOOKUP_GL_FUNCTION(glGetShaderSource) +#define glGetUniformfv LOOKUP_GL_FUNCTION(glGetUniformfv) +#define glGetUniformiv LOOKUP_GL_FUNCTION(glGetUniformiv) +#define glGetUniformLocation LOOKUP_GL_FUNCTION(glGetUniformLocation) +#define glGetVertexAttribfv LOOKUP_GL_FUNCTION(glGetVertexAttribfv) +#define glGetVertexAttribiv LOOKUP_GL_FUNCTION(glGetVertexAttribiv) +#define glGetVertexAttribPointerv LOOKUP_GL_FUNCTION(glGetVertexAttribPointerv) +#define glIsBuffer LOOKUP_GL_FUNCTION(glIsBuffer) +#define glIsFramebufferEXT LOOKUP_GL_FUNCTION(glIsFramebuffer) +#define glIsProgram LOOKUP_GL_FUNCTION(glIsProgram) +#define glIsRenderbufferEXT LOOKUP_GL_FUNCTION(glIsRenderbuffer) +#define glIsShader LOOKUP_GL_FUNCTION(glIsShader) +#define glLinkProgram LOOKUP_GL_FUNCTION(glLinkProgram) +#define glRenderbufferStorageEXT LOOKUP_GL_FUNCTION(glRenderbufferStorage) +#define glRenderbufferStorageMultisampleEXT LOOKUP_GL_FUNCTION(glRenderbufferStorageMultisample) +#define glSampleCoverage LOOKUP_GL_FUNCTION(glSampleCoverage) +#define glShaderSource LOOKUP_GL_FUNCTION(glShaderSource) +#define glStencilFuncSeparate LOOKUP_GL_FUNCTION(glStencilFuncSeparate) +#define glStencilMaskSeparate LOOKUP_GL_FUNCTION(glStencilMaskSeparate) +#define glStencilOpSeparate LOOKUP_GL_FUNCTION(glStencilOpSeparate) +#define glUniform1f LOOKUP_GL_FUNCTION(glUniform1f) +#define glUniform1fv LOOKUP_GL_FUNCTION(glUniform1fv) +#define glUniform1i LOOKUP_GL_FUNCTION(glUniform1i) +#define glUniform1iv LOOKUP_GL_FUNCTION(glUniform1iv) +#define glUniform2f LOOKUP_GL_FUNCTION(glUniform2f) +#define glUniform2fv LOOKUP_GL_FUNCTION(glUniform2fv) +#define glUniform2i LOOKUP_GL_FUNCTION(glUniform2i) +#define glUniform2iv LOOKUP_GL_FUNCTION(glUniform2iv) +#define glUniform3f LOOKUP_GL_FUNCTION(glUniform3f) +#define glUniform3fv LOOKUP_GL_FUNCTION(glUniform3fv) +#define glUniform3i LOOKUP_GL_FUNCTION(glUniform3i) +#define glUniform3iv LOOKUP_GL_FUNCTION(glUniform3iv) +#define glUniform4f LOOKUP_GL_FUNCTION(glUniform4f) +#define glUniform4fv LOOKUP_GL_FUNCTION(glUniform4fv) +#define glUniform4i LOOKUP_GL_FUNCTION(glUniform4i) +#define glUniform4iv LOOKUP_GL_FUNCTION(glUniform4iv) +#define glUniformMatrix2fv LOOKUP_GL_FUNCTION(glUniformMatrix2fv) +#define glUniformMatrix3fv LOOKUP_GL_FUNCTION(glUniformMatrix3fv) +#define glUniformMatrix4fv LOOKUP_GL_FUNCTION(glUniformMatrix4fv) +#define glUseProgram LOOKUP_GL_FUNCTION(glUseProgram) +#define glValidateProgram LOOKUP_GL_FUNCTION(glValidateProgram) +#define glVertexAttrib1f LOOKUP_GL_FUNCTION(glVertexAttrib1f) +#define glVertexAttrib1fv LOOKUP_GL_FUNCTION(glVertexAttrib1fv) +#define glVertexAttrib2f LOOKUP_GL_FUNCTION(glVertexAttrib2f) +#define glVertexAttrib2fv LOOKUP_GL_FUNCTION(glVertexAttrib2fv) +#define glVertexAttrib3f LOOKUP_GL_FUNCTION(glVertexAttrib3f) +#define glVertexAttrib3fv LOOKUP_GL_FUNCTION(glVertexAttrib3fv) +#define glVertexAttrib4f LOOKUP_GL_FUNCTION(glVertexAttrib4f) +#define glVertexAttrib4fv LOOKUP_GL_FUNCTION(glVertexAttrib4fv) +#define glVertexAttribPointer LOOKUP_GL_FUNCTION(glVertexAttribPointer) +#endif |