Newer
Older
minerva / Userland / Libraries / LibGL / GLAPI.json
@minerva minerva on 13 Jul 34 KB Initial commit
{
    "ActiveTexture": {
        "arguments": [
            {"type": "GLenum", "name": "texture"}
        ],
        "variants": {
            "api_suffixes": ["", "ARB"]
        }
    },
    "AlphaFunc": {
        "arguments": [
            {"type": "GLenum", "name": "func"},
            {"type": "GLclampf", "name": "ref"}
        ]
    },
    "ArrayElement": {
        "arguments": [
            {"type": "GLint", "name": "i"}
        ]
    },
    "AttachShader": {
        "arguments": [
            {"type": "GLuint", "name": "program"},
            {"type": "GLuint", "name": "shader"}
        ]
    },
    "Begin": {
        "arguments": [
            {"type": "GLenum", "name": "mode"}
        ]
    },
    "BindBuffer": {
        "arguments": [
            {"type": "GLenum", "name": "target"},
            {"type": "GLuint", "name": "buffer"}
        ]
    },
    "BindTexture": {
        "arguments": [
            {"type": "GLenum", "name": "target"},
            {"type": "GLuint", "name": "texture"}
        ]
    },
    "Bitmap": {
        "arguments": [
            {"type": "GLsizei", "name": ["width", "height"]},
            {"type": "GLfloat", "name": ["xorig", "yorig", "xmove", "ymove"]},
            {"type": "GLubyte const*", "name": "bitmap"}
        ]
    },
    "BlendColor": {
        "arguments": [
            {"type": "GLclampf", "name": ["red", "green", "blue", "alpha"]}
        ]
    },
    "BlendEquation": {
        "arguments": [
            {"type": "GLenum", "name": "mode"},
            {"expression": "mode"}
        ],
        "implementation": "blend_equation_separate"
    },
    "BlendEquationSeparate": {
        "arguments": [
            {"type": "GLenum", "name": ["modeRGB", "modeAlpha"]}
        ]
    },
    "BlendFunc": {
        "arguments": [
            {"type": "GLenum", "name": ["sfactor", "dfactor"]}
        ]
    },
    "BufferData": {
        "arguments": [
            {"type": "GLenum", "name": "target"},
            {"type": "GLsizeiptr", "name": "size"},
            {"type": "void const*", "name": "data"},
            {"type": "GLenum", "name": "usage"}
        ]
    },
    "BufferSubData": {
        "arguments": [
            {"type": "GLenum", "name": "target"},
            {"type": "GLintptr", "name": "offset"},
            {"type": "GLsizeiptr", "name": "size"},
            {"type": "void const*", "name": "data"}
        ]
    },
    "CallList": {
        "arguments": [
            {"type": "GLuint", "name": "list"}
        ]
    },
    "CallLists": {
        "arguments": [
            {"type": "GLsizei", "name": "n"},
            {"type": "GLenum", "name": "type"},
            {"type": "void const*", "name": "lists"}
        ]
    },
    "Clear": {
        "arguments": [
            {"type": "GLbitfield", "name": "mask"}
        ]
    },
    "ClearColor": {
        "arguments": [
            {"type": "GLclampf", "name": ["red", "green", "blue", "alpha"]}
        ]
    },
    "ClearDepth": {
        "arguments": [
            {"type": "GLdouble", "name": "depth", "cast_to": "GLfloat"}
        ]
    },
    "ClearDepthf": {
        "arguments": [
            {"type": "GLfloat", "name": "depth"}
        ],
        "implementation": "clear_depth"
    },
    "ClearStencil": {
        "arguments": [
            {"type": "GLint", "name": "s"}
        ]
    },
    "ClientActiveTexture": {
        "arguments": [
            {"type": "GLenum", "name": "target"}
        ],
        "variants": {
            "api_suffixes": ["", "ARB"]
        }
    },
    "ClipPlane": {
        "arguments": [
            {"type": "GLenum", "name": "plane"},
            {"type": "GLdouble const*", "name": "equation"}
        ]
    },
    "Color": {
        "arguments": [
            {"name": ["red", "green", "blue", "alpha"], "cast_to": "GLfloat"}
        ],
        "variants": {
            "argument_counts": [3, 4],
            "argument_defaults": ["0.f", "0.f", "0.f", "1.f"],
            "convert_range": true,
            "pointer_argument": "v",
            "types": {
                "b": {},
                "bv": {},
                "d": {},
                "dv": {},
                "f": {},
                "fv": {},
                "i": {},
                "iv": {},
                "s": {},
                "sv": {},
                "ub": {},
                "ubv": {},
                "ui": {},
                "uiv": {},
                "us": {},
                "usv": {}
            }
        }
    },
    "ColorMask": {
        "arguments": [
            {"type": "GLboolean", "name": ["red", "green", "blue", "alpha"]}
        ]
    },
    "ColorMaterial": {
        "arguments": [
            {"type": "GLenum", "name": "face"},
            {"type": "GLenum", "name": "mode"}
        ]
    },
    "ColorPointer": {
        "arguments": [
            {"type": "GLint", "name": "size"},
            {"type": "GLenum", "name": "type"},
            {"type": "GLsizei", "name": "stride"},
            {"type": "void const*", "name": "pointer"}
        ]
    },
    "CompileShader": {
        "arguments": [
            {"type": "GLuint", "name": "shader"}
        ]
    },
    "CopyTexImage2D": {
        "arguments": [
            {"type": "GLenum", "name": "target"},
            {"type": "GLint", "name": "level"},
            {"type": "GLenum", "name": "internalformat"},
            {"type": "GLint", "name": ["x", "y"]},
            {"type": "GLsizei", "name": ["width", "height"]},
            {"type": "GLint", "name": "border"}
        ],
        "implementation": "copy_tex_image_2d"
    },
    "CopyTexSubImage2D": {
        "arguments": [
            {"type": "GLenum", "name": "target"},
            {"type": "GLint", "name": ["level", "xoffset", "yoffset", "x", "y"]},
            {"type": "GLsizei", "name": ["width", "height"]}
        ],
        "implementation": "copy_tex_sub_image_2d"
    },
    "CreateProgram": {
        "return_type": "GLuint"
    },
    "CreateShader": {
        "arguments": [
            {"type": "GLenum", "name": "shader_type"}
        ],
        "return_type": "GLuint"
    },
    "CullFace": {
        "arguments": [
            {"type": "GLenum", "name": "mode"}
        ]
    },
    "DeleteBuffers": {
        "arguments": [
            {"type": "GLsizei", "name": "n"},
            {"type": "GLuint const*", "name": "buffers"}
        ]
    },
    "DeleteLists": {
        "arguments": [
            {"type": "GLuint", "name": "list"},
            {"type": "GLsizei", "name": "range"}
        ]
    },
    "DeleteProgram": {
        "arguments": [
            {"type": "GLuint", "name": "program"}
        ]
    },
    "DeleteShader": {
        "arguments": [
            {"type": "GLuint", "name": "shader"}
        ]
    },
    "DeleteTextures": {
        "arguments": [
            {"type": "GLsizei", "name": "n"},
            {"type": "GLuint const*", "name": "textures"}
        ]
    },
    "DepthFunc": {
        "arguments": [
            {"type": "GLenum", "name": "func"}
        ]
    },
    "DepthMask": {
        "arguments": [
            {"type": "GLboolean", "name": "flag"}
        ]
    },
    "DepthRange": {
        "arguments": [
            {"type": "GLdouble", "name": ["nearVal", "farVal"]}
        ]
    },
    "DepthRangef": {
        "arguments": [
            {"type": "GLfloat", "name": ["nearVal", "farVal"], "cast_to": "GLdouble"}
        ],
        "implementation": "depth_range"
    },
    "Disable": {
        "arguments": [
            {"type": "GLenum", "name": "cap"}
        ]
    },
    "DisableClientState": {
        "arguments": [
            {"type": "GLenum", "name": "cap"}
        ]
    },
    "DrawArrays": {
        "arguments": [
            {"type": "GLenum", "name": "mode"},
            {"type": "GLint", "name": "first"},
            {"type": "GLsizei", "name": "count"}
        ]
    },
    "DrawBuffer": {
        "arguments": [
            {"type": "GLenum", "name": "buffer"}
        ]
    },
    "DrawElements": {
        "arguments": [
            {"type": "GLenum", "name": "mode"},
            {"type": "GLsizei", "name": "count"},
            {"type": "GLenum", "name": "type"},
            {"type": "void const*", "name": "indices"}
        ]
    },
    "DrawPixels": {
        "arguments": [
            {"type": "GLsizei", "name": ["width", "height"]},
            {"type": "GLenum", "name": ["format", "type"]},
            {"type": "void const*", "name": "data"}
        ]
    },
    "Enable": {
        "arguments": [
            {"type": "GLenum", "name": "cap"}
        ]
    },
    "EnableClientState": {
        "arguments": [
            {"type": "GLenum", "name": "cap"}
        ]
    },
    "End": {},
    "EndList": {},
    "EvalCoord": {
        "arguments": [
            {"name": ["u", "v"]}
        ],
        "unimplemented": true,
        "variants": {
            "argument_counts": [1, 2],
            "argument_defaults": ["0.", "0."],
            "pointer_argument": "u",
            "types": {
                "d": {},
                "dv": {},
                "f": {},
                "fv": {}
            }
        }
    },
    "EvalMesh1": {
        "arguments": [
            {"type": "GLenum", "name": "mode"},
            {"type": "GLint", "name": ["i1", "i2"]}
        ],
        "unimplemented": true
    },
    "EvalMesh2": {
        "arguments": [
            {"type": "GLenum", "name": "mode"},
            {"type": "GLint", "name": ["i1", "i2", "j1", "j2"]}
        ],
        "unimplemented": true
    },
    "EvalPoint": {
        "arguments": [
            {"name": ["i", "j"]}
        ],
        "unimplemented": true,
        "variants": {
            "argument_counts": [1, 2],
            "argument_defaults": ["0", "0"],
            "types": {
                "i": {}
            }
        }
    },
    "Finish": {},
    "Flush": {},
    "Fog": {
        "arguments": [
            {"type": "GLenum", "name": "pname"},
            {"name": "param"}
        ],
        "variants": {
            "argument_counts": [1],
            "pointer_argument": "params",
            "types": {
                "f": {"implementation": "fogf"},
                "fv": {"implementation": "fogfv"},
                "i": {"implementation": "fogi"},
                "iv": {"unimplemented": true}
            }
        }
    },
    "FrontFace": {
        "arguments": [
            {"type": "GLenum", "name": "mode"}
        ]
    },
    "Frustum": {
        "arguments": [
            {"type": "GLdouble", "name": ["left", "right", "bottom", "top", "nearVal", "farVal"]}
        ]
    },
    "GenBuffers": {
        "arguments": [
            {"type": "GLsizei", "name": "n"},
            {"type": "GLuint*", "name": "buffers"}
        ]
    },
    "GenLists": {
        "arguments": [
            {"type": "GLsizei", "name": "range"}
        ],
        "return_type": "GLuint"
    },
    "GenTextures": {
        "arguments": [
            {"type": "GLsizei", "name": "n"},
            {"type": "GLuint*", "name": "textures"}
        ]
    },
    "GetBooleanv": {
        "arguments": [
            {"type": "GLenum", "name": "pname"},
            {"type": "GLboolean*", "name": "data"}
        ]
    },
    "GetClipPlane": {
        "arguments": [
            {"type": "GLenum", "name": "plane"},
            {"type": "GLdouble*", "name": "equation"}
        ]
    },
    "GetDoublev": {
        "arguments": [
            {"type": "GLenum", "name": "pname"},
            {"type": "GLdouble*", "name": "data"}
        ]
    },
    "GetError": {
        "return_type": "GLenum"
    },
    "GetFloatv": {
        "arguments": [
            {"type": "GLenum", "name": "pname"},
            {"type": "GLfloat*", "name": "data"}
        ]
    },
    "GetIntegerv": {
        "arguments": [
            {"type": "GLenum", "name": "pname"},
            {"type": "GLint*", "name": "data"}
        ]
    },
    "GetLight": {
        "arguments": [
            {"type": "GLenum", "name": "light"},
            {"type": "GLenum", "name": "pname"},
            {"name": "params"},
            {"type": "GLenum", "expression": "@variant_gl_type@"}
        ],
        "variants": {
            "argument_counts": [1],
            "pointer_argument": "params",
            "types": {
                "fv!": {},
                "iv!": {}
            }
        }
    },
    "GetMaterial": {
        "arguments": [
            {"type": "GLenum", "name": "face"},
            {"type": "GLenum", "name": "pname"},
            {"name": "params"},
            {"type": "GLenum", "expression": "@variant_gl_type@"}
        ],
        "variants": {
            "argument_counts": [1],
            "pointer_argument": "params",
            "types": {
                "fv!": {},
                "iv!": {}
            }
        }
    },
    "GetProgramiv": {
        "arguments": [
            {"type": "GLuint", "name": "program"},
            {"type": "GLenum", "name": "pname"},
            {"type": "GLint*", "name": "params"}
        ],
        "implementation": "get_program"
    },
    "GetShaderInfoLog": {
        "arguments": [
            {"type": "GLuint", "name": "shader"},
            {"type": "GLsizei", "name": "maxLength"},
            {"type": "GLsizei*", "name": "length"},
            {"type": "GLchar*", "name": "infoLog"}
        ],
        "unimplemented": true
    },
    "GetShaderiv": {
        "arguments": [
            {"type": "GLuint", "name": "shader"},
            {"type": "GLenum", "name": "pname"},
            {"type": "GLint*", "name": "params"}
        ],
        "implementation": "get_shader"
    },
    "GetString": {
        "arguments": [
            {"type": "GLenum", "name": "name"}
        ],
        "return_type": "GLubyte const*"
    },
    "GetTexImage": {
        "arguments": [
            {"type": "GLenum", "name": "target"},
            {"type": "GLint", "name": "level"},
            {"type": "GLenum", "name": ["format", "type"]},
            {"type": "void*", "name": "pixels"}
        ]
    },
    "GetTexLevelParameter": {
        "arguments": [
            {"type": "GLenum", "name": "target"},
            {"type": "GLint", "name": "level"},
            {"type": "GLenum", "name": "pname"},
            {"name": "params"}
        ],
        "variants": {
            "argument_counts": [1],
            "pointer_argument": "params",
            "types": {
                "fv!": {"unimplemented": true},
                "iv!": {"implementation": "get_tex_parameter_integerv"}
            }
        }
    },
    "GetUniformLocation": {
        "arguments": [
            {"type": "GLuint", "name": "program"},
            {"type": "GLchar const*", "name": "name"}
        ],
        "unimplemented": true
    },
    "Hint": {
        "arguments": [
            {"type": "GLenum", "name": "target"},
            {"type": "GLenum", "name": "mode"}
        ]
    },
    "IsEnabled": {
        "arguments": [
            {"type": "GLenum", "name": "cap"}
        ],
        "return_type": "GLboolean"
    },
    "IsList": {
        "arguments": [
            {"type": "GLuint", "name": "list"}
        ],
        "return_type": "GLboolean"
    },
    "IsTexture": {
        "arguments": [
            {"type": "GLuint", "name": "texture"}
        ],
        "return_type": "GLboolean"
    },
    "Light": {
        "arguments": [
            {"type": "GLenum", "name": "light"},
            {"type": "GLenum", "name": "pname"},
            {"name": "param", "cast_to": "GLfloat"}
        ],
        "variants": {
            "argument_counts": [1],
            "pointer_argument": "params",
            "types": {
                "f": {},
                "fv": {"implementation": "lightfv"},
                "i": {},
                "iv": {"implementation": "lightiv"},
                "x": {},
                "xv": {"implementation": "lightiv"}
            }
        },
        "implementation": "lightf"
    },
    "LightModel": {
        "arguments": [
            {"type": "GLenum", "name": "pname"},
            {"name": "param"},
            {"name": ["y", "z", "w"]}
        ],
        "variants": {
            "argument_counts": [1],
            "argument_defaults": ["0.f", "0.f", "0.f", "0.f"],
            "types": {
                "f": {},
                "i": {}
            }
        }
    },
    "LightModel_v": {
        "arguments": [
            {"type": "GLenum", "name": "pname"},
            {"name": "param"},
            {"type": "GLenum", "expression": "@variant_gl_type@"}
        ],
        "implementation": "light_modelv",
        "name": "LightModel",
        "variants": {
            "argument_counts": [1],
            "pointer_argument": "params",
            "types": {
                "fv": {},
                "iv": {}
            }
        }
    },
    "LineWidth": {
        "arguments": [
            {"type": "GLfloat", "name": "width"}
        ]
    },
    "LinkProgram": {
        "arguments": [
            {"type": "GLuint", "name": "program"}
        ]
    },
    "ListBase": {
        "arguments": [
            {"type": "GLuint", "name": "base"}
        ]
    },
    "LoadIdentity": {},
    "LoadMatrixd": {
        "arguments": [
            {"type": "GLdouble const*", "name": "m", "expression": "GL::transpose_input_matrix(@argument_name@)"}
        ],
        "implementation": "load_matrix"
    },
    "LoadMatrixf": {
        "arguments": [
            {"type": "GLfloat const*", "name": "m", "expression": "GL::transpose_input_matrix(@argument_name@)"}
        ],
        "implementation": "load_matrix"
    },
    "Map1d": {
        "arguments": [
            {"type": "GLenum", "name": "target"},
            {"type": "GLdouble","name": ["u1", "u2"]},
            {"type": "GLint", "name": ["stride", "order"]},
            {"type": "GLdouble const*", "name": "points"}
        ],
        "unimplemented": true
    },
    "Map1f": {
        "arguments": [
            {"type": "GLenum", "name": "target"},
            {"type": "GLfloat","name": ["u1", "u2"]},
            {"type": "GLint", "name": ["stride", "order"]},
            {"type": "GLfloat const*", "name": "points"}
        ],
        "unimplemented": true
    },
    "Map2d": {
        "arguments": [
            {"type": "GLenum", "name": "target"},
            {"type": "GLdouble","name": ["u1", "u2"]},
            {"type": "GLint", "name": ["ustride", "uorder"]},
            {"type": "GLdouble","name": ["v1", "v2"]},
            {"type": "GLint", "name": ["vstride", "vorder"]},
            {"type": "GLdouble const*", "name": "points"}
        ],
        "unimplemented": true
    },
    "Map2f": {
        "arguments": [
            {"type": "GLenum", "name": "target"},
            {"type": "GLfloat","name": ["u1", "u2"]},
            {"type": "GLint", "name": ["ustride", "uorder"]},
            {"type": "GLfloat","name": ["v1", "v2"]},
            {"type": "GLint", "name": ["vstride", "vorder"]},
            {"type": "GLfloat const*", "name": "points"}
        ],
        "unimplemented": true
    },
    "MapGrid1": {
        "arguments": [
            {"type": "GLint", "name": "un"},
            {"name": ["u1", "u2"]}
        ],
        "unimplemented": true,
        "variants": {
            "types": {
                "d": {},
                "f": {}
            }
        }
    },
    "MapGrid2": {
        "arguments": [
            {"type": "GLint", "name": "un"},
            {"name": ["u1", "u2"]},
            {"type": "GLint", "name": "vn"},
            {"name": ["v1", "v2"]}
        ],
        "unimplemented": true,
        "variants": {
            "types": {
                "d": {},
                "f": {}
            }
        }
    },
    "Material": {
        "arguments": [
            {"type": "GLenum", "name": "face"},
            {"type": "GLenum", "name": "pname"},
            {"name": "param", "cast_to": "GLfloat"}
        ],
        "implementation": "materialf",
        "variants": {
            "argument_counts": [1],
            "pointer_argument": "params",
            "types": {
                "f": {},
                "fv": {
                    "implementation": "materialfv"
                },
                "i": {},
                "iv": {
                    "implementation": "materialiv"
                }
            }
        }
    },
    "MatrixMode": {
        "arguments": [
            {"type": "GLenum", "name": "mode"}
        ]
    },
    "MultiTexCoord": {
        "arguments": [
            {"type": "GLenum", "name": "target"},
            {"name": ["s", "t", "r", "q"], "cast_to": "GLfloat"}
        ],
        "variants": {
            "api_suffixes": ["", "ARB"],
            "argument_counts": [1, 2, 3, 4],
            "argument_defaults": ["0.f", "0.f", "0.f", "1.f"],
            "pointer_argument": "v",
            "types": {
                "d": {},
                "dv": {},
                "f": {},
                "fv": {},
                "i": {},
                "iv": {},
                "s": {},
                "sv": {}
            }
        }
    },
    "MultMatrixd": {
        "arguments": [
            {"type": "GLdouble const*", "name": "m", "expression": "GL::transpose_input_matrix(@argument_name@)"}
        ],
        "implementation": "mult_matrix"
    },
    "MultMatrixf": {
        "arguments": [
            {"type": "GLfloat const*", "name": "m", "expression": "GL::transpose_input_matrix(@argument_name@)"}
        ],
        "implementation": "mult_matrix"
    },
    "NewList": {
        "arguments": [
            {"type": "GLuint", "name": "list"},
            {"type": "GLenum", "name": "mode"}
        ]
    },
    "Normal3": {
        "arguments": [
            {"name": ["nx", "ny", "nz"], "cast_to": "GLfloat"}
        ],
        "implementation": "normal",
        "variants": {
            "convert_range": true,
            "pointer_argument": "v",
            "types": {
                "b": {},
                "bv": {},
                "d": {},
                "dv": {},
                "f": {},
                "fv": {},
                "i": {},
                "iv": {},
                "s": {},
                "sv": {}
            }
        }
    },
    "NormalPointer": {
        "arguments": [
            {"type": "GLenum", "name": "type"},
            {"type": "GLsizei", "name": "stride"},
            {"type": "void const*", "name": "pointer"}
        ]
    },
    "Ortho": {
        "arguments": [
            {"type": "GLdouble", "name": ["left", "right", "bottom", "top", "nearVal", "farVal"]}
        ]
    },
    "PixelStore": {
        "arguments": [
            {"type": "GLenum", "name": "pname"},
            {"name": "param", "cast_to": "GLint"}
        ],
        "implementation": "pixel_storei",
        "variants": {
            "types": {
                "f": {},
                "i": {}
            }
        }
    },
    "PointSize": {
        "arguments": [
            {"type": "GLfloat", "name": "size"}
        ]
    },
    "PolygonMode": {
        "arguments": [
            {"type": "GLenum", "name": ["face", "mode"]}
        ]
    },
    "PolygonOffset": {
        "arguments": [
            {"type": "GLfloat", "name": ["factor", "units"]}
        ]
    },
    "PopAttrib": {},
    "PopMatrix": {},
    "PushAttrib": {
        "arguments": [
            {"type": "GLbitfield", "name": "mask"}
        ]
    },
    "PushMatrix": {},
    "RasterPos": {
        "arguments": [
            {"name": ["x", "y", "z", "w"], "cast_to": "GLfloat"}
        ],
        "variants": {
            "argument_counts": [2, 3, 4],
            "argument_defaults": ["0.f", "0.f", "0.f", "1.f"],
            "pointer_argument": "v",
            "types": {
                "d": {},
                "dv": {},
                "f": {},
                "fv": {},
                "i": {},
                "iv": {},
                "s": {},
                "sv": {}
            }
        }
    },
    "ReadBuffer": {
        "arguments": [
            {"type": "GLenum", "name": "mode"}
        ]
    },
    "ReadPixels": {
        "arguments": [
            {"type": "GLint", "name": "x"},
            {"type": "GLint", "name": "y"},
            {"type": "GLsizei", "name": "width"},
            {"type": "GLsizei", "name": "height"},
            {"type": "GLenum", "name": "format"},
            {"type": "GLenum", "name": "type"},
            {"type": "void*", "name": "data"}
        ]
    },
    "Rect": {
        "arguments": [
            {"name": ["x1", "y1", "x2", "y2"], "cast_to": "GLdouble"}
        ],
        "variants": {
            "types": {
                "d": {},
                "f": {},
                "i": {},
                "s": {}
            }
        }
    },
    "Rotate": {
        "arguments": [
            {"name": ["angle", "x", "y", "z"], "cast_to": "GLfloat"}
        ],
        "variants": {
            "types": {
                "d": {},
                "f": {}
            }
        }
    },
    "Scale": {
        "arguments": [
            {"name": ["x", "y", "z"], "cast_to": "GLfloat"}
        ],
        "variants": {
            "types": {
                "d": {},
                "f": {}
            }
        }
    },
    "Scissor": {
        "arguments": [
            {"type": "GLint", "name": ["x", "y"]},
            {"type": "GLsizei", "name": ["width", "height"]}
        ]
    },
    "ShadeModel": {
        "arguments": [
            {"type": "GLenum", "name": "mode"}
        ]
    },
    "ShaderSource": {
        "arguments": [
            {"type": "GLuint", "name": "shader"},
            {"type": "GLsizei", "name": "count"},
            {"type": "GLchar const**", "name": "string"},
            {"type": "GLint const*", "name": "length"}
        ]
    },
    "StencilFunc": {
        "arguments": [
            {"expression": "GL_FRONT_AND_BACK"},
            {"type": "GLenum", "name": "func"},
            {"type": "GLint", "name": "ref"},
            {"type": "GLuint", "name": "mask"}
        ],
        "implementation": "stencil_func_separate"
    },
    "StencilFuncSeparate": {
        "arguments": [
            {"type": "GLenum", "name": ["face", "func"]},
            {"type": "GLint", "name": "ref"},
            {"type": "GLuint", "name": "mask"}
        ]
    },
    "StencilMask": {
        "arguments": [
            {"expression": "GL_FRONT_AND_BACK"},
            {"type": "GLuint", "name": "mask"}
        ],
        "implementation": "stencil_mask_separate"
    },
    "StencilMaskSeparate": {
        "arguments": [
            {"type": "GLenum", "name": "face"},
            {"type": "GLuint", "name": "mask"}
        ]
    },
    "StencilOp": {
        "arguments": [
            {"expression": "GL_FRONT_AND_BACK"},
            {"type": "GLenum", "name": ["sfail", "dpfail", "dppass"]}
        ],
        "implementation": "stencil_op_separate"
    },
    "StencilOpSeparate": {
        "arguments": [
            {"type": "GLenum", "name": ["face", "sfail", "dpfail", "dppass"]}
        ]
    },
    "TexCoord": {
        "arguments": [
            {"name": ["s", "t", "r", "q"], "cast_to": "GLfloat"}
        ],
        "variants": {
            "argument_counts": [1, 2, 3, 4],
            "argument_defaults": ["0.f", "0.f", "0.f", "1.f"],
            "pointer_argument": "v",
            "types": {
                "d": {},
                "dv": {},
                "f": {},
                "fv": {},
                "i": {},
                "iv": {},
                "s": {},
                "sv": {}
            }
        }
    },
    "TexCoordPointer": {
        "arguments": [
            {"type": "GLint", "name": "size"},
            {"type": "GLenum", "name": "type"},
            {"type": "GLsizei", "name": "stride"},
            {"type": "void const*", "name": "pointer"}
        ]
    },
    "TexEnv": {
        "arguments": [
            {"type": "GLenum", "name": "target"},
            {"type": "GLenum", "name": "pname"},
            {"name": "param"},
            {"type": "GLenum", "expression": "@variant_gl_type@"}
        ],
        "implementation": "tex_envv",
        "variants": {
            "argument_counts": [1],
            "pointer_argument": "params",
            "types": {
                "fv": {},
                "iv": {}
            }
        }
    },
    "TexEnvf": {
        "arguments": [
            {"type": "GLenum", "name": "target"},
            {"type": "GLenum", "name": "pname"},
            {"type": "GLfloat", "name": "x", "expression": "{@argument_name@, 0.f, 0.f, 0.f}"}
        ],
        "implementation": "tex_env"
    },
    "TexEnvi": {
        "arguments": [
            {"type": "GLenum", "name": "target"},
            {"type": "GLenum", "name": "pname"},
            {"type": "GLint", "name": "x", "expression": "{static_cast<float>(@argument_name@), 0.f, 0.f, 0.f}"}
        ],
        "implementation": "tex_env"
    },
    "TexGen": {
        "arguments": [
            {"type": "GLenum", "name": "coord"},
            {"type": "GLenum", "name": "pname"},
            {"name": "param", "cast_to": "GLint"}
        ],
        "variants": {
            "argument_counts": [1],
            "pointer_argument": "params",
            "types": {
                "d": {},
                "dv": {"unimplemented": true},
                "f": {},
                "fv": {"implementation": "tex_gen_floatv"},
                "i": {},
                "iv": {"unimplemented": true}
            }
        }
    },
    "TexImage1D": {
        "arguments": [
            {"type": "GLenum", "name": "target"},
            {"type": "GLint", "name": "level"},
            {"type": "GLint", "name": "internalFormat"},
            {"type": "GLsizei", "name": "width"},
            {"type": "GLint", "name": "border"},
            {"type": "GLenum", "name": "format"},
            {"type": "GLenum", "name": "type"},
            {"type": "void const*", "name": "data"}
        ],
        "unimplemented": true
    },
    "TexImage2D": {
        "arguments": [
            {"type": "GLenum", "name": "target"},
            {"type": "GLint", "name": "level"},
            {"type": "GLint", "name": "internalFormat"},
            {"type": "GLsizei", "name": "width"},
            {"type": "GLsizei", "name": "height"},
            {"type": "GLint", "name": "border"},
            {"type": "GLenum", "name": "format"},
            {"type": "GLenum", "name": "type"},
            {"type": "void const*", "name": "data"}
        ],
        "implementation": "tex_image_2d"
    },
    "TexImage3D": {
        "arguments": [
            {"type": "GLenum", "name": "target"},
            {"type": "GLint", "name": "level"},
            {"type": "GLint", "name": "internalFormat"},
            {"type": "GLsizei", "name": "width"},
            {"type": "GLsizei", "name": "height"},
            {"type": "GLsizei", "name": "depth"},
            {"type": "GLint", "name": "border"},
            {"type": "GLenum", "name": "format"},
            {"type": "GLenum", "name": "type"},
            {"type": "void const*", "name": "data"}
        ],
        "unimplemented": true
    },
    "TexParameter": {
        "arguments": [
            {"type": "GLenum", "name": "target"},
            {"type": "GLenum", "name": "pname"},
            {"name": "param"}
        ],
        "variants": {
            "pointer_argument": "params",
            "types": {
                "f": {},
                "fv": {"unimplemented": true},
                "i": {},
                "iv": {"unimplemented": true}
            }
        }
    },
    "TexSubImage1D": {
        "arguments": [
            {"type": "GLenum", "name": "target"},
            {"type": "GLint", "name": "level"},
            {"type": "GLint", "name": "xoffset"},
            {"type": "GLsizei", "name": "width"},
            {"type": "GLenum", "name": "format"},
            {"type": "GLenum", "name": "type"},
            {"type": "void const*", "name": "pixels"}
        ],
        "unimplemented": true
    },
    "TexSubImage2D": {
        "arguments": [
            {"type": "GLenum", "name": "target"},
            {"type": "GLint", "name": "level"},
            {"type": "GLint", "name": "xoffset"},
            {"type": "GLint", "name": "yoffset"},
            {"type": "GLsizei", "name": "width"},
            {"type": "GLsizei", "name": "height"},
            {"type": "GLenum", "name": "format"},
            {"type": "GLenum", "name": "type"},
            {"type": "void const*", "name": "pixels"}
        ],
        "implementation": "tex_sub_image_2d"
    },
    "TexSubImage3D": {
        "arguments": [
            {"type": "GLenum", "name": "target"},
            {"type": "GLint", "name": "level"},
            {"type": "GLint", "name": "xoffset"},
            {"type": "GLint", "name": "yoffset"},
            {"type": "GLint", "name": "zoffset"},
            {"type": "GLsizei", "name": "width"},
            {"type": "GLsizei", "name": "height"},
            {"type": "GLsizei", "name": "depth"},
            {"type": "GLenum", "name": "format"},
            {"type": "GLenum", "name": "type"},
            {"type": "void const*", "name": "pixels"}
        ],
        "unimplemented": true
    },
    "Translate": {
        "arguments": [
            {"name": ["x", "y", "z"], "cast_to": "GLfloat"}
        ],
        "variants": {
            "types": {
                "d": {},
                "f": {}
            }
        }
    },
    "Uniform": {
        "arguments": [
            {"type": "GLint", "name": "location"},
            {"name": ["v0", "v1", "v2", "v3"]}
        ],
        "unimplemented": true,
        "variants": {
            "argument_counts": [1, 2, 3, 4],
            "argument_defaults": ["0.", "0.", "0.", "0."],
            "types": {
                "f": {},
                "i": {},
                "ui": {}
            }
        }
    },
    "Uniform_v": {
        "arguments": [
            {"type": "GLint", "name": "location"},
            {"type": "GLsizei", "name": "count"},
            {"name": "value"}
        ],
        "name": "Uniform",
        "unimplemented": true,
        "variants": {
            "argument_counts": [1, 2, 3, 4],
            "pointer_argument": "value",
            "types": {
                "fv": {},
                "iv": {},
                "uiv": {}
            }
        }
    },
    "UseProgram": {
        "arguments": [
            {"type": "GLuint", "name": "program"}
        ]
    },
    "Vertex": {
        "arguments": [
            {"name": ["x", "y", "z", "w"], "cast_to": "GLdouble"}
        ],
        "variants": {
            "argument_counts": [2, 3, 4],
            "argument_defaults": ["0.", "0.", "0.", "1."],
            "pointer_argument": "v",
            "types": {
                "d": {},
                "dv": {},
                "f": {},
                "fv": {},
                "i": {},
                "iv": {},
                "s": {},
                "sv": {}
            }
        }
    },
    "VertexPointer": {
        "arguments": [
            {"type": "GLint", "name": "size"},
            {"type": "GLenum", "name": "type"},
            {"type": "GLsizei", "name": "stride"},
            {"type": "void const*", "name": "pointer"}
        ]
    },
    "Viewport": {
        "arguments": [
            {"type": "GLint", "name": ["x", "y"]},
            {"type": "GLsizei", "name": ["width", "height"]}
        ]
    }
}