1 /* 2 * Copyright (C) 2010 Tieto Corporation. 3 * Copyright (C) 2011 Igalia S.L. 4 * 5 * This library is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU Lesser General Public 7 * License as published by the Free Software Foundation; either 8 * version 2.1 of the License, or (at your option) any later version. 9 * 10 * This library is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * Lesser General Public License for more details. 14 * 15 * You should have received a copy of the GNU Lesser General Public 16 * License along with this library; if not, write to the Free Software 17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 18 */ 19 20 #include <GL/gl.h> 21 22 typedef struct _OpenGLFunctionTable OpenGLFunctionTable; 23 24 namespace WebCore { 25 bool initializeOpenGLShims(); 26 OpenGLFunctionTable* openGLFunctionTable(); 27 } 28 29 typedef void (*glActiveTextureType) (GLenum); 30 typedef void (*glAttachShaderType) (GLuint, GLuint); 31 typedef void (*glBindAttribLocationType) (GLuint, GLuint, const char*); 32 typedef void (*glBindBufferType) (GLenum, GLuint); 33 typedef void (*glBindFramebufferType) (GLenum, GLuint); 34 typedef void (*glBindRenderbufferType) (GLenum, GLuint); 35 typedef void (*glBlendColorType) (GLclampf, GLclampf, GLclampf, GLclampf); 36 typedef void (*glBlendEquationType) (GLenum); 37 typedef void (*glBlendEquationSeparateType)(GLenum, GLenum); 38 typedef void (*glBlendFuncSeparateType)(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); 39 typedef void (*glBlitFramebufferType) (GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLbitfield, GLenum); 40 typedef void (*glBufferDataType) (GLenum, GLsizeiptr, const GLvoid*, GLenum); 41 typedef void (*glBufferSubDataType) (GLenum, GLintptr, GLsizeiptr, const GLvoid*); 42 typedef GLenum (*glCheckFramebufferStatusType) (GLenum); 43 typedef void (*glCompileShaderType) (GLuint); 44 typedef GLuint (*glCreateProgramType) (); 45 typedef GLuint (*glCreateShaderType) (GLenum); 46 typedef void (*glDeleteBuffersType) (GLsizei, const GLuint*); 47 typedef void (*glDeleteFramebuffersType) (GLsizei n, const GLuint*); 48 typedef void (*glDeleteProgramType) (GLuint); 49 typedef void (*glDeleteRenderbuffersType) (GLsizei n, const GLuint*); 50 typedef void (*glDeleteShaderType) (GLuint); 51 typedef void (*glDetachShaderType) (GLuint, GLuint); 52 typedef void (*glDisableVertexAttribArrayType) (GLuint); 53 typedef void (*glEnableVertexAttribArrayType) (GLuint); 54 typedef void (*glFramebufferRenderbufferType) (GLenum, GLenum, GLenum, GLuint); 55 typedef void (*glFramebufferTexture2DType) (GLenum, GLenum, GLenum, GLuint, GLint); 56 typedef void (*glGenBuffersType) (GLsizei, GLuint*); 57 typedef void (*glGenerateMipmapType) (GLenum target); 58 typedef void (*glGenFramebuffersType) (GLsizei, GLuint*); 59 typedef void (*glGenRenderbuffersType) (GLsizei, GLuint*); 60 typedef void (*glGetActiveAttribType) (GLuint, GLuint, GLsizei, GLsizei*, GLint*, GLenum*, GLchar*); 61 typedef void (*glGetActiveUniformType) (GLuint, GLuint, GLsizei, GLsizei*, GLint*, GLenum*, GLchar*); 62 typedef void (*glGetAttachedShadersType) (GLuint, GLsizei, GLsizei*, GLuint*); 63 typedef GLint (*glGetAttribLocationType) (GLuint, const char*); 64 typedef void (*glGetBufferParameterivType) (GLenum, GLenum, GLint*); 65 typedef void (*glGetFramebufferAttachmentParameterivType) (GLenum, GLenum, GLenum, GLint* params); 66 typedef void (*glGetProgramInfoLogType) (GLuint, GLsizei, GLsizei*, char*); 67 typedef void (*glGetProgramivType) (GLuint, GLenum, GLint*); 68 typedef void (*glGetRenderbufferParameterivType) (GLenum, GLenum, GLint*); 69 typedef void (*glGetShaderInfoLogType) (GLuint, GLsizei, GLsizei*, char*); 70 typedef void (*glGetShaderivType) (GLuint, GLenum, GLint*); 71 typedef void (*glGetShaderSourceType) (GLuint, GLsizei, GLsizei*, char*); 72 typedef GLint (*glGetUniformLocationType) (GLuint, const char*); 73 typedef void (*glGetUniformfvType) (GLuint, GLint, GLfloat*); 74 typedef void (*glGetUniformivType) (GLuint, GLint, GLint*); 75 typedef void (*glGetVertexAttribfvType) (GLuint, GLenum, GLfloat*); 76 typedef void (*glGetVertexAttribivType) (GLuint, GLenum, GLint*); 77 typedef void (*glGetVertexAttribPointervType) (GLuint, GLenum, GLvoid**); 78 typedef GLboolean (*glIsBufferType) (GLuint); 79 typedef GLboolean (*glIsFramebufferType) (GLuint); 80 typedef GLboolean (*glIsProgramType) (GLuint); 81 typedef GLboolean (*glIsRenderbufferType) (GLuint); 82 typedef GLboolean (*glIsShaderType) (GLuint); 83 typedef void (*glLinkProgramType) (GLuint); 84 typedef void (*glRenderbufferStorageType) (GLenum, GLenum, GLsizei, GLsizei); 85 typedef void (*glRenderbufferStorageMultisampleType) (GLenum, GLsizei, GLenum, GLsizei, GLsizei); 86 typedef void (*glSampleCoverageType) (GLclampf, GLboolean); 87 typedef void (*glShaderSourceType) (GLuint, GLsizei, const char**, const GLint*); 88 typedef void (*glStencilFuncSeparateType) (GLenum, GLenum, GLint, GLuint); 89 typedef void (*glStencilMaskSeparateType) (GLenum, GLuint); 90 typedef void (*glStencilOpSeparateType) (GLenum, GLenum, GLenum, GLenum); 91 typedef void (*glUniform1fType) (GLint, GLfloat); 92 typedef void (*glUniform1fvType) (GLint, GLsizei, const GLfloat*); 93 typedef void (*glUniform1iType) (GLint, GLint); 94 typedef void (*glUniform1ivType) (GLint, GLsizei, const GLint*); 95 typedef void (*glUniform2fType) (GLint, GLfloat, GLfloat); 96 typedef void (*glUniform2fvType) (GLint, GLsizei, const GLfloat*); 97 typedef void (*glUniform2iType) (GLint, GLint, GLint); 98 typedef void (*glUniform2ivType) (GLint, GLsizei, const GLint*); 99 typedef void (*glUniform3fType) (GLint, GLfloat, GLfloat, GLfloat); 100 typedef void (*glUniform3fvType) (GLint, GLsizei, const GLfloat*); 101 typedef void (*glUniform3iType) (GLint, GLint, GLint, GLint); 102 typedef void (*glUniform3ivType) (GLint, GLsizei, const GLint*); 103 typedef void (*glUniform4fType) (GLint, GLfloat, GLfloat, GLfloat, GLfloat); 104 typedef void (*glUniform4fvType) (GLint, GLsizei, const GLfloat*); 105 typedef void (*glUniform4iType) (GLint, GLint, GLint, GLint, GLint); 106 typedef void (*glUniform4ivType) (GLint, GLsizei, const GLint*); 107 typedef void (*glUniformMatrix2fvType) (GLint, GLsizei, GLboolean, const GLfloat*); 108 typedef void (*glUniformMatrix3fvType) (GLint, GLsizei, GLboolean, const GLfloat*); 109 typedef void (*glUniformMatrix4fvType) (GLint, GLsizei, GLboolean, const GLfloat*); 110 typedef void (*glUseProgramType) (GLuint); 111 typedef void (*glValidateProgramType) (GLuint); 112 typedef void (*glVertexAttrib1fType) (GLuint, const GLfloat); 113 typedef void (*glVertexAttrib1fvType) (GLuint, const GLfloat*); 114 typedef void (*glVertexAttrib2fType) (GLuint, const GLfloat, const GLfloat); 115 typedef void (*glVertexAttrib2fvType) (GLuint, const GLfloat*); 116 typedef void (*glVertexAttrib3fType) (GLuint, const GLfloat, const GLfloat, const GLfloat); 117 typedef void (*glVertexAttrib3fvType) (GLuint, const GLfloat*); 118 typedef void (*glVertexAttrib4fType) (GLuint, const GLfloat, const GLfloat, const GLfloat, const GLfloat); 119 typedef void (*glVertexAttrib4fvType) (GLuint, const GLfloat*); 120 typedef void (*glVertexAttribPointerType) (GLuint, GLint, GLenum, GLboolean, GLsizei, const GLvoid*); 121 122 #define FUNCTION_TABLE_ENTRY(FunctionName) FunctionName##Type FunctionName 123 124 typedef struct _OpenGLFunctionTable { 125 FUNCTION_TABLE_ENTRY(glActiveTexture); 126 FUNCTION_TABLE_ENTRY(glAttachShader); 127 FUNCTION_TABLE_ENTRY(glBindAttribLocation); 128 FUNCTION_TABLE_ENTRY(glBindBuffer); 129 FUNCTION_TABLE_ENTRY(glBindFramebuffer); 130 FUNCTION_TABLE_ENTRY(glBindRenderbuffer); 131 FUNCTION_TABLE_ENTRY(glBlendColor); 132 FUNCTION_TABLE_ENTRY(glBlendEquation); 133 FUNCTION_TABLE_ENTRY(glBlendEquationSeparate); 134 FUNCTION_TABLE_ENTRY(glBlendFuncSeparate); 135 FUNCTION_TABLE_ENTRY(glBlitFramebuffer); 136 FUNCTION_TABLE_ENTRY(glBufferData); 137 FUNCTION_TABLE_ENTRY(glBufferSubData); 138 FUNCTION_TABLE_ENTRY(glCheckFramebufferStatus); 139 FUNCTION_TABLE_ENTRY(glCompileShader); 140 FUNCTION_TABLE_ENTRY(glCreateProgram); 141 FUNCTION_TABLE_ENTRY(glCreateShader); 142 FUNCTION_TABLE_ENTRY(glDeleteBuffers); 143 FUNCTION_TABLE_ENTRY(glDeleteFramebuffers); 144 FUNCTION_TABLE_ENTRY(glDeleteProgram); 145 FUNCTION_TABLE_ENTRY(glDeleteRenderbuffers); 146 FUNCTION_TABLE_ENTRY(glDeleteShader); 147 FUNCTION_TABLE_ENTRY(glDetachShader); 148 FUNCTION_TABLE_ENTRY(glDisableVertexAttribArray); 149 FUNCTION_TABLE_ENTRY(glEnableVertexAttribArray); 150 FUNCTION_TABLE_ENTRY(glFramebufferRenderbuffer); 151 FUNCTION_TABLE_ENTRY(glFramebufferTexture2D); 152 FUNCTION_TABLE_ENTRY(glGenBuffers); 153 FUNCTION_TABLE_ENTRY(glGenerateMipmap); 154 FUNCTION_TABLE_ENTRY(glGenFramebuffers); 155 FUNCTION_TABLE_ENTRY(glGenRenderbuffers); 156 FUNCTION_TABLE_ENTRY(glGetActiveAttrib); 157 FUNCTION_TABLE_ENTRY(glGetActiveUniform); 158 FUNCTION_TABLE_ENTRY(glGetAttachedShaders); 159 FUNCTION_TABLE_ENTRY(glGetAttribLocation); 160 FUNCTION_TABLE_ENTRY(glGetBufferParameteriv); 161 FUNCTION_TABLE_ENTRY(glGetFramebufferAttachmentParameteriv); 162 FUNCTION_TABLE_ENTRY(glGetProgramInfoLog); 163 FUNCTION_TABLE_ENTRY(glGetProgramiv); 164 FUNCTION_TABLE_ENTRY(glGetRenderbufferParameteriv); 165 FUNCTION_TABLE_ENTRY(glGetShaderInfoLog); 166 FUNCTION_TABLE_ENTRY(glGetShaderiv); 167 FUNCTION_TABLE_ENTRY(glGetShaderSource); 168 FUNCTION_TABLE_ENTRY(glGetUniformfv); 169 FUNCTION_TABLE_ENTRY(glGetUniformiv); 170 FUNCTION_TABLE_ENTRY(glGetUniformLocation); 171 FUNCTION_TABLE_ENTRY(glGetVertexAttribfv); 172 FUNCTION_TABLE_ENTRY(glGetVertexAttribiv); 173 FUNCTION_TABLE_ENTRY(glGetVertexAttribPointerv); 174 FUNCTION_TABLE_ENTRY(glIsBuffer); 175 FUNCTION_TABLE_ENTRY(glIsFramebuffer); 176 FUNCTION_TABLE_ENTRY(glIsProgram); 177 FUNCTION_TABLE_ENTRY(glIsRenderbuffer); 178 FUNCTION_TABLE_ENTRY(glIsShader); 179 FUNCTION_TABLE_ENTRY(glLinkProgram); 180 FUNCTION_TABLE_ENTRY(glRenderbufferStorage); 181 FUNCTION_TABLE_ENTRY(glRenderbufferStorageMultisample); 182 FUNCTION_TABLE_ENTRY(glSampleCoverage); 183 FUNCTION_TABLE_ENTRY(glShaderSource); 184 FUNCTION_TABLE_ENTRY(glStencilFuncSeparate); 185 FUNCTION_TABLE_ENTRY(glStencilMaskSeparate); 186 FUNCTION_TABLE_ENTRY(glStencilOpSeparate); 187 FUNCTION_TABLE_ENTRY(glUniform1f); 188 FUNCTION_TABLE_ENTRY(glUniform1fv); 189 FUNCTION_TABLE_ENTRY(glUniform1i); 190 FUNCTION_TABLE_ENTRY(glUniform1iv); 191 FUNCTION_TABLE_ENTRY(glUniform2f); 192 FUNCTION_TABLE_ENTRY(glUniform2fv); 193 FUNCTION_TABLE_ENTRY(glUniform2i); 194 FUNCTION_TABLE_ENTRY(glUniform2iv); 195 FUNCTION_TABLE_ENTRY(glUniform3f); 196 FUNCTION_TABLE_ENTRY(glUniform3fv); 197 FUNCTION_TABLE_ENTRY(glUniform3i); 198 FUNCTION_TABLE_ENTRY(glUniform3iv); 199 FUNCTION_TABLE_ENTRY(glUniform4f); 200 FUNCTION_TABLE_ENTRY(glUniform4fv); 201 FUNCTION_TABLE_ENTRY(glUniform4i); 202 FUNCTION_TABLE_ENTRY(glUniform4iv); 203 FUNCTION_TABLE_ENTRY(glUniformMatrix2fv); 204 FUNCTION_TABLE_ENTRY(glUniformMatrix3fv); 205 FUNCTION_TABLE_ENTRY(glUniformMatrix4fv); 206 FUNCTION_TABLE_ENTRY(glUseProgram); 207 FUNCTION_TABLE_ENTRY(glValidateProgram); 208 FUNCTION_TABLE_ENTRY(glVertexAttrib1f); 209 FUNCTION_TABLE_ENTRY(glVertexAttrib1fv); 210 FUNCTION_TABLE_ENTRY(glVertexAttrib2f); 211 FUNCTION_TABLE_ENTRY(glVertexAttrib2fv); 212 FUNCTION_TABLE_ENTRY(glVertexAttrib3f); 213 FUNCTION_TABLE_ENTRY(glVertexAttrib3fv); 214 FUNCTION_TABLE_ENTRY(glVertexAttrib4f); 215 FUNCTION_TABLE_ENTRY(glVertexAttrib4fv); 216 FUNCTION_TABLE_ENTRY(glVertexAttribPointer); 217 } OpenGLFunctionTable; 218 219 // We disable the shims for OpenGLShims.cpp, so that we can set them. 220 #ifndef DISABLE_SHIMS 221 #define LOOKUP_GL_FUNCTION(Function) WebCore::openGLFunctionTable()->Function 222 #define glActiveTexture LOOKUP_GL_FUNCTION(glActiveTexture) 223 #define glAttachShader LOOKUP_GL_FUNCTION(glAttachShader) 224 #define glBindAttribLocation LOOKUP_GL_FUNCTION(glBindAttribLocation) 225 #define glBindBuffer LOOKUP_GL_FUNCTION(glBindBuffer) 226 #define glBindFramebufferEXT LOOKUP_GL_FUNCTION(glBindFramebuffer) 227 #define glBindRenderbufferEXT LOOKUP_GL_FUNCTION(glBindRenderbuffer) 228 #define glBlendColor LOOKUP_GL_FUNCTION(glBlendColor) 229 #define glBlendEquation LOOKUP_GL_FUNCTION(glBlendEquation) 230 #define glBlendEquationSeparate LOOKUP_GL_FUNCTION(glBlendEquationSeparate) 231 #define glBlendFuncSeparate LOOKUP_GL_FUNCTION(glBlendFuncSeparate) 232 #define glBlitFramebufferEXT LOOKUP_GL_FUNCTION(glBlitFramebuffer) 233 #define glBufferData LOOKUP_GL_FUNCTION(glBufferData) 234 #define glBufferSubData LOOKUP_GL_FUNCTION(glBufferSubData) 235 #define glCheckFramebufferStatusEXT LOOKUP_GL_FUNCTION(glCheckFramebufferStatus) 236 #define glCompileShader LOOKUP_GL_FUNCTION(glCompileShader) 237 #define glCreateProgram LOOKUP_GL_FUNCTION(glCreateProgram) 238 #define glCreateShader LOOKUP_GL_FUNCTION(glCreateShader) 239 #define glDeleteBuffers LOOKUP_GL_FUNCTION(glDeleteBuffers) 240 #define glDeleteFramebuffersEXT LOOKUP_GL_FUNCTION(glDeleteFramebuffers) 241 #define glDeleteProgram LOOKUP_GL_FUNCTION(glDeleteProgram) 242 #define glDeleteRenderbuffersEXT LOOKUP_GL_FUNCTION(glDeleteRenderbuffers) 243 #define glDeleteShader LOOKUP_GL_FUNCTION(glDeleteShader) 244 #define glDetachShader LOOKUP_GL_FUNCTION(glDetachShader) 245 #define glDisableVertexAttribArray LOOKUP_GL_FUNCTION(glDisableVertexAttribArray) 246 #define glEnableVertexAttribArray LOOKUP_GL_FUNCTION(glEnableVertexAttribArray) 247 #define glFramebufferRenderbufferEXT LOOKUP_GL_FUNCTION(glFramebufferRenderbuffer) 248 #define glFramebufferTexture2DEXT LOOKUP_GL_FUNCTION(glFramebufferTexture2D) 249 #define glGenBuffers LOOKUP_GL_FUNCTION(glGenBuffers) 250 #define glGenerateMipmapEXT LOOKUP_GL_FUNCTION(glGenerateMipmap) 251 #define glGenFramebuffersEXT LOOKUP_GL_FUNCTION(glGenFramebuffers) 252 #define glGenRenderbuffersEXT LOOKUP_GL_FUNCTION(glGenRenderbuffers) 253 #define glGetActiveAttrib LOOKUP_GL_FUNCTION(glGetActiveAttrib) 254 #define glGetActiveUniform LOOKUP_GL_FUNCTION(glGetActiveUniform) 255 #define glGetAttachedShaders LOOKUP_GL_FUNCTION(glGetAttachedShaders) 256 #define glGetAttribLocation LOOKUP_GL_FUNCTION(glGetAttribLocation) 257 #define glGetBufferParameteriv LOOKUP_GL_FUNCTION(glGetBufferParameteriv) 258 #define glGetBufferParameterivEXT LOOKUP_GL_FUNCTION(glGetBufferParameteriv) 259 #define glGetFramebufferAttachmentParameterivEXT LOOKUP_GL_FUNCTION(glGetFramebufferAttachmentParameteriv) 260 #define glGetProgramInfoLog LOOKUP_GL_FUNCTION(glGetProgramInfoLog) 261 #define glGetProgramiv LOOKUP_GL_FUNCTION(glGetProgramiv) 262 #define glGetRenderbufferParameterivEXT LOOKUP_GL_FUNCTION(glGetRenderbufferParameteriv) 263 #define glGetShaderInfoLog LOOKUP_GL_FUNCTION(glGetShaderInfoLog) 264 #define glGetShaderiv LOOKUP_GL_FUNCTION(glGetShaderiv) 265 #define glGetShaderSource LOOKUP_GL_FUNCTION(glGetShaderSource) 266 #define glGetUniformfv LOOKUP_GL_FUNCTION(glGetUniformfv) 267 #define glGetUniformiv LOOKUP_GL_FUNCTION(glGetUniformiv) 268 #define glGetUniformLocation LOOKUP_GL_FUNCTION(glGetUniformLocation) 269 #define glGetVertexAttribfv LOOKUP_GL_FUNCTION(glGetVertexAttribfv) 270 #define glGetVertexAttribiv LOOKUP_GL_FUNCTION(glGetVertexAttribiv) 271 #define glGetVertexAttribPointerv LOOKUP_GL_FUNCTION(glGetVertexAttribPointerv) 272 #define glIsBuffer LOOKUP_GL_FUNCTION(glIsBuffer) 273 #define glIsFramebufferEXT LOOKUP_GL_FUNCTION(glIsFramebuffer) 274 #define glIsProgram LOOKUP_GL_FUNCTION(glIsProgram) 275 #define glIsRenderbufferEXT LOOKUP_GL_FUNCTION(glIsRenderbuffer) 276 #define glIsShader LOOKUP_GL_FUNCTION(glIsShader) 277 #define glLinkProgram LOOKUP_GL_FUNCTION(glLinkProgram) 278 #define glRenderbufferStorageEXT LOOKUP_GL_FUNCTION(glRenderbufferStorage) 279 #define glRenderbufferStorageMultisampleEXT LOOKUP_GL_FUNCTION(glRenderbufferStorageMultisample) 280 #define glSampleCoverage LOOKUP_GL_FUNCTION(glSampleCoverage) 281 #define glShaderSource LOOKUP_GL_FUNCTION(glShaderSource) 282 #define glStencilFuncSeparate LOOKUP_GL_FUNCTION(glStencilFuncSeparate) 283 #define glStencilMaskSeparate LOOKUP_GL_FUNCTION(glStencilMaskSeparate) 284 #define glStencilOpSeparate LOOKUP_GL_FUNCTION(glStencilOpSeparate) 285 #define glUniform1f LOOKUP_GL_FUNCTION(glUniform1f) 286 #define glUniform1fv LOOKUP_GL_FUNCTION(glUniform1fv) 287 #define glUniform1i LOOKUP_GL_FUNCTION(glUniform1i) 288 #define glUniform1iv LOOKUP_GL_FUNCTION(glUniform1iv) 289 #define glUniform2f LOOKUP_GL_FUNCTION(glUniform2f) 290 #define glUniform2fv LOOKUP_GL_FUNCTION(glUniform2fv) 291 #define glUniform2i LOOKUP_GL_FUNCTION(glUniform2i) 292 #define glUniform2iv LOOKUP_GL_FUNCTION(glUniform2iv) 293 #define glUniform3f LOOKUP_GL_FUNCTION(glUniform3f) 294 #define glUniform3fv LOOKUP_GL_FUNCTION(glUniform3fv) 295 #define glUniform3i LOOKUP_GL_FUNCTION(glUniform3i) 296 #define glUniform3iv LOOKUP_GL_FUNCTION(glUniform3iv) 297 #define glUniform4f LOOKUP_GL_FUNCTION(glUniform4f) 298 #define glUniform4fv LOOKUP_GL_FUNCTION(glUniform4fv) 299 #define glUniform4i LOOKUP_GL_FUNCTION(glUniform4i) 300 #define glUniform4iv LOOKUP_GL_FUNCTION(glUniform4iv) 301 #define glUniformMatrix2fv LOOKUP_GL_FUNCTION(glUniformMatrix2fv) 302 #define glUniformMatrix3fv LOOKUP_GL_FUNCTION(glUniformMatrix3fv) 303 #define glUniformMatrix4fv LOOKUP_GL_FUNCTION(glUniformMatrix4fv) 304 #define glUseProgram LOOKUP_GL_FUNCTION(glUseProgram) 305 #define glValidateProgram LOOKUP_GL_FUNCTION(glValidateProgram) 306 #define glVertexAttrib1f LOOKUP_GL_FUNCTION(glVertexAttrib1f) 307 #define glVertexAttrib1fv LOOKUP_GL_FUNCTION(glVertexAttrib1fv) 308 #define glVertexAttrib2f LOOKUP_GL_FUNCTION(glVertexAttrib2f) 309 #define glVertexAttrib2fv LOOKUP_GL_FUNCTION(glVertexAttrib2fv) 310 #define glVertexAttrib3f LOOKUP_GL_FUNCTION(glVertexAttrib3f) 311 #define glVertexAttrib3fv LOOKUP_GL_FUNCTION(glVertexAttrib3fv) 312 #define glVertexAttrib4f LOOKUP_GL_FUNCTION(glVertexAttrib4f) 313 #define glVertexAttrib4fv LOOKUP_GL_FUNCTION(glVertexAttrib4fv) 314 #define glVertexAttribPointer LOOKUP_GL_FUNCTION(glVertexAttribPointer) 315 #endif 316