@table(Name, Type, Arguments) OpenGLFunctions: { {BindTexture `void` `GLenum target, GLuint texture`} {BlendFunc `void` `GLenum sfactor, GLenum dfactor`} {Clear `void` `GLbitfield mask`} {ClearAccum `void` `GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha`} {ClearColor `void` `GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha`} {ClearDepth `void` `GLclampd depth`} {ClearIndex `void` `GLfloat c`} {ClearStencil `void` `GLint s`} {ClipPlane `void` `GLenum plane, const GLdouble *equation`} {CullFace `void` `GLenum mode`} {DeleteTextures `void` `GLsizei n, const GLuint *textures`} {Disable `void` `GLenum cap`} {DrawArrays `void` `GLenum mode, GLint first, GLsizei count`} {DrawBuffer `void` `GLenum mode`} {DrawElements `void` `GLenum mode, GLsizei count, GLenum type, const GLvoid *indices`} {DrawArraysInstanced `void` `GLenum mode, GLint first, GLsizei count, GLsizei instancecount`} {Enable `void` `GLenum cap`} {GenTextures `void` `GLsizei n, GLuint *textures`} {GetClipPlane `void` `GLenum plane, GLdouble *equation`} {GetDoublev `void` `GLenum pname, GLdouble *params`} {GetError `GLenum` `void`} {GetFloatv `void` `GLenum pname, GLfloat *params`} {GetIntegerv `void` `GLenum pname, GLint *params`} {GetPointerv `void` `GLenum pname, GLvoid* *params`} {GetString `const GLubyte *` `GLenum name`} {GetTexEnvfv `void` `GLenum target, GLenum pname, GLfloat *params`} {GetTexEnviv `void` `GLenum target, GLenum pname, GLint *params`} {GetTexGendv `void` `GLenum coord, GLenum pname, GLdouble *params`} {GetTexGenfv `void` `GLenum coord, GLenum pname, GLfloat *params`} {GetTexGeniv `void` `GLenum coord, GLenum pname, GLint *params`} {GetTexImage `void` `GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels`} {GetTexLevelParameterfv `void` `GLenum target, GLint level, GLenum pname, GLfloat *params`} {GetTexLevelParameteriv `void` `GLenum target, GLint level, GLenum pname, GLint *params`} {GetTexParameterfv `void` `GLenum target, GLenum pname, GLfloat *params`} {GetTexParameteriv `void` `GLenum target, GLenum pname, GLint *params`} {GenerateMipmap `void` `GLenum target` } {Hint `void` `GLenum target, GLenum mode`} {IsTexture `GLboolean` `GLuint texture`} {LineWidth `void` `GLfloat width`} {ListBase `void` `GLuint base`} {LoadName `void` `GLuint name`} {LogicOp `void` `GLenum opcode`} {PointSize `void` `GLfloat size`} {PolygonMode `void` `GLenum face, GLenum mode`} {Scissor `void` `GLint x, GLint y, GLsizei width, GLsizei height`} {TexImage1D `void` `GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels`} {TexImage2D `void` `GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels`} {TexParameterf `void` `GLenum target, GLenum pname, GLfloat param`} {TexParameterfv `void` `GLenum target, GLenum pname, const GLfloat *params`} {TexParameteri `void` `GLenum target, GLenum pname, GLint param`} {TexParameteriv `void` `GLenum target, GLenum pname, const GLint *params`} {TexSubImage1D `void` `GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels`} {TexSubImage2D `void` `GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels`} {CompressedTexImage2D `void` `GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *pixels`} {ActiveTexture `void` `GLenum texture`} {Viewport `void` `GLint x, GLint y, GLsizei width, GLsizei height`} {GenBuffers `void` `GLsizei n, GLuint *buffers`} {BindBuffer `void` `GLenum target, GLuint buffer`} {BufferData `void` `GLenum target, GLsizeiptr size, const void *data, GLenum usage`} {BufferSubData `void` `GLenum target, GLintptr offset, GLsizeiptr size, const void *data`} {GenVertexArrays `void` `GLsizei n, GLuint *arrays`} {BindVertexArray `void` `GLenum array`} {GetAttribLocation `GLint` `GLuint program, const GLchar *name`} {EnableVertexAttribArray `void` `GLuint index`} {DisableVertexAttribArray `void` `GLuint index`} {VertexAttribPointer `void` `GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer`} {VertexAttribIPointer `void` `GLuint index, GLint size, GLenum type, GLsizei stride, const void * pointer`} {VertexAttribLPointer `void` `GLuint index, GLint size, GLenum type, GLsizei stride, const void * pointer`} {VertexAttribDivisor `void` `GLuint index, GLuint divisor`} {CreateShader `GLuint` `GLenum type`} {ShaderSource `void` `GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length`} {CompileShader `void` `GLuint shader`} {DeleteShader `void` `GLuint shader`} {GetShaderiv `void` `GLuint shader, GLenum pname, GLint *params`} {GetShaderInfoLog `void` `GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog`} {CreateProgram `GLuint` `void`} {UseProgram `void` `GLuint program`} {AttachShader `void` `GLuint program, GLuint shader`} {DeleteProgram `void` `GLuint program`} {LinkProgram `void` `GLuint program`} {GetProgramiv `void` `GLuint program, GLenum pname, GLint *params`} {GetProgramInfoLog `void` `GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog`} {GetUniformLocation `GLint` `GLuint program, const GLchar *name`} {Uniform1i `void` `GLint location, GLint v0`} {Uniform2f `void` `GLint location, GLfloat v0, GLfloat v1`} {Uniform3f `void` `GLint location, GLfloat v0, GLfloat v1, GLfloat v2`} {UniformMatrix4fv `void` `GLint location, GLsizei count, GLboolean transpose, const GLfloat *value`} {DebugMessageCallback `void` `void (*)(GLenum, GLenum, GLuint, GLenum, GLsizei, const GLchar *, const void *), const void *userParam`} } // sixten: Generate the typedefs. @table_gen { @expand(OpenGLFunctions s) `typedef $(s.Type) opengl_$(s.Name)($(s.Arguments));`; } // sixten: Generate the global pointers. @table_gen { @expand(OpenGLFunctions s) `global opengl_$(s.Name) *gl$(s.Name) = 0;`; } // sixten: Generate OpenGL_LoadAllFunctions @table_gen { `extern void *OpenGL_LoadFunction(char *);`; `static void OpenGL_LoadAllFunctions(void)`; `{`; @expand(OpenGLFunctions s) `gl$(s.Name) = (opengl_$(s.Name) *)OpenGL_LoadFunction("gl$(s.Name)");`; `}`; }