GLOBAL
	base_opcode 2048
	encoder_headers <string.h> "glUtils.h" "GL2EncoderUtils.h"

#void glBindAttribLocation(GLuint program, GLuint index, GLchar *name)
glBindAttribLocation
	len name (strlen(name) + 1)

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

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

#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 isLarge

#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 isLarge

#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 glDeleteFramebuffers(GLsizei n, GLuint *framebuffers)
glDeleteFramebuffers
	len framebuffers (n * sizeof(GLuint))
    param_check n if(n<0){ ctx->setError(GL_INVALID_VALUE); return; } 

#void glDeleteRenderbuffers(GLsizei n, GLuint *renderbuffers)
glDeleteRenderbuffers
	len renderbuffers (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; } 

#void glDrawElements(GLenum mode, GLsizei count, GLenum type, GLvoid *indices)
glDrawElements
	flag unsupported

#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 glGenFramebuffers(GLsizei n, GLuint *framebuffers)
glGenFramebuffers
	len framebuffers (n * sizeof(GLuint))
	dir framebuffers out
    param_check n if(n<0){ ctx->setError(GL_INVALID_VALUE); return; } 

#void glGenRenderbuffers(GLsizei n, GLuint *renderbuffers)
glGenRenderbuffers
	len renderbuffers (n * sizeof(GLuint))
	dir renderbuffers 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 glGetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, GLchar *name)
glGetActiveAttrib
	len name bufsize
	dir name out
	var_flag name nullAllowed
	dir length out
	len length (sizeof(GLsizei))
	var_flag length nullAllowed
	dir size out
	len size (sizeof(GLint))
	dir type out
	len type (sizeof(GLenum))
	
#void glGetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, GLchar *name)
glGetActiveUniform
	len name bufsize
	dir name out
	  var_flag name nullAllowed
	dir length out
	len length (sizeof(GLsizei))
	var_flag length nullAllowed
	dir size out
	len size (sizeof(GLint))
	dir type out
	len type (sizeof(GLenum))


#void glGetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei *count, GLuint *shaders)
glGetAttachedShaders
	len shaders (maxcount*sizeof(GLuint))
	dir shaders out
	dir count out
	var_flag count nullAllowed
	len count (sizeof(GLsizei))

#int glGetAttribLocation(GLuint program, GLchar *name)
glGetAttribLocation
	len name (strlen(name) + 1)

#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 glGetFloatv(GLenum pname, GLfloat *params)
glGetFloatv
	dir params out
	len params (glUtilsParamSize(pname) * sizeof(GLfloat))

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

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

#void glGetProgramiv(GLuint program, GLenum pname, GLint *params)
glGetProgramiv
	dir params out
	len params sizeof(GLint)
#XXX - might change if extension constants that return more then one value


#void glGetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei *length, GLchar *infolog)
glGetProgramInfoLog
	dir infolog out
	len infolog bufsize
	dir length out
	len length sizeof(GLsizei)

#void glGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint *params)
glGetRenderbufferParameteriv
	dir params out
	len params sizeof(GLint)
# XXX - might change if pname with value larger then one is added

#void glGetShaderiv(GLuint shader, GLenum pname, GLint *params)
glGetShaderiv
	dir params out
	len params sizeof(GLint)
# XXX - might change if pname with value larger then one is added

#void glGetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *infolog)
glGetShaderInfoLog
	dir length out
	len length (sizeof(GLsizei))
	var_flag length nullAllowed
	dir infolog out
	len infolog bufsize
	

#void glGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision)
glGetShaderPrecisionFormat
	dir range out
	len range (2 * sizeof(GLint))
	dir precision out
	len precision (sizeof(GLint))

#void glGetShaderSource(GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *source)
glGetShaderSource
	dir length out
	len length (sizeof(GLsizei))
	var_flag length nullAllowed
	dir source out
	len source bufsize

#GLubyte* glGetString(GLenum name)
glGetString
	flag unsupported

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

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

#void glGetUniformfv(GLuint program, GLint location, GLfloat *params)
glGetUniformfv
	dir params out
	len params glSizeof(uniformType(self, program, location))

#void glGetUniformiv(GLuint program, GLint location, GLint *params)
glGetUniformiv
	dir params out
	len params glSizeof(uniformType(self, program, location))

#int glGetUniformLocation(GLuint program, GLchar *name)
glGetUniformLocation
	len name (strlen(name) + 1)

# client-state shall be handled locally by the encoder in most cases.
# however, GL_CURRENT_VERTEX_ATTRIB and potential others are handled by the server side,
# thus we still need to implement it. 
#void glGetVertexAttribfv(GLuint index, GLenum pname, GLfloat *params)
glGetVertexAttribfv
	dir params out
	len params (glUtilsParamSize(pname) * sizeof(GLfloat))

#see glGetVertexAttribfv for comments
#void glGetVertexAttribiv(GLuint index, GLenum pname, GLint *params)
glGetVertexAttribiv
	dir params out
	len params (glUtilsParamSize(pname) * sizeof(GLint))



#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 glShaderBinary(GLsizei n, GLuint *shaders, GLenum binaryformat, GLvoid *binary, GLsizei length)
glShaderBinary
	flag unsupported

#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 glTexParameterfv(GLenum target, GLenum pname, GLfloat *params)
glTexParameterfv
	len params (glUtilsParamSize(pname) * sizeof(GLfloat))
#void glTexParameteriv(GLenum target, GLenum pname, GLint *params)
glTexParameteriv
	len params (glUtilsParamSize(pname) * sizeof(GLint))

#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 glUniform1fv(GLint location, GLsizei count, GLfloat *v)
glUniform1fv
	len v (count * sizeof(GLfloat))

#void glUniform1iv(GLint location, GLsizei count, GLint *v)
glUniform1iv
	len v (count * sizeof(GLint))

#void glUniform2fv(GLint location, GLsizei count, GLfloat *v)
glUniform2fv
	len v (count * 2 * sizeof(GLfloat))

#void glUniform2iv(GLint location, GLsizei count, GLint *v)
glUniform2iv
	len v (count * 2 * sizeof(GLint))

#void glUniform3fv(GLint location, GLsizei count, GLfloat *v)
glUniform3fv
	len v (count * 3 * sizeof(GLfloat))

#void glUniform3iv(GLint location, GLsizei count, GLint *v)
glUniform3iv
	len v (3 * count * sizeof(GLint))

#void glUniform4fv(GLint location, GLsizei count, GLfloat *v)
glUniform4fv
	len v (4 * count * sizeof(GLfloat))

#void glUniform4iv(GLint location, GLsizei count, GLint *v)
glUniform4iv
	len v (4 * count * sizeof(GLint))

#void glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, GLfloat *value)
glUniformMatrix2fv
	len value (count * 4 * sizeof(GLfloat))

#void glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, GLfloat *value)
glUniformMatrix3fv
	len value (count * 9 * sizeof(GLfloat))
	
#void glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, GLfloat *value)
glUniformMatrix4fv
	len value (count * 16 * sizeof(GLfloat))

#void glVertexAttrib1fv(GLuint indx, GLfloat *values)
glVertexAttrib1fv
	len values (sizeof(GLfloat))
#void glVertexAttrib2fv(GLuint indx, GLfloat *values)
glVertexAttrib2fv
	len values (2 * sizeof(GLfloat))

#void glVertexAttrib3fv(GLuint indx, GLfloat *values)
glVertexAttrib3fv
	len values (3 * sizeof(GLfloat))

#void glVertexAttrib4fv(GLuint indx, GLfloat *values)
glVertexAttrib4fv
	len values (4 * sizeof(GLfloat))

#void glVertexAttribPointer(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLvoid *ptr)
glVertexAttribPointer
	flag unsupported

#void glGetProgramBinaryOES(GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary)
glGetProgramBinaryOES
	flag unsupported

#void glProgramBinaryOES(GLuint program, GLenum binaryFormat, GLvoid *binary, GLint length)
glProgramBinaryOES
	flag unsupported

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

#void glTexImage3DOES(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, GLvoid *pixels)
glTexImage3DOES
	len pixels pixelDataSize3D(self, width, height, depth, format, type, 0)
	var_flag pixels nullAllowed isLarge

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

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

#void glCompressedTexSubImage3DOES(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, GLvoid *data)
glCompressedTexSubImage3DOES
	len data imageSize
        var_flag data isLarge

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

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


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

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


# handled by encoder
#void glShaderSource(GLuint shader, GLsizei count, GLstr *string, const GLint *length)
glShaderSource
	flag unsupported



#void glGetPerfMonitorGroupsAMD(GLint *numGroups, GLsizei groupsSize, GLuint *groups)
glGetPerfMonitorGroupsAMD
	flag unsupported

#void glGetPerfMonitorCountersAMD(GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters)
glGetPerfMonitorCountersAMD
	flag unsupported

#void glGetPerfMonitorGroupStringAMD(GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString)
glGetPerfMonitorGroupStringAMD
	flag unsupported

#void glGetPerfMonitorCounterStringAMD(GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString)
glGetPerfMonitorCounterStringAMD
	flag unsupported

#void glGetPerfMonitorCounterInfoAMD(GLuint group, GLuint counter, GLenum pname, GLvoid *data)
glGetPerfMonitorCounterInfoAMD
	flag unsupported

#void glGenPerfMonitorsAMD(GLsizei n, GLuint *monitors)
glGenPerfMonitorsAMD
	flag unsupported

#void glDeletePerfMonitorsAMD(GLsizei n, GLuint *monitors)
glDeletePerfMonitorsAMD
	flag unsupported

#void glSelectPerfMonitorCountersAMD(GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *countersList)
glSelectPerfMonitorCountersAMD
	flag unsupported

#void glBeginPerfMonitorAMD(GLuint monitor)
glBeginPerfMonitorAMD
	flag unsupported

#void glEndPerfMonitorAMD(GLuint monitor)
glEndPerfMonitorAMD
	flag unsupported

#void glGetPerfMonitorCounterDataAMD(GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten)
glGetPerfMonitorCounterDataAMD
	flag unsupported

#void glRenderbufferStorageMultisampleIMG(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)
glRenderbufferStorageMultisampleIMG
	flag unsupported

#void glFramebufferTexture2DMultisampleIMG(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples)
glFramebufferTexture2DMultisampleIMG
	flag unsupported

#void glDeleteFencesNV(GLsizei n, GLuint *fences)
glDeleteFencesNV
	flag unsupported

#void glGenFencesNV(GLsizei n, GLuint *fences)
glGenFencesNV
	flag unsupported

#GLboolean glIsFenceNV(GLuint fence)
glIsFenceNV
	flag unsupported

#GLboolean glTestFenceNV(GLuint fence)
glTestFenceNV
	flag unsupported

#void glGetFenceivNV(GLuint fence, GLenum pname, GLint *params)
glGetFenceivNV
	flag unsupported

#void glFinishFenceNV(GLuint fence)
glFinishFenceNV
	flag unsupported

#void glSetFenceNV(GLuint fence, GLenum condition)
glSetFenceNV
	flag unsupported

#void glCoverageMaskNV(GLboolean mask)
glCoverageMaskNV
	flag unsupported

#void glCoverageOperationNV(GLenum operation)
glCoverageOperationNV
	flag unsupported

#void glGetDriverControlsQCOM(GLint *num, GLsizei size, GLuint *driverControls)
glGetDriverControlsQCOM
	flag unsupported

#void glGetDriverControlStringQCOM(GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString)
glGetDriverControlStringQCOM
	flag unsupported

#void glEnableDriverControlQCOM(GLuint driverControl)
glEnableDriverControlQCOM
	flag unsupported

#void glDisableDriverControlQCOM(GLuint driverControl)
glDisableDriverControlQCOM
	flag unsupported

#void glExtGetTexturesQCOM(GLuint *textures, GLint maxTextures, GLint *numTextures)
glExtGetTexturesQCOM
	flag unsupported

#void glExtGetBuffersQCOM(GLuint *buffers, GLint maxBuffers, GLint *numBuffers)
glExtGetBuffersQCOM
	flag unsupported

#void glExtGetRenderbuffersQCOM(GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers)
glExtGetRenderbuffersQCOM
	flag unsupported

#void glExtGetFramebuffersQCOM(GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers)
glExtGetFramebuffersQCOM
	flag unsupported

#void glExtGetTexLevelParameterivQCOM(GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params)
glExtGetTexLevelParameterivQCOM
	flag unsupported

#void glExtTexObjectStateOverrideiQCOM(GLenum target, GLenum pname, GLint param)
glExtTexObjectStateOverrideiQCOM
	flag unsupported

#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
	flag unsupported

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

#void glExtGetShadersQCOM(GLuint *shaders, GLint maxShaders, GLint *numShaders)
glExtGetShadersQCOM
	flag unsupported

#void glExtGetProgramsQCOM(GLuint *programs, GLint maxPrograms, GLint *numPrograms)
glExtGetProgramsQCOM
	flag unsupported

#GLboolean glExtIsProgramBinaryQCOM(GLuint program)
glExtIsProgramBinaryQCOM
	flag unsupported

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

#void glStartTilingQCOM(GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask)
glStartTilingQCOM
	flag unsupported

#void glEndTilingQCOM(GLbitfield preserveMask)
glEndTilingQCOM
	flag unsupported


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

glVertexAttribPointerOffset
	flag custom_decoder
	flag not_api

#client-state, handled by the encoder
#GL_ENTRY(void, glGetVertexAttribPointerv, GLuint index, GLenum pname, GLvoid** pointer)
glGetVertexAttribPointerv
	flag unsupported

glDrawElementsData
	len data datalen
	flag custom_decoder
	flag not_api

glDrawElementsOffset
	flag custom_decoder
	flag not_api

#GL_ENTRY(void, glGetCompressedTextureFormats, int count, GLint *formats)
glGetCompressedTextureFormats
	dir formats out
	len formats (count * sizeof(GLint))
	flag custom_decoder
	flag not_api

#GL_ENTRY(void, glShaderString, GLuint shader, GLchar *string, GLsizei len)
glShaderString
	len string len
	flag custom_decoder
	flag not_api
	
glFinishRoundTrip
	flag custom_decoder
	flag not_api

