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
	var_flag data nullAllowed

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

#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
        var_flag data nullAllowed

#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 glesv1_enc::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 glesv1_enc::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 glesv1_enc::pixelDataSize(self, width, height, format, type, 0)
        var_flag pixels nullAllowed 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, const GLint *first, const GLsizei *count, GLsizei primcount)
glMultiDrawArraysEXT
	flag unsupported
	
#void glMultiDrawElementsEXT(GLenum mode, const GLsizei *count, GLenum type, const GLvoid* const *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 * glesv1_enc::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
