1/* 2 * Copyright 2013 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17#include <EGL/egl.h> 18#include "gl3stub.h" 19 20GLboolean gl3stubInit() 21{ 22#define FIND_PROC(s) s = (void*)eglGetProcAddress(#s); 23 FIND_PROC( glReadBuffer ); 24 FIND_PROC( glDrawRangeElements ); 25 FIND_PROC( glTexImage3D ); 26 FIND_PROC( glTexSubImage3D ); 27 FIND_PROC( glCopyTexSubImage3D ); 28 FIND_PROC( glCompressedTexImage3D ); 29 FIND_PROC( glCompressedTexSubImage3D ); 30 FIND_PROC( glGenQueries ); 31 FIND_PROC( glDeleteQueries ); 32 FIND_PROC( glIsQuery ); 33 FIND_PROC( glBeginQuery ); 34 FIND_PROC( glEndQuery ); 35 FIND_PROC( glGetQueryiv ); 36 FIND_PROC( glGetQueryObjectuiv ); 37 FIND_PROC( glUnmapBuffer ); 38 FIND_PROC( glGetBufferPointerv ); 39 FIND_PROC( glDrawBuffers ); 40 FIND_PROC( glUniformMatrix2x3fv ); 41 FIND_PROC( glUniformMatrix3x2fv ); 42 FIND_PROC( glUniformMatrix2x4fv ); 43 FIND_PROC( glUniformMatrix4x2fv ); 44 FIND_PROC( glUniformMatrix3x4fv ); 45 FIND_PROC( glUniformMatrix4x3fv ); 46 FIND_PROC( glBlitFramebuffer ); 47 FIND_PROC( glRenderbufferStorageMultisample ); 48 FIND_PROC( glFramebufferTextureLayer ); 49 FIND_PROC( glMapBufferRange ); 50 FIND_PROC( glFlushMappedBufferRange ); 51 FIND_PROC( glBindVertexArray ); 52 FIND_PROC( glDeleteVertexArrays ); 53 FIND_PROC( glGenVertexArrays ); 54 FIND_PROC( glIsVertexArray ); 55 FIND_PROC( glGetIntegeri_v ); 56 FIND_PROC( glBeginTransformFeedback ); 57 FIND_PROC( glEndTransformFeedback ); 58 FIND_PROC( glBindBufferRange ); 59 FIND_PROC( glBindBufferBase ); 60 FIND_PROC( glTransformFeedbackVaryings ); 61 FIND_PROC( glGetTransformFeedbackVarying ); 62 FIND_PROC( glVertexAttribIPointer ); 63 FIND_PROC( glGetVertexAttribIiv ); 64 FIND_PROC( glGetVertexAttribIuiv ); 65 FIND_PROC( glVertexAttribI4i ); 66 FIND_PROC( glVertexAttribI4ui ); 67 FIND_PROC( glVertexAttribI4iv ); 68 FIND_PROC( glVertexAttribI4uiv ); 69 FIND_PROC( glGetUniformuiv ); 70 FIND_PROC( glGetFragDataLocation ); 71 FIND_PROC( glUniform1ui ); 72 FIND_PROC( glUniform2ui ); 73 FIND_PROC( glUniform3ui ); 74 FIND_PROC( glUniform4ui ); 75 FIND_PROC( glUniform1uiv ); 76 FIND_PROC( glUniform2uiv ); 77 FIND_PROC( glUniform3uiv ); 78 FIND_PROC( glUniform4uiv ); 79 FIND_PROC( glClearBufferiv ); 80 FIND_PROC( glClearBufferuiv ); 81 FIND_PROC( glClearBufferfv ); 82 FIND_PROC( glClearBufferfi ); 83 FIND_PROC( glGetStringi ); 84 FIND_PROC( glCopyBufferSubData ); 85 FIND_PROC( glGetUniformIndices ); 86 FIND_PROC( glGetActiveUniformsiv ); 87 FIND_PROC( glGetUniformBlockIndex ); 88 FIND_PROC( glGetActiveUniformBlockiv ); 89 FIND_PROC( glGetActiveUniformBlockName ); 90 FIND_PROC( glUniformBlockBinding ); 91 FIND_PROC( glDrawArraysInstanced ); 92 FIND_PROC( glDrawElementsInstanced ); 93 FIND_PROC( glFenceSync ); 94 FIND_PROC( glIsSync ); 95 FIND_PROC( glDeleteSync ); 96 FIND_PROC( glClientWaitSync ); 97 FIND_PROC( glWaitSync ); 98 FIND_PROC( glGetInteger64v ); 99 FIND_PROC( glGetSynciv ); 100 FIND_PROC( glGetInteger64i_v ); 101 FIND_PROC( glGetBufferParameteri64v ); 102 FIND_PROC( glGenSamplers ); 103 FIND_PROC( glDeleteSamplers ); 104 FIND_PROC( glIsSampler ); 105 FIND_PROC( glBindSampler ); 106 FIND_PROC( glSamplerParameteri ); 107 FIND_PROC( glSamplerParameteriv ); 108 FIND_PROC( glSamplerParameterf ); 109 FIND_PROC( glSamplerParameterfv ); 110 FIND_PROC( glGetSamplerParameteriv ); 111 FIND_PROC( glGetSamplerParameterfv ); 112 FIND_PROC( glVertexAttribDivisor ); 113 FIND_PROC( glBindTransformFeedback ); 114 FIND_PROC( glDeleteTransformFeedbacks ); 115 FIND_PROC( glGenTransformFeedbacks ); 116 FIND_PROC( glIsTransformFeedback ); 117 FIND_PROC( glPauseTransformFeedback ); 118 FIND_PROC( glResumeTransformFeedback ); 119 FIND_PROC( glGetProgramBinary ); 120 FIND_PROC( glProgramBinary ); 121 FIND_PROC( glProgramParameteri ); 122 FIND_PROC( glInvalidateFramebuffer ); 123 FIND_PROC( glInvalidateSubFramebuffer ); 124 FIND_PROC( glTexStorage2D ); 125 FIND_PROC( glTexStorage3D ); 126 FIND_PROC( glGetInternalformativ ); 127#undef FIND_PROC 128 129 if( !glReadBuffer || !glDrawRangeElements || !glTexImage3D || !glTexSubImage3D 130 || !glCopyTexSubImage3D || !glCompressedTexImage3D 131 || !glCompressedTexSubImage3D || !glGenQueries || !glDeleteQueries 132 || !glIsQuery || !glBeginQuery || !glEndQuery || !glGetQueryiv 133 || !glGetQueryObjectuiv || !glUnmapBuffer || !glGetBufferPointerv 134 || !glDrawBuffers || !glUniformMatrix2x3fv || !glUniformMatrix3x2fv 135 || !glUniformMatrix2x4fv || !glUniformMatrix4x2fv || !glUniformMatrix3x4fv 136 || !glUniformMatrix4x3fv || !glBlitFramebuffer 137 || !glRenderbufferStorageMultisample || !glFramebufferTextureLayer 138 || !glMapBufferRange || !glFlushMappedBufferRange || !glBindVertexArray 139 || !glDeleteVertexArrays || !glGenVertexArrays || !glIsVertexArray 140 || !glGetIntegeri_v || !glBeginTransformFeedback || !glEndTransformFeedback 141 || !glBindBufferRange || !glBindBufferBase || !glTransformFeedbackVaryings 142 || !glGetTransformFeedbackVarying || !glVertexAttribIPointer 143 || !glGetVertexAttribIiv || !glGetVertexAttribIuiv || !glVertexAttribI4i 144 || !glVertexAttribI4ui || !glVertexAttribI4iv || !glVertexAttribI4uiv 145 || !glGetUniformuiv || !glGetFragDataLocation || !glUniform1ui 146 || !glUniform2ui || !glUniform3ui || !glUniform4ui || !glUniform1uiv 147 || !glUniform2uiv || !glUniform3uiv || !glUniform4uiv || !glClearBufferiv 148 || !glClearBufferuiv || !glClearBufferfv || !glClearBufferfi || !glGetStringi 149 || !glCopyBufferSubData || !glGetUniformIndices || !glGetActiveUniformsiv 150 || !glGetUniformBlockIndex || !glGetActiveUniformBlockiv 151 || !glGetActiveUniformBlockName || !glUniformBlockBinding 152 || !glDrawArraysInstanced || !glDrawElementsInstanced || !glFenceSync 153 || !glIsSync || !glDeleteSync || !glClientWaitSync || !glWaitSync 154 || !glGetInteger64v || !glGetSynciv || !glGetInteger64i_v 155 || !glGetBufferParameteri64v || !glGenSamplers || !glDeleteSamplers 156 || !glIsSampler || !glBindSampler || !glSamplerParameteri 157 || !glSamplerParameteriv || !glSamplerParameterf || !glSamplerParameterfv 158 || !glGetSamplerParameteriv || !glGetSamplerParameterfv 159 || !glVertexAttribDivisor || !glBindTransformFeedback 160 || !glDeleteTransformFeedbacks || !glGenTransformFeedbacks 161 || !glIsTransformFeedback || !glPauseTransformFeedback 162 || !glResumeTransformFeedback || !glGetProgramBinary || !glProgramBinary 163 || !glProgramParameteri || !glInvalidateFramebuffer 164 || !glInvalidateSubFramebuffer || !glTexStorage2D || !glTexStorage3D 165 || !glGetInternalformativ ) 166 { 167 return GL_FALSE; 168 } 169 170 return GL_TRUE; 171} 172 173/* Function pointer definitions */GL_APICALL void (* GL_APIENTRY glReadBuffer)( GLenum mode ); 174GL_APICALL void (* GL_APIENTRY glDrawRangeElements)( GLenum mode, 175 GLuint start, 176 GLuint end, 177 GLsizei count, 178 GLenum type, 179 const GLvoid* indices ); 180GL_APICALL void (* GL_APIENTRY glTexImage3D)( GLenum target, 181 GLint level, 182 GLint internalformat, 183 GLsizei width, 184 GLsizei height, 185 GLsizei depth, 186 GLint border, 187 GLenum format, 188 GLenum type, 189 const GLvoid* pixels ); 190GL_APICALL void (* GL_APIENTRY glTexSubImage3D)( GLenum target, 191 GLint level, 192 GLint xoffset, 193 GLint yoffset, 194 GLint zoffset, 195 GLsizei width, 196 GLsizei height, 197 GLsizei depth, 198 GLenum format, 199 GLenum type, 200 const GLvoid* pixels ); 201GL_APICALL void (* GL_APIENTRY glCopyTexSubImage3D)( GLenum target, 202 GLint level, 203 GLint xoffset, 204 GLint yoffset, 205 GLint zoffset, 206 GLint x, 207 GLint y, 208 GLsizei width, 209 GLsizei height ); 210GL_APICALL void (* GL_APIENTRY glCompressedTexImage3D)( GLenum target, 211 GLint level, 212 GLenum internalformat, 213 GLsizei width, 214 GLsizei height, 215 GLsizei depth, 216 GLint border, 217 GLsizei imageSize, 218 const GLvoid* data ); 219GL_APICALL void (* GL_APIENTRY glCompressedTexSubImage3D)( GLenum target, 220 GLint level, 221 GLint xoffset, 222 GLint yoffset, 223 GLint zoffset, 224 GLsizei width, 225 GLsizei height, 226 GLsizei depth, 227 GLenum format, 228 GLsizei imageSize, 229 const GLvoid* data ); 230GL_APICALL void (* GL_APIENTRY glGenQueries)( GLsizei n, GLuint* ids ); 231GL_APICALL void (* GL_APIENTRY glDeleteQueries)( GLsizei n, const GLuint* ids ); 232GL_APICALL GLboolean (* GL_APIENTRY glIsQuery)( GLuint id ); 233GL_APICALL void (* GL_APIENTRY glBeginQuery)( GLenum target, GLuint id ); 234GL_APICALL void (* GL_APIENTRY glEndQuery)( GLenum target ); 235GL_APICALL void (* GL_APIENTRY glGetQueryiv)( GLenum target, GLenum pname, GLint* params ); 236GL_APICALL void (* GL_APIENTRY glGetQueryObjectuiv)( GLuint id, 237 GLenum pname, 238 GLuint* params ); 239GL_APICALL GLboolean (* GL_APIENTRY glUnmapBuffer)( GLenum target ); 240GL_APICALL void (* GL_APIENTRY glGetBufferPointerv)( GLenum target, 241 GLenum pname, 242 GLvoid** params ); 243GL_APICALL void (* GL_APIENTRY glDrawBuffers)( GLsizei n, const GLenum* bufs ); 244GL_APICALL void (* GL_APIENTRY glUniformMatrix2x3fv)( GLint location, 245 GLsizei count, 246 GLboolean transpose, 247 const GLfloat* value ); 248GL_APICALL void (* GL_APIENTRY glUniformMatrix3x2fv)( GLint location, 249 GLsizei count, 250 GLboolean transpose, 251 const GLfloat* value ); 252GL_APICALL void (* GL_APIENTRY glUniformMatrix2x4fv)( GLint location, 253 GLsizei count, 254 GLboolean transpose, 255 const GLfloat* value ); 256GL_APICALL void (* GL_APIENTRY glUniformMatrix4x2fv)( GLint location, 257 GLsizei count, 258 GLboolean transpose, 259 const GLfloat* value ); 260GL_APICALL void (* GL_APIENTRY glUniformMatrix3x4fv)( GLint location, 261 GLsizei count, 262 GLboolean transpose, 263 const GLfloat* value ); 264GL_APICALL void (* GL_APIENTRY glUniformMatrix4x3fv)( GLint location, 265 GLsizei count, 266 GLboolean transpose, 267 const GLfloat* value ); 268GL_APICALL void (* GL_APIENTRY glBlitFramebuffer)( GLint srcX0, 269 GLint srcY0, 270 GLint srcX1, 271 GLint srcY1, 272 GLint dstX0, 273 GLint dstY0, 274 GLint dstX1, 275 GLint dstY1, 276 GLbitfield mask, 277 GLenum filter ); 278GL_APICALL void (* GL_APIENTRY glRenderbufferStorageMultisample)( GLenum target, 279 GLsizei samples, 280 GLenum internalformat, 281 GLsizei width, 282 GLsizei height ); 283GL_APICALL void (* GL_APIENTRY glFramebufferTextureLayer)( GLenum target, 284 GLenum attachment, 285 GLuint texture, 286 GLint level, 287 GLint layer ); 288GL_APICALL GLvoid* (* GL_APIENTRY glMapBufferRange)( GLenum target, 289 GLintptr offset, 290 GLsizeiptr length, 291 GLbitfield access ); 292GL_APICALL void (* GL_APIENTRY glFlushMappedBufferRange)( GLenum target, 293 GLintptr offset, 294 GLsizeiptr length ); 295GL_APICALL void (* GL_APIENTRY glBindVertexArray)( GLuint array ); 296GL_APICALL void (* GL_APIENTRY glDeleteVertexArrays)( GLsizei n, const GLuint* arrays ); 297GL_APICALL void (* GL_APIENTRY glGenVertexArrays)( GLsizei n, GLuint* arrays ); 298GL_APICALL GLboolean (* GL_APIENTRY glIsVertexArray)( GLuint array ); 299GL_APICALL void (* GL_APIENTRY glGetIntegeri_v)( GLenum target, 300 GLuint index, 301 GLint* data ); 302GL_APICALL void (* GL_APIENTRY glBeginTransformFeedback)( GLenum primitiveMode ); 303GL_APICALL void (* GL_APIENTRY glEndTransformFeedback)( void ); 304GL_APICALL void (* GL_APIENTRY glBindBufferRange)( GLenum target, 305 GLuint index, 306 GLuint buffer, 307 GLintptr offset, 308 GLsizeiptr size ); 309GL_APICALL void (* GL_APIENTRY glBindBufferBase)( GLenum target, 310 GLuint index, 311 GLuint buffer ); 312GL_APICALL void (* GL_APIENTRY glTransformFeedbackVaryings)( GLuint program, 313 GLsizei count, 314 const GLchar* const * varyings, 315 GLenum bufferMode ); 316GL_APICALL void (* GL_APIENTRY glGetTransformFeedbackVarying)( GLuint program, 317 GLuint index, 318 GLsizei bufSize, 319 GLsizei* length, 320 GLsizei* size, 321 GLenum* type, 322 GLchar* name ); 323GL_APICALL void (* GL_APIENTRY glVertexAttribIPointer)( GLuint index, 324 GLint size, 325 GLenum type, 326 GLsizei stride, 327 const GLvoid* pointer ); 328GL_APICALL void (* GL_APIENTRY glGetVertexAttribIiv)( GLuint index, 329 GLenum pname, 330 GLint* params ); 331GL_APICALL void (* GL_APIENTRY glGetVertexAttribIuiv)( GLuint index, 332 GLenum pname, 333 GLuint* params ); 334GL_APICALL void (* GL_APIENTRY glVertexAttribI4i)( GLuint index, 335 GLint x, 336 GLint y, 337 GLint z, 338 GLint w ); 339GL_APICALL void (* GL_APIENTRY glVertexAttribI4ui)( GLuint index, 340 GLuint x, 341 GLuint y, 342 GLuint z, 343 GLuint w ); 344GL_APICALL void (* GL_APIENTRY glVertexAttribI4iv)( GLuint index, const GLint* v ); 345GL_APICALL void (* GL_APIENTRY glVertexAttribI4uiv)( GLuint index, const GLuint* v ); 346GL_APICALL void (* GL_APIENTRY glGetUniformuiv)( GLuint program, 347 GLint location, 348 GLuint* params ); 349GL_APICALL GLint (* GL_APIENTRY glGetFragDataLocation)( GLuint program, 350 const GLchar *name ); 351GL_APICALL void (* GL_APIENTRY glUniform1ui)( GLint location, GLuint v0 ); 352GL_APICALL void (* GL_APIENTRY glUniform2ui)( GLint location, GLuint v0, GLuint v1 ); 353GL_APICALL void (* GL_APIENTRY glUniform3ui)( GLint location, 354 GLuint v0, 355 GLuint v1, 356 GLuint v2 ); 357GL_APICALL void (* GL_APIENTRY glUniform4ui)( GLint location, 358 GLuint v0, 359 GLuint v1, 360 GLuint v2, 361 GLuint v3 ); 362GL_APICALL void (* GL_APIENTRY glUniform1uiv)( GLint location, 363 GLsizei count, 364 const GLuint* value ); 365GL_APICALL void (* GL_APIENTRY glUniform2uiv)( GLint location, 366 GLsizei count, 367 const GLuint* value ); 368GL_APICALL void (* GL_APIENTRY glUniform3uiv)( GLint location, 369 GLsizei count, 370 const GLuint* value ); 371GL_APICALL void (* GL_APIENTRY glUniform4uiv)( GLint location, 372 GLsizei count, 373 const GLuint* value ); 374GL_APICALL void (* GL_APIENTRY glClearBufferiv)( GLenum buffer, 375 GLint drawbuffer, 376 const GLint* value ); 377GL_APICALL void (* GL_APIENTRY glClearBufferuiv)( GLenum buffer, 378 GLint drawbuffer, 379 const GLuint* value ); 380GL_APICALL void (* GL_APIENTRY glClearBufferfv)( GLenum buffer, 381 GLint drawbuffer, 382 const GLfloat* value ); 383GL_APICALL void (* GL_APIENTRY glClearBufferfi)( GLenum buffer, 384 GLint drawbuffer, 385 GLfloat depth, 386 GLint stencil ); 387GL_APICALL const GLubyte* (* GL_APIENTRY glGetStringi)( GLenum name, GLuint index ); 388GL_APICALL void (* GL_APIENTRY glCopyBufferSubData)( GLenum readTarget, 389 GLenum writeTarget, 390 GLintptr readOffset, 391 GLintptr writeOffset, 392 GLsizeiptr size ); 393GL_APICALL void (* GL_APIENTRY glGetUniformIndices)( GLuint program, 394 GLsizei uniformCount, 395 const GLchar* const * uniformNames, 396 GLuint* uniformIndices ); 397GL_APICALL void (* GL_APIENTRY glGetActiveUniformsiv)( GLuint program, 398 GLsizei uniformCount, 399 const GLuint* uniformIndices, 400 GLenum pname, 401 GLint* params ); 402GL_APICALL GLuint (* GL_APIENTRY glGetUniformBlockIndex)( GLuint program, 403 const GLchar* uniformBlockName ); 404GL_APICALL void (* GL_APIENTRY glGetActiveUniformBlockiv)( GLuint program, 405 GLuint uniformBlockIndex, 406 GLenum pname, 407 GLint* params ); 408GL_APICALL void (* GL_APIENTRY glGetActiveUniformBlockName)( GLuint program, 409 GLuint uniformBlockIndex, 410 GLsizei bufSize, 411 GLsizei* length, 412 GLchar* uniformBlockName ); 413GL_APICALL void (* GL_APIENTRY glUniformBlockBinding)( GLuint program, 414 GLuint uniformBlockIndex, 415 GLuint uniformBlockBinding ); 416GL_APICALL void (* GL_APIENTRY glDrawArraysInstanced)( GLenum mode, 417 GLint first, 418 GLsizei count, 419 GLsizei instanceCount ); 420GL_APICALL void (* GL_APIENTRY glDrawElementsInstanced)( GLenum mode, 421 GLsizei count, 422 GLenum type, 423 const GLvoid* indices, 424 GLsizei instanceCount ); 425GL_APICALL GLsync (* GL_APIENTRY glFenceSync)( GLenum condition, GLbitfield flags ); 426GL_APICALL GLboolean (* GL_APIENTRY glIsSync)( GLsync sync ); 427GL_APICALL void (* GL_APIENTRY glDeleteSync)( GLsync sync ); 428GL_APICALL GLenum (* GL_APIENTRY glClientWaitSync)( GLsync sync, 429 GLbitfield flags, 430 GLuint64 timeout ); 431GL_APICALL void (* GL_APIENTRY glWaitSync)( GLsync sync, 432 GLbitfield flags, 433 GLuint64 timeout ); 434GL_APICALL void (* GL_APIENTRY glGetInteger64v)( GLenum pname, GLint64* params ); 435GL_APICALL void (* GL_APIENTRY glGetSynciv)( GLsync sync, 436 GLenum pname, 437 GLsizei bufSize, 438 GLsizei* length, 439 GLint* values ); 440GL_APICALL void (* GL_APIENTRY glGetInteger64i_v)( GLenum target, 441 GLuint index, 442 GLint64* data ); 443GL_APICALL void (* GL_APIENTRY glGetBufferParameteri64v)( GLenum target, 444 GLenum pname, 445 GLint64* params ); 446GL_APICALL void (* GL_APIENTRY glGenSamplers)( GLsizei count, GLuint* samplers ); 447GL_APICALL void (* GL_APIENTRY glDeleteSamplers)( GLsizei count, const GLuint* samplers ); 448GL_APICALL GLboolean (* GL_APIENTRY glIsSampler)( GLuint sampler ); 449GL_APICALL void (* GL_APIENTRY glBindSampler)( GLuint unit, GLuint sampler ); 450GL_APICALL void (* GL_APIENTRY glSamplerParameteri)( GLuint sampler, 451 GLenum pname, 452 GLint param ); 453GL_APICALL void (* GL_APIENTRY glSamplerParameteriv)( GLuint sampler, 454 GLenum pname, 455 const GLint* param ); 456GL_APICALL void (* GL_APIENTRY glSamplerParameterf)( GLuint sampler, 457 GLenum pname, 458 GLfloat param ); 459GL_APICALL void (* GL_APIENTRY glSamplerParameterfv)( GLuint sampler, 460 GLenum pname, 461 const GLfloat* param ); 462GL_APICALL void (* GL_APIENTRY glGetSamplerParameteriv)( GLuint sampler, 463 GLenum pname, 464 GLint* params ); 465GL_APICALL void (* GL_APIENTRY glGetSamplerParameterfv)( GLuint sampler, 466 GLenum pname, 467 GLfloat* params ); 468GL_APICALL void (* GL_APIENTRY glVertexAttribDivisor)( GLuint index, GLuint divisor ); 469GL_APICALL void (* GL_APIENTRY glBindTransformFeedback)( GLenum target, GLuint id ); 470GL_APICALL void (* GL_APIENTRY glDeleteTransformFeedbacks)( GLsizei n, const GLuint* ids ); 471GL_APICALL void (* GL_APIENTRY glGenTransformFeedbacks)( GLsizei n, GLuint* ids ); 472GL_APICALL GLboolean (* GL_APIENTRY glIsTransformFeedback)( GLuint id ); 473GL_APICALL void (* GL_APIENTRY glPauseTransformFeedback)( void ); 474GL_APICALL void (* GL_APIENTRY glResumeTransformFeedback)( void ); 475GL_APICALL void (* GL_APIENTRY glGetProgramBinary)( GLuint program, 476 GLsizei bufSize, 477 GLsizei* length, 478 GLenum* binaryFormat, 479 GLvoid* binary ); 480GL_APICALL void (* GL_APIENTRY glProgramBinary)( GLuint program, 481 GLenum binaryFormat, 482 const GLvoid* binary, 483 GLsizei length ); 484GL_APICALL void (* GL_APIENTRY glProgramParameteri)( GLuint program, 485 GLenum pname, 486 GLint value ); 487GL_APICALL void (* GL_APIENTRY glInvalidateFramebuffer)( GLenum target, 488 GLsizei numAttachments, 489 const GLenum* attachments ); 490GL_APICALL void (* GL_APIENTRY glInvalidateSubFramebuffer)( GLenum target, 491 GLsizei numAttachments, 492 const GLenum* attachments, 493 GLint x, 494 GLint y, 495 GLsizei width, 496 GLsizei height ); 497GL_APICALL void (* GL_APIENTRY glTexStorage2D)( GLenum target, 498 GLsizei levels, 499 GLenum internalformat, 500 GLsizei width, 501 GLsizei height ); 502GL_APICALL void (* GL_APIENTRY glTexStorage3D)( GLenum target, 503 GLsizei levels, 504 GLenum internalformat, 505 GLsizei width, 506 GLsizei height, 507 GLsizei depth ); 508GL_APICALL void (* GL_APIENTRY glGetInternalformativ)( GLenum target, 509 GLenum internalformat, 510 GLenum pname, 511 GLsizei bufSize, 512 GLint* params ); 513