GLOBAL
	base_opcode 1024
	encoder_headers "glUtils.h" "GLEncoderUtils.h"
	
#void glClipPlanef(GLenum plane, GLfloat *equation)
glClipPlanef
  dir equation in
	len equation (4 * sizeof(float))

#void glFogfv(GLenum pname, GLfloat *params)
glFogfv
	len params (glUtilsParamSize(pname) * sizeof(GLfloat))

#void glGetFloatv(GLenum pname, GLfloat *params)
glGetFloatv
	dir params out
	len params (glUtilsParamSize(pname) * sizeof(GLfloat))

#void glGetLightfv(GLenum light, GLenum pname, GLfloat *params)
glGetLightfv
	dir params out
	len params (glUtilsParamSize(pname) * sizeof(GLfloat))

#void glGetMaterialfv(GLenum face, GLenum pname, GLfloat *params)
glGetMaterialfv
	dir params out
	len params (glUtilsParamSize(pname) * sizeof(GLfloat))

#void glGetTexEnvfv(GLenum env, GLenum pname, GLfloat *params)
glGetTexEnvfv
	dir params out
	len params (glUtilsParamSize(pname) * sizeof(GLfloat))

#void glGetTexParameterfv(GLenum target, GLenum pname, GLfloat *params)
glGetTexParameterfv
	dir params out
	len params (glUtilsParamSize(pname) * sizeof(GLfloat))

#void glLightModelfv(GLenum pname, GLfloat *params)
glLightModelfv
	len params (glUtilsParamSize(pname) * sizeof(GLfloat))

#void glLightfv(GLenum light, GLenum pname, GLfloat *params)
glLightfv
	len params (glUtilsParamSize(pname) * sizeof(GLfloat))

#void glLoadMatrixf(GLfloat *m)
glLoadMatrixf
	len m (16 * sizeof(GLfloat))

#void glMaterialfv(GLenum face, GLenum pname, GLfloat *params)
glMaterialfv
	len params (glUtilsParamSize(pname) * sizeof(GLfloat))

#void glMultMatrixf(GLfloat *m)
glMultMatrixf
	len m (16 * sizeof(GLfloat))

#void glPointParameterfv(GLenum pname, GLfloat *params)
glPointParameterfv
	len params (glUtilsParamSize(pname) * sizeof(GLfloat))

#void glTexEnvfv(GLenum target, GLenum pname, GLfloat *params)
glTexEnvfv
	len params (glUtilsParamSize(pname) * sizeof(GLfloat))

#void glTexParameterfv(GLenum target, GLenum pname, GLfloat *params)
glTexParameterfv
	len params (glUtilsParamSize(pname) * sizeof(GLfloat))

#void glBufferData(GLenum target, GLsizeiptr size, GLvoid *data, GLenum usage)
glBufferData
	len data size

#void glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data)
glBufferSubData
	dir data in
	len data size

#void glClipPlanex(GLenum plane, GLfixed *eqn)
glClipPlanex
	dir eqn in
	len eqn (4 * sizeof(GLfixed))

#void glColorPointer(GLint size, GLenum type, GLsizei stride, GLvoid *pointer)
#we treat the pointer as offset to a VBO
glColorPointer
	len pointer (sizeof(unsigned int))
	flag unsupported

#void glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, GLvoid *data)
glCompressedTexImage2D
	len data imageSize
    var_flag data nullAllowed

#void glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, GLvoid *data)
glCompressedTexSubImage2D
	len data imageSize

#void glDeleteBuffers(GLsizei n, GLuint *buffers)
glDeleteBuffers
	len buffers (n * sizeof(GLuint))
    param_check n if(n<0){ ctx->setError(GL_INVALID_VALUE); return; } 

#void glDeleteTextures(GLsizei n, GLuint *textures)
glDeleteTextures
	len textures (n * sizeof(GLuint))
    param_check n if(n<0){ ctx->setError(GL_INVALID_VALUE); return; } 

#this function is marked as unsupported - it shouldn't be called directly
#instead it translated into - glDrawDirectElements and glDrawIndirectElements
#void glDrawElements(GLenum mode, GLsizei count, GLenum type, GLvoid *indices)
glDrawElements
	flag unsupported


#void glFogxv(GLenum pname, GLfixed *params)
glFogxv
	len params (glUtilsParamSize(pname) * sizeof(GLfixed))

#void glGetBooleanv(GLenum pname, GLboolean *params)
glGetBooleanv
	dir params out
	len params (glUtilsParamSize(pname) * sizeof(GLboolean))

#void glGetBufferParameteriv(GLenum target, GLenum pname, GLint *params)
glGetBufferParameteriv
	len params (sizeof(GLint))
	dir params out

#void glGenBuffers(GLsizei n, GLuint *buffers)
glGenBuffers
	len buffers (n * sizeof(GLuint))
	dir buffers out
    param_check n if(n<0){ ctx->setError(GL_INVALID_VALUE); return; } 

#void glGenTextures(GLsizei n, GLuint *textures)
glGenTextures
	len textures (n * sizeof(GLuint))
	dir textures out
    param_check n if(n<0){ ctx->setError(GL_INVALID_VALUE); return; } 

#void glGetFixedv(GLenum pname, GLfixed *params)
glGetFixedv
	dir params out
	len params (glUtilsParamSize(pname) * sizeof(GLfixed))

#void glGetIntegerv(GLenum pname, GLint *params)
glGetIntegerv
	dir params out
	len params (glUtilsParamSize(pname) * sizeof(GLint))

#void glGetLightxv(GLenum light, GLenum pname, GLfixed *params)
glGetLightxv
	dir params out
	len params (glUtilsParamSize(pname) * sizeof(GLfixed))

#void glGetMaterialxv(GLenum face, GLenum pname, GLfixed *params)
glGetMaterialxv
	dir params out
	len params (glUtilsParamSize(pname) * sizeof(GLfixed))

#void glGetPointerv(GLenum pname, void **params)
glGetPointerv
	flag unsupported

#GLubyte* glGetString(GLenum name)
glGetString
  flag unsupported

#void glGetTexEnviv(GLenum env, GLenum pname, GLint *params)
glGetTexEnviv
	dir params out
	len params (glUtilsParamSize(pname) * sizeof(GLint))

#void glGetTexEnvxv(GLenum env, GLenum pname, GLfixed *params)
glGetTexEnvxv
	dir params out
	len params (glUtilsParamSize(pname) * sizeof(GLfixed))

#void glGetTexParameteriv(GLenum target, GLenum pname, GLint *params)
glGetTexParameteriv
	dir params out
	len params (sizeof(GLint))

#void glGetTexParameterxv(GLenum target, GLenum pname, GLfixed *params)
glGetTexParameterxv
	dir params out
	len params (sizeof(GLfixed))

#void glLightModelxv(GLenum pname, GLfixed *params)
glLightModelxv
	len params (glUtilsParamSize(pname) * sizeof(GLfixed))

#void glLightxv(GLenum light, GLenum pname, GLfixed *params)
glLightxv
	len params (glUtilsParamSize(pname) * sizeof(GLfixed))

#void glLoadMatrixx(GLfixed *m)
glLoadMatrixx
	len m (16 * sizeof(GLfixed))

#void glMaterialxv(GLenum face, GLenum pname, GLfixed *params)
glMaterialxv
	len params (glUtilsParamSize(pname) * sizeof(GLfixed))

#void glMultMatrixx(GLfixed *m)
glMultMatrixx
	len m (16 * sizeof(GLfixed))

#void glNormalPointer(GLenum type, GLsizei stride, GLvoid *pointer)
#we treat the pointer as an offset to a VBO
glNormalPointer
	len pointer (sizeof(unsigned int))
	flag unsupported

#void glPointParameterxv(GLenum pname, GLfixed *params)
glPointParameterxv
	len params (glUtilsParamSize(pname) * sizeof(GLfixed))

#void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels)
glReadPixels
	dir pixels out
	len pixels pixelDataSize(self, width, height, format, type, 1)

#void glTexCoordPointer(GLint size, GLenum type, GLsizei stride, GLvoid *pointer)
glTexCoordPointer
	len pointer (sizeof(unsigned int))
	flag unsupported

#void glTexEnviv(GLenum target, GLenum pname, GLint *params)
glTexEnviv
	len params (glUtilsParamSize(pname) * sizeof(GLint))

#void glTexEnvxv(GLenum target, GLenum pname, GLfixed *params)
glTexEnvxv
	len params (glUtilsParamSize(pname) * sizeof(GLfixed))

#void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, GLvoid *pixels)
glTexImage2D
	dir pixels in
	len pixels pixelDataSize(self, width, height, format, type, 0)
	var_flag pixels nullAllowed isLarge

#void glTexParameteriv(GLenum target, GLenum pname, GLint *params)
glTexParameteriv
	len params (glUtilsParamSize(pname) * sizeof(GLint))

#void glTexParameterxv(GLenum target, GLenum pname, GLfixed *params)
glTexParameterxv
	len params (glUtilsParamSize(pname) * sizeof(GLfixed))

#void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels)
glTexSubImage2D
	len pixels pixelDataSize(self, width, height, format, type, 0)
        var_flag pixels isLarge

#void glVertexPointer(GLint size, GLenum type, GLsizei stride, GLvoid *pointer)
# we treat the pointer as an offset to a VBO
glVertexPointer
	flag unsupported

#void glPointSizePointerOES(GLenum type, GLsizei stride, GLvoid *pointer)
glPointSizePointerOES
	len pointer (sizeof(unsigned int))
	flag unsupported

#void glGetClipPlanef(GLenum pname, GLfloat * eqn)
glGetClipPlanef
	dir eqn out
	len eqn (4 * sizeof(GLfloat))

#void glVertexPointerData(GLint size, GLenum type, GLsizei stride, void *data, GLuint datalen)
glVertexPointerData
	len data datalen
	custom_pack data glUtilsPackPointerData((unsigned char *)ptr, (unsigned char *)data, size, type, stride, datalen)
	flag custom_decoder
	flag not_api

#void glColorPointerData(GLint size, GLenum type, GLsizei stride, void *data, GLuint datalen)
glColorPointerData
	len data datalen
	flag custom_decoder
	custom_pack data glUtilsPackPointerData((unsigned char *)ptr, (unsigned char *)data, size, type, stride, datalen)
	flag not_api

#void glNormalPointerData(GLenum type, GLsizei stride, void *data, GLuint datalen)
glNormalPointerData
	len data datalen
	flag custom_decoder
	custom_pack data glUtilsPackPointerData((unsigned char *)ptr, (unsigned char *)data, 3, type, stride, datalen)
	flag not_api

#void glPointSizePointerData(GLenum type, GLsizei stride, void *data, GLuint datalen)
glPointSizePointerData
	len data datalen
	flag custom_decoder
	custom_pack data glUtilsPackPointerData((unsigned char *)ptr, (unsigned char *)data, 1, type, stride, datalen)
	flag not_api

#void glTexCoordPointerData(GLint size, GLenum type, GLsizei stride, void *data, GLuint datalen)
glTexCoordPointerData
	len data datalen
	flag custom_decoder
	custom_pack data glUtilsPackPointerData((unsigned char *)ptr, (unsigned char *)data, size, type, stride, datalen)
	flag not_api

#void glWeightPointerData(GLint size, GLenum type, GLsizei stride,  void * data, GLuint datalen)
glWeightPointerData
  	len data datalen
  	custom_pack data glUtilsPackPointerData((unsigned char *)ptr, (unsigned char*)data, size, type, stride, datalen)
  	flag custom_decoder
	flag not_api

#void glMatrixIndexPointerData(GLint size, GLenum type, GLsizei stride,  void * data, GLuint datalen)
glMatrixIndexPointerData
	len data datalen
  	custom_pack data glUtilsPackPointerData((unsigned char *)ptr, (unsigned char*)data, size, type, stride, datalen)
  	flag custom_decoder
	flag not_api

glVertexPointerOffset
	flag custom_decoder
	flag not_api
glNormalPointerOffset
	flag custom_decoder
	flag not_api
glTexCoordPointerOffset
	flag custom_decoder
	flag not_api
glPointSizePointerOffset
	flag custom_decoder
	flag not_api
glColorPointerOffset
	flag custom_decoder
	flag not_api
glWeightPointerOffset
    flag custom_decoder
	flag not_api
glMatrixIndexPointerOffset
    flag custom_decoder
	flag not_api

glDrawElementsData
	len data datalen
	flag custom_decoder
	flag not_api

glDrawElementsOffset
	flag custom_decoder
	flag not_api

glGetCompressedTextureFormats
	dir formats out
	len formats (count * sizeof(GLint))
	flag custom_decoder
	flag not_api

glFinishRoundTrip
	flag custom_decoder
	flag not_api

#gles1 extensions

#void glDrawTexsvOES(GLshort *coords)
glDrawTexsvOES
	len coords (5 * sizeof(GLshort))

#void glDrawTexivOES(GLint *coords)
glDrawTexivOES
	len coords (5 * sizeof(GLint))

#void glDrawTexxvOES(GLfixed *coords)
glDrawTexxvOES
	len coords (5 * sizeof(GLfixed))

#void glDrawTexfvOES(GLfloat *coords)
glDrawTexfvOES
	len coords (5 * sizeof(GLfloat))

#glClipPlanexOES(GLenum plane, const GLfixed * equation)
glClipPlanexOES
	dir equation in
	len equation (4 * sizeof(GLfixed))

#glClipPlanexIMG(GLenum plane, const GLfixed * equation)
glClipPlanexIMG
	dir equation in
	len equation (4 * sizeof(GLfixed))

#void glFogxvOES(GLenum pname, GLfixed *params)
glFogxvOES
	dir params in
	len params (glUtilsParamSize(pname) * sizeof(GLfixed))

#void glGetClipPlanexOES(GLenum pname,  GLfixed * eqn)
glGetClipPlanexOES
	dir eqn out
	len eqn (4 * sizeof(GLfixed))

#void glGetClipPlanex(GLenum pname,  GLfixed * eqn)
glGetClipPlanex
	dir eqn out
	len eqn (4 * sizeof(GLfixed))

#void glGetFixedvOES(GLenum pname, GLfixed *params)
glGetFixedvOES
	dir params out
	len params (glUtilsParamSize(pname) * sizeof(GLfixed))

#void glGetLightxvOES(GLenum light, GLenum pname, GLfixed *params)
glGetLightxvOES
	dir params out
	len params (glUtilsParamSize(pname) * sizeof(GLfixed))

#void glGetMaterialxvOES(GLenum face, GLenum pname, GLfixed *params)
glGetMaterialxvOES
	dir params out
	len params (glUtilsParamSize(pname) * sizeof(GLfixed))

#void glGetTexEnvxvOES(GLenum env, GLenum pname, GLfixed *params)
glGetTexEnvxvOES
	dir params out
	len params (glUtilsParamSize(pname) * sizeof(GLfixed))

#void glGetTexParameterxvOES(GLenum target, GLenum pname, GLfixed *params)
glGetTexParameterxvOES
	dir params out
	len params (glUtilsParamSize(pname) * sizeof(GLfixed))

#void glLightModelxvOES(GLenum pname, GLfixed *params)
glLightModelxvOES
	dir params in
	len params (glUtilsParamSize(pname) * sizeof(GLfixed))

#void glLightxvOES(GLenum light, GLenum pname, GLfixed *params)
glLightxvOES
	dir params in
	len params (glUtilsParamSize(pname) * sizeof(GLfixed))

#void glLoadMatrixxOES(GLfixed *m)
glLoadMatrixxOES
	dir m in
	len m (16 * sizeof(GLfixed))

#void glMaterialxvOES(GLenum face, GLenum pname, GLfixed *params)
glMaterialxvOES
	dir params in
	len params (glUtilsParamSize(pname) * sizeof(GLfixed))

#void glMultMatrixxOES(GLfixed *m)
glMultMatrixxOES
	dir m in
	len m (16 * sizeof(GLfixed))

#void glPointParameterxvOES(GLenum pname, GLfixed *params)
glPointParameterxvOES
	dir params in
	len params (glUtilsParamSize(pname) * sizeof(GLfixed))

#void glTexEnvxvOES(GLenum target, GLenum pname, GLfixed *params)
glTexEnvxvOES
	dir params in
	len params (glUtilsParamSize(pname) * sizeof(GLfixed))

#void glTexParameterxvOES(GLenum target, GLenum pname, GLfixed *params)
glTexParameterxvOES
	dir params in
	len params (glUtilsParamSize(pname) * sizeof(GLfixed))

#void glDeleteRenderbuffersOES(GLsizei n, GLuint *renderbuffers)
glDeleteRenderbuffersOES
	dir renderbuffers in
	len renderbuffers (n * sizeof(GLuint))
    param_check n if(n<0){ ctx->setError(GL_INVALID_VALUE); return; } 

#void glGenRenderbuffersOES(GLsizei n, GLuint *renderbuffers)
glGenRenderbuffersOES
	dir renderbuffers out 
	len renderbuffers (n * sizeof(GLuint))
    param_check n if(n<0){ ctx->setError(GL_INVALID_VALUE); return; } 

#void glGetRenderbufferParameterivOES(GLenum target, GLenum pname, GLint *params)
glGetRenderbufferParameterivOES
	dir params out
	len params (glUtilsParamSize(pname) * sizeof(GLint))

#void glDeleteFramebuffersOES(GLsizei n, GLuint *framebuffers)
glDeleteFramebuffersOES
	dir framebuffers in
	len framebuffers (n * sizeof(GLuint))
    param_check n if(n<0){ ctx->setError(GL_INVALID_VALUE); return; } 

#void glGenFramebuffersOES(GLsizei n, GLuint *framebuffers)
glGenFramebuffersOES
	dir framebuffers out
	len framebuffers (n * sizeof(GLuint))
    param_check n if(n<0){ ctx->setError(GL_INVALID_VALUE); return; } 

#void glGetFramebufferAttachmentParameterivOES(GLenum target, GLenum attachment, GLenum pname, GLint *params)
glGetFramebufferAttachmentParameterivOES
	dir params out
	len params (glUtilsParamSize(pname) * sizeof(GLint))

#void* glMapBufferOES(GLenum target, GLenum access)
glMapBufferOES
	flag unsupported

#void glGetBufferPointervOES(GLenum target, GLenum pname, GLvoid ** params)
glGetBufferPointervOES
	flag unsupported

#void glMatrixIndexPointerOES(GLint size, GLenum type, GLsizei stride, GLvoid *pointer)
glMatrixIndexPointerOES
	len pointer (sizeof(unsigned int))
	flag unsupported

#void glWeightPointerOES(GLint size, GLenum type, GLsizei stride, GLvoid *pointer)
glWeightPointerOES
	len pointer (sizeof(unsigned int))
	flag unsupported

#glQueryMatrixxOES(GLfixed * mantissa, GLint * exponent)
glQueryMatrixxOES
	dir mantissa out
	len mantissa (16 * sizeof(GLfixed))
	dir exponent out
	len exponent (16 * sizeof(GLfixed))

#void glClipPlanefOES(GLenum plane, GLfloat *equation)
glClipPlanefOES
	dir equation in
	len equation (4 * sizeof(GLfloat))

#void glClipPlanefIMG(GLenum plane, GLfloat *equation)
glClipPlanefIMG
	dir equation in
	len equation (4 * sizeof(GLfloat))

#void glGetClipPlanefOES(GLenum pname, GLfloat * eqn)
glGetClipPlanefOES
	dir eqn out
	len eqn (4 * sizeof(GLfloat))

#void glTexGenfvOES(GLenum coord, GLenum pname, GLfloat *params)
glTexGenfvOES
	len params (glUtilsParamSize(pname) * sizeof(GLfloat))

#void glTexGenivOES(GLenum coord, GLenum pname, GLint *params)
glTexGenivOES
	len params (glUtilsParamSize(pname) * sizeof(GLint))

#void glTexGenxvOES(GLenum coord, GLenum pname, GLfixed *params)
glTexGenxvOES
	len params (glUtilsParamSize(pname) * sizeof(GLfixed))

#void glGetTexGenfvOES(GLenum coord, GLenum pname, GLfloat *params)
glGetTexGenfvOES
	len params (glUtilsParamSize(pname) * sizeof(GLfloat))

#void glGetTexGenivOES(GLenum coord, GLenum pname, GLint *params)
glGetTexGenivOES
	len params (glUtilsParamSize(pname) * sizeof(GLint))

#void glGetTexGenxvOES(GLenum coord, GLenum pname, GLfixed *params)
glGetTexGenxvOES
	len params (glUtilsParamSize(pname) * sizeof(GLfixed))

#void glDeleteVertexArraysOES(GLsizei n, const GLuint *arrays)
glDeleteVertexArraysOES
	dir arrays in
	len arrays (n * sizeof(GLuint))
    param_check n if(n<0){ ctx->setError(GL_INVALID_VALUE); return; } 

#void glGenVertexArraysOES(GLsizei n, GLuint *arrays)
glGenVertexArraysOES
	dir arrays out
	len arrays (n * sizeof(GLuint))
    param_check n if(n<0){ ctx->setError(GL_INVALID_VALUE); return; } 

#void glDiscardFramebufferEXT(GLenum target, GLsizei numAttachments, const GLenum *attachments)
glDiscardFramebufferEXT
	dir attachments in
	len attachments (numAttachments * sizeof(const GLenum))

#void glMultiDrawArraysEXT(GLenum mode, GLint *first, GLsizei *count, GLsizei primcount)
glMultiDrawArraysEXT
	flag unsupported
	
#void glMultiDrawElementsEXT(GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount)
glMultiDrawElementsEXT
	flag unsupported

#void glMultiDrawArraysSUN(GLenum mode, GLint *first, GLsizei *count, GLsizei primcount)
glMultiDrawArraysSUN
	flag unsupported
	
#void glMultiDrawElementsSUN(GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount)
glMultiDrawElementsSUN
	flag unsupported

#void glDeleteFencesNV(GLsizei n, const GLuint *fences)
glDeleteFencesNV
	dir fences in
	len fences (n * sizeof(GLuint))
    param_check n if(n<0){ ctx->setError(GL_INVALID_VALUE); return; } 

#void glGenFencesNV(GLsizei n, GLuint *fences)
glGenFencesNV
	dir fences in
	len fences (n * sizeof(GLuint))
    param_check n if(n<0){ ctx->setError(GL_INVALID_VALUE); return; } 

#void glGetFenceivNV(GLuint fence, GLenum pname, GLint *params)
glGetFenceivNV
	dir params out
	len params (glUtilsParamSize(pname) * sizeof(GLint))

#void glGetDriverControlsQCOM(GLint *num, GLsizei size, GLuint *driverControls)
glGetDriverControlsQCOM
	dir num out
	len num (1 * sizeof(GLint))
	dir driverControls out
	len driverControls (size * sizeof(GLuint))

#void glGetDriverControlStringQCOM(GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString)
glGetDriverControlStringQCOM
	dir length out
	len length (1 * sizeof(GLsizei))
	dir driverControlString out
	len driverControlString (1 * sizeof(GLchar))

#void glExtGetTexturesQCOM(GLuint *textures, GLint maxTextures, GLint *numTextures)
glExtGetTexturesQCOM
	dir textures out
	len textures (maxTextures * sizeof(GLuint))
	dir numTextures out
	len numTextures (1 * sizeof(GLint))

#void glExtGetBuffersQCOM(GLuint *buffers, GLint maxBuffers, GLint *numBuffers)
glExtGetBuffersQCOM
	dir buffers out
	len buffers (maxBuffers * sizeof(GLuint))
	dir numBuffers out
	len numBuffers (1 * sizeof(GLint))

#void glExtGetRenderbuffersQCOM(GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers)
glExtGetRenderbuffersQCOM
	dir renderbuffers out
	len renderbuffers (maxRenderbuffers * sizeof(GLuint))
	dir numRenderbuffers out
	len numRenderbuffers (1 * sizeof(GLint))

#void glExtGetFramebuffersQCOM(GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers)
glExtGetFramebuffersQCOM
	dir framebuffers out
	len framebuffers (maxFramebuffers * sizeof(GLuint))
	dir numFramebuffers out
	len numFramebuffers (1 * sizeof(GLint))

#void glExtGetTexLevelParameterivQCOM(GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params)
glExtGetTexLevelParameterivQCOM
	dir params out
	len params (glUtilsParamSize(pname) * sizeof(GLint))

#void glExtGetTexSubImageQCOM(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid *texels)
glExtGetTexSubImageQCOM
	dir texels out
	len texels (depth * pixelDataSize(self, width, height, format, type, 0))

#void glExtGetBufferPointervQCOM(GLenum target, GLvoid **params)
glExtGetBufferPointervQCOM
	flag unsupported

#void glExtGetShadersQCOM(GLuint *shaders, GLint maxShaders, GLint *numShaders)
glExtGetShadersQCOM
	dir shaders out
	len shaders (maxShaders * sizeof(GLuint))
	dir numShaders out
	len numShaders (1 * sizeof(GLint))

#void glExtGetProgramsQCOM(GLuint *programs, GLint maxPrograms, GLint *numPrograms)
glExtGetProgramsQCOM
	dir programs out
	len programs (maxPrograms * sizeof(GLuint))
	dir numPrograms out
	len numPrograms (1 * sizeof(GLint))

#void glExtGetProgramBinarySourceQCOM(GLuint program, GLenum shadertype, GLchar *source, GLint *length)
glExtGetProgramBinarySourceQCOM
	flag unsupported
