gl_4_5.zig(1)

glfmn.io gl_4_5.zig(1)
Name

gl_4_5.zig

Generated OpenGL 4.5 bindings for zig programs

Description

The file contains a lot of top-level types functions which correspond to OpenGL API functions defined in the OpenGL Registry XML.

pub fn createVertexArrays(_n: GLsizei, _arrays: [*c]GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glCreateVertexArrays, .{_n, _arrays});
}

Each calling a function pointer stored in a global struct which is undefined at the start of the program.

const function_pointers = struct {
    // truncated
    var glCreateVertexArrays: *const function_signatures.glCreateVertexArrays = undefined;
}

The function pointer must be set by a function called load before it can be called.

/// Loader API:
pub fn load(load_ctx: anytype, get_proc_address: fn(@TypeOf(load_ctx), [:0]const u8) ?FunctionPointer) !void {
    // Truncated
    if(get_proc_address(load_ctx, "glCreateVertexArrays")) |proc| {
        function_pointers.glCreateVertexArrays = @ptrCast(proc);
    } else {
        log.err("entry point glCreateVertexArrays not found!", .{});
        success = false;
    }
}

The key is passing a get_proc_address function to the loader which, given the name of an OpenGL function, can provide a pointer to that function. Typically, this function is provided by a framework like glfw or EGL or the OS.

In addition to functions, this file contains many type and constant definitions:

pub const GLenum = c_uint;
pub const GLboolean = u8;
pub const GLbitfield = c_uint;
pub const GLbyte = i8;
pub const GLubyte = u8;
pub const GLshort = i16;
pub const GLushort = u16;
pub const GLint = c_int;
pub const GLuint = c_uint;

Note that these types are not so-called "new-types" and a variable of type GLuint can be passed in place of a GLenum without any issues.

pub const DEPTH_BUFFER_BIT = 0x00000100;
pub const STENCIL_BUFFER_BIT = 0x00000400;
pub const COLOR_BUFFER_BIT = 0x00004000;
pub const FALSE = 0;
pub const TRUE = 1;

Note the constants have no type specified and are thus comptime_int.

Generating

This file was generated by zig-opengl according to the following steps:

  1. Clone the repository and enter the directory.
  2. Use dotnet to run the generator and create the bindings file.
git clone --recursive https://github.com/MasterQ32/zig-opengl && cd zig-opengl
dotnet run OpenGL-Registry/xml/gl.xml gl_4_5.zig GL_VERSION_4_5

dotnet 7.0 is the .NET runtime required to run the zig-opengl generator, which is written in C#.

Contents

//
// This code file is licenced under any of Public Domain, WTFPL or CC0.
// There are no restrictions in the use of this file.
//

//
// Generation parameters:
// API:        GL_VERSION_4_5
// Profile:    core
// Extensions: 
//

//
// This file was generated with the following command line:
// dotnet run OpenGL-Registry/xml/gl.xml gl_4_5.zig GL_VERSION_4_5
//

const std = @import("std");
const builtin = @import("builtin");
const log = std.log.scoped(.OpenGL);

pub const FunctionPointer: type = *align(@alignOf(fn (u32) callconv(.C) u32)) const anyopaque;

pub const GLenum = c_uint;
pub const GLboolean = u8;
pub const GLbitfield = c_uint;
pub const GLbyte = i8;
pub const GLubyte = u8;
pub const GLshort = i16;
pub const GLushort = u16;
pub const GLint = c_int;
pub const GLuint = c_uint;
pub const GLclampx = i32;
pub const GLsizei = c_int;
pub const GLfloat = f32;
pub const GLclampf = f32;
pub const GLdouble = f64;
pub const GLclampd = f64;
pub const GLeglClientBufferEXT = void;
pub const GLeglImageOES = void;
pub const GLchar = u8;
pub const GLcharARB = u8;

pub const GLhandleARB = if (builtin.os.tag == .macos) *anyopaque else c_uint;

pub const GLhalf = u16;
pub const GLhalfARB = u16;
pub const GLfixed = i32;
pub const GLintptr = usize;
pub const GLintptrARB = usize;
pub const GLsizeiptr = isize;
pub const GLsizeiptrARB = isize;
pub const GLint64 = i64;
pub const GLint64EXT = i64;
pub const GLuint64 = u64;
pub const GLuint64EXT = u64;

pub const GLsync = *opaque {};

pub const _cl_context = opaque {};
pub const _cl_event = opaque {};

pub const GLDEBUGPROC = *const fn (source: GLenum, _type: GLenum, id: GLuint, severity: GLenum, length: GLsizei, message: [*:0]const u8, userParam: ?*anyopaque) callconv(.C) void;
pub const GLDEBUGPROCARB = *const fn (source: GLenum, _type: GLenum, id: GLuint, severity: GLenum, length: GLsizei, message: [*:0]const u8, userParam: ?*anyopaque) callconv(.C) void;
pub const GLDEBUGPROCKHR = *const fn (source: GLenum, _type: GLenum, id: GLuint, severity: GLenum, length: GLsizei, message: [*:0]const u8, userParam: ?*anyopaque) callconv(.C) void;

pub const GLDEBUGPROCAMD = *const fn (id: GLuint, category: GLenum, severity: GLenum, length: GLsizei, message: [*:0]const u8, userParam: ?*anyopaque) callconv(.C) void;

pub const GLhalfNV = u16;
pub const GLvdpauSurfaceNV = GLintptr;
pub const GLVULKANPROCNV = *const fn () callconv(.C) void;


pub const DEPTH_BUFFER_BIT = 0x00000100;
pub const STENCIL_BUFFER_BIT = 0x00000400;
pub const COLOR_BUFFER_BIT = 0x00004000;
pub const FALSE = 0;
pub const TRUE = 1;
pub const POINTS = 0x0000;
pub const LINES = 0x0001;
pub const LINE_LOOP = 0x0002;
pub const LINE_STRIP = 0x0003;
pub const TRIANGLES = 0x0004;
pub const TRIANGLE_STRIP = 0x0005;
pub const TRIANGLE_FAN = 0x0006;
pub const COMPRESSED_SRGB8_ETC2 = 0x9275;
pub const NEVER = 0x0200;
pub const LESS = 0x0201;
pub const EQUAL = 0x0202;
pub const LEQUAL = 0x0203;
pub const GREATER = 0x0204;
pub const NOTEQUAL = 0x0205;
pub const GEQUAL = 0x0206;
pub const ALWAYS = 0x0207;
pub const ZERO = 0;
pub const ONE = 1;
pub const SRC_COLOR = 0x0300;
pub const ONE_MINUS_SRC_COLOR = 0x0301;
pub const SRC_ALPHA = 0x0302;
pub const ONE_MINUS_SRC_ALPHA = 0x0303;
pub const DST_ALPHA = 0x0304;
pub const ONE_MINUS_DST_ALPHA = 0x0305;
pub const DST_COLOR = 0x0306;
pub const ONE_MINUS_DST_COLOR = 0x0307;
pub const SRC_ALPHA_SATURATE = 0x0308;
pub const NONE = 0;
pub const FRONT_LEFT = 0x0400;
pub const FRONT_RIGHT = 0x0401;
pub const BACK_LEFT = 0x0402;
pub const BACK_RIGHT = 0x0403;
pub const FRONT = 0x0404;
pub const BACK = 0x0405;
pub const LEFT = 0x0406;
pub const RIGHT = 0x0407;
pub const FRONT_AND_BACK = 0x0408;
pub const NO_ERROR = 0;
pub const INVALID_ENUM = 0x0500;
pub const INVALID_VALUE = 0x0501;
pub const INVALID_OPERATION = 0x0502;
pub const OUT_OF_MEMORY = 0x0505;
pub const CW = 0x0900;
pub const CCW = 0x0901;
pub const POINT_SIZE = 0x0B11;
pub const POINT_SIZE_RANGE = 0x0B12;
pub const POINT_SIZE_GRANULARITY = 0x0B13;
pub const LINE_SMOOTH = 0x0B20;
pub const LINE_WIDTH = 0x0B21;
pub const LINE_WIDTH_RANGE = 0x0B22;
pub const LINE_WIDTH_GRANULARITY = 0x0B23;
pub const POLYGON_MODE = 0x0B40;
pub const POLYGON_SMOOTH = 0x0B41;
pub const CULL_FACE = 0x0B44;
pub const CULL_FACE_MODE = 0x0B45;
pub const FRONT_FACE = 0x0B46;
pub const DEPTH_RANGE = 0x0B70;
pub const DEPTH_TEST = 0x0B71;
pub const DEPTH_WRITEMASK = 0x0B72;
pub const DEPTH_CLEAR_VALUE = 0x0B73;
pub const DEPTH_FUNC = 0x0B74;
pub const STENCIL_TEST = 0x0B90;
pub const STENCIL_CLEAR_VALUE = 0x0B91;
pub const STENCIL_FUNC = 0x0B92;
pub const STENCIL_VALUE_MASK = 0x0B93;
pub const STENCIL_FAIL = 0x0B94;
pub const STENCIL_PASS_DEPTH_FAIL = 0x0B95;
pub const STENCIL_PASS_DEPTH_PASS = 0x0B96;
pub const STENCIL_REF = 0x0B97;
pub const STENCIL_WRITEMASK = 0x0B98;
pub const VIEWPORT = 0x0BA2;
pub const DITHER = 0x0BD0;
pub const BLEND_DST = 0x0BE0;
pub const BLEND_SRC = 0x0BE1;
pub const BLEND = 0x0BE2;
pub const LOGIC_OP_MODE = 0x0BF0;
pub const DRAW_BUFFER = 0x0C01;
pub const READ_BUFFER = 0x0C02;
pub const SCISSOR_BOX = 0x0C10;
pub const SCISSOR_TEST = 0x0C11;
pub const COLOR_CLEAR_VALUE = 0x0C22;
pub const COLOR_WRITEMASK = 0x0C23;
pub const DOUBLEBUFFER = 0x0C32;
pub const STEREO = 0x0C33;
pub const LINE_SMOOTH_HINT = 0x0C52;
pub const POLYGON_SMOOTH_HINT = 0x0C53;
pub const UNPACK_SWAP_BYTES = 0x0CF0;
pub const UNPACK_LSB_FIRST = 0x0CF1;
pub const UNPACK_ROW_LENGTH = 0x0CF2;
pub const UNPACK_SKIP_ROWS = 0x0CF3;
pub const UNPACK_SKIP_PIXELS = 0x0CF4;
pub const UNPACK_ALIGNMENT = 0x0CF5;
pub const PACK_SWAP_BYTES = 0x0D00;
pub const PACK_LSB_FIRST = 0x0D01;
pub const PACK_ROW_LENGTH = 0x0D02;
pub const PACK_SKIP_ROWS = 0x0D03;
pub const PACK_SKIP_PIXELS = 0x0D04;
pub const PACK_ALIGNMENT = 0x0D05;
pub const MAX_TEXTURE_SIZE = 0x0D33;
pub const MAX_VIEWPORT_DIMS = 0x0D3A;
pub const SUBPIXEL_BITS = 0x0D50;
pub const TEXTURE_1D = 0x0DE0;
pub const TEXTURE_2D = 0x0DE1;
pub const TEXTURE_WIDTH = 0x1000;
pub const TEXTURE_HEIGHT = 0x1001;
pub const TEXTURE_BORDER_COLOR = 0x1004;
pub const DONT_CARE = 0x1100;
pub const FASTEST = 0x1101;
pub const NICEST = 0x1102;
pub const BYTE = 0x1400;
pub const UNSIGNED_BYTE = 0x1401;
pub const SHORT = 0x1402;
pub const UNSIGNED_SHORT = 0x1403;
pub const INT = 0x1404;
pub const UNSIGNED_INT = 0x1405;
pub const FLOAT = 0x1406;
pub const CLEAR = 0x1500;
pub const AND = 0x1501;
pub const AND_REVERSE = 0x1502;
pub const COPY = 0x1503;
pub const AND_INVERTED = 0x1504;
pub const NOOP = 0x1505;
pub const XOR = 0x1506;
pub const OR = 0x1507;
pub const NOR = 0x1508;
pub const EQUIV = 0x1509;
pub const INVERT = 0x150A;
pub const OR_REVERSE = 0x150B;
pub const COPY_INVERTED = 0x150C;
pub const OR_INVERTED = 0x150D;
pub const NAND = 0x150E;
pub const SET = 0x150F;
pub const TEXTURE = 0x1702;
pub const COLOR = 0x1800;
pub const DEPTH = 0x1801;
pub const STENCIL = 0x1802;
pub const STENCIL_INDEX = 0x1901;
pub const DEPTH_COMPONENT = 0x1902;
pub const RED = 0x1903;
pub const GREEN = 0x1904;
pub const BLUE = 0x1905;
pub const ALPHA = 0x1906;
pub const RGB = 0x1907;
pub const RGBA = 0x1908;
pub const POINT = 0x1B00;
pub const LINE = 0x1B01;
pub const FILL = 0x1B02;
pub const KEEP = 0x1E00;
pub const REPLACE = 0x1E01;
pub const INCR = 0x1E02;
pub const DECR = 0x1E03;
pub const VENDOR = 0x1F00;
pub const RENDERER = 0x1F01;
pub const VERSION = 0x1F02;
pub const EXTENSIONS = 0x1F03;
pub const NEAREST = 0x2600;
pub const LINEAR = 0x2601;
pub const NEAREST_MIPMAP_NEAREST = 0x2700;
pub const LINEAR_MIPMAP_NEAREST = 0x2701;
pub const NEAREST_MIPMAP_LINEAR = 0x2702;
pub const LINEAR_MIPMAP_LINEAR = 0x2703;
pub const TEXTURE_MAG_FILTER = 0x2800;
pub const TEXTURE_MIN_FILTER = 0x2801;
pub const TEXTURE_WRAP_S = 0x2802;
pub const TEXTURE_WRAP_T = 0x2803;
pub const REPEAT = 0x2901;
pub const MAX_COMPUTE_WORK_GROUP_COUNT = 0x91BE;
pub const MAX_COMPUTE_WORK_GROUP_INVOCATIONS = 0x90EB;
pub const MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS = 0x8266;
pub const MAX_COMPUTE_ATOMIC_COUNTERS = 0x8265;
pub const MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS = 0x8264;
pub const MAX_COMPUTE_UNIFORM_COMPONENTS = 0x8263;
pub const MAX_COMPUTE_SHARED_MEMORY_SIZE = 0x8262;
pub const MAX_COMPUTE_IMAGE_UNIFORMS = 0x91BD;
pub const MAX_COMPUTE_TEXTURE_IMAGE_UNITS = 0x91BC;
pub const MAX_COMPUTE_UNIFORM_BLOCKS = 0x91BB;
pub const COMPUTE_SHADER = 0x91B9;
pub const MAX_ELEMENT_INDEX = 0x8D6B;
pub const ANY_SAMPLES_PASSED_CONSERVATIVE = 0x8D6A;
pub const PRIMITIVE_RESTART_FIXED_INDEX = 0x8D69;
pub const COMPRESSED_SIGNED_RG11_EAC = 0x9273;
pub const COMPRESSED_RG11_EAC = 0x9272;
pub const COMPRESSED_SIGNED_R11_EAC = 0x9271;
pub const COMPRESSED_R11_EAC = 0x9270;
pub const COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 0x9276;
pub const COMPRESSED_RGB8_ETC2 = 0x9274;
pub const VERTEX_ATTRIB_ARRAY_LONG = 0x874E;
pub const NUM_SHADING_LANGUAGE_VERSIONS = 0x82E9;
pub const TEXTURE_IMMUTABLE_FORMAT = 0x912F;
pub const COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT = 0x8E8F;
pub const COMPRESSED_RGB_BPTC_SIGNED_FLOAT = 0x8E8E;
pub const COMPRESSED_SRGB_ALPHA_BPTC_UNORM = 0x8E8D;
pub const COMPRESSED_RGBA_BPTC_UNORM = 0x8E8C;
pub const MAX_COMBINED_IMAGE_UNIFORMS = 0x90CF;
pub const MAX_FRAGMENT_IMAGE_UNIFORMS = 0x90CE;
pub const MAX_GEOMETRY_IMAGE_UNIFORMS = 0x90CD;
pub const MAX_TESS_EVALUATION_IMAGE_UNIFORMS = 0x90CC;
pub const MAX_TESS_CONTROL_IMAGE_UNIFORMS = 0x90CB;
pub const MAX_VERTEX_IMAGE_UNIFORMS = 0x90CA;
pub const IMAGE_FORMAT_COMPATIBILITY_BY_CLASS = 0x90C9;
pub const IMAGE_FORMAT_COMPATIBILITY_BY_SIZE = 0x90C8;
pub const IMAGE_FORMAT_COMPATIBILITY_TYPE = 0x90C7;
pub const IMAGE_BINDING_FORMAT = 0x906E;
pub const MAX_IMAGE_SAMPLES = 0x906D;
pub const UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY = 0x906C;
pub const UNSIGNED_INT_IMAGE_2D_MULTISAMPLE = 0x906B;
pub const UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY = 0x906A;
pub const UNSIGNED_INT_IMAGE_2D_ARRAY = 0x9069;
pub const UNSIGNED_INT_IMAGE_1D_ARRAY = 0x9068;
pub const UNSIGNED_INT_IMAGE_BUFFER = 0x9067;
pub const UNSIGNED_INT_IMAGE_CUBE = 0x9066;
pub const UNSIGNED_INT_IMAGE_2D_RECT = 0x9065;
pub const UNSIGNED_INT_IMAGE_3D = 0x9064;
pub const INT_IMAGE_CUBE = 0x905B;
pub const INT_IMAGE_2D_RECT = 0x905A;
pub const INT_IMAGE_3D = 0x9059;
pub const INT_IMAGE_2D = 0x9058;
pub const INT_IMAGE_1D = 0x9057;
pub const IMAGE_2D_MULTISAMPLE_ARRAY = 0x9056;
pub const IMAGE_2D_MULTISAMPLE = 0x9055;
pub const IMAGE_CUBE_MAP_ARRAY = 0x9054;
pub const IMAGE_2D_ARRAY = 0x9053;
pub const IMAGE_1D_ARRAY = 0x9052;
pub const IMAGE_BUFFER = 0x9051;
pub const IMAGE_CUBE = 0x9050;
pub const IMAGE_2D_RECT = 0x904F;
pub const IMAGE_3D = 0x904E;
pub const IMAGE_2D = 0x904D;
pub const IMAGE_1D = 0x904C;
pub const IMAGE_BINDING_ACCESS = 0x8F3E;
pub const IMAGE_BINDING_LAYER = 0x8F3D;
pub const IMAGE_BINDING_LAYERED = 0x8F3C;
pub const IMAGE_BINDING_LEVEL = 0x8F3B;
pub const IMAGE_BINDING_NAME = 0x8F3A;
pub const MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS = 0x8F39;
pub const MAX_IMAGE_UNITS = 0x8F38;
pub const ALL_BARRIER_BITS = 0xFFFFFFFF;
pub const ATOMIC_COUNTER_BARRIER_BIT = 0x00001000;
pub const TRANSFORM_FEEDBACK_BARRIER_BIT = 0x00000800;
pub const FRAMEBUFFER_BARRIER_BIT = 0x00000400;
pub const BUFFER_UPDATE_BARRIER_BIT = 0x00000200;
pub const TEXTURE_UPDATE_BARRIER_BIT = 0x00000100;
pub const PIXEL_BUFFER_BARRIER_BIT = 0x00000080;
pub const COMMAND_BARRIER_BIT = 0x00000040;
pub const SHADER_IMAGE_ACCESS_BARRIER_BIT = 0x00000020;
pub const TEXTURE_FETCH_BARRIER_BIT = 0x00000008;
pub const UNIFORM_BARRIER_BIT = 0x00000004;
pub const ELEMENT_ARRAY_BARRIER_BIT = 0x00000002;
pub const VERTEX_ATTRIB_ARRAY_BARRIER_BIT = 0x00000001;
pub const UNSIGNED_INT_ATOMIC_COUNTER = 0x92DB;
pub const UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX = 0x92DA;
pub const ACTIVE_ATOMIC_COUNTER_BUFFERS = 0x92D9;
pub const MAX_ATOMIC_COUNTER_BUFFER_BINDINGS = 0x92DC;
pub const MAX_ATOMIC_COUNTER_BUFFER_SIZE = 0x92D8;
pub const MAX_COMBINED_ATOMIC_COUNTERS = 0x92D7;
pub const MAX_FRAGMENT_ATOMIC_COUNTERS = 0x92D6;
pub const MAX_GEOMETRY_ATOMIC_COUNTERS = 0x92D5;
pub const MAX_TESS_EVALUATION_ATOMIC_COUNTERS = 0x92D4;
pub const MAX_VERTEX_ATOMIC_COUNTERS = 0x92D2;
pub const MAX_COMBINED_ATOMIC_COUNTER_BUFFERS = 0x92D1;
pub const MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS = 0x92D0;
pub const MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS = 0x92CE;
pub const MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS = 0x92CD;
pub const MAX_VERTEX_ATOMIC_COUNTER_BUFFERS = 0x92CC;
pub const ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER = 0x92CB;
pub const ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER = 0x92CA;
pub const ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER = 0x92C9;
pub const ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER = 0x92C8;
pub const ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER = 0x92C7;
pub const ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES = 0x92C6;
pub const ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS = 0x92C5;
pub const ATOMIC_COUNTER_BUFFER_DATA_SIZE = 0x92C4;
pub const ATOMIC_COUNTER_BUFFER_SIZE = 0x92C3;
pub const ATOMIC_COUNTER_BUFFER_START = 0x92C2;
pub const ATOMIC_COUNTER_BUFFER_BINDING = 0x92C1;
pub const ATOMIC_COUNTER_BUFFER = 0x92C0;
pub const MIN_MAP_BUFFER_ALIGNMENT = 0x90BC;
pub const NUM_SAMPLE_COUNTS = 0x9380;
pub const PACK_COMPRESSED_BLOCK_SIZE = 0x912E;
pub const PACK_COMPRESSED_BLOCK_DEPTH = 0x912D;
pub const PACK_COMPRESSED_BLOCK_HEIGHT = 0x912C;
pub const PACK_COMPRESSED_BLOCK_WIDTH = 0x912B;
pub const UNPACK_COMPRESSED_BLOCK_SIZE = 0x912A;
pub const UNPACK_COMPRESSED_BLOCK_DEPTH = 0x9129;
pub const UNPACK_COMPRESSED_BLOCK_HEIGHT = 0x9128;
pub const UNPACK_COMPRESSED_BLOCK_WIDTH = 0x9127;
pub const TRANSFORM_FEEDBACK_PAUSED = 0x8E23;
pub const TRANSFORM_FEEDBACK_ACTIVE = 0x8E24;
pub const COPY_WRITE_BUFFER_BINDING = 0x8F37;
pub const COPY_READ_BUFFER_BINDING = 0x8F36;
pub const UNDEFINED_VERTEX = 0x8260;
pub const VIEWPORT_INDEX_PROVOKING_VERTEX = 0x825F;
pub const LAYER_PROVOKING_VERTEX = 0x825E;
pub const VIEWPORT_BOUNDS_RANGE = 0x825D;
pub const VIEWPORT_SUBPIXEL_BITS = 0x825C;
pub const MAX_VIEWPORTS = 0x825B;
pub const PROGRAM_PIPELINE_BINDING = 0x825A;
pub const ACTIVE_PROGRAM = 0x8259;
pub const PROGRAM_SEPARABLE = 0x8258;
pub const ALL_SHADER_BITS = 0xFFFFFFFF;
pub const TESS_EVALUATION_SHADER_BIT = 0x00000010;
pub const TESS_CONTROL_SHADER_BIT = 0x00000008;
pub const GEOMETRY_SHADER_BIT = 0x00000004;
pub const FRAGMENT_SHADER_BIT = 0x00000002;
pub const VERTEX_SHADER_BIT = 0x00000001;
pub const PROGRAM_BINARY_FORMATS = 0x87FF;
pub const NUM_PROGRAM_BINARY_FORMATS = 0x87FE;
pub const PROGRAM_BINARY_LENGTH = 0x8741;
pub const PROGRAM_BINARY_RETRIEVABLE_HINT = 0x8257;
pub const RGB565 = 0x8D62;
pub const MAX_FRAGMENT_UNIFORM_VECTORS = 0x8DFD;
pub const MAX_VARYING_VECTORS = 0x8DFC;
pub const MAX_VERTEX_UNIFORM_VECTORS = 0x8DFB;
pub const NUM_SHADER_BINARY_FORMATS = 0x8DF9;
pub const SHADER_BINARY_FORMATS = 0x8DF8;
pub const SHADER_COMPILER = 0x8DFA;
pub const HIGH_INT = 0x8DF5;
pub const MEDIUM_INT = 0x8DF4;
pub const LOW_INT = 0x8DF3;
pub const HIGH_FLOAT = 0x8DF2;
pub const MEDIUM_FLOAT = 0x8DF1;
pub const LOW_FLOAT = 0x8DF0;
pub const IMPLEMENTATION_COLOR_READ_FORMAT = 0x8B9B;
pub const IMPLEMENTATION_COLOR_READ_TYPE = 0x8B9A;
pub const FIXED = 0x140C;
pub const MAX_TRANSFORM_FEEDBACK_BUFFERS = 0x8E70;
pub const ISOLINES = 0x8E7A;
pub const TESS_GEN_POINT_MODE = 0x8E79;
pub const TESS_GEN_VERTEX_ORDER = 0x8E78;
pub const TESS_GEN_SPACING = 0x8E77;
pub const TESS_GEN_MODE = 0x8E76;
pub const TESS_CONTROL_OUTPUT_VERTICES = 0x8E75;
pub const PATCH_DEFAULT_OUTER_LEVEL = 0x8E74;
pub const PATCH_DEFAULT_INNER_LEVEL = 0x8E73;
pub const PATCH_VERTICES = 0x8E72;
pub const PATCHES = 0x000E;
pub const VERTEX_BINDING_BUFFER = 0x8F4F;
pub const MAX_VERTEX_ATTRIB_BINDINGS = 0x82DA;
pub const MAX_VERTEX_ATTRIB_RELATIVE_OFFSET = 0x82D9;
pub const VERTEX_BINDING_STRIDE = 0x82D8;
pub const VERTEX_BINDING_OFFSET = 0x82D7;
pub const VERTEX_BINDING_DIVISOR = 0x82D6;
pub const VERTEX_ATTRIB_RELATIVE_OFFSET = 0x82D5;
pub const VERTEX_ATTRIB_BINDING = 0x82D4;
pub const TEXTURE_IMMUTABLE_LEVELS = 0x82DF;
pub const TEXTURE_VIEW_NUM_LAYERS = 0x82DE;
pub const TEXTURE_VIEW_MIN_LAYER = 0x82DD;
pub const TEXTURE_VIEW_NUM_LEVELS = 0x82DC;
pub const TEXTURE_VIEW_MIN_LEVEL = 0x82DB;
pub const TEXTURE_BUFFER_OFFSET_ALIGNMENT = 0x919F;
pub const TEXTURE_BUFFER_SIZE = 0x919E;
pub const TEXTURE_BUFFER_OFFSET = 0x919D;
pub const DEPTH_STENCIL_TEXTURE_MODE = 0x90EA;
pub const MAX_COMBINED_SHADER_OUTPUT_RESOURCES = 0x8F39;
pub const SHADER_STORAGE_BARRIER_BIT = 0x00002000;
pub const SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT = 0x90DF;
pub const MAX_SHADER_STORAGE_BLOCK_SIZE = 0x90DE;
pub const MAX_SHADER_STORAGE_BUFFER_BINDINGS = 0x90DD;
pub const MAX_COMBINED_SHADER_STORAGE_BLOCKS = 0x90DC;
pub const MAX_COMPUTE_SHADER_STORAGE_BLOCKS = 0x90DB;
pub const MAX_FRAGMENT_SHADER_STORAGE_BLOCKS = 0x90DA;
pub const MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS = 0x90D9;
pub const MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS = 0x90D8;
pub const MAX_GEOMETRY_SHADER_STORAGE_BLOCKS = 0x90D7;
pub const MAX_VERTEX_SHADER_STORAGE_BLOCKS = 0x90D6;
pub const SHADER_STORAGE_BUFFER_SIZE = 0x90D5;
pub const SHADER_STORAGE_BUFFER_START = 0x90D4;
pub const SHADER_STORAGE_BUFFER_BINDING = 0x90D3;
pub const SHADER_STORAGE_BUFFER = 0x90D2;
pub const IS_PER_PATCH = 0x92E7;
pub const LOCATION_INDEX = 0x930F;
pub const LOCATION = 0x930E;
pub const TOP_LEVEL_ARRAY_STRIDE = 0x930D;
pub const TOP_LEVEL_ARRAY_SIZE = 0x930C;
pub const REFERENCED_BY_COMPUTE_SHADER = 0x930B;
pub const REFERENCED_BY_FRAGMENT_SHADER = 0x930A;
pub const REFERENCED_BY_GEOMETRY_SHADER = 0x9309;
pub const REFERENCED_BY_TESS_EVALUATION_SHADER = 0x9308;
pub const REFERENCED_BY_TESS_CONTROL_SHADER = 0x9307;
pub const REFERENCED_BY_VERTEX_SHADER = 0x9306;
pub const ACTIVE_VARIABLES = 0x9305;
pub const NUM_ACTIVE_VARIABLES = 0x9304;
pub const BUFFER_DATA_SIZE = 0x9303;
pub const BUFFER_BINDING = 0x9302;
pub const ATOMIC_COUNTER_BUFFER_INDEX = 0x9301;
pub const IS_ROW_MAJOR = 0x9300;
pub const MATRIX_STRIDE = 0x92FF;
pub const ARRAY_STRIDE = 0x92FE;
pub const BLOCK_INDEX = 0x92FD;
pub const OFFSET = 0x92FC;
pub const ARRAY_SIZE = 0x92FB;
pub const TYPE = 0x92FA;
pub const NAME_LENGTH = 0x92F9;
pub const MAX_NUM_COMPATIBLE_SUBROUTINES = 0x92F8;
pub const MAX_NUM_ACTIVE_VARIABLES = 0x92F7;
pub const MAX_NAME_LENGTH = 0x92F6;
pub const ACTIVE_RESOURCES = 0x92F5;
pub const TRANSFORM_FEEDBACK_VARYING = 0x92F4;
pub const COMPUTE_SUBROUTINE_UNIFORM = 0x92F3;
pub const FRAGMENT_SUBROUTINE_UNIFORM = 0x92F2;
pub const GEOMETRY_SUBROUTINE_UNIFORM = 0x92F1;
pub const TESS_EVALUATION_SUBROUTINE_UNIFORM = 0x92F0;
pub const TESS_CONTROL_SUBROUTINE_UNIFORM = 0x92EF;
pub const VERTEX_SUBROUTINE_UNIFORM = 0x92EE;
pub const COMPUTE_SUBROUTINE = 0x92ED;
pub const FRAGMENT_SUBROUTINE = 0x92EC;
pub const GEOMETRY_SUBROUTINE = 0x92EB;
pub const TESS_EVALUATION_SUBROUTINE = 0x92EA;
pub const TESS_CONTROL_SUBROUTINE = 0x92E9;
pub const VERTEX_SUBROUTINE = 0x92E8;
pub const SHADER_STORAGE_BLOCK = 0x92E6;
pub const BUFFER_VARIABLE = 0x92E5;
pub const PROGRAM_OUTPUT = 0x92E4;
pub const PROGRAM_INPUT = 0x92E3;
pub const UNIFORM_BLOCK = 0x92E2;
pub const UNIFORM = 0x92E1;
pub const VIEW_CLASS_BPTC_FLOAT = 0x82D3;
pub const VIEW_CLASS_BPTC_UNORM = 0x82D2;
pub const VIEW_CLASS_RGTC2_RG = 0x82D1;
pub const VIEW_CLASS_RGTC1_RED = 0x82D0;
pub const VIEW_CLASS_S3TC_DXT5_RGBA = 0x82CF;
pub const VIEW_CLASS_S3TC_DXT3_RGBA = 0x82CE;
pub const VIEW_CLASS_S3TC_DXT1_RGBA = 0x82CD;
pub const VIEW_CLASS_S3TC_DXT1_RGB = 0x82CC;
pub const VIEW_CLASS_8_BITS = 0x82CB;
pub const VIEW_CLASS_16_BITS = 0x82CA;
pub const VIEW_CLASS_24_BITS = 0x82C9;
pub const VIEW_CLASS_32_BITS = 0x82C8;
pub const VIEW_CLASS_48_BITS = 0x82C7;
pub const VIEW_CLASS_64_BITS = 0x82C6;
pub const VIEW_CLASS_96_BITS = 0x82C5;
pub const VIEW_CLASS_128_BITS = 0x82C4;
pub const IMAGE_CLASS_10_10_10_2 = 0x82C3;
pub const IMAGE_CLASS_11_11_10 = 0x82C2;
pub const IMAGE_CLASS_1_X_8 = 0x82C1;
pub const IMAGE_CLASS_2_X_8 = 0x82C0;
pub const IMAGE_CLASS_4_X_8 = 0x82BF;
pub const IMAGE_CLASS_1_X_16 = 0x82BE;
pub const IMAGE_CLASS_2_X_16 = 0x82BD;
pub const IMAGE_CLASS_4_X_16 = 0x82BC;
pub const IMAGE_CLASS_1_X_32 = 0x82BB;
pub const IMAGE_CLASS_2_X_32 = 0x82BA;
pub const IMAGE_CLASS_4_X_32 = 0x82B9;
pub const CAVEAT_SUPPORT = 0x82B8;
pub const FULL_SUPPORT = 0x82B7;
pub const VIEW_COMPATIBILITY_CLASS = 0x82B6;
pub const TEXTURE_VIEW = 0x82B5;
pub const CLEAR_BUFFER = 0x82B4;
pub const TEXTURE_COMPRESSED_BLOCK_SIZE = 0x82B3;
pub const TEXTURE_COMPRESSED_BLOCK_HEIGHT = 0x82B2;
pub const TEXTURE_COMPRESSED_BLOCK_WIDTH = 0x82B1;
pub const SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE = 0x82AF;
pub const SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE = 0x82AE;
pub const SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST = 0x82AD;
pub const SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST = 0x82AC;
pub const IMAGE_PIXEL_TYPE = 0x82AA;
pub const IMAGE_PIXEL_FORMAT = 0x82A9;
pub const IMAGE_COMPATIBILITY_CLASS = 0x82A8;
pub const IMAGE_TEXEL_SIZE = 0x82A7;
pub const SHADER_IMAGE_ATOMIC = 0x82A6;
pub const SHADER_IMAGE_STORE = 0x82A5;
pub const SHADER_IMAGE_LOAD = 0x82A4;
pub const TEXTURE_GATHER_SHADOW = 0x82A3;
pub const TEXTURE_GATHER = 0x82A2;
pub const TEXTURE_SHADOW = 0x82A1;
pub const COMPUTE_TEXTURE = 0x82A0;
pub const FRAGMENT_TEXTURE = 0x829F;
pub const GEOMETRY_TEXTURE = 0x829E;
pub const TESS_EVALUATION_TEXTURE = 0x829D;
pub const TESS_CONTROL_TEXTURE = 0x829C;
pub const VERTEX_TEXTURE = 0x829B;
pub const FILTER = 0x829A;
pub const SRGB_WRITE = 0x8298;
pub const SRGB_READ = 0x8297;
pub const COLOR_ENCODING = 0x8296;
pub const AUTO_GENERATE_MIPMAP = 0x8295;
pub const MANUAL_GENERATE_MIPMAP = 0x8294;
pub const MIPMAP = 0x8293;
pub const GET_TEXTURE_IMAGE_TYPE = 0x8292;
pub const GET_TEXTURE_IMAGE_FORMAT = 0x8291;
pub const TEXTURE_IMAGE_TYPE = 0x8290;
pub const TEXTURE_IMAGE_FORMAT = 0x828F;
pub const READ_PIXELS_TYPE = 0x828E;
pub const READ_PIXELS_FORMAT = 0x828D;
pub const READ_PIXELS = 0x828C;
pub const FRAMEBUFFER_BLEND = 0x828B;
pub const FRAMEBUFFER_RENDERABLE_LAYERED = 0x828A;
pub const FRAMEBUFFER_RENDERABLE = 0x8289;
pub const STENCIL_RENDERABLE = 0x8288;
pub const DEPTH_RENDERABLE = 0x8287;
pub const COLOR_RENDERABLE = 0x8286;
pub const STENCIL_COMPONENTS = 0x8285;
pub const DEPTH_COMPONENTS = 0x8284;
pub const COLOR_COMPONENTS = 0x8283;
pub const MAX_COMBINED_DIMENSIONS = 0x8282;
pub const MAX_LAYERS = 0x8281;
pub const MAX_DEPTH = 0x8280;
pub const MAX_HEIGHT = 0x827F;
pub const MAX_WIDTH = 0x827E;
pub const INTERNALFORMAT_STENCIL_TYPE = 0x827D;
pub const INTERNALFORMAT_DEPTH_TYPE = 0x827C;
pub const INTERNALFORMAT_ALPHA_TYPE = 0x827B;
pub const INTERNALFORMAT_BLUE_TYPE = 0x827A;
pub const INTERNALFORMAT_GREEN_TYPE = 0x8279;
pub const INTERNALFORMAT_RED_TYPE = 0x8278;
pub const INTERNALFORMAT_SHARED_SIZE = 0x8277;
pub const INTERNALFORMAT_STENCIL_SIZE = 0x8276;
pub const INTERNALFORMAT_DEPTH_SIZE = 0x8275;
pub const INTERNALFORMAT_ALPHA_SIZE = 0x8274;
pub const INTERNALFORMAT_BLUE_SIZE = 0x8273;
pub const INTERNALFORMAT_GREEN_SIZE = 0x8272;
pub const INTERNALFORMAT_RED_SIZE = 0x8271;
pub const INTERNALFORMAT_PREFERRED = 0x8270;
pub const INTERNALFORMAT_SUPPORTED = 0x826F;
pub const MAX_FRAMEBUFFER_SAMPLES = 0x9318;
pub const MAX_FRAMEBUFFER_LAYERS = 0x9317;
pub const MAX_FRAMEBUFFER_HEIGHT = 0x9316;
pub const MAX_FRAMEBUFFER_WIDTH = 0x9315;
pub const FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS = 0x9314;
pub const FRAMEBUFFER_DEFAULT_SAMPLES = 0x9313;
pub const FRAMEBUFFER_DEFAULT_LAYERS = 0x9312;
pub const FRAMEBUFFER_DEFAULT_HEIGHT = 0x9311;
pub const FRAMEBUFFER_DEFAULT_WIDTH = 0x9310;
pub const MAX_UNIFORM_LOCATIONS = 0x826E;
pub const CONTEXT_FLAG_DEBUG_BIT = 0x00000002;
pub const DEBUG_OUTPUT = 0x92E0;
pub const MAX_LABEL_LENGTH = 0x82E8;
pub const SAMPLER = 0x82E6;
pub const PROGRAM_PIPELINE = 0x82E4;
pub const QUERY = 0x82E3;
pub const VERTEX_ARRAY = 0x8074;
pub const PROGRAM = 0x82E2;
pub const SHADER = 0x82E1;
pub const BUFFER = 0x82E0;
pub const DEBUG_GROUP_STACK_DEPTH = 0x826D;
pub const MAX_DEBUG_GROUP_STACK_DEPTH = 0x826C;
pub const DEBUG_SEVERITY_NOTIFICATION = 0x826B;
pub const DEBUG_TYPE_POP_GROUP = 0x826A;
pub const DEBUG_TYPE_PUSH_GROUP = 0x8269;
pub const DEBUG_TYPE_MARKER = 0x8268;
pub const DEBUG_SEVERITY_LOW = 0x9148;
pub const DEBUG_SEVERITY_MEDIUM = 0x9147;
pub const DEBUG_SEVERITY_HIGH = 0x9146;
pub const DEBUG_LOGGED_MESSAGES = 0x9145;
pub const MAX_DEBUG_LOGGED_MESSAGES = 0x9144;
pub const MAX_DEBUG_MESSAGE_LENGTH = 0x9143;
pub const DEBUG_TYPE_OTHER = 0x8251;
pub const DEBUG_TYPE_PERFORMANCE = 0x8250;
pub const DEBUG_TYPE_PORTABILITY = 0x824F;
pub const DEBUG_TYPE_UNDEFINED_BEHAVIOR = 0x824E;
pub const DEBUG_TYPE_DEPRECATED_BEHAVIOR = 0x824D;
pub const DEBUG_TYPE_ERROR = 0x824C;
pub const DEBUG_SOURCE_OTHER = 0x824B;
pub const DEBUG_SOURCE_APPLICATION = 0x824A;
pub const DEBUG_SOURCE_THIRD_PARTY = 0x8249;
pub const DEBUG_SOURCE_SHADER_COMPILER = 0x8248;
pub const DEBUG_SOURCE_WINDOW_SYSTEM = 0x8247;
pub const DEBUG_SOURCE_API = 0x8246;
pub const DEBUG_CALLBACK_USER_PARAM = 0x8245;
pub const DEBUG_CALLBACK_FUNCTION = 0x8244;
pub const DEBUG_NEXT_LOGGED_MESSAGE_LENGTH = 0x8243;
pub const DEBUG_OUTPUT_SYNCHRONOUS = 0x8242;
pub const COMPUTE_SHADER_BIT = 0x00000020;
pub const DISPATCH_INDIRECT_BUFFER_BINDING = 0x90EF;
pub const DISPATCH_INDIRECT_BUFFER = 0x90EE;
pub const ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER = 0x90ED;
pub const UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER = 0x90EC;
pub const COMPUTE_WORK_GROUP_SIZE = 0x8267;
pub const MAX_COMPUTE_WORK_GROUP_SIZE = 0x91BF;
pub const COLOR_LOGIC_OP = 0x0BF2;
pub const POLYGON_OFFSET_UNITS = 0x2A00;
pub const POLYGON_OFFSET_POINT = 0x2A01;
pub const POLYGON_OFFSET_LINE = 0x2A02;
pub const POLYGON_OFFSET_FILL = 0x8037;
pub const POLYGON_OFFSET_FACTOR = 0x8038;
pub const TEXTURE_BINDING_1D = 0x8068;
pub const TEXTURE_BINDING_2D = 0x8069;
pub const TEXTURE_INTERNAL_FORMAT = 0x1003;
pub const TEXTURE_RED_SIZE = 0x805C;
pub const TEXTURE_GREEN_SIZE = 0x805D;
pub const TEXTURE_BLUE_SIZE = 0x805E;
pub const TEXTURE_ALPHA_SIZE = 0x805F;
pub const DOUBLE = 0x140A;
pub const PROXY_TEXTURE_1D = 0x8063;
pub const PROXY_TEXTURE_2D = 0x8064;
pub const R3_G3_B2 = 0x2A10;
pub const RGB4 = 0x804F;
pub const RGB5 = 0x8050;
pub const RGB8 = 0x8051;
pub const RGB10 = 0x8052;
pub const RGB12 = 0x8053;
pub const RGB16 = 0x8054;
pub const RGBA2 = 0x8055;
pub const RGBA4 = 0x8056;
pub const RGB5_A1 = 0x8057;
pub const RGBA8 = 0x8058;
pub const RGB10_A2 = 0x8059;
pub const RGBA12 = 0x805A;
pub const RGBA16 = 0x805B;
pub const COMPRESSED_SRGB8_ALPHA8_ETC2_EAC = 0x9279;
pub const COMPRESSED_RGBA8_ETC2_EAC = 0x9278;
pub const COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 0x9277;
pub const UNSIGNED_INT_IMAGE_2D = 0x9063;
pub const UNSIGNED_INT_IMAGE_1D = 0x9062;
pub const INT_IMAGE_2D_MULTISAMPLE_ARRAY = 0x9061;
pub const INT_IMAGE_2D_MULTISAMPLE = 0x9060;
pub const INT_IMAGE_CUBE_MAP_ARRAY = 0x905F;
pub const INT_IMAGE_2D_ARRAY = 0x905E;
pub const INT_IMAGE_1D_ARRAY = 0x905D;
pub const INT_IMAGE_BUFFER = 0x905C;
pub const MAX_TESS_CONTROL_ATOMIC_COUNTERS = 0x92D3;
pub const MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS = 0x92CF;
pub const TRANSFORM_FEEDBACK_BINDING = 0x8E25;
pub const TRANSFORM_FEEDBACK_BUFFER_ACTIVE = 0x8E24;
pub const TRANSFORM_FEEDBACK_BUFFER_PAUSED = 0x8E23;
pub const TRANSFORM_FEEDBACK = 0x8E22;
pub const TESS_CONTROL_SHADER = 0x8E88;
pub const TESS_EVALUATION_SHADER = 0x8E87;
pub const UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER = 0x84F1;
pub const UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER = 0x84F0;
pub const MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS = 0x8E1F;
pub const MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS = 0x8E1E;
pub const MAX_TESS_EVALUATION_INPUT_COMPONENTS = 0x886D;
pub const MAX_TESS_CONTROL_INPUT_COMPONENTS = 0x886C;
pub const MAX_TESS_EVALUATION_UNIFORM_BLOCKS = 0x8E8A;
pub const MAX_TESS_CONTROL_UNIFORM_BLOCKS = 0x8E89;
pub const MAX_TESS_EVALUATION_OUTPUT_COMPONENTS = 0x8E86;
pub const MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS = 0x8E85;
pub const MAX_TESS_PATCH_COMPONENTS = 0x8E84;
pub const MAX_TESS_CONTROL_OUTPUT_COMPONENTS = 0x8E83;
pub const MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS = 0x8E82;
pub const MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS = 0x8E81;
pub const MAX_TESS_EVALUATION_UNIFORM_COMPONENTS = 0x8E80;
pub const MAX_TESS_CONTROL_UNIFORM_COMPONENTS = 0x8E7F;
pub const MAX_TESS_GEN_LEVEL = 0x8E7E;
pub const MAX_PATCH_VERTICES = 0x8E7D;
pub const FRACTIONAL_EVEN = 0x8E7C;
pub const FRACTIONAL_ODD = 0x8E7B;
pub const QUADS = 0x0007;
pub const MAX_SUBROUTINE_UNIFORM_LOCATIONS = 0x8DE8;
pub const COMPATIBLE_SUBROUTINES = 0x8E4B;
pub const NUM_COMPATIBLE_SUBROUTINES = 0x8E4A;
pub const MAX_SUBROUTINES = 0x8DE7;
pub const ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH = 0x8E49;
pub const ACTIVE_SUBROUTINE_MAX_LENGTH = 0x8E48;
pub const ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS = 0x8E47;
pub const ACTIVE_SUBROUTINE_UNIFORMS = 0x8DE6;
pub const ACTIVE_SUBROUTINES = 0x8DE5;
pub const UNSIGNED_BYTE_3_3_2 = 0x8032;
pub const UNSIGNED_SHORT_4_4_4_4 = 0x8033;
pub const UNSIGNED_SHORT_5_5_5_1 = 0x8034;
pub const UNSIGNED_INT_8_8_8_8 = 0x8035;
pub const UNSIGNED_INT_10_10_10_2 = 0x8036;
pub const TEXTURE_BINDING_3D = 0x806A;
pub const PACK_SKIP_IMAGES = 0x806B;
pub const PACK_IMAGE_HEIGHT = 0x806C;
pub const UNPACK_SKIP_IMAGES = 0x806D;
pub const UNPACK_IMAGE_HEIGHT = 0x806E;
pub const TEXTURE_3D = 0x806F;
pub const PROXY_TEXTURE_3D = 0x8070;
pub const TEXTURE_DEPTH = 0x8071;
pub const TEXTURE_WRAP_R = 0x8072;
pub const MAX_3D_TEXTURE_SIZE = 0x8073;
pub const UNSIGNED_BYTE_2_3_3_REV = 0x8362;
pub const UNSIGNED_SHORT_5_6_5 = 0x8363;
pub const UNSIGNED_SHORT_5_6_5_REV = 0x8364;
pub const UNSIGNED_SHORT_4_4_4_4_REV = 0x8365;
pub const UNSIGNED_SHORT_1_5_5_5_REV = 0x8366;
pub const UNSIGNED_INT_8_8_8_8_REV = 0x8367;
pub const UNSIGNED_INT_2_10_10_10_REV = 0x8368;
pub const BGR = 0x80E0;
pub const BGRA = 0x80E1;
pub const MAX_ELEMENTS_VERTICES = 0x80E8;
pub const MAX_ELEMENTS_INDICES = 0x80E9;
pub const CLAMP_TO_EDGE = 0x812F;
pub const TEXTURE_MIN_LOD = 0x813A;
pub const TEXTURE_MAX_LOD = 0x813B;
pub const TEXTURE_BASE_LEVEL = 0x813C;
pub const TEXTURE_MAX_LEVEL = 0x813D;
pub const SMOOTH_POINT_SIZE_RANGE = 0x0B12;
pub const SMOOTH_POINT_SIZE_GRANULARITY = 0x0B13;
pub const SMOOTH_LINE_WIDTH_RANGE = 0x0B22;
pub const SMOOTH_LINE_WIDTH_GRANULARITY = 0x0B23;
pub const ALIASED_LINE_WIDTH_RANGE = 0x846E;
pub const TEXTURE0 = 0x84C0;
pub const TEXTURE1 = 0x84C1;
pub const TEXTURE2 = 0x84C2;
pub const TEXTURE3 = 0x84C3;
pub const TEXTURE4 = 0x84C4;
pub const TEXTURE5 = 0x84C5;
pub const TEXTURE6 = 0x84C6;
pub const TEXTURE7 = 0x84C7;
pub const TEXTURE8 = 0x84C8;
pub const TEXTURE9 = 0x84C9;
pub const TEXTURE10 = 0x84CA;
pub const TEXTURE11 = 0x84CB;
pub const TEXTURE12 = 0x84CC;
pub const TEXTURE13 = 0x84CD;
pub const TEXTURE14 = 0x84CE;
pub const TEXTURE15 = 0x84CF;
pub const TEXTURE16 = 0x84D0;
pub const TEXTURE17 = 0x84D1;
pub const TEXTURE18 = 0x84D2;
pub const TEXTURE19 = 0x84D3;
pub const TEXTURE20 = 0x84D4;
pub const TEXTURE21 = 0x84D5;
pub const TEXTURE22 = 0x84D6;
pub const TEXTURE23 = 0x84D7;
pub const TEXTURE24 = 0x84D8;
pub const TEXTURE25 = 0x84D9;
pub const TEXTURE26 = 0x84DA;
pub const TEXTURE27 = 0x84DB;
pub const TEXTURE28 = 0x84DC;
pub const TEXTURE29 = 0x84DD;
pub const TEXTURE30 = 0x84DE;
pub const TEXTURE31 = 0x84DF;
pub const ACTIVE_TEXTURE = 0x84E0;
pub const MULTISAMPLE = 0x809D;
pub const SAMPLE_ALPHA_TO_COVERAGE = 0x809E;
pub const SAMPLE_ALPHA_TO_ONE = 0x809F;
pub const SAMPLE_COVERAGE = 0x80A0;
pub const SAMPLE_BUFFERS = 0x80A8;
pub const SAMPLES = 0x80A9;
pub const SAMPLE_COVERAGE_VALUE = 0x80AA;
pub const SAMPLE_COVERAGE_INVERT = 0x80AB;
pub const TEXTURE_CUBE_MAP = 0x8513;
pub const TEXTURE_BINDING_CUBE_MAP = 0x8514;
pub const TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515;
pub const TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516;
pub const TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517;
pub const TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518;
pub const TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519;
pub const TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A;
pub const PROXY_TEXTURE_CUBE_MAP = 0x851B;
pub const MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C;
pub const COMPRESSED_RGB = 0x84ED;
pub const COMPRESSED_RGBA = 0x84EE;
pub const TEXTURE_COMPRESSION_HINT = 0x84EF;
pub const TEXTURE_COMPRESSED_IMAGE_SIZE = 0x86A0;
pub const TEXTURE_COMPRESSED = 0x86A1;
pub const NUM_COMPRESSED_TEXTURE_FORMATS = 0x86A2;
pub const COMPRESSED_TEXTURE_FORMATS = 0x86A3;
pub const CLAMP_TO_BORDER = 0x812D;
pub const DOUBLE_MAT4x3 = 0x8F4E;
pub const DOUBLE_MAT4x2 = 0x8F4D;
pub const DOUBLE_MAT3x4 = 0x8F4C;
pub const DOUBLE_MAT3x2 = 0x8F4B;
pub const DOUBLE_MAT2x4 = 0x8F4A;
pub const DOUBLE_MAT2x3 = 0x8F49;
pub const DOUBLE_MAT4 = 0x8F48;
pub const DOUBLE_MAT3 = 0x8F47;
pub const DOUBLE_MAT2 = 0x8F46;
pub const DOUBLE_VEC4 = 0x8FFE;
pub const DOUBLE_VEC3 = 0x8FFD;
pub const DOUBLE_VEC2 = 0x8FFC;
pub const MAX_VERTEX_STREAMS = 0x8E71;
pub const FRAGMENT_INTERPOLATION_OFFSET_BITS = 0x8E5D;
pub const MAX_FRAGMENT_INTERPOLATION_OFFSET = 0x8E5C;
pub const MIN_FRAGMENT_INTERPOLATION_OFFSET = 0x8E5B;
pub const MAX_GEOMETRY_SHADER_INVOCATIONS = 0x8E5A;
pub const GEOMETRY_SHADER_INVOCATIONS = 0x887F;
pub const DRAW_INDIRECT_BUFFER_BINDING = 0x8F43;
pub const DRAW_INDIRECT_BUFFER = 0x8F3F;
pub const UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY = 0x900F;
pub const INT_SAMPLER_CUBE_MAP_ARRAY = 0x900E;
pub const SAMPLER_CUBE_MAP_ARRAY_SHADOW = 0x900D;
pub const SAMPLER_CUBE_MAP_ARRAY = 0x900C;
pub const PROXY_TEXTURE_CUBE_MAP_ARRAY = 0x900B;
pub const TEXTURE_BINDING_CUBE_MAP_ARRAY = 0x900A;
pub const TEXTURE_CUBE_MAP_ARRAY = 0x9009;
pub const MAX_PROGRAM_TEXTURE_GATHER_OFFSET = 0x8E5F;
pub const MIN_PROGRAM_TEXTURE_GATHER_OFFSET = 0x8E5E;
pub const MIN_SAMPLE_SHADING_VALUE = 0x8C37;
pub const SAMPLE_SHADING = 0x8C36;
pub const INT_2_10_10_10_REV = 0x8D9F;
pub const TIMESTAMP = 0x8E28;
pub const TIME_ELAPSED = 0x88BF;
pub const TEXTURE_SWIZZLE_RGBA = 0x8E46;
pub const TEXTURE_SWIZZLE_A = 0x8E45;
pub const TEXTURE_SWIZZLE_B = 0x8E44;
pub const TEXTURE_SWIZZLE_G = 0x8E43;
pub const TEXTURE_SWIZZLE_R = 0x8E42;
pub const RGB10_A2UI = 0x906F;
pub const BLEND_DST_RGB = 0x80C8;
pub const BLEND_SRC_RGB = 0x80C9;
pub const BLEND_DST_ALPHA = 0x80CA;
pub const BLEND_SRC_ALPHA = 0x80CB;
pub const POINT_FADE_THRESHOLD_SIZE = 0x8128;
pub const DEPTH_COMPONENT16 = 0x81A5;
pub const DEPTH_COMPONENT24 = 0x81A6;
pub const DEPTH_COMPONENT32 = 0x81A7;
pub const MIRRORED_REPEAT = 0x8370;
pub const MAX_TEXTURE_LOD_BIAS = 0x84FD;
pub const TEXTURE_LOD_BIAS = 0x8501;
pub const INCR_WRAP = 0x8507;
pub const DECR_WRAP = 0x8508;
pub const TEXTURE_DEPTH_SIZE = 0x884A;
pub const TEXTURE_COMPARE_MODE = 0x884C;
pub const TEXTURE_COMPARE_FUNC = 0x884D;
pub const SAMPLER_BINDING = 0x8919;
pub const ANY_SAMPLES_PASSED = 0x8C2F;
pub const MAX_DUAL_SOURCE_DRAW_BUFFERS = 0x88FC;
pub const ONE_MINUS_SRC1_ALPHA = 0x88FB;
pub const ONE_MINUS_SRC1_COLOR = 0x88FA;
pub const SRC1_COLOR = 0x88F9;
pub const VERTEX_ATTRIB_ARRAY_DIVISOR = 0x88FE;
pub const MAX_INTEGER_SAMPLES = 0x9110;
pub const MAX_DEPTH_TEXTURE_SAMPLES = 0x910F;
pub const MAX_COLOR_TEXTURE_SAMPLES = 0x910E;
pub const UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910D;
pub const INT_SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910C;
pub const SAMPLER_2D_MULTISAMPLE_ARRAY = 0x910B;
pub const UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE = 0x910A;
pub const INT_SAMPLER_2D_MULTISAMPLE = 0x9109;
pub const SAMPLER_2D_MULTISAMPLE = 0x9108;
pub const TEXTURE_FIXED_SAMPLE_LOCATIONS = 0x9107;
pub const TEXTURE_SAMPLES = 0x9106;
pub const TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY = 0x9105;
pub const TEXTURE_BINDING_2D_MULTISAMPLE = 0x9104;
pub const PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY = 0x9103;
pub const TEXTURE_2D_MULTISAMPLE_ARRAY = 0x9102;
pub const PROXY_TEXTURE_2D_MULTISAMPLE = 0x9101;
pub const TEXTURE_2D_MULTISAMPLE = 0x9100;
pub const MAX_SAMPLE_MASK_WORDS = 0x8E59;
pub const SAMPLE_MASK_VALUE = 0x8E52;
pub const SAMPLE_MASK = 0x8E51;
pub const SAMPLE_POSITION = 0x8E50;
pub const SYNC_FLUSH_COMMANDS_BIT = 0x00000001;
pub const TIMEOUT_IGNORED = 0xFFFFFFFFFFFFFFFF;
pub const WAIT_FAILED = 0x911D;
pub const CONDITION_SATISFIED = 0x911C;
pub const TIMEOUT_EXPIRED = 0x911B;
pub const ALREADY_SIGNALED = 0x911A;
pub const SIGNALED = 0x9119;
pub const UNSIGNALED = 0x9118;
pub const SYNC_GPU_COMMANDS_COMPLETE = 0x9117;
pub const BLEND_COLOR = 0x8005;
pub const BLEND_EQUATION = 0x8009;
pub const CONSTANT_COLOR = 0x8001;
pub const ONE_MINUS_CONSTANT_COLOR = 0x8002;
pub const CONSTANT_ALPHA = 0x8003;
pub const ONE_MINUS_CONSTANT_ALPHA = 0x8004;
pub const FUNC_ADD = 0x8006;
pub const FUNC_REVERSE_SUBTRACT = 0x800B;
pub const FUNC_SUBTRACT = 0x800A;
pub const MIN = 0x8007;
pub const MAX = 0x8008;
pub const BUFFER_SIZE = 0x8764;
pub const BUFFER_USAGE = 0x8765;
pub const QUERY_COUNTER_BITS = 0x8864;
pub const CURRENT_QUERY = 0x8865;
pub const QUERY_RESULT = 0x8866;
pub const QUERY_RESULT_AVAILABLE = 0x8867;
pub const ARRAY_BUFFER = 0x8892;
pub const ELEMENT_ARRAY_BUFFER = 0x8893;
pub const ARRAY_BUFFER_BINDING = 0x8894;
pub const ELEMENT_ARRAY_BUFFER_BINDING = 0x8895;
pub const VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889F;
pub const READ_ONLY = 0x88B8;
pub const WRITE_ONLY = 0x88B9;
pub const READ_WRITE = 0x88BA;
pub const BUFFER_ACCESS = 0x88BB;
pub const BUFFER_MAPPED = 0x88BC;
pub const BUFFER_MAP_POINTER = 0x88BD;
pub const STREAM_DRAW = 0x88E0;
pub const STREAM_READ = 0x88E1;
pub const STREAM_COPY = 0x88E2;
pub const STATIC_DRAW = 0x88E4;
pub const STATIC_READ = 0x88E5;
pub const STATIC_COPY = 0x88E6;
pub const DYNAMIC_DRAW = 0x88E8;
pub const DYNAMIC_READ = 0x88E9;
pub const DYNAMIC_COPY = 0x88EA;
pub const SAMPLES_PASSED = 0x8914;
pub const SRC1_ALPHA = 0x8589;
pub const SYNC_FENCE = 0x9116;
pub const SYNC_FLAGS = 0x9115;
pub const SYNC_STATUS = 0x9114;
pub const SYNC_CONDITION = 0x9113;
pub const OBJECT_TYPE = 0x9112;
pub const MAX_SERVER_WAIT_TIMEOUT = 0x9111;
pub const TEXTURE_CUBE_MAP_SEAMLESS = 0x884F;
pub const PROVOKING_VERTEX = 0x8E4F;
pub const LAST_VERTEX_CONVENTION = 0x8E4E;
pub const FIRST_VERTEX_CONVENTION = 0x8E4D;
pub const QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION = 0x8E4C;
pub const DEPTH_CLAMP = 0x864F;
pub const CONTEXT_PROFILE_MASK = 0x9126;
pub const MAX_FRAGMENT_INPUT_COMPONENTS = 0x9125;
pub const MAX_GEOMETRY_OUTPUT_COMPONENTS = 0x9124;
pub const MAX_GEOMETRY_INPUT_COMPONENTS = 0x9123;
pub const MAX_VERTEX_OUTPUT_COMPONENTS = 0x9122;
pub const BLEND_EQUATION_RGB = 0x8009;
pub const VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622;
pub const VERTEX_ATTRIB_ARRAY_SIZE = 0x8623;
pub const VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624;
pub const VERTEX_ATTRIB_ARRAY_TYPE = 0x8625;
pub const CURRENT_VERTEX_ATTRIB = 0x8626;
pub const VERTEX_PROGRAM_POINT_SIZE = 0x8642;
pub const VERTEX_ATTRIB_ARRAY_POINTER = 0x8645;
pub const STENCIL_BACK_FUNC = 0x8800;
pub const STENCIL_BACK_FAIL = 0x8801;
pub const STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802;
pub const STENCIL_BACK_PASS_DEPTH_PASS = 0x8803;
pub const MAX_DRAW_BUFFERS = 0x8824;
pub const DRAW_BUFFER0 = 0x8825;
pub const DRAW_BUFFER1 = 0x8826;
pub const DRAW_BUFFER2 = 0x8827;
pub const DRAW_BUFFER3 = 0x8828;
pub const DRAW_BUFFER4 = 0x8829;
pub const DRAW_BUFFER5 = 0x882A;
pub const DRAW_BUFFER6 = 0x882B;
pub const DRAW_BUFFER7 = 0x882C;
pub const DRAW_BUFFER8 = 0x882D;
pub const DRAW_BUFFER9 = 0x882E;
pub const DRAW_BUFFER10 = 0x882F;
pub const DRAW_BUFFER11 = 0x8830;
pub const DRAW_BUFFER12 = 0x8831;
pub const DRAW_BUFFER13 = 0x8832;
pub const DRAW_BUFFER14 = 0x8833;
pub const DRAW_BUFFER15 = 0x8834;
pub const BLEND_EQUATION_ALPHA = 0x883D;
pub const MAX_VERTEX_ATTRIBS = 0x8869;
pub const VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886A;
pub const MAX_TEXTURE_IMAGE_UNITS = 0x8872;
pub const FRAGMENT_SHADER = 0x8B30;
pub const VERTEX_SHADER = 0x8B31;
pub const MAX_FRAGMENT_UNIFORM_COMPONENTS = 0x8B49;
pub const MAX_VERTEX_UNIFORM_COMPONENTS = 0x8B4A;
pub const MAX_VARYING_FLOATS = 0x8B4B;
pub const MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8B4C;
pub const MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D;
pub const SHADER_TYPE = 0x8B4F;
pub const FLOAT_VEC2 = 0x8B50;
pub const FLOAT_VEC3 = 0x8B51;
pub const FLOAT_VEC4 = 0x8B52;
pub const INT_VEC2 = 0x8B53;
pub const INT_VEC3 = 0x8B54;
pub const INT_VEC4 = 0x8B55;
pub const BOOL = 0x8B56;
pub const BOOL_VEC2 = 0x8B57;
pub const BOOL_VEC3 = 0x8B58;
pub const BOOL_VEC4 = 0x8B59;
pub const FLOAT_MAT2 = 0x8B5A;
pub const FLOAT_MAT3 = 0x8B5B;
pub const FLOAT_MAT4 = 0x8B5C;
pub const SAMPLER_1D = 0x8B5D;
pub const SAMPLER_2D = 0x8B5E;
pub const SAMPLER_3D = 0x8B5F;
pub const SAMPLER_CUBE = 0x8B60;
pub const SAMPLER_1D_SHADOW = 0x8B61;
pub const SAMPLER_2D_SHADOW = 0x8B62;
pub const DELETE_STATUS = 0x8B80;
pub const COMPILE_STATUS = 0x8B81;
pub const LINK_STATUS = 0x8B82;
pub const VALIDATE_STATUS = 0x8B83;
pub const INFO_LOG_LENGTH = 0x8B84;
pub const ATTACHED_SHADERS = 0x8B85;
pub const ACTIVE_UNIFORMS = 0x8B86;
pub const ACTIVE_UNIFORM_MAX_LENGTH = 0x8B87;
pub const SHADER_SOURCE_LENGTH = 0x8B88;
pub const ACTIVE_ATTRIBUTES = 0x8B89;
pub const ACTIVE_ATTRIBUTE_MAX_LENGTH = 0x8B8A;
pub const FRAGMENT_SHADER_DERIVATIVE_HINT = 0x8B8B;
pub const SHADING_LANGUAGE_VERSION = 0x8B8C;
pub const CURRENT_PROGRAM = 0x8B8D;
pub const POINT_SPRITE_COORD_ORIGIN = 0x8CA0;
pub const LOWER_LEFT = 0x8CA1;
pub const UPPER_LEFT = 0x8CA2;
pub const STENCIL_BACK_REF = 0x8CA3;
pub const STENCIL_BACK_VALUE_MASK = 0x8CA4;
pub const STENCIL_BACK_WRITEMASK = 0x8CA5;
pub const MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS = 0x8DE1;
pub const MAX_GEOMETRY_OUTPUT_VERTICES = 0x8DE0;
pub const MAX_GEOMETRY_UNIFORM_COMPONENTS = 0x8DDF;
pub const GEOMETRY_OUTPUT_TYPE = 0x8918;
pub const PIXEL_PACK_BUFFER = 0x88EB;
pub const PIXEL_UNPACK_BUFFER = 0x88EC;
pub const PIXEL_PACK_BUFFER_BINDING = 0x88ED;
pub const PIXEL_UNPACK_BUFFER_BINDING = 0x88EF;
pub const FLOAT_MAT2x3 = 0x8B65;
pub const FLOAT_MAT2x4 = 0x8B66;
pub const FLOAT_MAT3x2 = 0x8B67;
pub const FLOAT_MAT3x4 = 0x8B68;
pub const FLOAT_MAT4x2 = 0x8B69;
pub const FLOAT_MAT4x3 = 0x8B6A;
pub const SRGB = 0x8C40;
pub const SRGB8 = 0x8C41;
pub const SRGB_ALPHA = 0x8C42;
pub const SRGB8_ALPHA8 = 0x8C43;
pub const COMPRESSED_SRGB = 0x8C48;
pub const COMPRESSED_SRGB_ALPHA = 0x8C49;
pub const GEOMETRY_INPUT_TYPE = 0x8917;
pub const GEOMETRY_VERTICES_OUT = 0x8916;
pub const GEOMETRY_SHADER = 0x8DD9;
pub const FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS = 0x8DA8;
pub const FRAMEBUFFER_ATTACHMENT_LAYERED = 0x8DA7;
pub const MAX_GEOMETRY_TEXTURE_IMAGE_UNITS = 0x8C29;
pub const PROGRAM_POINT_SIZE = 0x8642;
pub const COMPARE_REF_TO_TEXTURE = 0x884E;
pub const CLIP_DISTANCE0 = 0x3000;
pub const CLIP_DISTANCE1 = 0x3001;
pub const CLIP_DISTANCE2 = 0x3002;
pub const CLIP_DISTANCE3 = 0x3003;
pub const CLIP_DISTANCE4 = 0x3004;
pub const CLIP_DISTANCE5 = 0x3005;
pub const CLIP_DISTANCE6 = 0x3006;
pub const CLIP_DISTANCE7 = 0x3007;
pub const MAX_CLIP_DISTANCES = 0x0D32;
pub const MAJOR_VERSION = 0x821B;
pub const MINOR_VERSION = 0x821C;
pub const NUM_EXTENSIONS = 0x821D;
pub const CONTEXT_FLAGS = 0x821E;
pub const COMPRESSED_RED = 0x8225;
pub const COMPRESSED_RG = 0x8226;
pub const CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT = 0x00000001;
pub const RGBA32F = 0x8814;
pub const RGB32F = 0x8815;
pub const RGBA16F = 0x881A;
pub const RGB16F = 0x881B;
pub const VERTEX_ATTRIB_ARRAY_INTEGER = 0x88FD;
pub const MAX_ARRAY_TEXTURE_LAYERS = 0x88FF;
pub const MIN_PROGRAM_TEXEL_OFFSET = 0x8904;
pub const MAX_PROGRAM_TEXEL_OFFSET = 0x8905;
pub const CLAMP_READ_COLOR = 0x891C;
pub const FIXED_ONLY = 0x891D;
pub const MAX_VARYING_COMPONENTS = 0x8B4B;
pub const TEXTURE_1D_ARRAY = 0x8C18;
pub const PROXY_TEXTURE_1D_ARRAY = 0x8C19;
pub const TEXTURE_2D_ARRAY = 0x8C1A;
pub const PROXY_TEXTURE_2D_ARRAY = 0x8C1B;
pub const TEXTURE_BINDING_1D_ARRAY = 0x8C1C;
pub const TEXTURE_BINDING_2D_ARRAY = 0x8C1D;
pub const R11F_G11F_B10F = 0x8C3A;
pub const UNSIGNED_INT_10F_11F_11F_REV = 0x8C3B;
pub const RGB9_E5 = 0x8C3D;
pub const UNSIGNED_INT_5_9_9_9_REV = 0x8C3E;
pub const TEXTURE_SHARED_SIZE = 0x8C3F;
pub const TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH = 0x8C76;
pub const TRANSFORM_FEEDBACK_BUFFER_MODE = 0x8C7F;
pub const MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS = 0x8C80;
pub const TRANSFORM_FEEDBACK_VARYINGS = 0x8C83;
pub const TRANSFORM_FEEDBACK_BUFFER_START = 0x8C84;
pub const TRANSFORM_FEEDBACK_BUFFER_SIZE = 0x8C85;
pub const PRIMITIVES_GENERATED = 0x8C87;
pub const TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN = 0x8C88;
pub const RASTERIZER_DISCARD = 0x8C89;
pub const MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = 0x8C8A;
pub const MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = 0x8C8B;
pub const INTERLEAVED_ATTRIBS = 0x8C8C;
pub const SEPARATE_ATTRIBS = 0x8C8D;
pub const TRANSFORM_FEEDBACK_BUFFER = 0x8C8E;
pub const TRANSFORM_FEEDBACK_BUFFER_BINDING = 0x8C8F;
pub const RGBA32UI = 0x8D70;
pub const RGB32UI = 0x8D71;
pub const RGBA16UI = 0x8D76;
pub const RGB16UI = 0x8D77;
pub const RGBA8UI = 0x8D7C;
pub const RGB8UI = 0x8D7D;
pub const RGBA32I = 0x8D82;
pub const RGB32I = 0x8D83;
pub const RGBA16I = 0x8D88;
pub const RGB16I = 0x8D89;
pub const RGBA8I = 0x8D8E;
pub const RGB8I = 0x8D8F;
pub const RED_INTEGER = 0x8D94;
pub const GREEN_INTEGER = 0x8D95;
pub const BLUE_INTEGER = 0x8D96;
pub const RGB_INTEGER = 0x8D98;
pub const RGBA_INTEGER = 0x8D99;
pub const BGR_INTEGER = 0x8D9A;
pub const BGRA_INTEGER = 0x8D9B;
pub const SAMPLER_1D_ARRAY = 0x8DC0;
pub const SAMPLER_2D_ARRAY = 0x8DC1;
pub const SAMPLER_1D_ARRAY_SHADOW = 0x8DC3;
pub const SAMPLER_2D_ARRAY_SHADOW = 0x8DC4;
pub const SAMPLER_CUBE_SHADOW = 0x8DC5;
pub const UNSIGNED_INT_VEC2 = 0x8DC6;
pub const UNSIGNED_INT_VEC3 = 0x8DC7;
pub const UNSIGNED_INT_VEC4 = 0x8DC8;
pub const INT_SAMPLER_1D = 0x8DC9;
pub const INT_SAMPLER_2D = 0x8DCA;
pub const INT_SAMPLER_3D = 0x8DCB;
pub const INT_SAMPLER_CUBE = 0x8DCC;
pub const INT_SAMPLER_1D_ARRAY = 0x8DCE;
pub const INT_SAMPLER_2D_ARRAY = 0x8DCF;
pub const UNSIGNED_INT_SAMPLER_1D = 0x8DD1;
pub const UNSIGNED_INT_SAMPLER_2D = 0x8DD2;
pub const UNSIGNED_INT_SAMPLER_3D = 0x8DD3;
pub const UNSIGNED_INT_SAMPLER_CUBE = 0x8DD4;
pub const UNSIGNED_INT_SAMPLER_1D_ARRAY = 0x8DD6;
pub const UNSIGNED_INT_SAMPLER_2D_ARRAY = 0x8DD7;
pub const QUERY_WAIT = 0x8E13;
pub const QUERY_NO_WAIT = 0x8E14;
pub const QUERY_BY_REGION_WAIT = 0x8E15;
pub const QUERY_BY_REGION_NO_WAIT = 0x8E16;
pub const BUFFER_ACCESS_FLAGS = 0x911F;
pub const BUFFER_MAP_LENGTH = 0x9120;
pub const BUFFER_MAP_OFFSET = 0x9121;
pub const DEPTH_COMPONENT32F = 0x8CAC;
pub const DEPTH32F_STENCIL8 = 0x8CAD;
pub const FLOAT_32_UNSIGNED_INT_24_8_REV = 0x8DAD;
pub const INVALID_FRAMEBUFFER_OPERATION = 0x0506;
pub const FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING = 0x8210;
pub const FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE = 0x8211;
pub const FRAMEBUFFER_ATTACHMENT_RED_SIZE = 0x8212;
pub const FRAMEBUFFER_ATTACHMENT_GREEN_SIZE = 0x8213;
pub const FRAMEBUFFER_ATTACHMENT_BLUE_SIZE = 0x8214;
pub const FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE = 0x8215;
pub const FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE = 0x8216;
pub const FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE = 0x8217;
pub const FRAMEBUFFER_DEFAULT = 0x8218;
pub const FRAMEBUFFER_UNDEFINED = 0x8219;
pub const DEPTH_STENCIL_ATTACHMENT = 0x821A;
pub const MAX_RENDERBUFFER_SIZE = 0x84E8;
pub const DEPTH_STENCIL = 0x84F9;
pub const UNSIGNED_INT_24_8 = 0x84FA;
pub const DEPTH24_STENCIL8 = 0x88F0;
pub const TEXTURE_STENCIL_SIZE = 0x88F1;
pub const TEXTURE_RED_TYPE = 0x8C10;
pub const TEXTURE_GREEN_TYPE = 0x8C11;
pub const TEXTURE_BLUE_TYPE = 0x8C12;
pub const TEXTURE_ALPHA_TYPE = 0x8C13;
pub const TEXTURE_DEPTH_TYPE = 0x8C16;
pub const UNSIGNED_NORMALIZED = 0x8C17;
pub const FRAMEBUFFER_BINDING = 0x8CA6;
pub const DRAW_FRAMEBUFFER_BINDING = 0x8CA6;
pub const RENDERBUFFER_BINDING = 0x8CA7;
pub const READ_FRAMEBUFFER = 0x8CA8;
pub const DRAW_FRAMEBUFFER = 0x8CA9;
pub const READ_FRAMEBUFFER_BINDING = 0x8CAA;
pub const RENDERBUFFER_SAMPLES = 0x8CAB;
pub const FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 0x8CD0;
pub const FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 0x8CD1;
pub const FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 0x8CD2;
pub const FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x8CD3;
pub const FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER = 0x8CD4;
pub const FRAMEBUFFER_COMPLETE = 0x8CD5;
pub const FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8CD6;
pub const FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8CD7;
pub const FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER = 0x8CDB;
pub const FRAMEBUFFER_INCOMPLETE_READ_BUFFER = 0x8CDC;
pub const FRAMEBUFFER_UNSUPPORTED = 0x8CDD;
pub const MAX_COLOR_ATTACHMENTS = 0x8CDF;
pub const COLOR_ATTACHMENT0 = 0x8CE0;
pub const COLOR_ATTACHMENT1 = 0x8CE1;
pub const COLOR_ATTACHMENT2 = 0x8CE2;
pub const COLOR_ATTACHMENT3 = 0x8CE3;
pub const COLOR_ATTACHMENT4 = 0x8CE4;
pub const COLOR_ATTACHMENT5 = 0x8CE5;
pub const COLOR_ATTACHMENT6 = 0x8CE6;
pub const COLOR_ATTACHMENT7 = 0x8CE7;
pub const COLOR_ATTACHMENT8 = 0x8CE8;
pub const COLOR_ATTACHMENT9 = 0x8CE9;
pub const COLOR_ATTACHMENT10 = 0x8CEA;
pub const COLOR_ATTACHMENT11 = 0x8CEB;
pub const COLOR_ATTACHMENT12 = 0x8CEC;
pub const COLOR_ATTACHMENT13 = 0x8CED;
pub const COLOR_ATTACHMENT14 = 0x8CEE;
pub const COLOR_ATTACHMENT15 = 0x8CEF;
pub const COLOR_ATTACHMENT16 = 0x8CF0;
pub const COLOR_ATTACHMENT17 = 0x8CF1;
pub const COLOR_ATTACHMENT18 = 0x8CF2;
pub const COLOR_ATTACHMENT19 = 0x8CF3;
pub const COLOR_ATTACHMENT20 = 0x8CF4;
pub const COLOR_ATTACHMENT21 = 0x8CF5;
pub const COLOR_ATTACHMENT22 = 0x8CF6;
pub const COLOR_ATTACHMENT23 = 0x8CF7;
pub const COLOR_ATTACHMENT24 = 0x8CF8;
pub const COLOR_ATTACHMENT25 = 0x8CF9;
pub const COLOR_ATTACHMENT26 = 0x8CFA;
pub const COLOR_ATTACHMENT27 = 0x8CFB;
pub const COLOR_ATTACHMENT28 = 0x8CFC;
pub const COLOR_ATTACHMENT29 = 0x8CFD;
pub const COLOR_ATTACHMENT30 = 0x8CFE;
pub const COLOR_ATTACHMENT31 = 0x8CFF;
pub const DEPTH_ATTACHMENT = 0x8D00;
pub const STENCIL_ATTACHMENT = 0x8D20;
pub const FRAMEBUFFER = 0x8D40;
pub const RENDERBUFFER = 0x8D41;
pub const RENDERBUFFER_WIDTH = 0x8D42;
pub const RENDERBUFFER_HEIGHT = 0x8D43;
pub const RENDERBUFFER_INTERNAL_FORMAT = 0x8D44;
pub const STENCIL_INDEX1 = 0x8D46;
pub const STENCIL_INDEX4 = 0x8D47;
pub const STENCIL_INDEX8 = 0x8D48;
pub const STENCIL_INDEX16 = 0x8D49;
pub const RENDERBUFFER_RED_SIZE = 0x8D50;
pub const RENDERBUFFER_GREEN_SIZE = 0x8D51;
pub const RENDERBUFFER_BLUE_SIZE = 0x8D52;
pub const RENDERBUFFER_ALPHA_SIZE = 0x8D53;
pub const RENDERBUFFER_DEPTH_SIZE = 0x8D54;
pub const RENDERBUFFER_STENCIL_SIZE = 0x8D55;
pub const FRAMEBUFFER_INCOMPLETE_MULTISAMPLE = 0x8D56;
pub const MAX_SAMPLES = 0x8D57;
pub const LINES_ADJACENCY = 0x000A;
pub const CONTEXT_COMPATIBILITY_PROFILE_BIT = 0x00000002;
pub const CONTEXT_CORE_PROFILE_BIT = 0x00000001;
pub const FRAMEBUFFER_SRGB = 0x8DB9;
pub const HALF_FLOAT = 0x140B;
pub const MAP_READ_BIT = 0x0001;
pub const MAP_WRITE_BIT = 0x0002;
pub const MAP_INVALIDATE_RANGE_BIT = 0x0004;
pub const MAP_INVALIDATE_BUFFER_BIT = 0x0008;
pub const MAP_FLUSH_EXPLICIT_BIT = 0x0010;
pub const MAP_UNSYNCHRONIZED_BIT = 0x0020;
pub const COMPRESSED_RED_RGTC1 = 0x8DBB;
pub const COMPRESSED_SIGNED_RED_RGTC1 = 0x8DBC;
pub const COMPRESSED_RG_RGTC2 = 0x8DBD;
pub const COMPRESSED_SIGNED_RG_RGTC2 = 0x8DBE;
pub const RG = 0x8227;
pub const RG_INTEGER = 0x8228;
pub const R8 = 0x8229;
pub const R16 = 0x822A;
pub const RG8 = 0x822B;
pub const RG16 = 0x822C;
pub const R16F = 0x822D;
pub const R32F = 0x822E;
pub const RG16F = 0x822F;
pub const RG32F = 0x8230;
pub const R8I = 0x8231;
pub const R8UI = 0x8232;
pub const R16I = 0x8233;
pub const R16UI = 0x8234;
pub const R32I = 0x8235;
pub const R32UI = 0x8236;
pub const RG8I = 0x8237;
pub const RG8UI = 0x8238;
pub const RG16I = 0x8239;
pub const RG16UI = 0x823A;
pub const RG32I = 0x823B;
pub const RG32UI = 0x823C;
pub const VERTEX_ARRAY_BINDING = 0x85B5;
pub const TRIANGLE_STRIP_ADJACENCY = 0x000D;
pub const TRIANGLES_ADJACENCY = 0x000C;
pub const LINE_STRIP_ADJACENCY = 0x000B;
pub const SAMPLER_2D_RECT = 0x8B63;
pub const SAMPLER_2D_RECT_SHADOW = 0x8B64;
pub const SAMPLER_BUFFER = 0x8DC2;
pub const INT_SAMPLER_2D_RECT = 0x8DCD;
pub const INT_SAMPLER_BUFFER = 0x8DD0;
pub const UNSIGNED_INT_SAMPLER_2D_RECT = 0x8DD5;
pub const UNSIGNED_INT_SAMPLER_BUFFER = 0x8DD8;
pub const TEXTURE_BUFFER = 0x8C2A;
pub const MAX_TEXTURE_BUFFER_SIZE = 0x8C2B;
pub const TEXTURE_BINDING_BUFFER = 0x8C2C;
pub const TEXTURE_BUFFER_DATA_STORE_BINDING = 0x8C2D;
pub const TEXTURE_RECTANGLE = 0x84F5;
pub const TEXTURE_BINDING_RECTANGLE = 0x84F6;
pub const PROXY_TEXTURE_RECTANGLE = 0x84F7;
pub const MAX_RECTANGLE_TEXTURE_SIZE = 0x84F8;
pub const R8_SNORM = 0x8F94;
pub const RG8_SNORM = 0x8F95;
pub const RGB8_SNORM = 0x8F96;
pub const RGBA8_SNORM = 0x8F97;
pub const R16_SNORM = 0x8F98;
pub const RG16_SNORM = 0x8F99;
pub const RGB16_SNORM = 0x8F9A;
pub const RGBA16_SNORM = 0x8F9B;
pub const SIGNED_NORMALIZED = 0x8F9C;
pub const PRIMITIVE_RESTART = 0x8F9D;
pub const PRIMITIVE_RESTART_INDEX = 0x8F9E;
pub const COPY_READ_BUFFER = 0x8F36;
pub const COPY_WRITE_BUFFER = 0x8F37;
pub const UNIFORM_BUFFER = 0x8A11;
pub const UNIFORM_BUFFER_BINDING = 0x8A28;
pub const UNIFORM_BUFFER_START = 0x8A29;
pub const UNIFORM_BUFFER_SIZE = 0x8A2A;
pub const MAX_VERTEX_UNIFORM_BLOCKS = 0x8A2B;
pub const MAX_GEOMETRY_UNIFORM_BLOCKS = 0x8A2C;
pub const MAX_FRAGMENT_UNIFORM_BLOCKS = 0x8A2D;
pub const MAX_COMBINED_UNIFORM_BLOCKS = 0x8A2E;
pub const MAX_UNIFORM_BUFFER_BINDINGS = 0x8A2F;
pub const MAX_UNIFORM_BLOCK_SIZE = 0x8A30;
pub const MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS = 0x8A31;
pub const MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS = 0x8A32;
pub const MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS = 0x8A33;
pub const UNIFORM_BUFFER_OFFSET_ALIGNMENT = 0x8A34;
pub const ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH = 0x8A35;
pub const ACTIVE_UNIFORM_BLOCKS = 0x8A36;
pub const UNIFORM_TYPE = 0x8A37;
pub const UNIFORM_SIZE = 0x8A38;
pub const UNIFORM_NAME_LENGTH = 0x8A39;
pub const UNIFORM_BLOCK_INDEX = 0x8A3A;
pub const UNIFORM_OFFSET = 0x8A3B;
pub const UNIFORM_ARRAY_STRIDE = 0x8A3C;
pub const UNIFORM_MATRIX_STRIDE = 0x8A3D;
pub const UNIFORM_IS_ROW_MAJOR = 0x8A3E;
pub const UNIFORM_BLOCK_BINDING = 0x8A3F;
pub const UNIFORM_BLOCK_DATA_SIZE = 0x8A40;
pub const UNIFORM_BLOCK_NAME_LENGTH = 0x8A41;
pub const UNIFORM_BLOCK_ACTIVE_UNIFORMS = 0x8A42;
pub const UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES = 0x8A43;
pub const UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER = 0x8A44;
pub const UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER = 0x8A45;
pub const UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER = 0x8A46;
pub const INVALID_INDEX = 0xFFFFFFFF;
pub const STACK_UNDERFLOW = 0x0504;
pub const STACK_OVERFLOW = 0x0503;
pub const MAX_VERTEX_ATTRIB_STRIDE = 0x82E5;
pub const PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED = 0x8221;
pub const TEXTURE_BUFFER_BINDING = 0x8C2A;
pub const MAP_PERSISTENT_BIT = 0x0040;
pub const MAP_COHERENT_BIT = 0x0080;
pub const DYNAMIC_STORAGE_BIT = 0x0100;
pub const CLIENT_STORAGE_BIT = 0x0200;
pub const CLIENT_MAPPED_BUFFER_BARRIER_BIT = 0x00004000;
pub const BUFFER_IMMUTABLE_STORAGE = 0x821F;
pub const BUFFER_STORAGE_FLAGS = 0x8220;
pub const CLEAR_TEXTURE = 0x9365;
pub const LOCATION_COMPONENT = 0x934A;
pub const TRANSFORM_FEEDBACK_BUFFER_INDEX = 0x934B;
pub const TRANSFORM_FEEDBACK_BUFFER_STRIDE = 0x934C;
pub const QUERY_BUFFER = 0x9192;
pub const QUERY_BUFFER_BARRIER_BIT = 0x00008000;
pub const QUERY_BUFFER_BINDING = 0x9193;
pub const QUERY_RESULT_NO_WAIT = 0x9194;
pub const MIRROR_CLAMP_TO_EDGE = 0x8743;
pub const CONTEXT_LOST = 0x0507;
pub const NEGATIVE_ONE_TO_ONE = 0x935E;
pub const ZERO_TO_ONE = 0x935F;
pub const CLIP_ORIGIN = 0x935C;
pub const CLIP_DEPTH_MODE = 0x935D;
pub const QUERY_WAIT_INVERTED = 0x8E17;
pub const QUERY_NO_WAIT_INVERTED = 0x8E18;
pub const QUERY_BY_REGION_WAIT_INVERTED = 0x8E19;
pub const QUERY_BY_REGION_NO_WAIT_INVERTED = 0x8E1A;
pub const MAX_CULL_DISTANCES = 0x82F9;
pub const MAX_COMBINED_CLIP_AND_CULL_DISTANCES = 0x82FA;
pub const TEXTURE_TARGET = 0x1006;
pub const QUERY_TARGET = 0x82EA;
pub const GUILTY_CONTEXT_RESET = 0x8253;
pub const INNOCENT_CONTEXT_RESET = 0x8254;
pub const UNKNOWN_CONTEXT_RESET = 0x8255;
pub const RESET_NOTIFICATION_STRATEGY = 0x8256;
pub const LOSE_CONTEXT_ON_RESET = 0x8252;
pub const NO_RESET_NOTIFICATION = 0x8261;
pub const CONTEXT_FLAG_ROBUST_ACCESS_BIT = 0x00000004;
pub const CONTEXT_RELEASE_BEHAVIOR = 0x82FB;
pub const CONTEXT_RELEASE_BEHAVIOR_FLUSH = 0x82FC;


pub fn texStorage2D(_target: GLenum, _levels: GLsizei, _internalformat: GLenum, _width: GLsizei, _height: GLsizei) callconv(.C) void {
    return @call(.always_tail, function_pointers.glTexStorage2D, .{_target, _levels, _internalformat, _width, _height});
}

pub fn texStorage1D(_target: GLenum, _levels: GLsizei, _internalformat: GLenum, _width: GLsizei) callconv(.C) void {
    return @call(.always_tail, function_pointers.glTexStorage1D, .{_target, _levels, _internalformat, _width});
}

pub fn drawTransformFeedbackStreamInstanced(_mode: GLenum, _id: GLuint, _stream: GLuint, _instancecount: GLsizei) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDrawTransformFeedbackStreamInstanced, .{_mode, _id, _stream, _instancecount});
}

pub fn drawTransformFeedbackInstanced(_mode: GLenum, _id: GLuint, _instancecount: GLsizei) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDrawTransformFeedbackInstanced, .{_mode, _id, _instancecount});
}

pub fn texStorage3D(_target: GLenum, _levels: GLsizei, _internalformat: GLenum, _width: GLsizei, _height: GLsizei, _depth: GLsizei) callconv(.C) void {
    return @call(.always_tail, function_pointers.glTexStorage3D, .{_target, _levels, _internalformat, _width, _height, _depth});
}

pub fn memoryBarrier(_barriers: GLbitfield) callconv(.C) void {
    return @call(.always_tail, function_pointers.glMemoryBarrier, .{_barriers});
}

pub fn bindImageTexture(_unit: GLuint, _texture: GLuint, _level: GLint, _layered: GLboolean, _layer: GLint, _access: GLenum, _format: GLenum) callconv(.C) void {
    return @call(.always_tail, function_pointers.glBindImageTexture, .{_unit, _texture, _level, _layered, _layer, _access, _format});
}

pub fn getActiveAtomicCounterBufferiv(_program: GLuint, _bufferIndex: GLuint, _pname: GLenum, _params: [*c]GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetActiveAtomicCounterBufferiv, .{_program, _bufferIndex, _pname, _params});
}

pub fn getInternalformativ(_target: GLenum, _internalformat: GLenum, _pname: GLenum, _count: GLsizei, _params: [*c]GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetInternalformativ, .{_target, _internalformat, _pname, _count, _params});
}

pub fn drawElementsInstancedBaseVertexBaseInstance(_mode: GLenum, _count: GLsizei, _type: GLenum, _indices: ?*const anyopaque, _instancecount: GLsizei, _basevertex: GLint, _baseinstance: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDrawElementsInstancedBaseVertexBaseInstance, .{_mode, _count, _type, _indices, _instancecount, _basevertex, _baseinstance});
}

pub fn drawElementsInstancedBaseInstance(_mode: GLenum, _count: GLsizei, _type: GLenum, _indices: ?*const anyopaque, _instancecount: GLsizei, _baseinstance: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDrawElementsInstancedBaseInstance, .{_mode, _count, _type, _indices, _instancecount, _baseinstance});
}

pub fn drawArraysInstancedBaseInstance(_mode: GLenum, _first: GLint, _count: GLsizei, _instancecount: GLsizei, _baseinstance: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDrawArraysInstancedBaseInstance, .{_mode, _first, _count, _instancecount, _baseinstance});
}

pub fn getDoublei_v(_target: GLenum, _index: GLuint, _data: [*c]GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetDoublei_v, .{_target, _index, _data});
}

pub fn getFloati_v(_target: GLenum, _index: GLuint, _data: [*c]GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetFloati_v, .{_target, _index, _data});
}

pub fn depthRangeIndexed(_index: GLuint, _n: GLdouble, _f: GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDepthRangeIndexed, .{_index, _n, _f});
}

pub fn depthRangeArrayv(_first: GLuint, _count: GLsizei, _v: [*c]const GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDepthRangeArrayv, .{_first, _count, _v});
}

pub fn scissorIndexedv(_index: GLuint, _v: [*c]const GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glScissorIndexedv, .{_index, _v});
}

pub fn scissorIndexed(_index: GLuint, _left: GLint, _bottom: GLint, _width: GLsizei, _height: GLsizei) callconv(.C) void {
    return @call(.always_tail, function_pointers.glScissorIndexed, .{_index, _left, _bottom, _width, _height});
}

pub fn scissorArrayv(_first: GLuint, _count: GLsizei, _v: [*c]const GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glScissorArrayv, .{_first, _count, _v});
}

pub fn viewportIndexedfv(_index: GLuint, _v: [*c]const GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glViewportIndexedfv, .{_index, _v});
}

pub fn viewportIndexedf(_index: GLuint, _x: GLfloat, _y: GLfloat, _w: GLfloat, _h: GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glViewportIndexedf, .{_index, _x, _y, _w, _h});
}

pub fn viewportArrayv(_first: GLuint, _count: GLsizei, _v: [*c]const GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glViewportArrayv, .{_first, _count, _v});
}

pub fn getVertexAttribLdv(_index: GLuint, _pname: GLenum, _params: [*c]GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetVertexAttribLdv, .{_index, _pname, _params});
}

pub fn vertexAttribLPointer(_index: GLuint, _size: GLint, _type: GLenum, _stride: GLsizei, _pointer: ?*const anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttribLPointer, .{_index, _size, _type, _stride, _pointer});
}

pub fn vertexAttribL4dv(_index: GLuint, _v: [*c]const GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttribL4dv, .{_index, _v});
}

pub fn vertexAttribL3dv(_index: GLuint, _v: [*c]const GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttribL3dv, .{_index, _v});
}

pub fn vertexAttribL2dv(_index: GLuint, _v: [*c]const GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttribL2dv, .{_index, _v});
}

pub fn vertexAttribL1dv(_index: GLuint, _v: [*c]const GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttribL1dv, .{_index, _v});
}

pub fn vertexAttribL4d(_index: GLuint, _x: GLdouble, _y: GLdouble, _z: GLdouble, _w: GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttribL4d, .{_index, _x, _y, _z, _w});
}

pub fn vertexAttribL3d(_index: GLuint, _x: GLdouble, _y: GLdouble, _z: GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttribL3d, .{_index, _x, _y, _z});
}

pub fn vertexAttribL2d(_index: GLuint, _x: GLdouble, _y: GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttribL2d, .{_index, _x, _y});
}

pub fn vertexAttribL1d(_index: GLuint, _x: GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttribL1d, .{_index, _x});
}

pub fn validateProgramPipeline(_pipeline: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glValidateProgramPipeline, .{_pipeline});
}

pub fn programUniformMatrix4x3dv(_program: GLuint, _location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniformMatrix4x3dv, .{_program, _location, _count, _transpose, _value});
}

pub fn programUniformMatrix3x4dv(_program: GLuint, _location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniformMatrix3x4dv, .{_program, _location, _count, _transpose, _value});
}

pub fn programUniformMatrix4x2dv(_program: GLuint, _location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniformMatrix4x2dv, .{_program, _location, _count, _transpose, _value});
}

pub fn programUniformMatrix2x4dv(_program: GLuint, _location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniformMatrix2x4dv, .{_program, _location, _count, _transpose, _value});
}

pub fn programUniformMatrix3x2dv(_program: GLuint, _location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniformMatrix3x2dv, .{_program, _location, _count, _transpose, _value});
}

pub fn programUniformMatrix2x3dv(_program: GLuint, _location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniformMatrix2x3dv, .{_program, _location, _count, _transpose, _value});
}

pub fn programUniformMatrix4x3fv(_program: GLuint, _location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniformMatrix4x3fv, .{_program, _location, _count, _transpose, _value});
}

pub fn programUniformMatrix3x4fv(_program: GLuint, _location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniformMatrix3x4fv, .{_program, _location, _count, _transpose, _value});
}

pub fn programUniformMatrix4x2fv(_program: GLuint, _location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniformMatrix4x2fv, .{_program, _location, _count, _transpose, _value});
}

pub fn programUniformMatrix2x4fv(_program: GLuint, _location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniformMatrix2x4fv, .{_program, _location, _count, _transpose, _value});
}

pub fn programUniformMatrix3x2fv(_program: GLuint, _location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniformMatrix3x2fv, .{_program, _location, _count, _transpose, _value});
}

pub fn programUniformMatrix2x3fv(_program: GLuint, _location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniformMatrix2x3fv, .{_program, _location, _count, _transpose, _value});
}

pub fn programUniformMatrix4dv(_program: GLuint, _location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniformMatrix4dv, .{_program, _location, _count, _transpose, _value});
}

pub fn programUniformMatrix3dv(_program: GLuint, _location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniformMatrix3dv, .{_program, _location, _count, _transpose, _value});
}

pub fn programUniformMatrix2dv(_program: GLuint, _location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniformMatrix2dv, .{_program, _location, _count, _transpose, _value});
}

pub fn programUniformMatrix4fv(_program: GLuint, _location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniformMatrix4fv, .{_program, _location, _count, _transpose, _value});
}

pub fn programUniformMatrix3fv(_program: GLuint, _location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniformMatrix3fv, .{_program, _location, _count, _transpose, _value});
}

pub fn programUniformMatrix2fv(_program: GLuint, _location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniformMatrix2fv, .{_program, _location, _count, _transpose, _value});
}

pub fn programUniform4uiv(_program: GLuint, _location: GLint, _count: GLsizei, _value: [*c]const GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniform4uiv, .{_program, _location, _count, _value});
}

pub fn programUniform4ui(_program: GLuint, _location: GLint, _v0: GLuint, _v1: GLuint, _v2: GLuint, _v3: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniform4ui, .{_program, _location, _v0, _v1, _v2, _v3});
}

pub fn programUniform4dv(_program: GLuint, _location: GLint, _count: GLsizei, _value: [*c]const GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniform4dv, .{_program, _location, _count, _value});
}

pub fn programUniform4d(_program: GLuint, _location: GLint, _v0: GLdouble, _v1: GLdouble, _v2: GLdouble, _v3: GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniform4d, .{_program, _location, _v0, _v1, _v2, _v3});
}

pub fn programUniform4fv(_program: GLuint, _location: GLint, _count: GLsizei, _value: [*c]const GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniform4fv, .{_program, _location, _count, _value});
}

pub fn programUniform4f(_program: GLuint, _location: GLint, _v0: GLfloat, _v1: GLfloat, _v2: GLfloat, _v3: GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniform4f, .{_program, _location, _v0, _v1, _v2, _v3});
}

pub fn programUniform4iv(_program: GLuint, _location: GLint, _count: GLsizei, _value: [*c]const GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniform4iv, .{_program, _location, _count, _value});
}

pub fn programUniform4i(_program: GLuint, _location: GLint, _v0: GLint, _v1: GLint, _v2: GLint, _v3: GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniform4i, .{_program, _location, _v0, _v1, _v2, _v3});
}

pub fn programUniform3uiv(_program: GLuint, _location: GLint, _count: GLsizei, _value: [*c]const GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniform3uiv, .{_program, _location, _count, _value});
}

pub fn programUniform3ui(_program: GLuint, _location: GLint, _v0: GLuint, _v1: GLuint, _v2: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniform3ui, .{_program, _location, _v0, _v1, _v2});
}

pub fn programUniform3dv(_program: GLuint, _location: GLint, _count: GLsizei, _value: [*c]const GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniform3dv, .{_program, _location, _count, _value});
}

pub fn programUniform3d(_program: GLuint, _location: GLint, _v0: GLdouble, _v1: GLdouble, _v2: GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniform3d, .{_program, _location, _v0, _v1, _v2});
}

pub fn programUniform3fv(_program: GLuint, _location: GLint, _count: GLsizei, _value: [*c]const GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniform3fv, .{_program, _location, _count, _value});
}

pub fn programUniform3f(_program: GLuint, _location: GLint, _v0: GLfloat, _v1: GLfloat, _v2: GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniform3f, .{_program, _location, _v0, _v1, _v2});
}

pub fn programUniform3iv(_program: GLuint, _location: GLint, _count: GLsizei, _value: [*c]const GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniform3iv, .{_program, _location, _count, _value});
}

pub fn programUniform3i(_program: GLuint, _location: GLint, _v0: GLint, _v1: GLint, _v2: GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniform3i, .{_program, _location, _v0, _v1, _v2});
}

pub fn useProgramStages(_pipeline: GLuint, _stages: GLbitfield, _program: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUseProgramStages, .{_pipeline, _stages, _program});
}

pub fn programParameteri(_program: GLuint, _pname: GLenum, _value: GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramParameteri, .{_program, _pname, _value});
}

pub fn getShaderPrecisionFormat(_shadertype: GLenum, _precisiontype: GLenum, _range: [*c]GLint, _precision: [*c]GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetShaderPrecisionFormat, .{_shadertype, _precisiontype, _range, _precision});
}

pub fn shaderBinary(_count: GLsizei, _shaders: [*c]const GLuint, _binaryFormat: GLenum, _binary: ?*const anyopaque, _length: GLsizei) callconv(.C) void {
    return @call(.always_tail, function_pointers.glShaderBinary, .{_count, _shaders, _binaryFormat, _binary, _length});
}

pub fn releaseShaderCompiler() callconv(.C) void {
    return @call(.always_tail, function_pointers.glReleaseShaderCompiler, .{});
}

pub fn getQueryIndexediv(_target: GLenum, _index: GLuint, _pname: GLenum, _params: [*c]GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetQueryIndexediv, .{_target, _index, _pname, _params});
}

pub fn endQueryIndexed(_target: GLenum, _index: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glEndQueryIndexed, .{_target, _index});
}

pub fn beginQueryIndexed(_target: GLenum, _index: GLuint, _id: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glBeginQueryIndexed, .{_target, _index, _id});
}

pub fn drawTransformFeedbackStream(_mode: GLenum, _id: GLuint, _stream: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDrawTransformFeedbackStream, .{_mode, _id, _stream});
}

pub fn drawTransformFeedback(_mode: GLenum, _id: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDrawTransformFeedback, .{_mode, _id});
}

pub fn resumeTransformFeedback() callconv(.C) void {
    return @call(.always_tail, function_pointers.glResumeTransformFeedback, .{});
}

pub fn pauseTransformFeedback() callconv(.C) void {
    return @call(.always_tail, function_pointers.glPauseTransformFeedback, .{});
}

pub fn getProgramStageiv(_program: GLuint, _shadertype: GLenum, _pname: GLenum, _values: [*c]GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetProgramStageiv, .{_program, _shadertype, _pname, _values});
}

pub fn getUniformSubroutineuiv(_shadertype: GLenum, _location: GLint, _params: [*c]GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetUniformSubroutineuiv, .{_shadertype, _location, _params});
}

pub fn uniformSubroutinesuiv(_shadertype: GLenum, _count: GLsizei, _indices: [*c]const GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniformSubroutinesuiv, .{_shadertype, _count, _indices});
}

pub fn getActiveSubroutineName(_program: GLuint, _shadertype: GLenum, _index: GLuint, _bufSize: GLsizei, _length: [*c]GLsizei, _name: [*c]GLchar) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetActiveSubroutineName, .{_program, _shadertype, _index, _bufSize, _length, _name});
}

pub fn cullFace(_mode: GLenum) callconv(.C) void {
    return @call(.always_tail, function_pointers.glCullFace, .{_mode});
}

pub fn frontFace(_mode: GLenum) callconv(.C) void {
    return @call(.always_tail, function_pointers.glFrontFace, .{_mode});
}

pub fn hint(_target: GLenum, _mode: GLenum) callconv(.C) void {
    return @call(.always_tail, function_pointers.glHint, .{_target, _mode});
}

pub fn lineWidth(_width: GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glLineWidth, .{_width});
}

pub fn pointSize(_size: GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glPointSize, .{_size});
}

pub fn polygonMode(_face: GLenum, _mode: GLenum) callconv(.C) void {
    return @call(.always_tail, function_pointers.glPolygonMode, .{_face, _mode});
}

pub fn scissor(_x: GLint, _y: GLint, _width: GLsizei, _height: GLsizei) callconv(.C) void {
    return @call(.always_tail, function_pointers.glScissor, .{_x, _y, _width, _height});
}

pub fn texParameterf(_target: GLenum, _pname: GLenum, _param: GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glTexParameterf, .{_target, _pname, _param});
}

pub fn texParameterfv(_target: GLenum, _pname: GLenum, _params: [*c]const GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glTexParameterfv, .{_target, _pname, _params});
}

pub fn texParameteri(_target: GLenum, _pname: GLenum, _param: GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glTexParameteri, .{_target, _pname, _param});
}

pub fn texParameteriv(_target: GLenum, _pname: GLenum, _params: [*c]const GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glTexParameteriv, .{_target, _pname, _params});
}

pub fn texImage1D(_target: GLenum, _level: GLint, _internalformat: GLint, _width: GLsizei, _border: GLint, _format: GLenum, _type: GLenum, _pixels: ?*const anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glTexImage1D, .{_target, _level, _internalformat, _width, _border, _format, _type, _pixels});
}

pub fn texImage2D(_target: GLenum, _level: GLint, _internalformat: GLint, _width: GLsizei, _height: GLsizei, _border: GLint, _format: GLenum, _type: GLenum, _pixels: ?*const anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glTexImage2D, .{_target, _level, _internalformat, _width, _height, _border, _format, _type, _pixels});
}

pub fn drawBuffer(_buf: GLenum) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDrawBuffer, .{_buf});
}

pub fn clear(_mask: GLbitfield) callconv(.C) void {
    return @call(.always_tail, function_pointers.glClear, .{_mask});
}

pub fn clearColor(_red: GLfloat, _green: GLfloat, _blue: GLfloat, _alpha: GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glClearColor, .{_red, _green, _blue, _alpha});
}

pub fn clearStencil(_s: GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glClearStencil, .{_s});
}

pub fn clearDepth(_depth: GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glClearDepth, .{_depth});
}

pub fn stencilMask(_mask: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glStencilMask, .{_mask});
}

pub fn colorMask(_red: GLboolean, _green: GLboolean, _blue: GLboolean, _alpha: GLboolean) callconv(.C) void {
    return @call(.always_tail, function_pointers.glColorMask, .{_red, _green, _blue, _alpha});
}

pub fn depthMask(_flag: GLboolean) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDepthMask, .{_flag});
}

pub fn disable(_cap: GLenum) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDisable, .{_cap});
}

pub fn enable(_cap: GLenum) callconv(.C) void {
    return @call(.always_tail, function_pointers.glEnable, .{_cap});
}

pub fn finish() callconv(.C) void {
    return @call(.always_tail, function_pointers.glFinish, .{});
}

pub fn flush() callconv(.C) void {
    return @call(.always_tail, function_pointers.glFlush, .{});
}

pub fn blendFunc(_sfactor: GLenum, _dfactor: GLenum) callconv(.C) void {
    return @call(.always_tail, function_pointers.glBlendFunc, .{_sfactor, _dfactor});
}

pub fn logicOp(_opcode: GLenum) callconv(.C) void {
    return @call(.always_tail, function_pointers.glLogicOp, .{_opcode});
}

pub fn stencilFunc(_func: GLenum, _ref: GLint, _mask: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glStencilFunc, .{_func, _ref, _mask});
}

pub fn stencilOp(_fail: GLenum, _zfail: GLenum, _zpass: GLenum) callconv(.C) void {
    return @call(.always_tail, function_pointers.glStencilOp, .{_fail, _zfail, _zpass});
}

pub fn depthFunc(_func: GLenum) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDepthFunc, .{_func});
}

pub fn pixelStoref(_pname: GLenum, _param: GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glPixelStoref, .{_pname, _param});
}

pub fn pixelStorei(_pname: GLenum, _param: GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glPixelStorei, .{_pname, _param});
}

pub fn readBuffer(_src: GLenum) callconv(.C) void {
    return @call(.always_tail, function_pointers.glReadBuffer, .{_src});
}

pub fn readPixels(_x: GLint, _y: GLint, _width: GLsizei, _height: GLsizei, _format: GLenum, _type: GLenum, _pixels: ?*anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glReadPixels, .{_x, _y, _width, _height, _format, _type, _pixels});
}

pub fn getBooleanv(_pname: GLenum, _data: [*c]GLboolean) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetBooleanv, .{_pname, _data});
}

pub fn getDoublev(_pname: GLenum, _data: [*c]GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetDoublev, .{_pname, _data});
}

pub fn getError() callconv(.C) GLenum {
    return @call(.always_tail, function_pointers.glGetError, .{});
}

pub fn getFloatv(_pname: GLenum, _data: [*c]GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetFloatv, .{_pname, _data});
}

pub fn getIntegerv(_pname: GLenum, _data: [*c]GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetIntegerv, .{_pname, _data});
}

pub fn getString(_name: GLenum) callconv(.C) ?[*:0]const GLubyte {
    return @call(.always_tail, function_pointers.glGetString, .{_name});
}

pub fn getTexImage(_target: GLenum, _level: GLint, _format: GLenum, _type: GLenum, _pixels: ?*anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetTexImage, .{_target, _level, _format, _type, _pixels});
}

pub fn getTexParameterfv(_target: GLenum, _pname: GLenum, _params: [*c]GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetTexParameterfv, .{_target, _pname, _params});
}

pub fn getTexParameteriv(_target: GLenum, _pname: GLenum, _params: [*c]GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetTexParameteriv, .{_target, _pname, _params});
}

pub fn getTexLevelParameterfv(_target: GLenum, _level: GLint, _pname: GLenum, _params: [*c]GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetTexLevelParameterfv, .{_target, _level, _pname, _params});
}

pub fn getTexLevelParameteriv(_target: GLenum, _level: GLint, _pname: GLenum, _params: [*c]GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetTexLevelParameteriv, .{_target, _level, _pname, _params});
}

pub fn isEnabled(_cap: GLenum) callconv(.C) GLboolean {
    return @call(.always_tail, function_pointers.glIsEnabled, .{_cap});
}

pub fn depthRange(_n: GLdouble, _f: GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDepthRange, .{_n, _f});
}

pub fn viewport(_x: GLint, _y: GLint, _width: GLsizei, _height: GLsizei) callconv(.C) void {
    return @call(.always_tail, function_pointers.glViewport, .{_x, _y, _width, _height});
}

pub fn texStorage2DMultisample(_target: GLenum, _samples: GLsizei, _internalformat: GLenum, _width: GLsizei, _height: GLsizei, _fixedsamplelocations: GLboolean) callconv(.C) void {
    return @call(.always_tail, function_pointers.glTexStorage2DMultisample, .{_target, _samples, _internalformat, _width, _height, _fixedsamplelocations});
}

pub fn texBufferRange(_target: GLenum, _internalformat: GLenum, _buffer: GLuint, _offset: GLintptr, _size: GLsizeiptr) callconv(.C) void {
    return @call(.always_tail, function_pointers.glTexBufferRange, .{_target, _internalformat, _buffer, _offset, _size});
}

pub fn shaderStorageBlockBinding(_program: GLuint, _storageBlockIndex: GLuint, _storageBlockBinding: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glShaderStorageBlockBinding, .{_program, _storageBlockIndex, _storageBlockBinding});
}

pub fn getProgramResourceLocationIndex(_program: GLuint, _programInterface: GLenum, _name: [*c]const GLchar) callconv(.C) GLint {
    return @call(.always_tail, function_pointers.glGetProgramResourceLocationIndex, .{_program, _programInterface, _name});
}

pub fn getProgramResourceLocation(_program: GLuint, _programInterface: GLenum, _name: [*c]const GLchar) callconv(.C) GLint {
    return @call(.always_tail, function_pointers.glGetProgramResourceLocation, .{_program, _programInterface, _name});
}

pub fn getProgramResourceiv(_program: GLuint, _programInterface: GLenum, _index: GLuint, _propCount: GLsizei, _props: [*c]const GLenum, _count: GLsizei, _length: [*c]GLsizei, _params: [*c]GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetProgramResourceiv, .{_program, _programInterface, _index, _propCount, _props, _count, _length, _params});
}

pub fn getProgramResourceName(_program: GLuint, _programInterface: GLenum, _index: GLuint, _bufSize: GLsizei, _length: [*c]GLsizei, _name: [*c]GLchar) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetProgramResourceName, .{_program, _programInterface, _index, _bufSize, _length, _name});
}

pub fn getProgramResourceIndex(_program: GLuint, _programInterface: GLenum, _name: [*c]const GLchar) callconv(.C) GLuint {
    return @call(.always_tail, function_pointers.glGetProgramResourceIndex, .{_program, _programInterface, _name});
}

pub fn getProgramInterfaceiv(_program: GLuint, _programInterface: GLenum, _pname: GLenum, _params: [*c]GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetProgramInterfaceiv, .{_program, _programInterface, _pname, _params});
}

pub fn multiDrawElementsIndirect(_mode: GLenum, _type: GLenum, _indirect: ?*const anyopaque, _drawcount: GLsizei, _stride: GLsizei) callconv(.C) void {
    return @call(.always_tail, function_pointers.glMultiDrawElementsIndirect, .{_mode, _type, _indirect, _drawcount, _stride});
}

pub fn multiDrawArraysIndirect(_mode: GLenum, _indirect: ?*const anyopaque, _drawcount: GLsizei, _stride: GLsizei) callconv(.C) void {
    return @call(.always_tail, function_pointers.glMultiDrawArraysIndirect, .{_mode, _indirect, _drawcount, _stride});
}

pub fn invalidateSubFramebuffer(_target: GLenum, _numAttachments: GLsizei, _attachments: [*c]const GLenum, _x: GLint, _y: GLint, _width: GLsizei, _height: GLsizei) callconv(.C) void {
    return @call(.always_tail, function_pointers.glInvalidateSubFramebuffer, .{_target, _numAttachments, _attachments, _x, _y, _width, _height});
}

pub fn invalidateFramebuffer(_target: GLenum, _numAttachments: GLsizei, _attachments: [*c]const GLenum) callconv(.C) void {
    return @call(.always_tail, function_pointers.glInvalidateFramebuffer, .{_target, _numAttachments, _attachments});
}

pub fn invalidateBufferData(_buffer: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glInvalidateBufferData, .{_buffer});
}

pub fn invalidateBufferSubData(_buffer: GLuint, _offset: GLintptr, _length: GLsizeiptr) callconv(.C) void {
    return @call(.always_tail, function_pointers.glInvalidateBufferSubData, .{_buffer, _offset, _length});
}

pub fn invalidateTexImage(_texture: GLuint, _level: GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glInvalidateTexImage, .{_texture, _level});
}

pub fn invalidateTexSubImage(_texture: GLuint, _level: GLint, _xoffset: GLint, _yoffset: GLint, _zoffset: GLint, _width: GLsizei, _height: GLsizei, _depth: GLsizei) callconv(.C) void {
    return @call(.always_tail, function_pointers.glInvalidateTexSubImage, .{_texture, _level, _xoffset, _yoffset, _zoffset, _width, _height, _depth});
}

pub fn getInternalformati64v(_target: GLenum, _internalformat: GLenum, _pname: GLenum, _count: GLsizei, _params: [*c]GLint64) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetInternalformati64v, .{_target, _internalformat, _pname, _count, _params});
}

pub fn getFramebufferParameteriv(_target: GLenum, _pname: GLenum, _params: [*c]GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetFramebufferParameteriv, .{_target, _pname, _params});
}

pub fn framebufferParameteri(_target: GLenum, _pname: GLenum, _param: GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glFramebufferParameteri, .{_target, _pname, _param});
}

pub fn copyImageSubData(_srcName: GLuint, _srcTarget: GLenum, _srcLevel: GLint, _srcX: GLint, _srcY: GLint, _srcZ: GLint, _dstName: GLuint, _dstTarget: GLenum, _dstLevel: GLint, _dstX: GLint, _dstY: GLint, _dstZ: GLint, _srcWidth: GLsizei, _srcHeight: GLsizei, _srcDepth: GLsizei) callconv(.C) void {
    return @call(.always_tail, function_pointers.glCopyImageSubData, .{_srcName, _srcTarget, _srcLevel, _srcX, _srcY, _srcZ, _dstName, _dstTarget, _dstLevel, _dstX, _dstY, _dstZ, _srcWidth, _srcHeight, _srcDepth});
}

pub fn dispatchComputeIndirect(_indirect: GLintptr) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDispatchComputeIndirect, .{_indirect});
}

pub fn dispatchCompute(_num_groups_x: GLuint, _num_groups_y: GLuint, _num_groups_z: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDispatchCompute, .{_num_groups_x, _num_groups_y, _num_groups_z});
}

pub fn clearBufferSubData(_target: GLenum, _internalformat: GLenum, _offset: GLintptr, _size: GLsizeiptr, _format: GLenum, _type: GLenum, _data: ?*const anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glClearBufferSubData, .{_target, _internalformat, _offset, _size, _format, _type, _data});
}

pub fn clearBufferData(_target: GLenum, _internalformat: GLenum, _format: GLenum, _type: GLenum, _data: ?*const anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glClearBufferData, .{_target, _internalformat, _format, _type, _data});
}

pub fn getProgramPipelineInfoLog(_pipeline: GLuint, _bufSize: GLsizei, _length: [*c]GLsizei, _infoLog: [*c]GLchar) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetProgramPipelineInfoLog, .{_pipeline, _bufSize, _length, _infoLog});
}

pub fn programUniform2uiv(_program: GLuint, _location: GLint, _count: GLsizei, _value: [*c]const GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniform2uiv, .{_program, _location, _count, _value});
}

pub fn programUniform2ui(_program: GLuint, _location: GLint, _v0: GLuint, _v1: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniform2ui, .{_program, _location, _v0, _v1});
}

pub fn programUniform2dv(_program: GLuint, _location: GLint, _count: GLsizei, _value: [*c]const GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniform2dv, .{_program, _location, _count, _value});
}

pub fn programUniform2d(_program: GLuint, _location: GLint, _v0: GLdouble, _v1: GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniform2d, .{_program, _location, _v0, _v1});
}

pub fn programUniform2fv(_program: GLuint, _location: GLint, _count: GLsizei, _value: [*c]const GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniform2fv, .{_program, _location, _count, _value});
}

pub fn programUniform2f(_program: GLuint, _location: GLint, _v0: GLfloat, _v1: GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniform2f, .{_program, _location, _v0, _v1});
}

pub fn programUniform2iv(_program: GLuint, _location: GLint, _count: GLsizei, _value: [*c]const GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniform2iv, .{_program, _location, _count, _value});
}

pub fn programUniform2i(_program: GLuint, _location: GLint, _v0: GLint, _v1: GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniform2i, .{_program, _location, _v0, _v1});
}

pub fn programUniform1uiv(_program: GLuint, _location: GLint, _count: GLsizei, _value: [*c]const GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniform1uiv, .{_program, _location, _count, _value});
}

pub fn programUniform1ui(_program: GLuint, _location: GLint, _v0: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniform1ui, .{_program, _location, _v0});
}

pub fn programUniform1dv(_program: GLuint, _location: GLint, _count: GLsizei, _value: [*c]const GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniform1dv, .{_program, _location, _count, _value});
}

pub fn programUniform1d(_program: GLuint, _location: GLint, _v0: GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniform1d, .{_program, _location, _v0});
}

pub fn programUniform1fv(_program: GLuint, _location: GLint, _count: GLsizei, _value: [*c]const GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniform1fv, .{_program, _location, _count, _value});
}

pub fn programUniform1f(_program: GLuint, _location: GLint, _v0: GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniform1f, .{_program, _location, _v0});
}

pub fn programUniform1iv(_program: GLuint, _location: GLint, _count: GLsizei, _value: [*c]const GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniform1iv, .{_program, _location, _count, _value});
}

pub fn programUniform1i(_program: GLuint, _location: GLint, _v0: GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramUniform1i, .{_program, _location, _v0});
}

pub fn getProgramPipelineiv(_pipeline: GLuint, _pname: GLenum, _params: [*c]GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetProgramPipelineiv, .{_pipeline, _pname, _params});
}

pub fn isProgramPipeline(_pipeline: GLuint) callconv(.C) GLboolean {
    return @call(.always_tail, function_pointers.glIsProgramPipeline, .{_pipeline});
}

pub fn genProgramPipelines(_n: GLsizei, _pipelines: [*c]GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGenProgramPipelines, .{_n, _pipelines});
}

pub fn deleteProgramPipelines(_n: GLsizei, _pipelines: [*c]const GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDeleteProgramPipelines, .{_n, _pipelines});
}

pub fn bindProgramPipeline(_pipeline: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glBindProgramPipeline, .{_pipeline});
}

pub fn createShaderProgramv(_type: GLenum, _count: GLsizei, _strings: [*c]const [*c]const GLchar) callconv(.C) GLuint {
    return @call(.always_tail, function_pointers.glCreateShaderProgramv, .{_type, _count, _strings});
}

pub fn activeShaderProgram(_pipeline: GLuint, _program: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glActiveShaderProgram, .{_pipeline, _program});
}

pub fn programBinary(_program: GLuint, _binaryFormat: GLenum, _binary: ?*const anyopaque, _length: GLsizei) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProgramBinary, .{_program, _binaryFormat, _binary, _length});
}

pub fn getProgramBinary(_program: GLuint, _bufSize: GLsizei, _length: [*c]GLsizei, _binaryFormat: [*c]GLenum, _binary: ?*anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetProgramBinary, .{_program, _bufSize, _length, _binaryFormat, _binary});
}

pub fn clearDepthf(_d: GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glClearDepthf, .{_d});
}

pub fn depthRangef(_n: GLfloat, _f: GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDepthRangef, .{_n, _f});
}

pub fn isTransformFeedback(_id: GLuint) callconv(.C) GLboolean {
    return @call(.always_tail, function_pointers.glIsTransformFeedback, .{_id});
}

pub fn genTransformFeedbacks(_n: GLsizei, _ids: [*c]GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGenTransformFeedbacks, .{_n, _ids});
}

pub fn deleteTransformFeedbacks(_n: GLsizei, _ids: [*c]const GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDeleteTransformFeedbacks, .{_n, _ids});
}

pub fn bindTransformFeedback(_target: GLenum, _id: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glBindTransformFeedback, .{_target, _id});
}

pub fn patchParameterfv(_pname: GLenum, _values: [*c]const GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glPatchParameterfv, .{_pname, _values});
}

pub fn patchParameteri(_pname: GLenum, _value: GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glPatchParameteri, .{_pname, _value});
}

pub fn drawArrays(_mode: GLenum, _first: GLint, _count: GLsizei) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDrawArrays, .{_mode, _first, _count});
}

pub fn drawElements(_mode: GLenum, _count: GLsizei, _type: GLenum, _indices: ?*const anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDrawElements, .{_mode, _count, _type, _indices});
}

pub fn polygonOffset(_factor: GLfloat, _units: GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glPolygonOffset, .{_factor, _units});
}

pub fn copyTexImage1D(_target: GLenum, _level: GLint, _internalformat: GLenum, _x: GLint, _y: GLint, _width: GLsizei, _border: GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glCopyTexImage1D, .{_target, _level, _internalformat, _x, _y, _width, _border});
}

pub fn copyTexImage2D(_target: GLenum, _level: GLint, _internalformat: GLenum, _x: GLint, _y: GLint, _width: GLsizei, _height: GLsizei, _border: GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glCopyTexImage2D, .{_target, _level, _internalformat, _x, _y, _width, _height, _border});
}

pub fn copyTexSubImage1D(_target: GLenum, _level: GLint, _xoffset: GLint, _x: GLint, _y: GLint, _width: GLsizei) callconv(.C) void {
    return @call(.always_tail, function_pointers.glCopyTexSubImage1D, .{_target, _level, _xoffset, _x, _y, _width});
}

pub fn copyTexSubImage2D(_target: GLenum, _level: GLint, _xoffset: GLint, _yoffset: GLint, _x: GLint, _y: GLint, _width: GLsizei, _height: GLsizei) callconv(.C) void {
    return @call(.always_tail, function_pointers.glCopyTexSubImage2D, .{_target, _level, _xoffset, _yoffset, _x, _y, _width, _height});
}

pub fn texSubImage1D(_target: GLenum, _level: GLint, _xoffset: GLint, _width: GLsizei, _format: GLenum, _type: GLenum, _pixels: ?*const anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glTexSubImage1D, .{_target, _level, _xoffset, _width, _format, _type, _pixels});
}

pub fn texSubImage2D(_target: GLenum, _level: GLint, _xoffset: GLint, _yoffset: GLint, _width: GLsizei, _height: GLsizei, _format: GLenum, _type: GLenum, _pixels: ?*const anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glTexSubImage2D, .{_target, _level, _xoffset, _yoffset, _width, _height, _format, _type, _pixels});
}

pub fn bindTexture(_target: GLenum, _texture: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glBindTexture, .{_target, _texture});
}

pub fn deleteTextures(_n: GLsizei, _textures: [*c]const GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDeleteTextures, .{_n, _textures});
}

pub fn genTextures(_n: GLsizei, _textures: [*c]GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGenTextures, .{_n, _textures});
}

pub fn isTexture(_texture: GLuint) callconv(.C) GLboolean {
    return @call(.always_tail, function_pointers.glIsTexture, .{_texture});
}

pub fn getActiveSubroutineUniformName(_program: GLuint, _shadertype: GLenum, _index: GLuint, _bufSize: GLsizei, _length: [*c]GLsizei, _name: [*c]GLchar) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetActiveSubroutineUniformName, .{_program, _shadertype, _index, _bufSize, _length, _name});
}

pub fn getActiveSubroutineUniformiv(_program: GLuint, _shadertype: GLenum, _index: GLuint, _pname: GLenum, _values: [*c]GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetActiveSubroutineUniformiv, .{_program, _shadertype, _index, _pname, _values});
}

pub fn getSubroutineIndex(_program: GLuint, _shadertype: GLenum, _name: [*c]const GLchar) callconv(.C) GLuint {
    return @call(.always_tail, function_pointers.glGetSubroutineIndex, .{_program, _shadertype, _name});
}

pub fn getSubroutineUniformLocation(_program: GLuint, _shadertype: GLenum, _name: [*c]const GLchar) callconv(.C) GLint {
    return @call(.always_tail, function_pointers.glGetSubroutineUniformLocation, .{_program, _shadertype, _name});
}

pub fn getUniformdv(_program: GLuint, _location: GLint, _params: [*c]GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetUniformdv, .{_program, _location, _params});
}

pub fn uniformMatrix4x3dv(_location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniformMatrix4x3dv, .{_location, _count, _transpose, _value});
}

pub fn uniformMatrix4x2dv(_location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniformMatrix4x2dv, .{_location, _count, _transpose, _value});
}

pub fn uniformMatrix3x4dv(_location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniformMatrix3x4dv, .{_location, _count, _transpose, _value});
}

pub fn uniformMatrix3x2dv(_location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniformMatrix3x2dv, .{_location, _count, _transpose, _value});
}

pub fn uniformMatrix2x4dv(_location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniformMatrix2x4dv, .{_location, _count, _transpose, _value});
}

pub fn uniformMatrix2x3dv(_location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniformMatrix2x3dv, .{_location, _count, _transpose, _value});
}

pub fn uniformMatrix4dv(_location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniformMatrix4dv, .{_location, _count, _transpose, _value});
}

pub fn uniformMatrix3dv(_location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniformMatrix3dv, .{_location, _count, _transpose, _value});
}

pub fn drawRangeElements(_mode: GLenum, _start: GLuint, _end: GLuint, _count: GLsizei, _type: GLenum, _indices: ?*const anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDrawRangeElements, .{_mode, _start, _end, _count, _type, _indices});
}

pub fn texImage3D(_target: GLenum, _level: GLint, _internalformat: GLint, _width: GLsizei, _height: GLsizei, _depth: GLsizei, _border: GLint, _format: GLenum, _type: GLenum, _pixels: ?*const anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glTexImage3D, .{_target, _level, _internalformat, _width, _height, _depth, _border, _format, _type, _pixels});
}

pub fn texSubImage3D(_target: GLenum, _level: GLint, _xoffset: GLint, _yoffset: GLint, _zoffset: GLint, _width: GLsizei, _height: GLsizei, _depth: GLsizei, _format: GLenum, _type: GLenum, _pixels: ?*const anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glTexSubImage3D, .{_target, _level, _xoffset, _yoffset, _zoffset, _width, _height, _depth, _format, _type, _pixels});
}

pub fn copyTexSubImage3D(_target: GLenum, _level: GLint, _xoffset: GLint, _yoffset: GLint, _zoffset: GLint, _x: GLint, _y: GLint, _width: GLsizei, _height: GLsizei) callconv(.C) void {
    return @call(.always_tail, function_pointers.glCopyTexSubImage3D, .{_target, _level, _xoffset, _yoffset, _zoffset, _x, _y, _width, _height});
}

pub fn uniformMatrix2dv(_location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniformMatrix2dv, .{_location, _count, _transpose, _value});
}

pub fn uniform4dv(_location: GLint, _count: GLsizei, _value: [*c]const GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniform4dv, .{_location, _count, _value});
}

pub fn uniform3dv(_location: GLint, _count: GLsizei, _value: [*c]const GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniform3dv, .{_location, _count, _value});
}

pub fn uniform2dv(_location: GLint, _count: GLsizei, _value: [*c]const GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniform2dv, .{_location, _count, _value});
}

pub fn uniform1dv(_location: GLint, _count: GLsizei, _value: [*c]const GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniform1dv, .{_location, _count, _value});
}

pub fn uniform4d(_location: GLint, _x: GLdouble, _y: GLdouble, _z: GLdouble, _w: GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniform4d, .{_location, _x, _y, _z, _w});
}

pub fn uniform3d(_location: GLint, _x: GLdouble, _y: GLdouble, _z: GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniform3d, .{_location, _x, _y, _z});
}

pub fn uniform2d(_location: GLint, _x: GLdouble, _y: GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniform2d, .{_location, _x, _y});
}

pub fn uniform1d(_location: GLint, _x: GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniform1d, .{_location, _x});
}

pub fn drawElementsIndirect(_mode: GLenum, _type: GLenum, _indirect: ?*const anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDrawElementsIndirect, .{_mode, _type, _indirect});
}

pub fn drawArraysIndirect(_mode: GLenum, _indirect: ?*const anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDrawArraysIndirect, .{_mode, _indirect});
}

pub fn blendFuncSeparatei(_buf: GLuint, _srcRGB: GLenum, _dstRGB: GLenum, _srcAlpha: GLenum, _dstAlpha: GLenum) callconv(.C) void {
    return @call(.always_tail, function_pointers.glBlendFuncSeparatei, .{_buf, _srcRGB, _dstRGB, _srcAlpha, _dstAlpha});
}

pub fn blendFunci(_buf: GLuint, _src: GLenum, _dst: GLenum) callconv(.C) void {
    return @call(.always_tail, function_pointers.glBlendFunci, .{_buf, _src, _dst});
}

pub fn blendEquationSeparatei(_buf: GLuint, _modeRGB: GLenum, _modeAlpha: GLenum) callconv(.C) void {
    return @call(.always_tail, function_pointers.glBlendEquationSeparatei, .{_buf, _modeRGB, _modeAlpha});
}

pub fn blendEquationi(_buf: GLuint, _mode: GLenum) callconv(.C) void {
    return @call(.always_tail, function_pointers.glBlendEquationi, .{_buf, _mode});
}

pub fn minSampleShading(_value: GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glMinSampleShading, .{_value});
}

pub fn activeTexture(_texture: GLenum) callconv(.C) void {
    return @call(.always_tail, function_pointers.glActiveTexture, .{_texture});
}

pub fn sampleCoverage(_value: GLfloat, _invert: GLboolean) callconv(.C) void {
    return @call(.always_tail, function_pointers.glSampleCoverage, .{_value, _invert});
}

pub fn compressedTexImage3D(_target: GLenum, _level: GLint, _internalformat: GLenum, _width: GLsizei, _height: GLsizei, _depth: GLsizei, _border: GLint, _imageSize: GLsizei, _data: ?*const anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glCompressedTexImage3D, .{_target, _level, _internalformat, _width, _height, _depth, _border, _imageSize, _data});
}

pub fn compressedTexImage2D(_target: GLenum, _level: GLint, _internalformat: GLenum, _width: GLsizei, _height: GLsizei, _border: GLint, _imageSize: GLsizei, _data: ?*const anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glCompressedTexImage2D, .{_target, _level, _internalformat, _width, _height, _border, _imageSize, _data});
}

pub fn compressedTexImage1D(_target: GLenum, _level: GLint, _internalformat: GLenum, _width: GLsizei, _border: GLint, _imageSize: GLsizei, _data: ?*const anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glCompressedTexImage1D, .{_target, _level, _internalformat, _width, _border, _imageSize, _data});
}

pub fn compressedTexSubImage3D(_target: GLenum, _level: GLint, _xoffset: GLint, _yoffset: GLint, _zoffset: GLint, _width: GLsizei, _height: GLsizei, _depth: GLsizei, _format: GLenum, _imageSize: GLsizei, _data: ?*const anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glCompressedTexSubImage3D, .{_target, _level, _xoffset, _yoffset, _zoffset, _width, _height, _depth, _format, _imageSize, _data});
}

pub fn compressedTexSubImage2D(_target: GLenum, _level: GLint, _xoffset: GLint, _yoffset: GLint, _width: GLsizei, _height: GLsizei, _format: GLenum, _imageSize: GLsizei, _data: ?*const anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glCompressedTexSubImage2D, .{_target, _level, _xoffset, _yoffset, _width, _height, _format, _imageSize, _data});
}

pub fn compressedTexSubImage1D(_target: GLenum, _level: GLint, _xoffset: GLint, _width: GLsizei, _format: GLenum, _imageSize: GLsizei, _data: ?*const anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glCompressedTexSubImage1D, .{_target, _level, _xoffset, _width, _format, _imageSize, _data});
}

pub fn getCompressedTexImage(_target: GLenum, _level: GLint, _img: ?*anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetCompressedTexImage, .{_target, _level, _img});
}

pub fn vertexAttribP4uiv(_index: GLuint, _type: GLenum, _normalized: GLboolean, _value: [*c]const GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttribP4uiv, .{_index, _type, _normalized, _value});
}

pub fn vertexAttribP4ui(_index: GLuint, _type: GLenum, _normalized: GLboolean, _value: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttribP4ui, .{_index, _type, _normalized, _value});
}

pub fn vertexAttribP3uiv(_index: GLuint, _type: GLenum, _normalized: GLboolean, _value: [*c]const GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttribP3uiv, .{_index, _type, _normalized, _value});
}

pub fn vertexAttribP3ui(_index: GLuint, _type: GLenum, _normalized: GLboolean, _value: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttribP3ui, .{_index, _type, _normalized, _value});
}

pub fn vertexAttribP2uiv(_index: GLuint, _type: GLenum, _normalized: GLboolean, _value: [*c]const GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttribP2uiv, .{_index, _type, _normalized, _value});
}

pub fn vertexAttribP2ui(_index: GLuint, _type: GLenum, _normalized: GLboolean, _value: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttribP2ui, .{_index, _type, _normalized, _value});
}

pub fn vertexAttribP1uiv(_index: GLuint, _type: GLenum, _normalized: GLboolean, _value: [*c]const GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttribP1uiv, .{_index, _type, _normalized, _value});
}

pub fn vertexAttribP1ui(_index: GLuint, _type: GLenum, _normalized: GLboolean, _value: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttribP1ui, .{_index, _type, _normalized, _value});
}

pub fn vertexAttribDivisor(_index: GLuint, _divisor: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttribDivisor, .{_index, _divisor});
}

pub fn getQueryObjectui64v(_id: GLuint, _pname: GLenum, _params: [*c]GLuint64) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetQueryObjectui64v, .{_id, _pname, _params});
}

pub fn getQueryObjecti64v(_id: GLuint, _pname: GLenum, _params: [*c]GLint64) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetQueryObjecti64v, .{_id, _pname, _params});
}

pub fn queryCounter(_id: GLuint, _target: GLenum) callconv(.C) void {
    return @call(.always_tail, function_pointers.glQueryCounter, .{_id, _target});
}

pub fn getSamplerParameterIuiv(_sampler: GLuint, _pname: GLenum, _params: [*c]GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetSamplerParameterIuiv, .{_sampler, _pname, _params});
}

pub fn getSamplerParameterfv(_sampler: GLuint, _pname: GLenum, _params: [*c]GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetSamplerParameterfv, .{_sampler, _pname, _params});
}

pub fn getSamplerParameterIiv(_sampler: GLuint, _pname: GLenum, _params: [*c]GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetSamplerParameterIiv, .{_sampler, _pname, _params});
}

pub fn getSamplerParameteriv(_sampler: GLuint, _pname: GLenum, _params: [*c]GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetSamplerParameteriv, .{_sampler, _pname, _params});
}

pub fn samplerParameterIuiv(_sampler: GLuint, _pname: GLenum, _param: [*c]const GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glSamplerParameterIuiv, .{_sampler, _pname, _param});
}

pub fn samplerParameterIiv(_sampler: GLuint, _pname: GLenum, _param: [*c]const GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glSamplerParameterIiv, .{_sampler, _pname, _param});
}

pub fn samplerParameterfv(_sampler: GLuint, _pname: GLenum, _param: [*c]const GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glSamplerParameterfv, .{_sampler, _pname, _param});
}

pub fn samplerParameterf(_sampler: GLuint, _pname: GLenum, _param: GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glSamplerParameterf, .{_sampler, _pname, _param});
}

pub fn samplerParameteriv(_sampler: GLuint, _pname: GLenum, _param: [*c]const GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glSamplerParameteriv, .{_sampler, _pname, _param});
}

pub fn samplerParameteri(_sampler: GLuint, _pname: GLenum, _param: GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glSamplerParameteri, .{_sampler, _pname, _param});
}

pub fn bindSampler(_unit: GLuint, _sampler: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glBindSampler, .{_unit, _sampler});
}

pub fn isSampler(_sampler: GLuint) callconv(.C) GLboolean {
    return @call(.always_tail, function_pointers.glIsSampler, .{_sampler});
}

pub fn deleteSamplers(_count: GLsizei, _samplers: [*c]const GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDeleteSamplers, .{_count, _samplers});
}

pub fn genSamplers(_count: GLsizei, _samplers: [*c]GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGenSamplers, .{_count, _samplers});
}

pub fn getFragDataIndex(_program: GLuint, _name: [*c]const GLchar) callconv(.C) GLint {
    return @call(.always_tail, function_pointers.glGetFragDataIndex, .{_program, _name});
}

pub fn bindFragDataLocationIndexed(_program: GLuint, _colorNumber: GLuint, _index: GLuint, _name: [*c]const GLchar) callconv(.C) void {
    return @call(.always_tail, function_pointers.glBindFragDataLocationIndexed, .{_program, _colorNumber, _index, _name});
}

pub fn sampleMaski(_maskNumber: GLuint, _mask: GLbitfield) callconv(.C) void {
    return @call(.always_tail, function_pointers.glSampleMaski, .{_maskNumber, _mask});
}

pub fn getMultisamplefv(_pname: GLenum, _index: GLuint, _val: [*c]GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetMultisamplefv, .{_pname, _index, _val});
}

pub fn texImage3DMultisample(_target: GLenum, _samples: GLsizei, _internalformat: GLenum, _width: GLsizei, _height: GLsizei, _depth: GLsizei, _fixedsamplelocations: GLboolean) callconv(.C) void {
    return @call(.always_tail, function_pointers.glTexImage3DMultisample, .{_target, _samples, _internalformat, _width, _height, _depth, _fixedsamplelocations});
}

pub fn texImage2DMultisample(_target: GLenum, _samples: GLsizei, _internalformat: GLenum, _width: GLsizei, _height: GLsizei, _fixedsamplelocations: GLboolean) callconv(.C) void {
    return @call(.always_tail, function_pointers.glTexImage2DMultisample, .{_target, _samples, _internalformat, _width, _height, _fixedsamplelocations});
}

pub fn framebufferTexture(_target: GLenum, _attachment: GLenum, _texture: GLuint, _level: GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glFramebufferTexture, .{_target, _attachment, _texture, _level});
}

pub fn getBufferParameteri64v(_target: GLenum, _pname: GLenum, _params: [*c]GLint64) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetBufferParameteri64v, .{_target, _pname, _params});
}

pub fn blendFuncSeparate(_sfactorRGB: GLenum, _dfactorRGB: GLenum, _sfactorAlpha: GLenum, _dfactorAlpha: GLenum) callconv(.C) void {
    return @call(.always_tail, function_pointers.glBlendFuncSeparate, .{_sfactorRGB, _dfactorRGB, _sfactorAlpha, _dfactorAlpha});
}

pub fn multiDrawArrays(_mode: GLenum, _first: [*c]const GLint, _count: [*c]const GLsizei, _drawcount: GLsizei) callconv(.C) void {
    return @call(.always_tail, function_pointers.glMultiDrawArrays, .{_mode, _first, _count, _drawcount});
}

pub fn multiDrawElements(_mode: GLenum, _count: [*c]const GLsizei, _type: GLenum, _indices: [*c]const ?*const anyopaque, _drawcount: GLsizei) callconv(.C) void {
    return @call(.always_tail, function_pointers.glMultiDrawElements, .{_mode, _count, _type, _indices, _drawcount});
}

pub fn pointParameterf(_pname: GLenum, _param: GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glPointParameterf, .{_pname, _param});
}

pub fn pointParameterfv(_pname: GLenum, _params: [*c]const GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glPointParameterfv, .{_pname, _params});
}

pub fn pointParameteri(_pname: GLenum, _param: GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glPointParameteri, .{_pname, _param});
}

pub fn pointParameteriv(_pname: GLenum, _params: [*c]const GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glPointParameteriv, .{_pname, _params});
}

pub fn getInteger64i_v(_target: GLenum, _index: GLuint, _data: [*c]GLint64) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetInteger64i_v, .{_target, _index, _data});
}

pub fn getSynciv(_sync: GLsync, _pname: GLenum, _count: GLsizei, _length: [*c]GLsizei, _values: [*c]GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetSynciv, .{_sync, _pname, _count, _length, _values});
}

pub fn getInteger64v(_pname: GLenum, _data: [*c]GLint64) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetInteger64v, .{_pname, _data});
}

pub fn waitSync(_sync: GLsync, _flags: GLbitfield, _timeout: GLuint64) callconv(.C) void {
    return @call(.always_tail, function_pointers.glWaitSync, .{_sync, _flags, _timeout});
}

pub fn clientWaitSync(_sync: GLsync, _flags: GLbitfield, _timeout: GLuint64) callconv(.C) GLenum {
    return @call(.always_tail, function_pointers.glClientWaitSync, .{_sync, _flags, _timeout});
}

pub fn deleteSync(_sync: GLsync) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDeleteSync, .{_sync});
}

pub fn isSync(_sync: GLsync) callconv(.C) GLboolean {
    return @call(.always_tail, function_pointers.glIsSync, .{_sync});
}

pub fn fenceSync(_condition: GLenum, _flags: GLbitfield) callconv(.C) GLsync {
    return @call(.always_tail, function_pointers.glFenceSync, .{_condition, _flags});
}

pub fn blendColor(_red: GLfloat, _green: GLfloat, _blue: GLfloat, _alpha: GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glBlendColor, .{_red, _green, _blue, _alpha});
}

pub fn blendEquation(_mode: GLenum) callconv(.C) void {
    return @call(.always_tail, function_pointers.glBlendEquation, .{_mode});
}

pub fn provokingVertex(_mode: GLenum) callconv(.C) void {
    return @call(.always_tail, function_pointers.glProvokingVertex, .{_mode});
}

pub fn multiDrawElementsBaseVertex(_mode: GLenum, _count: [*c]const GLsizei, _type: GLenum, _indices: [*c]const ?*const anyopaque, _drawcount: GLsizei, _basevertex: [*c]const GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glMultiDrawElementsBaseVertex, .{_mode, _count, _type, _indices, _drawcount, _basevertex});
}

pub fn drawElementsInstancedBaseVertex(_mode: GLenum, _count: GLsizei, _type: GLenum, _indices: ?*const anyopaque, _instancecount: GLsizei, _basevertex: GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDrawElementsInstancedBaseVertex, .{_mode, _count, _type, _indices, _instancecount, _basevertex});
}

pub fn drawRangeElementsBaseVertex(_mode: GLenum, _start: GLuint, _end: GLuint, _count: GLsizei, _type: GLenum, _indices: ?*const anyopaque, _basevertex: GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDrawRangeElementsBaseVertex, .{_mode, _start, _end, _count, _type, _indices, _basevertex});
}

pub fn drawElementsBaseVertex(_mode: GLenum, _count: GLsizei, _type: GLenum, _indices: ?*const anyopaque, _basevertex: GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDrawElementsBaseVertex, .{_mode, _count, _type, _indices, _basevertex});
}

pub fn genQueries(_n: GLsizei, _ids: [*c]GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGenQueries, .{_n, _ids});
}

pub fn deleteQueries(_n: GLsizei, _ids: [*c]const GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDeleteQueries, .{_n, _ids});
}

pub fn isQuery(_id: GLuint) callconv(.C) GLboolean {
    return @call(.always_tail, function_pointers.glIsQuery, .{_id});
}

pub fn beginQuery(_target: GLenum, _id: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glBeginQuery, .{_target, _id});
}

pub fn endQuery(_target: GLenum) callconv(.C) void {
    return @call(.always_tail, function_pointers.glEndQuery, .{_target});
}

pub fn getQueryiv(_target: GLenum, _pname: GLenum, _params: [*c]GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetQueryiv, .{_target, _pname, _params});
}

pub fn getQueryObjectiv(_id: GLuint, _pname: GLenum, _params: [*c]GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetQueryObjectiv, .{_id, _pname, _params});
}

pub fn getQueryObjectuiv(_id: GLuint, _pname: GLenum, _params: [*c]GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetQueryObjectuiv, .{_id, _pname, _params});
}

pub fn bindBuffer(_target: GLenum, _buffer: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glBindBuffer, .{_target, _buffer});
}

pub fn deleteBuffers(_n: GLsizei, _buffers: [*c]const GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDeleteBuffers, .{_n, _buffers});
}

pub fn genBuffers(_n: GLsizei, _buffers: [*c]GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGenBuffers, .{_n, _buffers});
}

pub fn isBuffer(_buffer: GLuint) callconv(.C) GLboolean {
    return @call(.always_tail, function_pointers.glIsBuffer, .{_buffer});
}

pub fn bufferData(_target: GLenum, _size: GLsizeiptr, _data: ?*const anyopaque, _usage: GLenum) callconv(.C) void {
    return @call(.always_tail, function_pointers.glBufferData, .{_target, _size, _data, _usage});
}

pub fn bufferSubData(_target: GLenum, _offset: GLintptr, _size: GLsizeiptr, _data: ?*const anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glBufferSubData, .{_target, _offset, _size, _data});
}

pub fn getBufferSubData(_target: GLenum, _offset: GLintptr, _size: GLsizeiptr, _data: ?*anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetBufferSubData, .{_target, _offset, _size, _data});
}

pub fn mapBuffer(_target: GLenum, _access: GLenum) callconv(.C) ?*anyopaque {
    return @call(.always_tail, function_pointers.glMapBuffer, .{_target, _access});
}

pub fn unmapBuffer(_target: GLenum) callconv(.C) GLboolean {
    return @call(.always_tail, function_pointers.glUnmapBuffer, .{_target});
}

pub fn getBufferParameteriv(_target: GLenum, _pname: GLenum, _params: [*c]GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetBufferParameteriv, .{_target, _pname, _params});
}

pub fn getBufferPointerv(_target: GLenum, _pname: GLenum, _params: ?*?*anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetBufferPointerv, .{_target, _pname, _params});
}

pub fn blendEquationSeparate(_modeRGB: GLenum, _modeAlpha: GLenum) callconv(.C) void {
    return @call(.always_tail, function_pointers.glBlendEquationSeparate, .{_modeRGB, _modeAlpha});
}

pub fn drawBuffers(_n: GLsizei, _bufs: [*c]const GLenum) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDrawBuffers, .{_n, _bufs});
}

pub fn stencilOpSeparate(_face: GLenum, _sfail: GLenum, _dpfail: GLenum, _dppass: GLenum) callconv(.C) void {
    return @call(.always_tail, function_pointers.glStencilOpSeparate, .{_face, _sfail, _dpfail, _dppass});
}

pub fn stencilFuncSeparate(_face: GLenum, _func: GLenum, _ref: GLint, _mask: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glStencilFuncSeparate, .{_face, _func, _ref, _mask});
}

pub fn stencilMaskSeparate(_face: GLenum, _mask: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glStencilMaskSeparate, .{_face, _mask});
}

pub fn attachShader(_program: GLuint, _shader: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glAttachShader, .{_program, _shader});
}

pub fn bindAttribLocation(_program: GLuint, _index: GLuint, _name: [*c]const GLchar) callconv(.C) void {
    return @call(.always_tail, function_pointers.glBindAttribLocation, .{_program, _index, _name});
}

pub fn compileShader(_shader: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glCompileShader, .{_shader});
}

pub fn createProgram() callconv(.C) GLuint {
    return @call(.always_tail, function_pointers.glCreateProgram, .{});
}

pub fn createShader(_type: GLenum) callconv(.C) GLuint {
    return @call(.always_tail, function_pointers.glCreateShader, .{_type});
}

pub fn deleteProgram(_program: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDeleteProgram, .{_program});
}

pub fn deleteShader(_shader: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDeleteShader, .{_shader});
}

pub fn detachShader(_program: GLuint, _shader: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDetachShader, .{_program, _shader});
}

pub fn disableVertexAttribArray(_index: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDisableVertexAttribArray, .{_index});
}

pub fn enableVertexAttribArray(_index: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glEnableVertexAttribArray, .{_index});
}

pub fn getActiveAttrib(_program: GLuint, _index: GLuint, _bufSize: GLsizei, _length: [*c]GLsizei, _size: [*c]GLint, _type: [*c]GLenum, _name: [*c]GLchar) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetActiveAttrib, .{_program, _index, _bufSize, _length, _size, _type, _name});
}

pub fn getActiveUniform(_program: GLuint, _index: GLuint, _bufSize: GLsizei, _length: [*c]GLsizei, _size: [*c]GLint, _type: [*c]GLenum, _name: [*c]GLchar) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetActiveUniform, .{_program, _index, _bufSize, _length, _size, _type, _name});
}

pub fn getAttachedShaders(_program: GLuint, _maxCount: GLsizei, _count: [*c]GLsizei, _shaders: [*c]GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetAttachedShaders, .{_program, _maxCount, _count, _shaders});
}

pub fn getAttribLocation(_program: GLuint, _name: [*c]const GLchar) callconv(.C) GLint {
    return @call(.always_tail, function_pointers.glGetAttribLocation, .{_program, _name});
}

pub fn getProgramiv(_program: GLuint, _pname: GLenum, _params: [*c]GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetProgramiv, .{_program, _pname, _params});
}

pub fn getProgramInfoLog(_program: GLuint, _bufSize: GLsizei, _length: [*c]GLsizei, _infoLog: [*c]GLchar) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetProgramInfoLog, .{_program, _bufSize, _length, _infoLog});
}

pub fn getShaderiv(_shader: GLuint, _pname: GLenum, _params: [*c]GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetShaderiv, .{_shader, _pname, _params});
}

pub fn getShaderInfoLog(_shader: GLuint, _bufSize: GLsizei, _length: [*c]GLsizei, _infoLog: [*c]GLchar) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetShaderInfoLog, .{_shader, _bufSize, _length, _infoLog});
}

pub fn getShaderSource(_shader: GLuint, _bufSize: GLsizei, _length: [*c]GLsizei, _source: [*c]GLchar) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetShaderSource, .{_shader, _bufSize, _length, _source});
}

pub fn getUniformLocation(_program: GLuint, _name: [*c]const GLchar) callconv(.C) GLint {
    return @call(.always_tail, function_pointers.glGetUniformLocation, .{_program, _name});
}

pub fn getUniformfv(_program: GLuint, _location: GLint, _params: [*c]GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetUniformfv, .{_program, _location, _params});
}

pub fn getUniformiv(_program: GLuint, _location: GLint, _params: [*c]GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetUniformiv, .{_program, _location, _params});
}

pub fn getVertexAttribdv(_index: GLuint, _pname: GLenum, _params: [*c]GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetVertexAttribdv, .{_index, _pname, _params});
}

pub fn getVertexAttribfv(_index: GLuint, _pname: GLenum, _params: [*c]GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetVertexAttribfv, .{_index, _pname, _params});
}

pub fn getVertexAttribiv(_index: GLuint, _pname: GLenum, _params: [*c]GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetVertexAttribiv, .{_index, _pname, _params});
}

pub fn getVertexAttribPointerv(_index: GLuint, _pname: GLenum, _pointer: ?*?*anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetVertexAttribPointerv, .{_index, _pname, _pointer});
}

pub fn isProgram(_program: GLuint) callconv(.C) GLboolean {
    return @call(.always_tail, function_pointers.glIsProgram, .{_program});
}

pub fn isShader(_shader: GLuint) callconv(.C) GLboolean {
    return @call(.always_tail, function_pointers.glIsShader, .{_shader});
}

pub fn linkProgram(_program: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glLinkProgram, .{_program});
}

pub fn shaderSource(_shader: GLuint, _count: GLsizei, _string: [*c]const [*c]const GLchar, _length: [*c]const GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glShaderSource, .{_shader, _count, _string, _length});
}

pub fn useProgram(_program: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUseProgram, .{_program});
}

pub fn uniform1f(_location: GLint, _v0: GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniform1f, .{_location, _v0});
}

pub fn uniform2f(_location: GLint, _v0: GLfloat, _v1: GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniform2f, .{_location, _v0, _v1});
}

pub fn uniform3f(_location: GLint, _v0: GLfloat, _v1: GLfloat, _v2: GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniform3f, .{_location, _v0, _v1, _v2});
}

pub fn uniform4f(_location: GLint, _v0: GLfloat, _v1: GLfloat, _v2: GLfloat, _v3: GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniform4f, .{_location, _v0, _v1, _v2, _v3});
}

pub fn uniform1i(_location: GLint, _v0: GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniform1i, .{_location, _v0});
}

pub fn uniform2i(_location: GLint, _v0: GLint, _v1: GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniform2i, .{_location, _v0, _v1});
}

pub fn uniform3i(_location: GLint, _v0: GLint, _v1: GLint, _v2: GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniform3i, .{_location, _v0, _v1, _v2});
}

pub fn uniform4i(_location: GLint, _v0: GLint, _v1: GLint, _v2: GLint, _v3: GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniform4i, .{_location, _v0, _v1, _v2, _v3});
}

pub fn uniform1fv(_location: GLint, _count: GLsizei, _value: [*c]const GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniform1fv, .{_location, _count, _value});
}

pub fn uniform2fv(_location: GLint, _count: GLsizei, _value: [*c]const GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniform2fv, .{_location, _count, _value});
}

pub fn uniform3fv(_location: GLint, _count: GLsizei, _value: [*c]const GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniform3fv, .{_location, _count, _value});
}

pub fn uniform4fv(_location: GLint, _count: GLsizei, _value: [*c]const GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniform4fv, .{_location, _count, _value});
}

pub fn uniform1iv(_location: GLint, _count: GLsizei, _value: [*c]const GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniform1iv, .{_location, _count, _value});
}

pub fn uniform2iv(_location: GLint, _count: GLsizei, _value: [*c]const GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniform2iv, .{_location, _count, _value});
}

pub fn uniform3iv(_location: GLint, _count: GLsizei, _value: [*c]const GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniform3iv, .{_location, _count, _value});
}

pub fn uniform4iv(_location: GLint, _count: GLsizei, _value: [*c]const GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniform4iv, .{_location, _count, _value});
}

pub fn uniformMatrix2fv(_location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniformMatrix2fv, .{_location, _count, _transpose, _value});
}

pub fn uniformMatrix3fv(_location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniformMatrix3fv, .{_location, _count, _transpose, _value});
}

pub fn uniformMatrix4fv(_location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniformMatrix4fv, .{_location, _count, _transpose, _value});
}

pub fn validateProgram(_program: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glValidateProgram, .{_program});
}

pub fn vertexAttrib1d(_index: GLuint, _x: GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttrib1d, .{_index, _x});
}

pub fn vertexAttrib1dv(_index: GLuint, _v: [*c]const GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttrib1dv, .{_index, _v});
}

pub fn vertexAttrib1f(_index: GLuint, _x: GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttrib1f, .{_index, _x});
}

pub fn vertexAttrib1fv(_index: GLuint, _v: [*c]const GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttrib1fv, .{_index, _v});
}

pub fn vertexAttrib1s(_index: GLuint, _x: GLshort) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttrib1s, .{_index, _x});
}

pub fn vertexAttrib1sv(_index: GLuint, _v: [*c]const GLshort) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttrib1sv, .{_index, _v});
}

pub fn vertexAttrib2d(_index: GLuint, _x: GLdouble, _y: GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttrib2d, .{_index, _x, _y});
}

pub fn vertexAttrib2dv(_index: GLuint, _v: [*c]const GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttrib2dv, .{_index, _v});
}

pub fn vertexAttrib2f(_index: GLuint, _x: GLfloat, _y: GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttrib2f, .{_index, _x, _y});
}

pub fn vertexAttrib2fv(_index: GLuint, _v: [*c]const GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttrib2fv, .{_index, _v});
}

pub fn vertexAttrib2s(_index: GLuint, _x: GLshort, _y: GLshort) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttrib2s, .{_index, _x, _y});
}

pub fn vertexAttrib2sv(_index: GLuint, _v: [*c]const GLshort) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttrib2sv, .{_index, _v});
}

pub fn vertexAttrib3d(_index: GLuint, _x: GLdouble, _y: GLdouble, _z: GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttrib3d, .{_index, _x, _y, _z});
}

pub fn vertexAttrib3dv(_index: GLuint, _v: [*c]const GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttrib3dv, .{_index, _v});
}

pub fn vertexAttrib3f(_index: GLuint, _x: GLfloat, _y: GLfloat, _z: GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttrib3f, .{_index, _x, _y, _z});
}

pub fn vertexAttrib3fv(_index: GLuint, _v: [*c]const GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttrib3fv, .{_index, _v});
}

pub fn vertexAttrib3s(_index: GLuint, _x: GLshort, _y: GLshort, _z: GLshort) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttrib3s, .{_index, _x, _y, _z});
}

pub fn vertexAttrib3sv(_index: GLuint, _v: [*c]const GLshort) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttrib3sv, .{_index, _v});
}

pub fn vertexAttrib4Nbv(_index: GLuint, _v: [*c]const GLbyte) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttrib4Nbv, .{_index, _v});
}

pub fn vertexAttrib4Niv(_index: GLuint, _v: [*c]const GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttrib4Niv, .{_index, _v});
}

pub fn vertexAttrib4Nsv(_index: GLuint, _v: [*c]const GLshort) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttrib4Nsv, .{_index, _v});
}

pub fn vertexAttrib4Nub(_index: GLuint, _x: GLubyte, _y: GLubyte, _z: GLubyte, _w: GLubyte) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttrib4Nub, .{_index, _x, _y, _z, _w});
}

pub fn vertexAttrib4Nubv(_index: GLuint, _v: ?[*:0]const GLubyte) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttrib4Nubv, .{_index, _v});
}

pub fn vertexAttrib4Nuiv(_index: GLuint, _v: [*c]const GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttrib4Nuiv, .{_index, _v});
}

pub fn vertexAttrib4Nusv(_index: GLuint, _v: [*c]const GLushort) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttrib4Nusv, .{_index, _v});
}

pub fn vertexAttrib4bv(_index: GLuint, _v: [*c]const GLbyte) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttrib4bv, .{_index, _v});
}

pub fn vertexAttrib4d(_index: GLuint, _x: GLdouble, _y: GLdouble, _z: GLdouble, _w: GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttrib4d, .{_index, _x, _y, _z, _w});
}

pub fn vertexAttrib4dv(_index: GLuint, _v: [*c]const GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttrib4dv, .{_index, _v});
}

pub fn vertexAttrib4f(_index: GLuint, _x: GLfloat, _y: GLfloat, _z: GLfloat, _w: GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttrib4f, .{_index, _x, _y, _z, _w});
}

pub fn vertexAttrib4fv(_index: GLuint, _v: [*c]const GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttrib4fv, .{_index, _v});
}

pub fn vertexAttrib4iv(_index: GLuint, _v: [*c]const GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttrib4iv, .{_index, _v});
}

pub fn vertexAttrib4s(_index: GLuint, _x: GLshort, _y: GLshort, _z: GLshort, _w: GLshort) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttrib4s, .{_index, _x, _y, _z, _w});
}

pub fn vertexAttrib4sv(_index: GLuint, _v: [*c]const GLshort) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttrib4sv, .{_index, _v});
}

pub fn vertexAttrib4ubv(_index: GLuint, _v: ?[*:0]const GLubyte) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttrib4ubv, .{_index, _v});
}

pub fn vertexAttrib4uiv(_index: GLuint, _v: [*c]const GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttrib4uiv, .{_index, _v});
}

pub fn vertexAttrib4usv(_index: GLuint, _v: [*c]const GLushort) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttrib4usv, .{_index, _v});
}

pub fn vertexAttribPointer(_index: GLuint, _size: GLint, _type: GLenum, _normalized: GLboolean, _stride: GLsizei, _pointer: ?*const anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttribPointer, .{_index, _size, _type, _normalized, _stride, _pointer});
}

pub fn uniformMatrix2x3fv(_location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniformMatrix2x3fv, .{_location, _count, _transpose, _value});
}

pub fn uniformMatrix3x2fv(_location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniformMatrix3x2fv, .{_location, _count, _transpose, _value});
}

pub fn uniformMatrix2x4fv(_location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniformMatrix2x4fv, .{_location, _count, _transpose, _value});
}

pub fn uniformMatrix4x2fv(_location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniformMatrix4x2fv, .{_location, _count, _transpose, _value});
}

pub fn uniformMatrix3x4fv(_location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniformMatrix3x4fv, .{_location, _count, _transpose, _value});
}

pub fn uniformMatrix4x3fv(_location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniformMatrix4x3fv, .{_location, _count, _transpose, _value});
}

pub fn colorMaski(_index: GLuint, _r: GLboolean, _g: GLboolean, _b: GLboolean, _a: GLboolean) callconv(.C) void {
    return @call(.always_tail, function_pointers.glColorMaski, .{_index, _r, _g, _b, _a});
}

pub fn getBooleani_v(_target: GLenum, _index: GLuint, _data: [*c]GLboolean) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetBooleani_v, .{_target, _index, _data});
}

pub fn getIntegeri_v(_target: GLenum, _index: GLuint, _data: [*c]GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetIntegeri_v, .{_target, _index, _data});
}

pub fn enablei(_target: GLenum, _index: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glEnablei, .{_target, _index});
}

pub fn disablei(_target: GLenum, _index: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDisablei, .{_target, _index});
}

pub fn isEnabledi(_target: GLenum, _index: GLuint) callconv(.C) GLboolean {
    return @call(.always_tail, function_pointers.glIsEnabledi, .{_target, _index});
}

pub fn beginTransformFeedback(_primitiveMode: GLenum) callconv(.C) void {
    return @call(.always_tail, function_pointers.glBeginTransformFeedback, .{_primitiveMode});
}

pub fn endTransformFeedback() callconv(.C) void {
    return @call(.always_tail, function_pointers.glEndTransformFeedback, .{});
}

pub fn bindBufferRange(_target: GLenum, _index: GLuint, _buffer: GLuint, _offset: GLintptr, _size: GLsizeiptr) callconv(.C) void {
    return @call(.always_tail, function_pointers.glBindBufferRange, .{_target, _index, _buffer, _offset, _size});
}

pub fn bindBufferBase(_target: GLenum, _index: GLuint, _buffer: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glBindBufferBase, .{_target, _index, _buffer});
}

pub fn transformFeedbackVaryings(_program: GLuint, _count: GLsizei, _varyings: [*c]const [*c]const GLchar, _bufferMode: GLenum) callconv(.C) void {
    return @call(.always_tail, function_pointers.glTransformFeedbackVaryings, .{_program, _count, _varyings, _bufferMode});
}

pub fn getTransformFeedbackVarying(_program: GLuint, _index: GLuint, _bufSize: GLsizei, _length: [*c]GLsizei, _size: [*c]GLsizei, _type: [*c]GLenum, _name: [*c]GLchar) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetTransformFeedbackVarying, .{_program, _index, _bufSize, _length, _size, _type, _name});
}

pub fn clampColor(_target: GLenum, _clamp: GLenum) callconv(.C) void {
    return @call(.always_tail, function_pointers.glClampColor, .{_target, _clamp});
}

pub fn beginConditionalRender(_id: GLuint, _mode: GLenum) callconv(.C) void {
    return @call(.always_tail, function_pointers.glBeginConditionalRender, .{_id, _mode});
}

pub fn endConditionalRender() callconv(.C) void {
    return @call(.always_tail, function_pointers.glEndConditionalRender, .{});
}

pub fn vertexAttribIPointer(_index: GLuint, _size: GLint, _type: GLenum, _stride: GLsizei, _pointer: ?*const anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttribIPointer, .{_index, _size, _type, _stride, _pointer});
}

pub fn getVertexAttribIiv(_index: GLuint, _pname: GLenum, _params: [*c]GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetVertexAttribIiv, .{_index, _pname, _params});
}

pub fn getVertexAttribIuiv(_index: GLuint, _pname: GLenum, _params: [*c]GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetVertexAttribIuiv, .{_index, _pname, _params});
}

pub fn vertexAttribI1i(_index: GLuint, _x: GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttribI1i, .{_index, _x});
}

pub fn vertexAttribI2i(_index: GLuint, _x: GLint, _y: GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttribI2i, .{_index, _x, _y});
}

pub fn vertexAttribI3i(_index: GLuint, _x: GLint, _y: GLint, _z: GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttribI3i, .{_index, _x, _y, _z});
}

pub fn vertexAttribI4i(_index: GLuint, _x: GLint, _y: GLint, _z: GLint, _w: GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttribI4i, .{_index, _x, _y, _z, _w});
}

pub fn vertexAttribI1ui(_index: GLuint, _x: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttribI1ui, .{_index, _x});
}

pub fn vertexAttribI2ui(_index: GLuint, _x: GLuint, _y: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttribI2ui, .{_index, _x, _y});
}

pub fn vertexAttribI3ui(_index: GLuint, _x: GLuint, _y: GLuint, _z: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttribI3ui, .{_index, _x, _y, _z});
}

pub fn vertexAttribI4ui(_index: GLuint, _x: GLuint, _y: GLuint, _z: GLuint, _w: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttribI4ui, .{_index, _x, _y, _z, _w});
}

pub fn vertexAttribI1iv(_index: GLuint, _v: [*c]const GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttribI1iv, .{_index, _v});
}

pub fn vertexAttribI2iv(_index: GLuint, _v: [*c]const GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttribI2iv, .{_index, _v});
}

pub fn vertexAttribI3iv(_index: GLuint, _v: [*c]const GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttribI3iv, .{_index, _v});
}

pub fn vertexAttribI4iv(_index: GLuint, _v: [*c]const GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttribI4iv, .{_index, _v});
}

pub fn vertexAttribI1uiv(_index: GLuint, _v: [*c]const GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttribI1uiv, .{_index, _v});
}

pub fn vertexAttribI2uiv(_index: GLuint, _v: [*c]const GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttribI2uiv, .{_index, _v});
}

pub fn vertexAttribI3uiv(_index: GLuint, _v: [*c]const GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttribI3uiv, .{_index, _v});
}

pub fn vertexAttribI4uiv(_index: GLuint, _v: [*c]const GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttribI4uiv, .{_index, _v});
}

pub fn vertexAttribI4bv(_index: GLuint, _v: [*c]const GLbyte) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttribI4bv, .{_index, _v});
}

pub fn vertexAttribI4sv(_index: GLuint, _v: [*c]const GLshort) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttribI4sv, .{_index, _v});
}

pub fn vertexAttribI4ubv(_index: GLuint, _v: ?[*:0]const GLubyte) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttribI4ubv, .{_index, _v});
}

pub fn vertexAttribI4usv(_index: GLuint, _v: [*c]const GLushort) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttribI4usv, .{_index, _v});
}

pub fn getUniformuiv(_program: GLuint, _location: GLint, _params: [*c]GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetUniformuiv, .{_program, _location, _params});
}

pub fn bindFragDataLocation(_program: GLuint, _color: GLuint, _name: [*c]const GLchar) callconv(.C) void {
    return @call(.always_tail, function_pointers.glBindFragDataLocation, .{_program, _color, _name});
}

pub fn getFragDataLocation(_program: GLuint, _name: [*c]const GLchar) callconv(.C) GLint {
    return @call(.always_tail, function_pointers.glGetFragDataLocation, .{_program, _name});
}

pub fn uniform1ui(_location: GLint, _v0: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniform1ui, .{_location, _v0});
}

pub fn uniform2ui(_location: GLint, _v0: GLuint, _v1: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniform2ui, .{_location, _v0, _v1});
}

pub fn uniform3ui(_location: GLint, _v0: GLuint, _v1: GLuint, _v2: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniform3ui, .{_location, _v0, _v1, _v2});
}

pub fn uniform4ui(_location: GLint, _v0: GLuint, _v1: GLuint, _v2: GLuint, _v3: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniform4ui, .{_location, _v0, _v1, _v2, _v3});
}

pub fn uniform1uiv(_location: GLint, _count: GLsizei, _value: [*c]const GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniform1uiv, .{_location, _count, _value});
}

pub fn uniform2uiv(_location: GLint, _count: GLsizei, _value: [*c]const GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniform2uiv, .{_location, _count, _value});
}

pub fn uniform3uiv(_location: GLint, _count: GLsizei, _value: [*c]const GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniform3uiv, .{_location, _count, _value});
}

pub fn uniform4uiv(_location: GLint, _count: GLsizei, _value: [*c]const GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniform4uiv, .{_location, _count, _value});
}

pub fn texParameterIiv(_target: GLenum, _pname: GLenum, _params: [*c]const GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glTexParameterIiv, .{_target, _pname, _params});
}

pub fn texParameterIuiv(_target: GLenum, _pname: GLenum, _params: [*c]const GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glTexParameterIuiv, .{_target, _pname, _params});
}

pub fn getTexParameterIiv(_target: GLenum, _pname: GLenum, _params: [*c]GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetTexParameterIiv, .{_target, _pname, _params});
}

pub fn getTexParameterIuiv(_target: GLenum, _pname: GLenum, _params: [*c]GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetTexParameterIuiv, .{_target, _pname, _params});
}

pub fn clearBufferiv(_buffer: GLenum, _drawbuffer: GLint, _value: [*c]const GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glClearBufferiv, .{_buffer, _drawbuffer, _value});
}

pub fn clearBufferuiv(_buffer: GLenum, _drawbuffer: GLint, _value: [*c]const GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glClearBufferuiv, .{_buffer, _drawbuffer, _value});
}

pub fn clearBufferfv(_buffer: GLenum, _drawbuffer: GLint, _value: [*c]const GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glClearBufferfv, .{_buffer, _drawbuffer, _value});
}

pub fn clearBufferfi(_buffer: GLenum, _drawbuffer: GLint, _depth: GLfloat, _stencil: GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glClearBufferfi, .{_buffer, _drawbuffer, _depth, _stencil});
}

pub fn getStringi(_name: GLenum, _index: GLuint) callconv(.C) ?[*:0]const GLubyte {
    return @call(.always_tail, function_pointers.glGetStringi, .{_name, _index});
}

pub fn isRenderbuffer(_renderbuffer: GLuint) callconv(.C) GLboolean {
    return @call(.always_tail, function_pointers.glIsRenderbuffer, .{_renderbuffer});
}

pub fn bindRenderbuffer(_target: GLenum, _renderbuffer: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glBindRenderbuffer, .{_target, _renderbuffer});
}

pub fn deleteRenderbuffers(_n: GLsizei, _renderbuffers: [*c]const GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDeleteRenderbuffers, .{_n, _renderbuffers});
}

pub fn genRenderbuffers(_n: GLsizei, _renderbuffers: [*c]GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGenRenderbuffers, .{_n, _renderbuffers});
}

pub fn renderbufferStorage(_target: GLenum, _internalformat: GLenum, _width: GLsizei, _height: GLsizei) callconv(.C) void {
    return @call(.always_tail, function_pointers.glRenderbufferStorage, .{_target, _internalformat, _width, _height});
}

pub fn getRenderbufferParameteriv(_target: GLenum, _pname: GLenum, _params: [*c]GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetRenderbufferParameteriv, .{_target, _pname, _params});
}

pub fn isFramebuffer(_framebuffer: GLuint) callconv(.C) GLboolean {
    return @call(.always_tail, function_pointers.glIsFramebuffer, .{_framebuffer});
}

pub fn bindFramebuffer(_target: GLenum, _framebuffer: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glBindFramebuffer, .{_target, _framebuffer});
}

pub fn deleteFramebuffers(_n: GLsizei, _framebuffers: [*c]const GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDeleteFramebuffers, .{_n, _framebuffers});
}

pub fn genFramebuffers(_n: GLsizei, _framebuffers: [*c]GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGenFramebuffers, .{_n, _framebuffers});
}

pub fn checkFramebufferStatus(_target: GLenum) callconv(.C) GLenum {
    return @call(.always_tail, function_pointers.glCheckFramebufferStatus, .{_target});
}

pub fn framebufferTexture1D(_target: GLenum, _attachment: GLenum, _textarget: GLenum, _texture: GLuint, _level: GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glFramebufferTexture1D, .{_target, _attachment, _textarget, _texture, _level});
}

pub fn framebufferTexture2D(_target: GLenum, _attachment: GLenum, _textarget: GLenum, _texture: GLuint, _level: GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glFramebufferTexture2D, .{_target, _attachment, _textarget, _texture, _level});
}

pub fn framebufferTexture3D(_target: GLenum, _attachment: GLenum, _textarget: GLenum, _texture: GLuint, _level: GLint, _zoffset: GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glFramebufferTexture3D, .{_target, _attachment, _textarget, _texture, _level, _zoffset});
}

pub fn framebufferRenderbuffer(_target: GLenum, _attachment: GLenum, _renderbuffertarget: GLenum, _renderbuffer: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glFramebufferRenderbuffer, .{_target, _attachment, _renderbuffertarget, _renderbuffer});
}

pub fn getFramebufferAttachmentParameteriv(_target: GLenum, _attachment: GLenum, _pname: GLenum, _params: [*c]GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetFramebufferAttachmentParameteriv, .{_target, _attachment, _pname, _params});
}

pub fn generateMipmap(_target: GLenum) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGenerateMipmap, .{_target});
}

pub fn blitFramebuffer(_srcX0: GLint, _srcY0: GLint, _srcX1: GLint, _srcY1: GLint, _dstX0: GLint, _dstY0: GLint, _dstX1: GLint, _dstY1: GLint, _mask: GLbitfield, _filter: GLenum) callconv(.C) void {
    return @call(.always_tail, function_pointers.glBlitFramebuffer, .{_srcX0, _srcY0, _srcX1, _srcY1, _dstX0, _dstY0, _dstX1, _dstY1, _mask, _filter});
}

pub fn renderbufferStorageMultisample(_target: GLenum, _samples: GLsizei, _internalformat: GLenum, _width: GLsizei, _height: GLsizei) callconv(.C) void {
    return @call(.always_tail, function_pointers.glRenderbufferStorageMultisample, .{_target, _samples, _internalformat, _width, _height});
}

pub fn framebufferTextureLayer(_target: GLenum, _attachment: GLenum, _texture: GLuint, _level: GLint, _layer: GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glFramebufferTextureLayer, .{_target, _attachment, _texture, _level, _layer});
}

pub fn mapBufferRange(_target: GLenum, _offset: GLintptr, _length: GLsizeiptr, _access: GLbitfield) callconv(.C) ?*anyopaque {
    return @call(.always_tail, function_pointers.glMapBufferRange, .{_target, _offset, _length, _access});
}

pub fn flushMappedBufferRange(_target: GLenum, _offset: GLintptr, _length: GLsizeiptr) callconv(.C) void {
    return @call(.always_tail, function_pointers.glFlushMappedBufferRange, .{_target, _offset, _length});
}

pub fn bindVertexArray(_array: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glBindVertexArray, .{_array});
}

pub fn deleteVertexArrays(_n: GLsizei, _arrays: [*c]const GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDeleteVertexArrays, .{_n, _arrays});
}

pub fn genVertexArrays(_n: GLsizei, _arrays: [*c]GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGenVertexArrays, .{_n, _arrays});
}

pub fn isVertexArray(_array: GLuint) callconv(.C) GLboolean {
    return @call(.always_tail, function_pointers.glIsVertexArray, .{_array});
}

pub fn drawArraysInstanced(_mode: GLenum, _first: GLint, _count: GLsizei, _instancecount: GLsizei) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDrawArraysInstanced, .{_mode, _first, _count, _instancecount});
}

pub fn drawElementsInstanced(_mode: GLenum, _count: GLsizei, _type: GLenum, _indices: ?*const anyopaque, _instancecount: GLsizei) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDrawElementsInstanced, .{_mode, _count, _type, _indices, _instancecount});
}

pub fn texBuffer(_target: GLenum, _internalformat: GLenum, _buffer: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glTexBuffer, .{_target, _internalformat, _buffer});
}

pub fn primitiveRestartIndex(_index: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glPrimitiveRestartIndex, .{_index});
}

pub fn copyBufferSubData(_readTarget: GLenum, _writeTarget: GLenum, _readOffset: GLintptr, _writeOffset: GLintptr, _size: GLsizeiptr) callconv(.C) void {
    return @call(.always_tail, function_pointers.glCopyBufferSubData, .{_readTarget, _writeTarget, _readOffset, _writeOffset, _size});
}

pub fn getUniformIndices(_program: GLuint, _uniformCount: GLsizei, _uniformNames: [*c]const [*c]const GLchar, _uniformIndices: [*c]GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetUniformIndices, .{_program, _uniformCount, _uniformNames, _uniformIndices});
}

pub fn getActiveUniformsiv(_program: GLuint, _uniformCount: GLsizei, _uniformIndices: [*c]const GLuint, _pname: GLenum, _params: [*c]GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetActiveUniformsiv, .{_program, _uniformCount, _uniformIndices, _pname, _params});
}

pub fn getActiveUniformName(_program: GLuint, _uniformIndex: GLuint, _bufSize: GLsizei, _length: [*c]GLsizei, _uniformName: [*c]GLchar) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetActiveUniformName, .{_program, _uniformIndex, _bufSize, _length, _uniformName});
}

pub fn getUniformBlockIndex(_program: GLuint, _uniformBlockName: [*c]const GLchar) callconv(.C) GLuint {
    return @call(.always_tail, function_pointers.glGetUniformBlockIndex, .{_program, _uniformBlockName});
}

pub fn getActiveUniformBlockiv(_program: GLuint, _uniformBlockIndex: GLuint, _pname: GLenum, _params: [*c]GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetActiveUniformBlockiv, .{_program, _uniformBlockIndex, _pname, _params});
}

pub fn getActiveUniformBlockName(_program: GLuint, _uniformBlockIndex: GLuint, _bufSize: GLsizei, _length: [*c]GLsizei, _uniformBlockName: [*c]GLchar) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetActiveUniformBlockName, .{_program, _uniformBlockIndex, _bufSize, _length, _uniformBlockName});
}

pub fn uniformBlockBinding(_program: GLuint, _uniformBlockIndex: GLuint, _uniformBlockBinding: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glUniformBlockBinding, .{_program, _uniformBlockIndex, _uniformBlockBinding});
}

pub fn texStorage3DMultisample(_target: GLenum, _samples: GLsizei, _internalformat: GLenum, _width: GLsizei, _height: GLsizei, _depth: GLsizei, _fixedsamplelocations: GLboolean) callconv(.C) void {
    return @call(.always_tail, function_pointers.glTexStorage3DMultisample, .{_target, _samples, _internalformat, _width, _height, _depth, _fixedsamplelocations});
}

pub fn textureView(_texture: GLuint, _target: GLenum, _origtexture: GLuint, _internalformat: GLenum, _minlevel: GLuint, _numlevels: GLuint, _minlayer: GLuint, _numlayers: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glTextureView, .{_texture, _target, _origtexture, _internalformat, _minlevel, _numlevels, _minlayer, _numlayers});
}

pub fn bindVertexBuffer(_bindingindex: GLuint, _buffer: GLuint, _offset: GLintptr, _stride: GLsizei) callconv(.C) void {
    return @call(.always_tail, function_pointers.glBindVertexBuffer, .{_bindingindex, _buffer, _offset, _stride});
}

pub fn vertexAttribFormat(_attribindex: GLuint, _size: GLint, _type: GLenum, _normalized: GLboolean, _relativeoffset: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttribFormat, .{_attribindex, _size, _type, _normalized, _relativeoffset});
}

pub fn vertexAttribIFormat(_attribindex: GLuint, _size: GLint, _type: GLenum, _relativeoffset: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttribIFormat, .{_attribindex, _size, _type, _relativeoffset});
}

pub fn vertexAttribLFormat(_attribindex: GLuint, _size: GLint, _type: GLenum, _relativeoffset: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttribLFormat, .{_attribindex, _size, _type, _relativeoffset});
}

pub fn vertexAttribBinding(_attribindex: GLuint, _bindingindex: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexAttribBinding, .{_attribindex, _bindingindex});
}

pub fn vertexBindingDivisor(_bindingindex: GLuint, _divisor: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexBindingDivisor, .{_bindingindex, _divisor});
}

pub fn debugMessageControl(_source: GLenum, _type: GLenum, _severity: GLenum, _count: GLsizei, _ids: [*c]const GLuint, _enabled: GLboolean) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDebugMessageControl, .{_source, _type, _severity, _count, _ids, _enabled});
}

pub fn debugMessageInsert(_source: GLenum, _type: GLenum, _id: GLuint, _severity: GLenum, _length: GLsizei, _buf: [*c]const GLchar) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDebugMessageInsert, .{_source, _type, _id, _severity, _length, _buf});
}

pub fn debugMessageCallback(_callback: GLDEBUGPROC, _userParam: ?*const anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDebugMessageCallback, .{_callback, _userParam});
}

pub fn getDebugMessageLog(_count: GLuint, _bufSize: GLsizei, _sources: [*c]GLenum, _types: [*c]GLenum, _ids: [*c]GLuint, _severities: [*c]GLenum, _lengths: [*c]GLsizei, _messageLog: [*c]GLchar) callconv(.C) GLuint {
    return @call(.always_tail, function_pointers.glGetDebugMessageLog, .{_count, _bufSize, _sources, _types, _ids, _severities, _lengths, _messageLog});
}

pub fn pushDebugGroup(_source: GLenum, _id: GLuint, _length: GLsizei, _message: [*c]const GLchar) callconv(.C) void {
    return @call(.always_tail, function_pointers.glPushDebugGroup, .{_source, _id, _length, _message});
}

pub fn popDebugGroup() callconv(.C) void {
    return @call(.always_tail, function_pointers.glPopDebugGroup, .{});
}

pub fn objectLabel(_identifier: GLenum, _name: GLuint, _length: GLsizei, _label: [*c]const GLchar) callconv(.C) void {
    return @call(.always_tail, function_pointers.glObjectLabel, .{_identifier, _name, _length, _label});
}

pub fn getObjectLabel(_identifier: GLenum, _name: GLuint, _bufSize: GLsizei, _length: [*c]GLsizei, _label: [*c]GLchar) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetObjectLabel, .{_identifier, _name, _bufSize, _length, _label});
}

pub fn objectPtrLabel(_ptr: ?*const anyopaque, _length: GLsizei, _label: [*c]const GLchar) callconv(.C) void {
    return @call(.always_tail, function_pointers.glObjectPtrLabel, .{_ptr, _length, _label});
}

pub fn getObjectPtrLabel(_ptr: ?*const anyopaque, _bufSize: GLsizei, _length: [*c]GLsizei, _label: [*c]GLchar) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetObjectPtrLabel, .{_ptr, _bufSize, _length, _label});
}

pub fn getPointerv(_pname: GLenum, _params: ?*?*anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetPointerv, .{_pname, _params});
}

pub fn bufferStorage(_target: GLenum, _size: GLsizeiptr, _data: ?*const anyopaque, _flags: GLbitfield) callconv(.C) void {
    return @call(.always_tail, function_pointers.glBufferStorage, .{_target, _size, _data, _flags});
}

pub fn clearTexImage(_texture: GLuint, _level: GLint, _format: GLenum, _type: GLenum, _data: ?*const anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glClearTexImage, .{_texture, _level, _format, _type, _data});
}

pub fn clearTexSubImage(_texture: GLuint, _level: GLint, _xoffset: GLint, _yoffset: GLint, _zoffset: GLint, _width: GLsizei, _height: GLsizei, _depth: GLsizei, _format: GLenum, _type: GLenum, _data: ?*const anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glClearTexSubImage, .{_texture, _level, _xoffset, _yoffset, _zoffset, _width, _height, _depth, _format, _type, _data});
}

pub fn bindBuffersBase(_target: GLenum, _first: GLuint, _count: GLsizei, _buffers: [*c]const GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glBindBuffersBase, .{_target, _first, _count, _buffers});
}

pub fn bindBuffersRange(_target: GLenum, _first: GLuint, _count: GLsizei, _buffers: [*c]const GLuint, _offsets: [*c]const GLintptr, _sizes: [*c]const GLsizeiptr) callconv(.C) void {
    return @call(.always_tail, function_pointers.glBindBuffersRange, .{_target, _first, _count, _buffers, _offsets, _sizes});
}

pub fn bindTextures(_first: GLuint, _count: GLsizei, _textures: [*c]const GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glBindTextures, .{_first, _count, _textures});
}

pub fn bindSamplers(_first: GLuint, _count: GLsizei, _samplers: [*c]const GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glBindSamplers, .{_first, _count, _samplers});
}

pub fn bindImageTextures(_first: GLuint, _count: GLsizei, _textures: [*c]const GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glBindImageTextures, .{_first, _count, _textures});
}

pub fn bindVertexBuffers(_first: GLuint, _count: GLsizei, _buffers: [*c]const GLuint, _offsets: [*c]const GLintptr, _strides: [*c]const GLsizei) callconv(.C) void {
    return @call(.always_tail, function_pointers.glBindVertexBuffers, .{_first, _count, _buffers, _offsets, _strides});
}

pub fn clipControl(_origin: GLenum, _depth: GLenum) callconv(.C) void {
    return @call(.always_tail, function_pointers.glClipControl, .{_origin, _depth});
}

pub fn createTransformFeedbacks(_n: GLsizei, _ids: [*c]GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glCreateTransformFeedbacks, .{_n, _ids});
}

pub fn transformFeedbackBufferBase(_xfb: GLuint, _index: GLuint, _buffer: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glTransformFeedbackBufferBase, .{_xfb, _index, _buffer});
}

pub fn transformFeedbackBufferRange(_xfb: GLuint, _index: GLuint, _buffer: GLuint, _offset: GLintptr, _size: GLsizeiptr) callconv(.C) void {
    return @call(.always_tail, function_pointers.glTransformFeedbackBufferRange, .{_xfb, _index, _buffer, _offset, _size});
}

pub fn getTransformFeedbackiv(_xfb: GLuint, _pname: GLenum, _param: [*c]GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetTransformFeedbackiv, .{_xfb, _pname, _param});
}

pub fn getTransformFeedbacki_v(_xfb: GLuint, _pname: GLenum, _index: GLuint, _param: [*c]GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetTransformFeedbacki_v, .{_xfb, _pname, _index, _param});
}

pub fn getTransformFeedbacki64_v(_xfb: GLuint, _pname: GLenum, _index: GLuint, _param: [*c]GLint64) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetTransformFeedbacki64_v, .{_xfb, _pname, _index, _param});
}

pub fn createBuffers(_n: GLsizei, _buffers: [*c]GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glCreateBuffers, .{_n, _buffers});
}

pub fn namedBufferStorage(_buffer: GLuint, _size: GLsizeiptr, _data: ?*const anyopaque, _flags: GLbitfield) callconv(.C) void {
    return @call(.always_tail, function_pointers.glNamedBufferStorage, .{_buffer, _size, _data, _flags});
}

pub fn namedBufferData(_buffer: GLuint, _size: GLsizeiptr, _data: ?*const anyopaque, _usage: GLenum) callconv(.C) void {
    return @call(.always_tail, function_pointers.glNamedBufferData, .{_buffer, _size, _data, _usage});
}

pub fn namedBufferSubData(_buffer: GLuint, _offset: GLintptr, _size: GLsizeiptr, _data: ?*const anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glNamedBufferSubData, .{_buffer, _offset, _size, _data});
}

pub fn copyNamedBufferSubData(_readBuffer: GLuint, _writeBuffer: GLuint, _readOffset: GLintptr, _writeOffset: GLintptr, _size: GLsizeiptr) callconv(.C) void {
    return @call(.always_tail, function_pointers.glCopyNamedBufferSubData, .{_readBuffer, _writeBuffer, _readOffset, _writeOffset, _size});
}

pub fn clearNamedBufferData(_buffer: GLuint, _internalformat: GLenum, _format: GLenum, _type: GLenum, _data: ?*const anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glClearNamedBufferData, .{_buffer, _internalformat, _format, _type, _data});
}

pub fn clearNamedBufferSubData(_buffer: GLuint, _internalformat: GLenum, _offset: GLintptr, _size: GLsizeiptr, _format: GLenum, _type: GLenum, _data: ?*const anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glClearNamedBufferSubData, .{_buffer, _internalformat, _offset, _size, _format, _type, _data});
}

pub fn mapNamedBuffer(_buffer: GLuint, _access: GLenum) callconv(.C) ?*anyopaque {
    return @call(.always_tail, function_pointers.glMapNamedBuffer, .{_buffer, _access});
}

pub fn mapNamedBufferRange(_buffer: GLuint, _offset: GLintptr, _length: GLsizeiptr, _access: GLbitfield) callconv(.C) ?*anyopaque {
    return @call(.always_tail, function_pointers.glMapNamedBufferRange, .{_buffer, _offset, _length, _access});
}

pub fn unmapNamedBuffer(_buffer: GLuint) callconv(.C) GLboolean {
    return @call(.always_tail, function_pointers.glUnmapNamedBuffer, .{_buffer});
}

pub fn flushMappedNamedBufferRange(_buffer: GLuint, _offset: GLintptr, _length: GLsizeiptr) callconv(.C) void {
    return @call(.always_tail, function_pointers.glFlushMappedNamedBufferRange, .{_buffer, _offset, _length});
}

pub fn getNamedBufferParameteriv(_buffer: GLuint, _pname: GLenum, _params: [*c]GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetNamedBufferParameteriv, .{_buffer, _pname, _params});
}

pub fn getNamedBufferParameteri64v(_buffer: GLuint, _pname: GLenum, _params: [*c]GLint64) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetNamedBufferParameteri64v, .{_buffer, _pname, _params});
}

pub fn getNamedBufferPointerv(_buffer: GLuint, _pname: GLenum, _params: ?*?*anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetNamedBufferPointerv, .{_buffer, _pname, _params});
}

pub fn getNamedBufferSubData(_buffer: GLuint, _offset: GLintptr, _size: GLsizeiptr, _data: ?*anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetNamedBufferSubData, .{_buffer, _offset, _size, _data});
}

pub fn createFramebuffers(_n: GLsizei, _framebuffers: [*c]GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glCreateFramebuffers, .{_n, _framebuffers});
}

pub fn namedFramebufferRenderbuffer(_framebuffer: GLuint, _attachment: GLenum, _renderbuffertarget: GLenum, _renderbuffer: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glNamedFramebufferRenderbuffer, .{_framebuffer, _attachment, _renderbuffertarget, _renderbuffer});
}

pub fn namedFramebufferParameteri(_framebuffer: GLuint, _pname: GLenum, _param: GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glNamedFramebufferParameteri, .{_framebuffer, _pname, _param});
}

pub fn namedFramebufferTexture(_framebuffer: GLuint, _attachment: GLenum, _texture: GLuint, _level: GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glNamedFramebufferTexture, .{_framebuffer, _attachment, _texture, _level});
}

pub fn namedFramebufferTextureLayer(_framebuffer: GLuint, _attachment: GLenum, _texture: GLuint, _level: GLint, _layer: GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glNamedFramebufferTextureLayer, .{_framebuffer, _attachment, _texture, _level, _layer});
}

pub fn namedFramebufferDrawBuffer(_framebuffer: GLuint, _buf: GLenum) callconv(.C) void {
    return @call(.always_tail, function_pointers.glNamedFramebufferDrawBuffer, .{_framebuffer, _buf});
}

pub fn namedFramebufferDrawBuffers(_framebuffer: GLuint, _n: GLsizei, _bufs: [*c]const GLenum) callconv(.C) void {
    return @call(.always_tail, function_pointers.glNamedFramebufferDrawBuffers, .{_framebuffer, _n, _bufs});
}

pub fn namedFramebufferReadBuffer(_framebuffer: GLuint, _src: GLenum) callconv(.C) void {
    return @call(.always_tail, function_pointers.glNamedFramebufferReadBuffer, .{_framebuffer, _src});
}

pub fn invalidateNamedFramebufferData(_framebuffer: GLuint, _numAttachments: GLsizei, _attachments: [*c]const GLenum) callconv(.C) void {
    return @call(.always_tail, function_pointers.glInvalidateNamedFramebufferData, .{_framebuffer, _numAttachments, _attachments});
}

pub fn invalidateNamedFramebufferSubData(_framebuffer: GLuint, _numAttachments: GLsizei, _attachments: [*c]const GLenum, _x: GLint, _y: GLint, _width: GLsizei, _height: GLsizei) callconv(.C) void {
    return @call(.always_tail, function_pointers.glInvalidateNamedFramebufferSubData, .{_framebuffer, _numAttachments, _attachments, _x, _y, _width, _height});
}

pub fn clearNamedFramebufferiv(_framebuffer: GLuint, _buffer: GLenum, _drawbuffer: GLint, _value: [*c]const GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glClearNamedFramebufferiv, .{_framebuffer, _buffer, _drawbuffer, _value});
}

pub fn clearNamedFramebufferuiv(_framebuffer: GLuint, _buffer: GLenum, _drawbuffer: GLint, _value: [*c]const GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glClearNamedFramebufferuiv, .{_framebuffer, _buffer, _drawbuffer, _value});
}

pub fn clearNamedFramebufferfv(_framebuffer: GLuint, _buffer: GLenum, _drawbuffer: GLint, _value: [*c]const GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glClearNamedFramebufferfv, .{_framebuffer, _buffer, _drawbuffer, _value});
}

pub fn clearNamedFramebufferfi(_framebuffer: GLuint, _buffer: GLenum, _drawbuffer: GLint, _depth: GLfloat, _stencil: GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glClearNamedFramebufferfi, .{_framebuffer, _buffer, _drawbuffer, _depth, _stencil});
}

pub fn blitNamedFramebuffer(_readFramebuffer: GLuint, _drawFramebuffer: GLuint, _srcX0: GLint, _srcY0: GLint, _srcX1: GLint, _srcY1: GLint, _dstX0: GLint, _dstY0: GLint, _dstX1: GLint, _dstY1: GLint, _mask: GLbitfield, _filter: GLenum) callconv(.C) void {
    return @call(.always_tail, function_pointers.glBlitNamedFramebuffer, .{_readFramebuffer, _drawFramebuffer, _srcX0, _srcY0, _srcX1, _srcY1, _dstX0, _dstY0, _dstX1, _dstY1, _mask, _filter});
}

pub fn checkNamedFramebufferStatus(_framebuffer: GLuint, _target: GLenum) callconv(.C) GLenum {
    return @call(.always_tail, function_pointers.glCheckNamedFramebufferStatus, .{_framebuffer, _target});
}

pub fn getNamedFramebufferParameteriv(_framebuffer: GLuint, _pname: GLenum, _param: [*c]GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetNamedFramebufferParameteriv, .{_framebuffer, _pname, _param});
}

pub fn getNamedFramebufferAttachmentParameteriv(_framebuffer: GLuint, _attachment: GLenum, _pname: GLenum, _params: [*c]GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetNamedFramebufferAttachmentParameteriv, .{_framebuffer, _attachment, _pname, _params});
}

pub fn createRenderbuffers(_n: GLsizei, _renderbuffers: [*c]GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glCreateRenderbuffers, .{_n, _renderbuffers});
}

pub fn namedRenderbufferStorage(_renderbuffer: GLuint, _internalformat: GLenum, _width: GLsizei, _height: GLsizei) callconv(.C) void {
    return @call(.always_tail, function_pointers.glNamedRenderbufferStorage, .{_renderbuffer, _internalformat, _width, _height});
}

pub fn namedRenderbufferStorageMultisample(_renderbuffer: GLuint, _samples: GLsizei, _internalformat: GLenum, _width: GLsizei, _height: GLsizei) callconv(.C) void {
    return @call(.always_tail, function_pointers.glNamedRenderbufferStorageMultisample, .{_renderbuffer, _samples, _internalformat, _width, _height});
}

pub fn getNamedRenderbufferParameteriv(_renderbuffer: GLuint, _pname: GLenum, _params: [*c]GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetNamedRenderbufferParameteriv, .{_renderbuffer, _pname, _params});
}

pub fn createTextures(_target: GLenum, _n: GLsizei, _textures: [*c]GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glCreateTextures, .{_target, _n, _textures});
}

pub fn textureBuffer(_texture: GLuint, _internalformat: GLenum, _buffer: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glTextureBuffer, .{_texture, _internalformat, _buffer});
}

pub fn textureBufferRange(_texture: GLuint, _internalformat: GLenum, _buffer: GLuint, _offset: GLintptr, _size: GLsizeiptr) callconv(.C) void {
    return @call(.always_tail, function_pointers.glTextureBufferRange, .{_texture, _internalformat, _buffer, _offset, _size});
}

pub fn textureStorage1D(_texture: GLuint, _levels: GLsizei, _internalformat: GLenum, _width: GLsizei) callconv(.C) void {
    return @call(.always_tail, function_pointers.glTextureStorage1D, .{_texture, _levels, _internalformat, _width});
}

pub fn textureStorage2D(_texture: GLuint, _levels: GLsizei, _internalformat: GLenum, _width: GLsizei, _height: GLsizei) callconv(.C) void {
    return @call(.always_tail, function_pointers.glTextureStorage2D, .{_texture, _levels, _internalformat, _width, _height});
}

pub fn textureStorage3D(_texture: GLuint, _levels: GLsizei, _internalformat: GLenum, _width: GLsizei, _height: GLsizei, _depth: GLsizei) callconv(.C) void {
    return @call(.always_tail, function_pointers.glTextureStorage3D, .{_texture, _levels, _internalformat, _width, _height, _depth});
}

pub fn textureStorage2DMultisample(_texture: GLuint, _samples: GLsizei, _internalformat: GLenum, _width: GLsizei, _height: GLsizei, _fixedsamplelocations: GLboolean) callconv(.C) void {
    return @call(.always_tail, function_pointers.glTextureStorage2DMultisample, .{_texture, _samples, _internalformat, _width, _height, _fixedsamplelocations});
}

pub fn textureStorage3DMultisample(_texture: GLuint, _samples: GLsizei, _internalformat: GLenum, _width: GLsizei, _height: GLsizei, _depth: GLsizei, _fixedsamplelocations: GLboolean) callconv(.C) void {
    return @call(.always_tail, function_pointers.glTextureStorage3DMultisample, .{_texture, _samples, _internalformat, _width, _height, _depth, _fixedsamplelocations});
}

pub fn textureSubImage1D(_texture: GLuint, _level: GLint, _xoffset: GLint, _width: GLsizei, _format: GLenum, _type: GLenum, _pixels: ?*const anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glTextureSubImage1D, .{_texture, _level, _xoffset, _width, _format, _type, _pixels});
}

pub fn textureSubImage2D(_texture: GLuint, _level: GLint, _xoffset: GLint, _yoffset: GLint, _width: GLsizei, _height: GLsizei, _format: GLenum, _type: GLenum, _pixels: ?*const anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glTextureSubImage2D, .{_texture, _level, _xoffset, _yoffset, _width, _height, _format, _type, _pixels});
}

pub fn textureSubImage3D(_texture: GLuint, _level: GLint, _xoffset: GLint, _yoffset: GLint, _zoffset: GLint, _width: GLsizei, _height: GLsizei, _depth: GLsizei, _format: GLenum, _type: GLenum, _pixels: ?*const anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glTextureSubImage3D, .{_texture, _level, _xoffset, _yoffset, _zoffset, _width, _height, _depth, _format, _type, _pixels});
}

pub fn compressedTextureSubImage1D(_texture: GLuint, _level: GLint, _xoffset: GLint, _width: GLsizei, _format: GLenum, _imageSize: GLsizei, _data: ?*const anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glCompressedTextureSubImage1D, .{_texture, _level, _xoffset, _width, _format, _imageSize, _data});
}

pub fn compressedTextureSubImage2D(_texture: GLuint, _level: GLint, _xoffset: GLint, _yoffset: GLint, _width: GLsizei, _height: GLsizei, _format: GLenum, _imageSize: GLsizei, _data: ?*const anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glCompressedTextureSubImage2D, .{_texture, _level, _xoffset, _yoffset, _width, _height, _format, _imageSize, _data});
}

pub fn compressedTextureSubImage3D(_texture: GLuint, _level: GLint, _xoffset: GLint, _yoffset: GLint, _zoffset: GLint, _width: GLsizei, _height: GLsizei, _depth: GLsizei, _format: GLenum, _imageSize: GLsizei, _data: ?*const anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glCompressedTextureSubImage3D, .{_texture, _level, _xoffset, _yoffset, _zoffset, _width, _height, _depth, _format, _imageSize, _data});
}

pub fn copyTextureSubImage1D(_texture: GLuint, _level: GLint, _xoffset: GLint, _x: GLint, _y: GLint, _width: GLsizei) callconv(.C) void {
    return @call(.always_tail, function_pointers.glCopyTextureSubImage1D, .{_texture, _level, _xoffset, _x, _y, _width});
}

pub fn copyTextureSubImage2D(_texture: GLuint, _level: GLint, _xoffset: GLint, _yoffset: GLint, _x: GLint, _y: GLint, _width: GLsizei, _height: GLsizei) callconv(.C) void {
    return @call(.always_tail, function_pointers.glCopyTextureSubImage2D, .{_texture, _level, _xoffset, _yoffset, _x, _y, _width, _height});
}

pub fn copyTextureSubImage3D(_texture: GLuint, _level: GLint, _xoffset: GLint, _yoffset: GLint, _zoffset: GLint, _x: GLint, _y: GLint, _width: GLsizei, _height: GLsizei) callconv(.C) void {
    return @call(.always_tail, function_pointers.glCopyTextureSubImage3D, .{_texture, _level, _xoffset, _yoffset, _zoffset, _x, _y, _width, _height});
}

pub fn textureParameterf(_texture: GLuint, _pname: GLenum, _param: GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glTextureParameterf, .{_texture, _pname, _param});
}

pub fn textureParameterfv(_texture: GLuint, _pname: GLenum, _param: [*c]const GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glTextureParameterfv, .{_texture, _pname, _param});
}

pub fn textureParameteri(_texture: GLuint, _pname: GLenum, _param: GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glTextureParameteri, .{_texture, _pname, _param});
}

pub fn textureParameterIiv(_texture: GLuint, _pname: GLenum, _params: [*c]const GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glTextureParameterIiv, .{_texture, _pname, _params});
}

pub fn textureParameterIuiv(_texture: GLuint, _pname: GLenum, _params: [*c]const GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glTextureParameterIuiv, .{_texture, _pname, _params});
}

pub fn textureParameteriv(_texture: GLuint, _pname: GLenum, _param: [*c]const GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glTextureParameteriv, .{_texture, _pname, _param});
}

pub fn generateTextureMipmap(_texture: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGenerateTextureMipmap, .{_texture});
}

pub fn bindTextureUnit(_unit: GLuint, _texture: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glBindTextureUnit, .{_unit, _texture});
}

pub fn getTextureImage(_texture: GLuint, _level: GLint, _format: GLenum, _type: GLenum, _bufSize: GLsizei, _pixels: ?*anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetTextureImage, .{_texture, _level, _format, _type, _bufSize, _pixels});
}

pub fn getCompressedTextureImage(_texture: GLuint, _level: GLint, _bufSize: GLsizei, _pixels: ?*anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetCompressedTextureImage, .{_texture, _level, _bufSize, _pixels});
}

pub fn getTextureLevelParameterfv(_texture: GLuint, _level: GLint, _pname: GLenum, _params: [*c]GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetTextureLevelParameterfv, .{_texture, _level, _pname, _params});
}

pub fn getTextureLevelParameteriv(_texture: GLuint, _level: GLint, _pname: GLenum, _params: [*c]GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetTextureLevelParameteriv, .{_texture, _level, _pname, _params});
}

pub fn getTextureParameterfv(_texture: GLuint, _pname: GLenum, _params: [*c]GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetTextureParameterfv, .{_texture, _pname, _params});
}

pub fn getTextureParameterIiv(_texture: GLuint, _pname: GLenum, _params: [*c]GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetTextureParameterIiv, .{_texture, _pname, _params});
}

pub fn getTextureParameterIuiv(_texture: GLuint, _pname: GLenum, _params: [*c]GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetTextureParameterIuiv, .{_texture, _pname, _params});
}

pub fn getTextureParameteriv(_texture: GLuint, _pname: GLenum, _params: [*c]GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetTextureParameteriv, .{_texture, _pname, _params});
}

pub fn createVertexArrays(_n: GLsizei, _arrays: [*c]GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glCreateVertexArrays, .{_n, _arrays});
}

pub fn disableVertexArrayAttrib(_vaobj: GLuint, _index: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glDisableVertexArrayAttrib, .{_vaobj, _index});
}

pub fn enableVertexArrayAttrib(_vaobj: GLuint, _index: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glEnableVertexArrayAttrib, .{_vaobj, _index});
}

pub fn vertexArrayElementBuffer(_vaobj: GLuint, _buffer: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexArrayElementBuffer, .{_vaobj, _buffer});
}

pub fn vertexArrayVertexBuffer(_vaobj: GLuint, _bindingindex: GLuint, _buffer: GLuint, _offset: GLintptr, _stride: GLsizei) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexArrayVertexBuffer, .{_vaobj, _bindingindex, _buffer, _offset, _stride});
}

pub fn vertexArrayVertexBuffers(_vaobj: GLuint, _first: GLuint, _count: GLsizei, _buffers: [*c]const GLuint, _offsets: [*c]const GLintptr, _strides: [*c]const GLsizei) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexArrayVertexBuffers, .{_vaobj, _first, _count, _buffers, _offsets, _strides});
}

pub fn vertexArrayAttribBinding(_vaobj: GLuint, _attribindex: GLuint, _bindingindex: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexArrayAttribBinding, .{_vaobj, _attribindex, _bindingindex});
}

pub fn vertexArrayAttribFormat(_vaobj: GLuint, _attribindex: GLuint, _size: GLint, _type: GLenum, _normalized: GLboolean, _relativeoffset: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexArrayAttribFormat, .{_vaobj, _attribindex, _size, _type, _normalized, _relativeoffset});
}

pub fn vertexArrayAttribIFormat(_vaobj: GLuint, _attribindex: GLuint, _size: GLint, _type: GLenum, _relativeoffset: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexArrayAttribIFormat, .{_vaobj, _attribindex, _size, _type, _relativeoffset});
}

pub fn vertexArrayAttribLFormat(_vaobj: GLuint, _attribindex: GLuint, _size: GLint, _type: GLenum, _relativeoffset: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexArrayAttribLFormat, .{_vaobj, _attribindex, _size, _type, _relativeoffset});
}

pub fn vertexArrayBindingDivisor(_vaobj: GLuint, _bindingindex: GLuint, _divisor: GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glVertexArrayBindingDivisor, .{_vaobj, _bindingindex, _divisor});
}

pub fn getVertexArrayiv(_vaobj: GLuint, _pname: GLenum, _param: [*c]GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetVertexArrayiv, .{_vaobj, _pname, _param});
}

pub fn getVertexArrayIndexediv(_vaobj: GLuint, _index: GLuint, _pname: GLenum, _param: [*c]GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetVertexArrayIndexediv, .{_vaobj, _index, _pname, _param});
}

pub fn getVertexArrayIndexed64iv(_vaobj: GLuint, _index: GLuint, _pname: GLenum, _param: [*c]GLint64) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetVertexArrayIndexed64iv, .{_vaobj, _index, _pname, _param});
}

pub fn createSamplers(_n: GLsizei, _samplers: [*c]GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glCreateSamplers, .{_n, _samplers});
}

pub fn createProgramPipelines(_n: GLsizei, _pipelines: [*c]GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glCreateProgramPipelines, .{_n, _pipelines});
}

pub fn createQueries(_target: GLenum, _n: GLsizei, _ids: [*c]GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glCreateQueries, .{_target, _n, _ids});
}

pub fn getQueryBufferObjecti64v(_id: GLuint, _buffer: GLuint, _pname: GLenum, _offset: GLintptr) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetQueryBufferObjecti64v, .{_id, _buffer, _pname, _offset});
}

pub fn getQueryBufferObjectiv(_id: GLuint, _buffer: GLuint, _pname: GLenum, _offset: GLintptr) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetQueryBufferObjectiv, .{_id, _buffer, _pname, _offset});
}

pub fn getQueryBufferObjectui64v(_id: GLuint, _buffer: GLuint, _pname: GLenum, _offset: GLintptr) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetQueryBufferObjectui64v, .{_id, _buffer, _pname, _offset});
}

pub fn getQueryBufferObjectuiv(_id: GLuint, _buffer: GLuint, _pname: GLenum, _offset: GLintptr) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetQueryBufferObjectuiv, .{_id, _buffer, _pname, _offset});
}

pub fn memoryBarrierByRegion(_barriers: GLbitfield) callconv(.C) void {
    return @call(.always_tail, function_pointers.glMemoryBarrierByRegion, .{_barriers});
}

pub fn getTextureSubImage(_texture: GLuint, _level: GLint, _xoffset: GLint, _yoffset: GLint, _zoffset: GLint, _width: GLsizei, _height: GLsizei, _depth: GLsizei, _format: GLenum, _type: GLenum, _bufSize: GLsizei, _pixels: ?*anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetTextureSubImage, .{_texture, _level, _xoffset, _yoffset, _zoffset, _width, _height, _depth, _format, _type, _bufSize, _pixels});
}

pub fn getCompressedTextureSubImage(_texture: GLuint, _level: GLint, _xoffset: GLint, _yoffset: GLint, _zoffset: GLint, _width: GLsizei, _height: GLsizei, _depth: GLsizei, _bufSize: GLsizei, _pixels: ?*anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetCompressedTextureSubImage, .{_texture, _level, _xoffset, _yoffset, _zoffset, _width, _height, _depth, _bufSize, _pixels});
}

pub fn getGraphicsResetStatus() callconv(.C) GLenum {
    return @call(.always_tail, function_pointers.glGetGraphicsResetStatus, .{});
}

pub fn getnCompressedTexImage(_target: GLenum, _lod: GLint, _bufSize: GLsizei, _pixels: ?*anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetnCompressedTexImage, .{_target, _lod, _bufSize, _pixels});
}

pub fn getnTexImage(_target: GLenum, _level: GLint, _format: GLenum, _type: GLenum, _bufSize: GLsizei, _pixels: ?*anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetnTexImage, .{_target, _level, _format, _type, _bufSize, _pixels});
}

pub fn getnUniformdv(_program: GLuint, _location: GLint, _bufSize: GLsizei, _params: [*c]GLdouble) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetnUniformdv, .{_program, _location, _bufSize, _params});
}

pub fn getnUniformfv(_program: GLuint, _location: GLint, _bufSize: GLsizei, _params: [*c]GLfloat) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetnUniformfv, .{_program, _location, _bufSize, _params});
}

pub fn getnUniformiv(_program: GLuint, _location: GLint, _bufSize: GLsizei, _params: [*c]GLint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetnUniformiv, .{_program, _location, _bufSize, _params});
}

pub fn getnUniformuiv(_program: GLuint, _location: GLint, _bufSize: GLsizei, _params: [*c]GLuint) callconv(.C) void {
    return @call(.always_tail, function_pointers.glGetnUniformuiv, .{_program, _location, _bufSize, _params});
}

pub fn readnPixels(_x: GLint, _y: GLint, _width: GLsizei, _height: GLsizei, _format: GLenum, _type: GLenum, _bufSize: GLsizei, _data: ?*anyopaque) callconv(.C) void {
    return @call(.always_tail, function_pointers.glReadnPixels, .{_x, _y, _width, _height, _format, _type, _bufSize, _data});
}

pub fn textureBarrier() callconv(.C) void {
    return @call(.always_tail, function_pointers.glTextureBarrier, .{});
}
// Extensions:

// Loader API:
pub fn load(load_ctx: anytype, get_proc_address: fn(@TypeOf(load_ctx), [:0]const u8) ?FunctionPointer) !void {
    var success = true;
    if(get_proc_address(load_ctx, "glTexStorage2D")) |proc| {
        function_pointers.glTexStorage2D = @ptrCast(proc);
    } else {
        log.err("entry point glTexStorage2D not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glTexStorage1D")) |proc| {
        function_pointers.glTexStorage1D = @ptrCast(proc);
    } else {
        log.err("entry point glTexStorage1D not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDrawTransformFeedbackStreamInstanced")) |proc| {
        function_pointers.glDrawTransformFeedbackStreamInstanced = @ptrCast(proc);
    } else {
        log.err("entry point glDrawTransformFeedbackStreamInstanced not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDrawTransformFeedbackInstanced")) |proc| {
        function_pointers.glDrawTransformFeedbackInstanced = @ptrCast(proc);
    } else {
        log.err("entry point glDrawTransformFeedbackInstanced not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glTexStorage3D")) |proc| {
        function_pointers.glTexStorage3D = @ptrCast(proc);
    } else {
        log.err("entry point glTexStorage3D not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glMemoryBarrier")) |proc| {
        function_pointers.glMemoryBarrier = @ptrCast(proc);
    } else {
        log.err("entry point glMemoryBarrier not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glBindImageTexture")) |proc| {
        function_pointers.glBindImageTexture = @ptrCast(proc);
    } else {
        log.err("entry point glBindImageTexture not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetActiveAtomicCounterBufferiv")) |proc| {
        function_pointers.glGetActiveAtomicCounterBufferiv = @ptrCast(proc);
    } else {
        log.err("entry point glGetActiveAtomicCounterBufferiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetInternalformativ")) |proc| {
        function_pointers.glGetInternalformativ = @ptrCast(proc);
    } else {
        log.err("entry point glGetInternalformativ not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDrawElementsInstancedBaseVertexBaseInstance")) |proc| {
        function_pointers.glDrawElementsInstancedBaseVertexBaseInstance = @ptrCast(proc);
    } else {
        log.err("entry point glDrawElementsInstancedBaseVertexBaseInstance not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDrawElementsInstancedBaseInstance")) |proc| {
        function_pointers.glDrawElementsInstancedBaseInstance = @ptrCast(proc);
    } else {
        log.err("entry point glDrawElementsInstancedBaseInstance not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDrawArraysInstancedBaseInstance")) |proc| {
        function_pointers.glDrawArraysInstancedBaseInstance = @ptrCast(proc);
    } else {
        log.err("entry point glDrawArraysInstancedBaseInstance not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetDoublei_v")) |proc| {
        function_pointers.glGetDoublei_v = @ptrCast(proc);
    } else {
        log.err("entry point glGetDoublei_v not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetFloati_v")) |proc| {
        function_pointers.glGetFloati_v = @ptrCast(proc);
    } else {
        log.err("entry point glGetFloati_v not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDepthRangeIndexed")) |proc| {
        function_pointers.glDepthRangeIndexed = @ptrCast(proc);
    } else {
        log.err("entry point glDepthRangeIndexed not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDepthRangeArrayv")) |proc| {
        function_pointers.glDepthRangeArrayv = @ptrCast(proc);
    } else {
        log.err("entry point glDepthRangeArrayv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glScissorIndexedv")) |proc| {
        function_pointers.glScissorIndexedv = @ptrCast(proc);
    } else {
        log.err("entry point glScissorIndexedv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glScissorIndexed")) |proc| {
        function_pointers.glScissorIndexed = @ptrCast(proc);
    } else {
        log.err("entry point glScissorIndexed not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glScissorArrayv")) |proc| {
        function_pointers.glScissorArrayv = @ptrCast(proc);
    } else {
        log.err("entry point glScissorArrayv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glViewportIndexedfv")) |proc| {
        function_pointers.glViewportIndexedfv = @ptrCast(proc);
    } else {
        log.err("entry point glViewportIndexedfv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glViewportIndexedf")) |proc| {
        function_pointers.glViewportIndexedf = @ptrCast(proc);
    } else {
        log.err("entry point glViewportIndexedf not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glViewportArrayv")) |proc| {
        function_pointers.glViewportArrayv = @ptrCast(proc);
    } else {
        log.err("entry point glViewportArrayv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetVertexAttribLdv")) |proc| {
        function_pointers.glGetVertexAttribLdv = @ptrCast(proc);
    } else {
        log.err("entry point glGetVertexAttribLdv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttribLPointer")) |proc| {
        function_pointers.glVertexAttribLPointer = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttribLPointer not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttribL4dv")) |proc| {
        function_pointers.glVertexAttribL4dv = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttribL4dv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttribL3dv")) |proc| {
        function_pointers.glVertexAttribL3dv = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttribL3dv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttribL2dv")) |proc| {
        function_pointers.glVertexAttribL2dv = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttribL2dv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttribL1dv")) |proc| {
        function_pointers.glVertexAttribL1dv = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttribL1dv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttribL4d")) |proc| {
        function_pointers.glVertexAttribL4d = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttribL4d not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttribL3d")) |proc| {
        function_pointers.glVertexAttribL3d = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttribL3d not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttribL2d")) |proc| {
        function_pointers.glVertexAttribL2d = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttribL2d not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttribL1d")) |proc| {
        function_pointers.glVertexAttribL1d = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttribL1d not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glValidateProgramPipeline")) |proc| {
        function_pointers.glValidateProgramPipeline = @ptrCast(proc);
    } else {
        log.err("entry point glValidateProgramPipeline not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniformMatrix4x3dv")) |proc| {
        function_pointers.glProgramUniformMatrix4x3dv = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniformMatrix4x3dv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniformMatrix3x4dv")) |proc| {
        function_pointers.glProgramUniformMatrix3x4dv = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniformMatrix3x4dv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniformMatrix4x2dv")) |proc| {
        function_pointers.glProgramUniformMatrix4x2dv = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniformMatrix4x2dv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniformMatrix2x4dv")) |proc| {
        function_pointers.glProgramUniformMatrix2x4dv = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniformMatrix2x4dv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniformMatrix3x2dv")) |proc| {
        function_pointers.glProgramUniformMatrix3x2dv = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniformMatrix3x2dv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniformMatrix2x3dv")) |proc| {
        function_pointers.glProgramUniformMatrix2x3dv = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniformMatrix2x3dv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniformMatrix4x3fv")) |proc| {
        function_pointers.glProgramUniformMatrix4x3fv = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniformMatrix4x3fv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniformMatrix3x4fv")) |proc| {
        function_pointers.glProgramUniformMatrix3x4fv = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniformMatrix3x4fv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniformMatrix4x2fv")) |proc| {
        function_pointers.glProgramUniformMatrix4x2fv = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniformMatrix4x2fv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniformMatrix2x4fv")) |proc| {
        function_pointers.glProgramUniformMatrix2x4fv = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniformMatrix2x4fv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniformMatrix3x2fv")) |proc| {
        function_pointers.glProgramUniformMatrix3x2fv = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniformMatrix3x2fv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniformMatrix2x3fv")) |proc| {
        function_pointers.glProgramUniformMatrix2x3fv = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniformMatrix2x3fv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniformMatrix4dv")) |proc| {
        function_pointers.glProgramUniformMatrix4dv = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniformMatrix4dv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniformMatrix3dv")) |proc| {
        function_pointers.glProgramUniformMatrix3dv = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniformMatrix3dv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniformMatrix2dv")) |proc| {
        function_pointers.glProgramUniformMatrix2dv = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniformMatrix2dv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniformMatrix4fv")) |proc| {
        function_pointers.glProgramUniformMatrix4fv = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniformMatrix4fv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniformMatrix3fv")) |proc| {
        function_pointers.glProgramUniformMatrix3fv = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniformMatrix3fv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniformMatrix2fv")) |proc| {
        function_pointers.glProgramUniformMatrix2fv = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniformMatrix2fv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniform4uiv")) |proc| {
        function_pointers.glProgramUniform4uiv = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniform4uiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniform4ui")) |proc| {
        function_pointers.glProgramUniform4ui = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniform4ui not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniform4dv")) |proc| {
        function_pointers.glProgramUniform4dv = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniform4dv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniform4d")) |proc| {
        function_pointers.glProgramUniform4d = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniform4d not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniform4fv")) |proc| {
        function_pointers.glProgramUniform4fv = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniform4fv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniform4f")) |proc| {
        function_pointers.glProgramUniform4f = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniform4f not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniform4iv")) |proc| {
        function_pointers.glProgramUniform4iv = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniform4iv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniform4i")) |proc| {
        function_pointers.glProgramUniform4i = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniform4i not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniform3uiv")) |proc| {
        function_pointers.glProgramUniform3uiv = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniform3uiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniform3ui")) |proc| {
        function_pointers.glProgramUniform3ui = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniform3ui not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniform3dv")) |proc| {
        function_pointers.glProgramUniform3dv = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniform3dv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniform3d")) |proc| {
        function_pointers.glProgramUniform3d = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniform3d not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniform3fv")) |proc| {
        function_pointers.glProgramUniform3fv = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniform3fv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniform3f")) |proc| {
        function_pointers.glProgramUniform3f = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniform3f not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniform3iv")) |proc| {
        function_pointers.glProgramUniform3iv = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniform3iv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniform3i")) |proc| {
        function_pointers.glProgramUniform3i = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniform3i not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUseProgramStages")) |proc| {
        function_pointers.glUseProgramStages = @ptrCast(proc);
    } else {
        log.err("entry point glUseProgramStages not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramParameteri")) |proc| {
        function_pointers.glProgramParameteri = @ptrCast(proc);
    } else {
        log.err("entry point glProgramParameteri not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetShaderPrecisionFormat")) |proc| {
        function_pointers.glGetShaderPrecisionFormat = @ptrCast(proc);
    } else {
        log.err("entry point glGetShaderPrecisionFormat not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glShaderBinary")) |proc| {
        function_pointers.glShaderBinary = @ptrCast(proc);
    } else {
        log.err("entry point glShaderBinary not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glReleaseShaderCompiler")) |proc| {
        function_pointers.glReleaseShaderCompiler = @ptrCast(proc);
    } else {
        log.err("entry point glReleaseShaderCompiler not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetQueryIndexediv")) |proc| {
        function_pointers.glGetQueryIndexediv = @ptrCast(proc);
    } else {
        log.err("entry point glGetQueryIndexediv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glEndQueryIndexed")) |proc| {
        function_pointers.glEndQueryIndexed = @ptrCast(proc);
    } else {
        log.err("entry point glEndQueryIndexed not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glBeginQueryIndexed")) |proc| {
        function_pointers.glBeginQueryIndexed = @ptrCast(proc);
    } else {
        log.err("entry point glBeginQueryIndexed not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDrawTransformFeedbackStream")) |proc| {
        function_pointers.glDrawTransformFeedbackStream = @ptrCast(proc);
    } else {
        log.err("entry point glDrawTransformFeedbackStream not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDrawTransformFeedback")) |proc| {
        function_pointers.glDrawTransformFeedback = @ptrCast(proc);
    } else {
        log.err("entry point glDrawTransformFeedback not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glResumeTransformFeedback")) |proc| {
        function_pointers.glResumeTransformFeedback = @ptrCast(proc);
    } else {
        log.err("entry point glResumeTransformFeedback not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glPauseTransformFeedback")) |proc| {
        function_pointers.glPauseTransformFeedback = @ptrCast(proc);
    } else {
        log.err("entry point glPauseTransformFeedback not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetProgramStageiv")) |proc| {
        function_pointers.glGetProgramStageiv = @ptrCast(proc);
    } else {
        log.err("entry point glGetProgramStageiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetUniformSubroutineuiv")) |proc| {
        function_pointers.glGetUniformSubroutineuiv = @ptrCast(proc);
    } else {
        log.err("entry point glGetUniformSubroutineuiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniformSubroutinesuiv")) |proc| {
        function_pointers.glUniformSubroutinesuiv = @ptrCast(proc);
    } else {
        log.err("entry point glUniformSubroutinesuiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetActiveSubroutineName")) |proc| {
        function_pointers.glGetActiveSubroutineName = @ptrCast(proc);
    } else {
        log.err("entry point glGetActiveSubroutineName not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glCullFace")) |proc| {
        function_pointers.glCullFace = @ptrCast(proc);
    } else {
        log.err("entry point glCullFace not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glFrontFace")) |proc| {
        function_pointers.glFrontFace = @ptrCast(proc);
    } else {
        log.err("entry point glFrontFace not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glHint")) |proc| {
        function_pointers.glHint = @ptrCast(proc);
    } else {
        log.err("entry point glHint not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glLineWidth")) |proc| {
        function_pointers.glLineWidth = @ptrCast(proc);
    } else {
        log.err("entry point glLineWidth not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glPointSize")) |proc| {
        function_pointers.glPointSize = @ptrCast(proc);
    } else {
        log.err("entry point glPointSize not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glPolygonMode")) |proc| {
        function_pointers.glPolygonMode = @ptrCast(proc);
    } else {
        log.err("entry point glPolygonMode not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glScissor")) |proc| {
        function_pointers.glScissor = @ptrCast(proc);
    } else {
        log.err("entry point glScissor not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glTexParameterf")) |proc| {
        function_pointers.glTexParameterf = @ptrCast(proc);
    } else {
        log.err("entry point glTexParameterf not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glTexParameterfv")) |proc| {
        function_pointers.glTexParameterfv = @ptrCast(proc);
    } else {
        log.err("entry point glTexParameterfv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glTexParameteri")) |proc| {
        function_pointers.glTexParameteri = @ptrCast(proc);
    } else {
        log.err("entry point glTexParameteri not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glTexParameteriv")) |proc| {
        function_pointers.glTexParameteriv = @ptrCast(proc);
    } else {
        log.err("entry point glTexParameteriv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glTexImage1D")) |proc| {
        function_pointers.glTexImage1D = @ptrCast(proc);
    } else {
        log.err("entry point glTexImage1D not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glTexImage2D")) |proc| {
        function_pointers.glTexImage2D = @ptrCast(proc);
    } else {
        log.err("entry point glTexImage2D not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDrawBuffer")) |proc| {
        function_pointers.glDrawBuffer = @ptrCast(proc);
    } else {
        log.err("entry point glDrawBuffer not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glClear")) |proc| {
        function_pointers.glClear = @ptrCast(proc);
    } else {
        log.err("entry point glClear not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glClearColor")) |proc| {
        function_pointers.glClearColor = @ptrCast(proc);
    } else {
        log.err("entry point glClearColor not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glClearStencil")) |proc| {
        function_pointers.glClearStencil = @ptrCast(proc);
    } else {
        log.err("entry point glClearStencil not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glClearDepth")) |proc| {
        function_pointers.glClearDepth = @ptrCast(proc);
    } else {
        log.err("entry point glClearDepth not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glStencilMask")) |proc| {
        function_pointers.glStencilMask = @ptrCast(proc);
    } else {
        log.err("entry point glStencilMask not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glColorMask")) |proc| {
        function_pointers.glColorMask = @ptrCast(proc);
    } else {
        log.err("entry point glColorMask not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDepthMask")) |proc| {
        function_pointers.glDepthMask = @ptrCast(proc);
    } else {
        log.err("entry point glDepthMask not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDisable")) |proc| {
        function_pointers.glDisable = @ptrCast(proc);
    } else {
        log.err("entry point glDisable not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glEnable")) |proc| {
        function_pointers.glEnable = @ptrCast(proc);
    } else {
        log.err("entry point glEnable not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glFinish")) |proc| {
        function_pointers.glFinish = @ptrCast(proc);
    } else {
        log.err("entry point glFinish not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glFlush")) |proc| {
        function_pointers.glFlush = @ptrCast(proc);
    } else {
        log.err("entry point glFlush not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glBlendFunc")) |proc| {
        function_pointers.glBlendFunc = @ptrCast(proc);
    } else {
        log.err("entry point glBlendFunc not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glLogicOp")) |proc| {
        function_pointers.glLogicOp = @ptrCast(proc);
    } else {
        log.err("entry point glLogicOp not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glStencilFunc")) |proc| {
        function_pointers.glStencilFunc = @ptrCast(proc);
    } else {
        log.err("entry point glStencilFunc not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glStencilOp")) |proc| {
        function_pointers.glStencilOp = @ptrCast(proc);
    } else {
        log.err("entry point glStencilOp not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDepthFunc")) |proc| {
        function_pointers.glDepthFunc = @ptrCast(proc);
    } else {
        log.err("entry point glDepthFunc not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glPixelStoref")) |proc| {
        function_pointers.glPixelStoref = @ptrCast(proc);
    } else {
        log.err("entry point glPixelStoref not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glPixelStorei")) |proc| {
        function_pointers.glPixelStorei = @ptrCast(proc);
    } else {
        log.err("entry point glPixelStorei not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glReadBuffer")) |proc| {
        function_pointers.glReadBuffer = @ptrCast(proc);
    } else {
        log.err("entry point glReadBuffer not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glReadPixels")) |proc| {
        function_pointers.glReadPixels = @ptrCast(proc);
    } else {
        log.err("entry point glReadPixels not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetBooleanv")) |proc| {
        function_pointers.glGetBooleanv = @ptrCast(proc);
    } else {
        log.err("entry point glGetBooleanv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetDoublev")) |proc| {
        function_pointers.glGetDoublev = @ptrCast(proc);
    } else {
        log.err("entry point glGetDoublev not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetError")) |proc| {
        function_pointers.glGetError = @ptrCast(proc);
    } else {
        log.err("entry point glGetError not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetFloatv")) |proc| {
        function_pointers.glGetFloatv = @ptrCast(proc);
    } else {
        log.err("entry point glGetFloatv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetIntegerv")) |proc| {
        function_pointers.glGetIntegerv = @ptrCast(proc);
    } else {
        log.err("entry point glGetIntegerv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetString")) |proc| {
        function_pointers.glGetString = @ptrCast(proc);
    } else {
        log.err("entry point glGetString not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetTexImage")) |proc| {
        function_pointers.glGetTexImage = @ptrCast(proc);
    } else {
        log.err("entry point glGetTexImage not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetTexParameterfv")) |proc| {
        function_pointers.glGetTexParameterfv = @ptrCast(proc);
    } else {
        log.err("entry point glGetTexParameterfv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetTexParameteriv")) |proc| {
        function_pointers.glGetTexParameteriv = @ptrCast(proc);
    } else {
        log.err("entry point glGetTexParameteriv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetTexLevelParameterfv")) |proc| {
        function_pointers.glGetTexLevelParameterfv = @ptrCast(proc);
    } else {
        log.err("entry point glGetTexLevelParameterfv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetTexLevelParameteriv")) |proc| {
        function_pointers.glGetTexLevelParameteriv = @ptrCast(proc);
    } else {
        log.err("entry point glGetTexLevelParameteriv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glIsEnabled")) |proc| {
        function_pointers.glIsEnabled = @ptrCast(proc);
    } else {
        log.err("entry point glIsEnabled not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDepthRange")) |proc| {
        function_pointers.glDepthRange = @ptrCast(proc);
    } else {
        log.err("entry point glDepthRange not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glViewport")) |proc| {
        function_pointers.glViewport = @ptrCast(proc);
    } else {
        log.err("entry point glViewport not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glTexStorage2DMultisample")) |proc| {
        function_pointers.glTexStorage2DMultisample = @ptrCast(proc);
    } else {
        log.err("entry point glTexStorage2DMultisample not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glTexBufferRange")) |proc| {
        function_pointers.glTexBufferRange = @ptrCast(proc);
    } else {
        log.err("entry point glTexBufferRange not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glShaderStorageBlockBinding")) |proc| {
        function_pointers.glShaderStorageBlockBinding = @ptrCast(proc);
    } else {
        log.err("entry point glShaderStorageBlockBinding not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetProgramResourceLocationIndex")) |proc| {
        function_pointers.glGetProgramResourceLocationIndex = @ptrCast(proc);
    } else {
        log.err("entry point glGetProgramResourceLocationIndex not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetProgramResourceLocation")) |proc| {
        function_pointers.glGetProgramResourceLocation = @ptrCast(proc);
    } else {
        log.err("entry point glGetProgramResourceLocation not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetProgramResourceiv")) |proc| {
        function_pointers.glGetProgramResourceiv = @ptrCast(proc);
    } else {
        log.err("entry point glGetProgramResourceiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetProgramResourceName")) |proc| {
        function_pointers.glGetProgramResourceName = @ptrCast(proc);
    } else {
        log.err("entry point glGetProgramResourceName not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetProgramResourceIndex")) |proc| {
        function_pointers.glGetProgramResourceIndex = @ptrCast(proc);
    } else {
        log.err("entry point glGetProgramResourceIndex not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetProgramInterfaceiv")) |proc| {
        function_pointers.glGetProgramInterfaceiv = @ptrCast(proc);
    } else {
        log.err("entry point glGetProgramInterfaceiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glMultiDrawElementsIndirect")) |proc| {
        function_pointers.glMultiDrawElementsIndirect = @ptrCast(proc);
    } else {
        log.err("entry point glMultiDrawElementsIndirect not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glMultiDrawArraysIndirect")) |proc| {
        function_pointers.glMultiDrawArraysIndirect = @ptrCast(proc);
    } else {
        log.err("entry point glMultiDrawArraysIndirect not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glInvalidateSubFramebuffer")) |proc| {
        function_pointers.glInvalidateSubFramebuffer = @ptrCast(proc);
    } else {
        log.err("entry point glInvalidateSubFramebuffer not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glInvalidateFramebuffer")) |proc| {
        function_pointers.glInvalidateFramebuffer = @ptrCast(proc);
    } else {
        log.err("entry point glInvalidateFramebuffer not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glInvalidateBufferData")) |proc| {
        function_pointers.glInvalidateBufferData = @ptrCast(proc);
    } else {
        log.err("entry point glInvalidateBufferData not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glInvalidateBufferSubData")) |proc| {
        function_pointers.glInvalidateBufferSubData = @ptrCast(proc);
    } else {
        log.err("entry point glInvalidateBufferSubData not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glInvalidateTexImage")) |proc| {
        function_pointers.glInvalidateTexImage = @ptrCast(proc);
    } else {
        log.err("entry point glInvalidateTexImage not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glInvalidateTexSubImage")) |proc| {
        function_pointers.glInvalidateTexSubImage = @ptrCast(proc);
    } else {
        log.err("entry point glInvalidateTexSubImage not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetInternalformati64v")) |proc| {
        function_pointers.glGetInternalformati64v = @ptrCast(proc);
    } else {
        log.err("entry point glGetInternalformati64v not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetFramebufferParameteriv")) |proc| {
        function_pointers.glGetFramebufferParameteriv = @ptrCast(proc);
    } else {
        log.err("entry point glGetFramebufferParameteriv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glFramebufferParameteri")) |proc| {
        function_pointers.glFramebufferParameteri = @ptrCast(proc);
    } else {
        log.err("entry point glFramebufferParameteri not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glCopyImageSubData")) |proc| {
        function_pointers.glCopyImageSubData = @ptrCast(proc);
    } else {
        log.err("entry point glCopyImageSubData not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDispatchComputeIndirect")) |proc| {
        function_pointers.glDispatchComputeIndirect = @ptrCast(proc);
    } else {
        log.err("entry point glDispatchComputeIndirect not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDispatchCompute")) |proc| {
        function_pointers.glDispatchCompute = @ptrCast(proc);
    } else {
        log.err("entry point glDispatchCompute not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glClearBufferSubData")) |proc| {
        function_pointers.glClearBufferSubData = @ptrCast(proc);
    } else {
        log.err("entry point glClearBufferSubData not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glClearBufferData")) |proc| {
        function_pointers.glClearBufferData = @ptrCast(proc);
    } else {
        log.err("entry point glClearBufferData not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetProgramPipelineInfoLog")) |proc| {
        function_pointers.glGetProgramPipelineInfoLog = @ptrCast(proc);
    } else {
        log.err("entry point glGetProgramPipelineInfoLog not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniform2uiv")) |proc| {
        function_pointers.glProgramUniform2uiv = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniform2uiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniform2ui")) |proc| {
        function_pointers.glProgramUniform2ui = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniform2ui not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniform2dv")) |proc| {
        function_pointers.glProgramUniform2dv = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniform2dv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniform2d")) |proc| {
        function_pointers.glProgramUniform2d = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniform2d not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniform2fv")) |proc| {
        function_pointers.glProgramUniform2fv = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniform2fv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniform2f")) |proc| {
        function_pointers.glProgramUniform2f = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniform2f not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniform2iv")) |proc| {
        function_pointers.glProgramUniform2iv = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniform2iv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniform2i")) |proc| {
        function_pointers.glProgramUniform2i = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniform2i not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniform1uiv")) |proc| {
        function_pointers.glProgramUniform1uiv = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniform1uiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniform1ui")) |proc| {
        function_pointers.glProgramUniform1ui = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniform1ui not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniform1dv")) |proc| {
        function_pointers.glProgramUniform1dv = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniform1dv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniform1d")) |proc| {
        function_pointers.glProgramUniform1d = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniform1d not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniform1fv")) |proc| {
        function_pointers.glProgramUniform1fv = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniform1fv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniform1f")) |proc| {
        function_pointers.glProgramUniform1f = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniform1f not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniform1iv")) |proc| {
        function_pointers.glProgramUniform1iv = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniform1iv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramUniform1i")) |proc| {
        function_pointers.glProgramUniform1i = @ptrCast(proc);
    } else {
        log.err("entry point glProgramUniform1i not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetProgramPipelineiv")) |proc| {
        function_pointers.glGetProgramPipelineiv = @ptrCast(proc);
    } else {
        log.err("entry point glGetProgramPipelineiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glIsProgramPipeline")) |proc| {
        function_pointers.glIsProgramPipeline = @ptrCast(proc);
    } else {
        log.err("entry point glIsProgramPipeline not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGenProgramPipelines")) |proc| {
        function_pointers.glGenProgramPipelines = @ptrCast(proc);
    } else {
        log.err("entry point glGenProgramPipelines not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDeleteProgramPipelines")) |proc| {
        function_pointers.glDeleteProgramPipelines = @ptrCast(proc);
    } else {
        log.err("entry point glDeleteProgramPipelines not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glBindProgramPipeline")) |proc| {
        function_pointers.glBindProgramPipeline = @ptrCast(proc);
    } else {
        log.err("entry point glBindProgramPipeline not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glCreateShaderProgramv")) |proc| {
        function_pointers.glCreateShaderProgramv = @ptrCast(proc);
    } else {
        log.err("entry point glCreateShaderProgramv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glActiveShaderProgram")) |proc| {
        function_pointers.glActiveShaderProgram = @ptrCast(proc);
    } else {
        log.err("entry point glActiveShaderProgram not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProgramBinary")) |proc| {
        function_pointers.glProgramBinary = @ptrCast(proc);
    } else {
        log.err("entry point glProgramBinary not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetProgramBinary")) |proc| {
        function_pointers.glGetProgramBinary = @ptrCast(proc);
    } else {
        log.err("entry point glGetProgramBinary not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glClearDepthf")) |proc| {
        function_pointers.glClearDepthf = @ptrCast(proc);
    } else {
        log.err("entry point glClearDepthf not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDepthRangef")) |proc| {
        function_pointers.glDepthRangef = @ptrCast(proc);
    } else {
        log.err("entry point glDepthRangef not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glIsTransformFeedback")) |proc| {
        function_pointers.glIsTransformFeedback = @ptrCast(proc);
    } else {
        log.err("entry point glIsTransformFeedback not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGenTransformFeedbacks")) |proc| {
        function_pointers.glGenTransformFeedbacks = @ptrCast(proc);
    } else {
        log.err("entry point glGenTransformFeedbacks not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDeleteTransformFeedbacks")) |proc| {
        function_pointers.glDeleteTransformFeedbacks = @ptrCast(proc);
    } else {
        log.err("entry point glDeleteTransformFeedbacks not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glBindTransformFeedback")) |proc| {
        function_pointers.glBindTransformFeedback = @ptrCast(proc);
    } else {
        log.err("entry point glBindTransformFeedback not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glPatchParameterfv")) |proc| {
        function_pointers.glPatchParameterfv = @ptrCast(proc);
    } else {
        log.err("entry point glPatchParameterfv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glPatchParameteri")) |proc| {
        function_pointers.glPatchParameteri = @ptrCast(proc);
    } else {
        log.err("entry point glPatchParameteri not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDrawArrays")) |proc| {
        function_pointers.glDrawArrays = @ptrCast(proc);
    } else {
        log.err("entry point glDrawArrays not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDrawElements")) |proc| {
        function_pointers.glDrawElements = @ptrCast(proc);
    } else {
        log.err("entry point glDrawElements not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glPolygonOffset")) |proc| {
        function_pointers.glPolygonOffset = @ptrCast(proc);
    } else {
        log.err("entry point glPolygonOffset not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glCopyTexImage1D")) |proc| {
        function_pointers.glCopyTexImage1D = @ptrCast(proc);
    } else {
        log.err("entry point glCopyTexImage1D not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glCopyTexImage2D")) |proc| {
        function_pointers.glCopyTexImage2D = @ptrCast(proc);
    } else {
        log.err("entry point glCopyTexImage2D not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glCopyTexSubImage1D")) |proc| {
        function_pointers.glCopyTexSubImage1D = @ptrCast(proc);
    } else {
        log.err("entry point glCopyTexSubImage1D not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glCopyTexSubImage2D")) |proc| {
        function_pointers.glCopyTexSubImage2D = @ptrCast(proc);
    } else {
        log.err("entry point glCopyTexSubImage2D not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glTexSubImage1D")) |proc| {
        function_pointers.glTexSubImage1D = @ptrCast(proc);
    } else {
        log.err("entry point glTexSubImage1D not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glTexSubImage2D")) |proc| {
        function_pointers.glTexSubImage2D = @ptrCast(proc);
    } else {
        log.err("entry point glTexSubImage2D not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glBindTexture")) |proc| {
        function_pointers.glBindTexture = @ptrCast(proc);
    } else {
        log.err("entry point glBindTexture not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDeleteTextures")) |proc| {
        function_pointers.glDeleteTextures = @ptrCast(proc);
    } else {
        log.err("entry point glDeleteTextures not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGenTextures")) |proc| {
        function_pointers.glGenTextures = @ptrCast(proc);
    } else {
        log.err("entry point glGenTextures not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glIsTexture")) |proc| {
        function_pointers.glIsTexture = @ptrCast(proc);
    } else {
        log.err("entry point glIsTexture not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetActiveSubroutineUniformName")) |proc| {
        function_pointers.glGetActiveSubroutineUniformName = @ptrCast(proc);
    } else {
        log.err("entry point glGetActiveSubroutineUniformName not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetActiveSubroutineUniformiv")) |proc| {
        function_pointers.glGetActiveSubroutineUniformiv = @ptrCast(proc);
    } else {
        log.err("entry point glGetActiveSubroutineUniformiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetSubroutineIndex")) |proc| {
        function_pointers.glGetSubroutineIndex = @ptrCast(proc);
    } else {
        log.err("entry point glGetSubroutineIndex not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetSubroutineUniformLocation")) |proc| {
        function_pointers.glGetSubroutineUniformLocation = @ptrCast(proc);
    } else {
        log.err("entry point glGetSubroutineUniformLocation not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetUniformdv")) |proc| {
        function_pointers.glGetUniformdv = @ptrCast(proc);
    } else {
        log.err("entry point glGetUniformdv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniformMatrix4x3dv")) |proc| {
        function_pointers.glUniformMatrix4x3dv = @ptrCast(proc);
    } else {
        log.err("entry point glUniformMatrix4x3dv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniformMatrix4x2dv")) |proc| {
        function_pointers.glUniformMatrix4x2dv = @ptrCast(proc);
    } else {
        log.err("entry point glUniformMatrix4x2dv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniformMatrix3x4dv")) |proc| {
        function_pointers.glUniformMatrix3x4dv = @ptrCast(proc);
    } else {
        log.err("entry point glUniformMatrix3x4dv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniformMatrix3x2dv")) |proc| {
        function_pointers.glUniformMatrix3x2dv = @ptrCast(proc);
    } else {
        log.err("entry point glUniformMatrix3x2dv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniformMatrix2x4dv")) |proc| {
        function_pointers.glUniformMatrix2x4dv = @ptrCast(proc);
    } else {
        log.err("entry point glUniformMatrix2x4dv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniformMatrix2x3dv")) |proc| {
        function_pointers.glUniformMatrix2x3dv = @ptrCast(proc);
    } else {
        log.err("entry point glUniformMatrix2x3dv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniformMatrix4dv")) |proc| {
        function_pointers.glUniformMatrix4dv = @ptrCast(proc);
    } else {
        log.err("entry point glUniformMatrix4dv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniformMatrix3dv")) |proc| {
        function_pointers.glUniformMatrix3dv = @ptrCast(proc);
    } else {
        log.err("entry point glUniformMatrix3dv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDrawRangeElements")) |proc| {
        function_pointers.glDrawRangeElements = @ptrCast(proc);
    } else {
        log.err("entry point glDrawRangeElements not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glTexImage3D")) |proc| {
        function_pointers.glTexImage3D = @ptrCast(proc);
    } else {
        log.err("entry point glTexImage3D not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glTexSubImage3D")) |proc| {
        function_pointers.glTexSubImage3D = @ptrCast(proc);
    } else {
        log.err("entry point glTexSubImage3D not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glCopyTexSubImage3D")) |proc| {
        function_pointers.glCopyTexSubImage3D = @ptrCast(proc);
    } else {
        log.err("entry point glCopyTexSubImage3D not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniformMatrix2dv")) |proc| {
        function_pointers.glUniformMatrix2dv = @ptrCast(proc);
    } else {
        log.err("entry point glUniformMatrix2dv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniform4dv")) |proc| {
        function_pointers.glUniform4dv = @ptrCast(proc);
    } else {
        log.err("entry point glUniform4dv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniform3dv")) |proc| {
        function_pointers.glUniform3dv = @ptrCast(proc);
    } else {
        log.err("entry point glUniform3dv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniform2dv")) |proc| {
        function_pointers.glUniform2dv = @ptrCast(proc);
    } else {
        log.err("entry point glUniform2dv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniform1dv")) |proc| {
        function_pointers.glUniform1dv = @ptrCast(proc);
    } else {
        log.err("entry point glUniform1dv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniform4d")) |proc| {
        function_pointers.glUniform4d = @ptrCast(proc);
    } else {
        log.err("entry point glUniform4d not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniform3d")) |proc| {
        function_pointers.glUniform3d = @ptrCast(proc);
    } else {
        log.err("entry point glUniform3d not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniform2d")) |proc| {
        function_pointers.glUniform2d = @ptrCast(proc);
    } else {
        log.err("entry point glUniform2d not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniform1d")) |proc| {
        function_pointers.glUniform1d = @ptrCast(proc);
    } else {
        log.err("entry point glUniform1d not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDrawElementsIndirect")) |proc| {
        function_pointers.glDrawElementsIndirect = @ptrCast(proc);
    } else {
        log.err("entry point glDrawElementsIndirect not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDrawArraysIndirect")) |proc| {
        function_pointers.glDrawArraysIndirect = @ptrCast(proc);
    } else {
        log.err("entry point glDrawArraysIndirect not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glBlendFuncSeparatei")) |proc| {
        function_pointers.glBlendFuncSeparatei = @ptrCast(proc);
    } else {
        log.err("entry point glBlendFuncSeparatei not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glBlendFunci")) |proc| {
        function_pointers.glBlendFunci = @ptrCast(proc);
    } else {
        log.err("entry point glBlendFunci not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glBlendEquationSeparatei")) |proc| {
        function_pointers.glBlendEquationSeparatei = @ptrCast(proc);
    } else {
        log.err("entry point glBlendEquationSeparatei not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glBlendEquationi")) |proc| {
        function_pointers.glBlendEquationi = @ptrCast(proc);
    } else {
        log.err("entry point glBlendEquationi not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glMinSampleShading")) |proc| {
        function_pointers.glMinSampleShading = @ptrCast(proc);
    } else {
        log.err("entry point glMinSampleShading not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glActiveTexture")) |proc| {
        function_pointers.glActiveTexture = @ptrCast(proc);
    } else {
        log.err("entry point glActiveTexture not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glSampleCoverage")) |proc| {
        function_pointers.glSampleCoverage = @ptrCast(proc);
    } else {
        log.err("entry point glSampleCoverage not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glCompressedTexImage3D")) |proc| {
        function_pointers.glCompressedTexImage3D = @ptrCast(proc);
    } else {
        log.err("entry point glCompressedTexImage3D not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glCompressedTexImage2D")) |proc| {
        function_pointers.glCompressedTexImage2D = @ptrCast(proc);
    } else {
        log.err("entry point glCompressedTexImage2D not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glCompressedTexImage1D")) |proc| {
        function_pointers.glCompressedTexImage1D = @ptrCast(proc);
    } else {
        log.err("entry point glCompressedTexImage1D not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glCompressedTexSubImage3D")) |proc| {
        function_pointers.glCompressedTexSubImage3D = @ptrCast(proc);
    } else {
        log.err("entry point glCompressedTexSubImage3D not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glCompressedTexSubImage2D")) |proc| {
        function_pointers.glCompressedTexSubImage2D = @ptrCast(proc);
    } else {
        log.err("entry point glCompressedTexSubImage2D not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glCompressedTexSubImage1D")) |proc| {
        function_pointers.glCompressedTexSubImage1D = @ptrCast(proc);
    } else {
        log.err("entry point glCompressedTexSubImage1D not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetCompressedTexImage")) |proc| {
        function_pointers.glGetCompressedTexImage = @ptrCast(proc);
    } else {
        log.err("entry point glGetCompressedTexImage not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttribP4uiv")) |proc| {
        function_pointers.glVertexAttribP4uiv = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttribP4uiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttribP4ui")) |proc| {
        function_pointers.glVertexAttribP4ui = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttribP4ui not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttribP3uiv")) |proc| {
        function_pointers.glVertexAttribP3uiv = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttribP3uiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttribP3ui")) |proc| {
        function_pointers.glVertexAttribP3ui = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttribP3ui not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttribP2uiv")) |proc| {
        function_pointers.glVertexAttribP2uiv = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttribP2uiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttribP2ui")) |proc| {
        function_pointers.glVertexAttribP2ui = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttribP2ui not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttribP1uiv")) |proc| {
        function_pointers.glVertexAttribP1uiv = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttribP1uiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttribP1ui")) |proc| {
        function_pointers.glVertexAttribP1ui = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttribP1ui not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttribDivisor")) |proc| {
        function_pointers.glVertexAttribDivisor = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttribDivisor not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetQueryObjectui64v")) |proc| {
        function_pointers.glGetQueryObjectui64v = @ptrCast(proc);
    } else {
        log.err("entry point glGetQueryObjectui64v not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetQueryObjecti64v")) |proc| {
        function_pointers.glGetQueryObjecti64v = @ptrCast(proc);
    } else {
        log.err("entry point glGetQueryObjecti64v not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glQueryCounter")) |proc| {
        function_pointers.glQueryCounter = @ptrCast(proc);
    } else {
        log.err("entry point glQueryCounter not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetSamplerParameterIuiv")) |proc| {
        function_pointers.glGetSamplerParameterIuiv = @ptrCast(proc);
    } else {
        log.err("entry point glGetSamplerParameterIuiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetSamplerParameterfv")) |proc| {
        function_pointers.glGetSamplerParameterfv = @ptrCast(proc);
    } else {
        log.err("entry point glGetSamplerParameterfv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetSamplerParameterIiv")) |proc| {
        function_pointers.glGetSamplerParameterIiv = @ptrCast(proc);
    } else {
        log.err("entry point glGetSamplerParameterIiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetSamplerParameteriv")) |proc| {
        function_pointers.glGetSamplerParameteriv = @ptrCast(proc);
    } else {
        log.err("entry point glGetSamplerParameteriv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glSamplerParameterIuiv")) |proc| {
        function_pointers.glSamplerParameterIuiv = @ptrCast(proc);
    } else {
        log.err("entry point glSamplerParameterIuiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glSamplerParameterIiv")) |proc| {
        function_pointers.glSamplerParameterIiv = @ptrCast(proc);
    } else {
        log.err("entry point glSamplerParameterIiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glSamplerParameterfv")) |proc| {
        function_pointers.glSamplerParameterfv = @ptrCast(proc);
    } else {
        log.err("entry point glSamplerParameterfv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glSamplerParameterf")) |proc| {
        function_pointers.glSamplerParameterf = @ptrCast(proc);
    } else {
        log.err("entry point glSamplerParameterf not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glSamplerParameteriv")) |proc| {
        function_pointers.glSamplerParameteriv = @ptrCast(proc);
    } else {
        log.err("entry point glSamplerParameteriv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glSamplerParameteri")) |proc| {
        function_pointers.glSamplerParameteri = @ptrCast(proc);
    } else {
        log.err("entry point glSamplerParameteri not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glBindSampler")) |proc| {
        function_pointers.glBindSampler = @ptrCast(proc);
    } else {
        log.err("entry point glBindSampler not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glIsSampler")) |proc| {
        function_pointers.glIsSampler = @ptrCast(proc);
    } else {
        log.err("entry point glIsSampler not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDeleteSamplers")) |proc| {
        function_pointers.glDeleteSamplers = @ptrCast(proc);
    } else {
        log.err("entry point glDeleteSamplers not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGenSamplers")) |proc| {
        function_pointers.glGenSamplers = @ptrCast(proc);
    } else {
        log.err("entry point glGenSamplers not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetFragDataIndex")) |proc| {
        function_pointers.glGetFragDataIndex = @ptrCast(proc);
    } else {
        log.err("entry point glGetFragDataIndex not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glBindFragDataLocationIndexed")) |proc| {
        function_pointers.glBindFragDataLocationIndexed = @ptrCast(proc);
    } else {
        log.err("entry point glBindFragDataLocationIndexed not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glSampleMaski")) |proc| {
        function_pointers.glSampleMaski = @ptrCast(proc);
    } else {
        log.err("entry point glSampleMaski not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetMultisamplefv")) |proc| {
        function_pointers.glGetMultisamplefv = @ptrCast(proc);
    } else {
        log.err("entry point glGetMultisamplefv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glTexImage3DMultisample")) |proc| {
        function_pointers.glTexImage3DMultisample = @ptrCast(proc);
    } else {
        log.err("entry point glTexImage3DMultisample not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glTexImage2DMultisample")) |proc| {
        function_pointers.glTexImage2DMultisample = @ptrCast(proc);
    } else {
        log.err("entry point glTexImage2DMultisample not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glFramebufferTexture")) |proc| {
        function_pointers.glFramebufferTexture = @ptrCast(proc);
    } else {
        log.err("entry point glFramebufferTexture not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetBufferParameteri64v")) |proc| {
        function_pointers.glGetBufferParameteri64v = @ptrCast(proc);
    } else {
        log.err("entry point glGetBufferParameteri64v not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glBlendFuncSeparate")) |proc| {
        function_pointers.glBlendFuncSeparate = @ptrCast(proc);
    } else {
        log.err("entry point glBlendFuncSeparate not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glMultiDrawArrays")) |proc| {
        function_pointers.glMultiDrawArrays = @ptrCast(proc);
    } else {
        log.err("entry point glMultiDrawArrays not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glMultiDrawElements")) |proc| {
        function_pointers.glMultiDrawElements = @ptrCast(proc);
    } else {
        log.err("entry point glMultiDrawElements not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glPointParameterf")) |proc| {
        function_pointers.glPointParameterf = @ptrCast(proc);
    } else {
        log.err("entry point glPointParameterf not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glPointParameterfv")) |proc| {
        function_pointers.glPointParameterfv = @ptrCast(proc);
    } else {
        log.err("entry point glPointParameterfv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glPointParameteri")) |proc| {
        function_pointers.glPointParameteri = @ptrCast(proc);
    } else {
        log.err("entry point glPointParameteri not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glPointParameteriv")) |proc| {
        function_pointers.glPointParameteriv = @ptrCast(proc);
    } else {
        log.err("entry point glPointParameteriv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetInteger64i_v")) |proc| {
        function_pointers.glGetInteger64i_v = @ptrCast(proc);
    } else {
        log.err("entry point glGetInteger64i_v not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetSynciv")) |proc| {
        function_pointers.glGetSynciv = @ptrCast(proc);
    } else {
        log.err("entry point glGetSynciv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetInteger64v")) |proc| {
        function_pointers.glGetInteger64v = @ptrCast(proc);
    } else {
        log.err("entry point glGetInteger64v not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glWaitSync")) |proc| {
        function_pointers.glWaitSync = @ptrCast(proc);
    } else {
        log.err("entry point glWaitSync not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glClientWaitSync")) |proc| {
        function_pointers.glClientWaitSync = @ptrCast(proc);
    } else {
        log.err("entry point glClientWaitSync not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDeleteSync")) |proc| {
        function_pointers.glDeleteSync = @ptrCast(proc);
    } else {
        log.err("entry point glDeleteSync not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glIsSync")) |proc| {
        function_pointers.glIsSync = @ptrCast(proc);
    } else {
        log.err("entry point glIsSync not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glFenceSync")) |proc| {
        function_pointers.glFenceSync = @ptrCast(proc);
    } else {
        log.err("entry point glFenceSync not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glBlendColor")) |proc| {
        function_pointers.glBlendColor = @ptrCast(proc);
    } else {
        log.err("entry point glBlendColor not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glBlendEquation")) |proc| {
        function_pointers.glBlendEquation = @ptrCast(proc);
    } else {
        log.err("entry point glBlendEquation not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glProvokingVertex")) |proc| {
        function_pointers.glProvokingVertex = @ptrCast(proc);
    } else {
        log.err("entry point glProvokingVertex not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glMultiDrawElementsBaseVertex")) |proc| {
        function_pointers.glMultiDrawElementsBaseVertex = @ptrCast(proc);
    } else {
        log.err("entry point glMultiDrawElementsBaseVertex not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDrawElementsInstancedBaseVertex")) |proc| {
        function_pointers.glDrawElementsInstancedBaseVertex = @ptrCast(proc);
    } else {
        log.err("entry point glDrawElementsInstancedBaseVertex not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDrawRangeElementsBaseVertex")) |proc| {
        function_pointers.glDrawRangeElementsBaseVertex = @ptrCast(proc);
    } else {
        log.err("entry point glDrawRangeElementsBaseVertex not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDrawElementsBaseVertex")) |proc| {
        function_pointers.glDrawElementsBaseVertex = @ptrCast(proc);
    } else {
        log.err("entry point glDrawElementsBaseVertex not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGenQueries")) |proc| {
        function_pointers.glGenQueries = @ptrCast(proc);
    } else {
        log.err("entry point glGenQueries not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDeleteQueries")) |proc| {
        function_pointers.glDeleteQueries = @ptrCast(proc);
    } else {
        log.err("entry point glDeleteQueries not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glIsQuery")) |proc| {
        function_pointers.glIsQuery = @ptrCast(proc);
    } else {
        log.err("entry point glIsQuery not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glBeginQuery")) |proc| {
        function_pointers.glBeginQuery = @ptrCast(proc);
    } else {
        log.err("entry point glBeginQuery not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glEndQuery")) |proc| {
        function_pointers.glEndQuery = @ptrCast(proc);
    } else {
        log.err("entry point glEndQuery not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetQueryiv")) |proc| {
        function_pointers.glGetQueryiv = @ptrCast(proc);
    } else {
        log.err("entry point glGetQueryiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetQueryObjectiv")) |proc| {
        function_pointers.glGetQueryObjectiv = @ptrCast(proc);
    } else {
        log.err("entry point glGetQueryObjectiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetQueryObjectuiv")) |proc| {
        function_pointers.glGetQueryObjectuiv = @ptrCast(proc);
    } else {
        log.err("entry point glGetQueryObjectuiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glBindBuffer")) |proc| {
        function_pointers.glBindBuffer = @ptrCast(proc);
    } else {
        log.err("entry point glBindBuffer not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDeleteBuffers")) |proc| {
        function_pointers.glDeleteBuffers = @ptrCast(proc);
    } else {
        log.err("entry point glDeleteBuffers not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGenBuffers")) |proc| {
        function_pointers.glGenBuffers = @ptrCast(proc);
    } else {
        log.err("entry point glGenBuffers not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glIsBuffer")) |proc| {
        function_pointers.glIsBuffer = @ptrCast(proc);
    } else {
        log.err("entry point glIsBuffer not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glBufferData")) |proc| {
        function_pointers.glBufferData = @ptrCast(proc);
    } else {
        log.err("entry point glBufferData not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glBufferSubData")) |proc| {
        function_pointers.glBufferSubData = @ptrCast(proc);
    } else {
        log.err("entry point glBufferSubData not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetBufferSubData")) |proc| {
        function_pointers.glGetBufferSubData = @ptrCast(proc);
    } else {
        log.err("entry point glGetBufferSubData not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glMapBuffer")) |proc| {
        function_pointers.glMapBuffer = @ptrCast(proc);
    } else {
        log.err("entry point glMapBuffer not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUnmapBuffer")) |proc| {
        function_pointers.glUnmapBuffer = @ptrCast(proc);
    } else {
        log.err("entry point glUnmapBuffer not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetBufferParameteriv")) |proc| {
        function_pointers.glGetBufferParameteriv = @ptrCast(proc);
    } else {
        log.err("entry point glGetBufferParameteriv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetBufferPointerv")) |proc| {
        function_pointers.glGetBufferPointerv = @ptrCast(proc);
    } else {
        log.err("entry point glGetBufferPointerv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glBlendEquationSeparate")) |proc| {
        function_pointers.glBlendEquationSeparate = @ptrCast(proc);
    } else {
        log.err("entry point glBlendEquationSeparate not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDrawBuffers")) |proc| {
        function_pointers.glDrawBuffers = @ptrCast(proc);
    } else {
        log.err("entry point glDrawBuffers not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glStencilOpSeparate")) |proc| {
        function_pointers.glStencilOpSeparate = @ptrCast(proc);
    } else {
        log.err("entry point glStencilOpSeparate not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glStencilFuncSeparate")) |proc| {
        function_pointers.glStencilFuncSeparate = @ptrCast(proc);
    } else {
        log.err("entry point glStencilFuncSeparate not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glStencilMaskSeparate")) |proc| {
        function_pointers.glStencilMaskSeparate = @ptrCast(proc);
    } else {
        log.err("entry point glStencilMaskSeparate not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glAttachShader")) |proc| {
        function_pointers.glAttachShader = @ptrCast(proc);
    } else {
        log.err("entry point glAttachShader not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glBindAttribLocation")) |proc| {
        function_pointers.glBindAttribLocation = @ptrCast(proc);
    } else {
        log.err("entry point glBindAttribLocation not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glCompileShader")) |proc| {
        function_pointers.glCompileShader = @ptrCast(proc);
    } else {
        log.err("entry point glCompileShader not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glCreateProgram")) |proc| {
        function_pointers.glCreateProgram = @ptrCast(proc);
    } else {
        log.err("entry point glCreateProgram not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glCreateShader")) |proc| {
        function_pointers.glCreateShader = @ptrCast(proc);
    } else {
        log.err("entry point glCreateShader not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDeleteProgram")) |proc| {
        function_pointers.glDeleteProgram = @ptrCast(proc);
    } else {
        log.err("entry point glDeleteProgram not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDeleteShader")) |proc| {
        function_pointers.glDeleteShader = @ptrCast(proc);
    } else {
        log.err("entry point glDeleteShader not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDetachShader")) |proc| {
        function_pointers.glDetachShader = @ptrCast(proc);
    } else {
        log.err("entry point glDetachShader not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDisableVertexAttribArray")) |proc| {
        function_pointers.glDisableVertexAttribArray = @ptrCast(proc);
    } else {
        log.err("entry point glDisableVertexAttribArray not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glEnableVertexAttribArray")) |proc| {
        function_pointers.glEnableVertexAttribArray = @ptrCast(proc);
    } else {
        log.err("entry point glEnableVertexAttribArray not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetActiveAttrib")) |proc| {
        function_pointers.glGetActiveAttrib = @ptrCast(proc);
    } else {
        log.err("entry point glGetActiveAttrib not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetActiveUniform")) |proc| {
        function_pointers.glGetActiveUniform = @ptrCast(proc);
    } else {
        log.err("entry point glGetActiveUniform not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetAttachedShaders")) |proc| {
        function_pointers.glGetAttachedShaders = @ptrCast(proc);
    } else {
        log.err("entry point glGetAttachedShaders not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetAttribLocation")) |proc| {
        function_pointers.glGetAttribLocation = @ptrCast(proc);
    } else {
        log.err("entry point glGetAttribLocation not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetProgramiv")) |proc| {
        function_pointers.glGetProgramiv = @ptrCast(proc);
    } else {
        log.err("entry point glGetProgramiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetProgramInfoLog")) |proc| {
        function_pointers.glGetProgramInfoLog = @ptrCast(proc);
    } else {
        log.err("entry point glGetProgramInfoLog not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetShaderiv")) |proc| {
        function_pointers.glGetShaderiv = @ptrCast(proc);
    } else {
        log.err("entry point glGetShaderiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetShaderInfoLog")) |proc| {
        function_pointers.glGetShaderInfoLog = @ptrCast(proc);
    } else {
        log.err("entry point glGetShaderInfoLog not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetShaderSource")) |proc| {
        function_pointers.glGetShaderSource = @ptrCast(proc);
    } else {
        log.err("entry point glGetShaderSource not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetUniformLocation")) |proc| {
        function_pointers.glGetUniformLocation = @ptrCast(proc);
    } else {
        log.err("entry point glGetUniformLocation not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetUniformfv")) |proc| {
        function_pointers.glGetUniformfv = @ptrCast(proc);
    } else {
        log.err("entry point glGetUniformfv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetUniformiv")) |proc| {
        function_pointers.glGetUniformiv = @ptrCast(proc);
    } else {
        log.err("entry point glGetUniformiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetVertexAttribdv")) |proc| {
        function_pointers.glGetVertexAttribdv = @ptrCast(proc);
    } else {
        log.err("entry point glGetVertexAttribdv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetVertexAttribfv")) |proc| {
        function_pointers.glGetVertexAttribfv = @ptrCast(proc);
    } else {
        log.err("entry point glGetVertexAttribfv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetVertexAttribiv")) |proc| {
        function_pointers.glGetVertexAttribiv = @ptrCast(proc);
    } else {
        log.err("entry point glGetVertexAttribiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetVertexAttribPointerv")) |proc| {
        function_pointers.glGetVertexAttribPointerv = @ptrCast(proc);
    } else {
        log.err("entry point glGetVertexAttribPointerv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glIsProgram")) |proc| {
        function_pointers.glIsProgram = @ptrCast(proc);
    } else {
        log.err("entry point glIsProgram not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glIsShader")) |proc| {
        function_pointers.glIsShader = @ptrCast(proc);
    } else {
        log.err("entry point glIsShader not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glLinkProgram")) |proc| {
        function_pointers.glLinkProgram = @ptrCast(proc);
    } else {
        log.err("entry point glLinkProgram not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glShaderSource")) |proc| {
        function_pointers.glShaderSource = @ptrCast(proc);
    } else {
        log.err("entry point glShaderSource not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUseProgram")) |proc| {
        function_pointers.glUseProgram = @ptrCast(proc);
    } else {
        log.err("entry point glUseProgram not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniform1f")) |proc| {
        function_pointers.glUniform1f = @ptrCast(proc);
    } else {
        log.err("entry point glUniform1f not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniform2f")) |proc| {
        function_pointers.glUniform2f = @ptrCast(proc);
    } else {
        log.err("entry point glUniform2f not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniform3f")) |proc| {
        function_pointers.glUniform3f = @ptrCast(proc);
    } else {
        log.err("entry point glUniform3f not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniform4f")) |proc| {
        function_pointers.glUniform4f = @ptrCast(proc);
    } else {
        log.err("entry point glUniform4f not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniform1i")) |proc| {
        function_pointers.glUniform1i = @ptrCast(proc);
    } else {
        log.err("entry point glUniform1i not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniform2i")) |proc| {
        function_pointers.glUniform2i = @ptrCast(proc);
    } else {
        log.err("entry point glUniform2i not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniform3i")) |proc| {
        function_pointers.glUniform3i = @ptrCast(proc);
    } else {
        log.err("entry point glUniform3i not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniform4i")) |proc| {
        function_pointers.glUniform4i = @ptrCast(proc);
    } else {
        log.err("entry point glUniform4i not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniform1fv")) |proc| {
        function_pointers.glUniform1fv = @ptrCast(proc);
    } else {
        log.err("entry point glUniform1fv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniform2fv")) |proc| {
        function_pointers.glUniform2fv = @ptrCast(proc);
    } else {
        log.err("entry point glUniform2fv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniform3fv")) |proc| {
        function_pointers.glUniform3fv = @ptrCast(proc);
    } else {
        log.err("entry point glUniform3fv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniform4fv")) |proc| {
        function_pointers.glUniform4fv = @ptrCast(proc);
    } else {
        log.err("entry point glUniform4fv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniform1iv")) |proc| {
        function_pointers.glUniform1iv = @ptrCast(proc);
    } else {
        log.err("entry point glUniform1iv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniform2iv")) |proc| {
        function_pointers.glUniform2iv = @ptrCast(proc);
    } else {
        log.err("entry point glUniform2iv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniform3iv")) |proc| {
        function_pointers.glUniform3iv = @ptrCast(proc);
    } else {
        log.err("entry point glUniform3iv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniform4iv")) |proc| {
        function_pointers.glUniform4iv = @ptrCast(proc);
    } else {
        log.err("entry point glUniform4iv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniformMatrix2fv")) |proc| {
        function_pointers.glUniformMatrix2fv = @ptrCast(proc);
    } else {
        log.err("entry point glUniformMatrix2fv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniformMatrix3fv")) |proc| {
        function_pointers.glUniformMatrix3fv = @ptrCast(proc);
    } else {
        log.err("entry point glUniformMatrix3fv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniformMatrix4fv")) |proc| {
        function_pointers.glUniformMatrix4fv = @ptrCast(proc);
    } else {
        log.err("entry point glUniformMatrix4fv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glValidateProgram")) |proc| {
        function_pointers.glValidateProgram = @ptrCast(proc);
    } else {
        log.err("entry point glValidateProgram not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttrib1d")) |proc| {
        function_pointers.glVertexAttrib1d = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttrib1d not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttrib1dv")) |proc| {
        function_pointers.glVertexAttrib1dv = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttrib1dv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttrib1f")) |proc| {
        function_pointers.glVertexAttrib1f = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttrib1f not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttrib1fv")) |proc| {
        function_pointers.glVertexAttrib1fv = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttrib1fv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttrib1s")) |proc| {
        function_pointers.glVertexAttrib1s = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttrib1s not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttrib1sv")) |proc| {
        function_pointers.glVertexAttrib1sv = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttrib1sv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttrib2d")) |proc| {
        function_pointers.glVertexAttrib2d = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttrib2d not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttrib2dv")) |proc| {
        function_pointers.glVertexAttrib2dv = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttrib2dv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttrib2f")) |proc| {
        function_pointers.glVertexAttrib2f = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttrib2f not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttrib2fv")) |proc| {
        function_pointers.glVertexAttrib2fv = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttrib2fv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttrib2s")) |proc| {
        function_pointers.glVertexAttrib2s = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttrib2s not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttrib2sv")) |proc| {
        function_pointers.glVertexAttrib2sv = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttrib2sv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttrib3d")) |proc| {
        function_pointers.glVertexAttrib3d = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttrib3d not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttrib3dv")) |proc| {
        function_pointers.glVertexAttrib3dv = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttrib3dv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttrib3f")) |proc| {
        function_pointers.glVertexAttrib3f = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttrib3f not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttrib3fv")) |proc| {
        function_pointers.glVertexAttrib3fv = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttrib3fv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttrib3s")) |proc| {
        function_pointers.glVertexAttrib3s = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttrib3s not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttrib3sv")) |proc| {
        function_pointers.glVertexAttrib3sv = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttrib3sv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttrib4Nbv")) |proc| {
        function_pointers.glVertexAttrib4Nbv = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttrib4Nbv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttrib4Niv")) |proc| {
        function_pointers.glVertexAttrib4Niv = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttrib4Niv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttrib4Nsv")) |proc| {
        function_pointers.glVertexAttrib4Nsv = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttrib4Nsv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttrib4Nub")) |proc| {
        function_pointers.glVertexAttrib4Nub = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttrib4Nub not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttrib4Nubv")) |proc| {
        function_pointers.glVertexAttrib4Nubv = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttrib4Nubv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttrib4Nuiv")) |proc| {
        function_pointers.glVertexAttrib4Nuiv = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttrib4Nuiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttrib4Nusv")) |proc| {
        function_pointers.glVertexAttrib4Nusv = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttrib4Nusv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttrib4bv")) |proc| {
        function_pointers.glVertexAttrib4bv = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttrib4bv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttrib4d")) |proc| {
        function_pointers.glVertexAttrib4d = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttrib4d not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttrib4dv")) |proc| {
        function_pointers.glVertexAttrib4dv = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttrib4dv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttrib4f")) |proc| {
        function_pointers.glVertexAttrib4f = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttrib4f not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttrib4fv")) |proc| {
        function_pointers.glVertexAttrib4fv = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttrib4fv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttrib4iv")) |proc| {
        function_pointers.glVertexAttrib4iv = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttrib4iv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttrib4s")) |proc| {
        function_pointers.glVertexAttrib4s = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttrib4s not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttrib4sv")) |proc| {
        function_pointers.glVertexAttrib4sv = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttrib4sv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttrib4ubv")) |proc| {
        function_pointers.glVertexAttrib4ubv = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttrib4ubv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttrib4uiv")) |proc| {
        function_pointers.glVertexAttrib4uiv = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttrib4uiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttrib4usv")) |proc| {
        function_pointers.glVertexAttrib4usv = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttrib4usv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttribPointer")) |proc| {
        function_pointers.glVertexAttribPointer = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttribPointer not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniformMatrix2x3fv")) |proc| {
        function_pointers.glUniformMatrix2x3fv = @ptrCast(proc);
    } else {
        log.err("entry point glUniformMatrix2x3fv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniformMatrix3x2fv")) |proc| {
        function_pointers.glUniformMatrix3x2fv = @ptrCast(proc);
    } else {
        log.err("entry point glUniformMatrix3x2fv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniformMatrix2x4fv")) |proc| {
        function_pointers.glUniformMatrix2x4fv = @ptrCast(proc);
    } else {
        log.err("entry point glUniformMatrix2x4fv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniformMatrix4x2fv")) |proc| {
        function_pointers.glUniformMatrix4x2fv = @ptrCast(proc);
    } else {
        log.err("entry point glUniformMatrix4x2fv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniformMatrix3x4fv")) |proc| {
        function_pointers.glUniformMatrix3x4fv = @ptrCast(proc);
    } else {
        log.err("entry point glUniformMatrix3x4fv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniformMatrix4x3fv")) |proc| {
        function_pointers.glUniformMatrix4x3fv = @ptrCast(proc);
    } else {
        log.err("entry point glUniformMatrix4x3fv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glColorMaski")) |proc| {
        function_pointers.glColorMaski = @ptrCast(proc);
    } else {
        log.err("entry point glColorMaski not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetBooleani_v")) |proc| {
        function_pointers.glGetBooleani_v = @ptrCast(proc);
    } else {
        log.err("entry point glGetBooleani_v not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetIntegeri_v")) |proc| {
        function_pointers.glGetIntegeri_v = @ptrCast(proc);
    } else {
        log.err("entry point glGetIntegeri_v not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glEnablei")) |proc| {
        function_pointers.glEnablei = @ptrCast(proc);
    } else {
        log.err("entry point glEnablei not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDisablei")) |proc| {
        function_pointers.glDisablei = @ptrCast(proc);
    } else {
        log.err("entry point glDisablei not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glIsEnabledi")) |proc| {
        function_pointers.glIsEnabledi = @ptrCast(proc);
    } else {
        log.err("entry point glIsEnabledi not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glBeginTransformFeedback")) |proc| {
        function_pointers.glBeginTransformFeedback = @ptrCast(proc);
    } else {
        log.err("entry point glBeginTransformFeedback not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glEndTransformFeedback")) |proc| {
        function_pointers.glEndTransformFeedback = @ptrCast(proc);
    } else {
        log.err("entry point glEndTransformFeedback not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glBindBufferRange")) |proc| {
        function_pointers.glBindBufferRange = @ptrCast(proc);
    } else {
        log.err("entry point glBindBufferRange not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glBindBufferBase")) |proc| {
        function_pointers.glBindBufferBase = @ptrCast(proc);
    } else {
        log.err("entry point glBindBufferBase not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glTransformFeedbackVaryings")) |proc| {
        function_pointers.glTransformFeedbackVaryings = @ptrCast(proc);
    } else {
        log.err("entry point glTransformFeedbackVaryings not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetTransformFeedbackVarying")) |proc| {
        function_pointers.glGetTransformFeedbackVarying = @ptrCast(proc);
    } else {
        log.err("entry point glGetTransformFeedbackVarying not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glClampColor")) |proc| {
        function_pointers.glClampColor = @ptrCast(proc);
    } else {
        log.err("entry point glClampColor not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glBeginConditionalRender")) |proc| {
        function_pointers.glBeginConditionalRender = @ptrCast(proc);
    } else {
        log.err("entry point glBeginConditionalRender not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glEndConditionalRender")) |proc| {
        function_pointers.glEndConditionalRender = @ptrCast(proc);
    } else {
        log.err("entry point glEndConditionalRender not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttribIPointer")) |proc| {
        function_pointers.glVertexAttribIPointer = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttribIPointer not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetVertexAttribIiv")) |proc| {
        function_pointers.glGetVertexAttribIiv = @ptrCast(proc);
    } else {
        log.err("entry point glGetVertexAttribIiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetVertexAttribIuiv")) |proc| {
        function_pointers.glGetVertexAttribIuiv = @ptrCast(proc);
    } else {
        log.err("entry point glGetVertexAttribIuiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttribI1i")) |proc| {
        function_pointers.glVertexAttribI1i = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttribI1i not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttribI2i")) |proc| {
        function_pointers.glVertexAttribI2i = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttribI2i not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttribI3i")) |proc| {
        function_pointers.glVertexAttribI3i = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttribI3i not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttribI4i")) |proc| {
        function_pointers.glVertexAttribI4i = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttribI4i not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttribI1ui")) |proc| {
        function_pointers.glVertexAttribI1ui = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttribI1ui not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttribI2ui")) |proc| {
        function_pointers.glVertexAttribI2ui = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttribI2ui not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttribI3ui")) |proc| {
        function_pointers.glVertexAttribI3ui = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttribI3ui not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttribI4ui")) |proc| {
        function_pointers.glVertexAttribI4ui = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttribI4ui not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttribI1iv")) |proc| {
        function_pointers.glVertexAttribI1iv = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttribI1iv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttribI2iv")) |proc| {
        function_pointers.glVertexAttribI2iv = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttribI2iv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttribI3iv")) |proc| {
        function_pointers.glVertexAttribI3iv = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttribI3iv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttribI4iv")) |proc| {
        function_pointers.glVertexAttribI4iv = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttribI4iv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttribI1uiv")) |proc| {
        function_pointers.glVertexAttribI1uiv = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttribI1uiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttribI2uiv")) |proc| {
        function_pointers.glVertexAttribI2uiv = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttribI2uiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttribI3uiv")) |proc| {
        function_pointers.glVertexAttribI3uiv = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttribI3uiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttribI4uiv")) |proc| {
        function_pointers.glVertexAttribI4uiv = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttribI4uiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttribI4bv")) |proc| {
        function_pointers.glVertexAttribI4bv = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttribI4bv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttribI4sv")) |proc| {
        function_pointers.glVertexAttribI4sv = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttribI4sv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttribI4ubv")) |proc| {
        function_pointers.glVertexAttribI4ubv = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttribI4ubv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttribI4usv")) |proc| {
        function_pointers.glVertexAttribI4usv = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttribI4usv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetUniformuiv")) |proc| {
        function_pointers.glGetUniformuiv = @ptrCast(proc);
    } else {
        log.err("entry point glGetUniformuiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glBindFragDataLocation")) |proc| {
        function_pointers.glBindFragDataLocation = @ptrCast(proc);
    } else {
        log.err("entry point glBindFragDataLocation not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetFragDataLocation")) |proc| {
        function_pointers.glGetFragDataLocation = @ptrCast(proc);
    } else {
        log.err("entry point glGetFragDataLocation not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniform1ui")) |proc| {
        function_pointers.glUniform1ui = @ptrCast(proc);
    } else {
        log.err("entry point glUniform1ui not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniform2ui")) |proc| {
        function_pointers.glUniform2ui = @ptrCast(proc);
    } else {
        log.err("entry point glUniform2ui not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniform3ui")) |proc| {
        function_pointers.glUniform3ui = @ptrCast(proc);
    } else {
        log.err("entry point glUniform3ui not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniform4ui")) |proc| {
        function_pointers.glUniform4ui = @ptrCast(proc);
    } else {
        log.err("entry point glUniform4ui not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniform1uiv")) |proc| {
        function_pointers.glUniform1uiv = @ptrCast(proc);
    } else {
        log.err("entry point glUniform1uiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniform2uiv")) |proc| {
        function_pointers.glUniform2uiv = @ptrCast(proc);
    } else {
        log.err("entry point glUniform2uiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniform3uiv")) |proc| {
        function_pointers.glUniform3uiv = @ptrCast(proc);
    } else {
        log.err("entry point glUniform3uiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniform4uiv")) |proc| {
        function_pointers.glUniform4uiv = @ptrCast(proc);
    } else {
        log.err("entry point glUniform4uiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glTexParameterIiv")) |proc| {
        function_pointers.glTexParameterIiv = @ptrCast(proc);
    } else {
        log.err("entry point glTexParameterIiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glTexParameterIuiv")) |proc| {
        function_pointers.glTexParameterIuiv = @ptrCast(proc);
    } else {
        log.err("entry point glTexParameterIuiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetTexParameterIiv")) |proc| {
        function_pointers.glGetTexParameterIiv = @ptrCast(proc);
    } else {
        log.err("entry point glGetTexParameterIiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetTexParameterIuiv")) |proc| {
        function_pointers.glGetTexParameterIuiv = @ptrCast(proc);
    } else {
        log.err("entry point glGetTexParameterIuiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glClearBufferiv")) |proc| {
        function_pointers.glClearBufferiv = @ptrCast(proc);
    } else {
        log.err("entry point glClearBufferiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glClearBufferuiv")) |proc| {
        function_pointers.glClearBufferuiv = @ptrCast(proc);
    } else {
        log.err("entry point glClearBufferuiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glClearBufferfv")) |proc| {
        function_pointers.glClearBufferfv = @ptrCast(proc);
    } else {
        log.err("entry point glClearBufferfv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glClearBufferfi")) |proc| {
        function_pointers.glClearBufferfi = @ptrCast(proc);
    } else {
        log.err("entry point glClearBufferfi not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetStringi")) |proc| {
        function_pointers.glGetStringi = @ptrCast(proc);
    } else {
        log.err("entry point glGetStringi not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glIsRenderbuffer")) |proc| {
        function_pointers.glIsRenderbuffer = @ptrCast(proc);
    } else {
        log.err("entry point glIsRenderbuffer not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glBindRenderbuffer")) |proc| {
        function_pointers.glBindRenderbuffer = @ptrCast(proc);
    } else {
        log.err("entry point glBindRenderbuffer not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDeleteRenderbuffers")) |proc| {
        function_pointers.glDeleteRenderbuffers = @ptrCast(proc);
    } else {
        log.err("entry point glDeleteRenderbuffers not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGenRenderbuffers")) |proc| {
        function_pointers.glGenRenderbuffers = @ptrCast(proc);
    } else {
        log.err("entry point glGenRenderbuffers not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glRenderbufferStorage")) |proc| {
        function_pointers.glRenderbufferStorage = @ptrCast(proc);
    } else {
        log.err("entry point glRenderbufferStorage not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetRenderbufferParameteriv")) |proc| {
        function_pointers.glGetRenderbufferParameteriv = @ptrCast(proc);
    } else {
        log.err("entry point glGetRenderbufferParameteriv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glIsFramebuffer")) |proc| {
        function_pointers.glIsFramebuffer = @ptrCast(proc);
    } else {
        log.err("entry point glIsFramebuffer not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glBindFramebuffer")) |proc| {
        function_pointers.glBindFramebuffer = @ptrCast(proc);
    } else {
        log.err("entry point glBindFramebuffer not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDeleteFramebuffers")) |proc| {
        function_pointers.glDeleteFramebuffers = @ptrCast(proc);
    } else {
        log.err("entry point glDeleteFramebuffers not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGenFramebuffers")) |proc| {
        function_pointers.glGenFramebuffers = @ptrCast(proc);
    } else {
        log.err("entry point glGenFramebuffers not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glCheckFramebufferStatus")) |proc| {
        function_pointers.glCheckFramebufferStatus = @ptrCast(proc);
    } else {
        log.err("entry point glCheckFramebufferStatus not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glFramebufferTexture1D")) |proc| {
        function_pointers.glFramebufferTexture1D = @ptrCast(proc);
    } else {
        log.err("entry point glFramebufferTexture1D not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glFramebufferTexture2D")) |proc| {
        function_pointers.glFramebufferTexture2D = @ptrCast(proc);
    } else {
        log.err("entry point glFramebufferTexture2D not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glFramebufferTexture3D")) |proc| {
        function_pointers.glFramebufferTexture3D = @ptrCast(proc);
    } else {
        log.err("entry point glFramebufferTexture3D not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glFramebufferRenderbuffer")) |proc| {
        function_pointers.glFramebufferRenderbuffer = @ptrCast(proc);
    } else {
        log.err("entry point glFramebufferRenderbuffer not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetFramebufferAttachmentParameteriv")) |proc| {
        function_pointers.glGetFramebufferAttachmentParameteriv = @ptrCast(proc);
    } else {
        log.err("entry point glGetFramebufferAttachmentParameteriv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGenerateMipmap")) |proc| {
        function_pointers.glGenerateMipmap = @ptrCast(proc);
    } else {
        log.err("entry point glGenerateMipmap not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glBlitFramebuffer")) |proc| {
        function_pointers.glBlitFramebuffer = @ptrCast(proc);
    } else {
        log.err("entry point glBlitFramebuffer not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glRenderbufferStorageMultisample")) |proc| {
        function_pointers.glRenderbufferStorageMultisample = @ptrCast(proc);
    } else {
        log.err("entry point glRenderbufferStorageMultisample not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glFramebufferTextureLayer")) |proc| {
        function_pointers.glFramebufferTextureLayer = @ptrCast(proc);
    } else {
        log.err("entry point glFramebufferTextureLayer not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glMapBufferRange")) |proc| {
        function_pointers.glMapBufferRange = @ptrCast(proc);
    } else {
        log.err("entry point glMapBufferRange not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glFlushMappedBufferRange")) |proc| {
        function_pointers.glFlushMappedBufferRange = @ptrCast(proc);
    } else {
        log.err("entry point glFlushMappedBufferRange not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glBindVertexArray")) |proc| {
        function_pointers.glBindVertexArray = @ptrCast(proc);
    } else {
        log.err("entry point glBindVertexArray not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDeleteVertexArrays")) |proc| {
        function_pointers.glDeleteVertexArrays = @ptrCast(proc);
    } else {
        log.err("entry point glDeleteVertexArrays not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGenVertexArrays")) |proc| {
        function_pointers.glGenVertexArrays = @ptrCast(proc);
    } else {
        log.err("entry point glGenVertexArrays not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glIsVertexArray")) |proc| {
        function_pointers.glIsVertexArray = @ptrCast(proc);
    } else {
        log.err("entry point glIsVertexArray not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDrawArraysInstanced")) |proc| {
        function_pointers.glDrawArraysInstanced = @ptrCast(proc);
    } else {
        log.err("entry point glDrawArraysInstanced not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDrawElementsInstanced")) |proc| {
        function_pointers.glDrawElementsInstanced = @ptrCast(proc);
    } else {
        log.err("entry point glDrawElementsInstanced not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glTexBuffer")) |proc| {
        function_pointers.glTexBuffer = @ptrCast(proc);
    } else {
        log.err("entry point glTexBuffer not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glPrimitiveRestartIndex")) |proc| {
        function_pointers.glPrimitiveRestartIndex = @ptrCast(proc);
    } else {
        log.err("entry point glPrimitiveRestartIndex not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glCopyBufferSubData")) |proc| {
        function_pointers.glCopyBufferSubData = @ptrCast(proc);
    } else {
        log.err("entry point glCopyBufferSubData not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetUniformIndices")) |proc| {
        function_pointers.glGetUniformIndices = @ptrCast(proc);
    } else {
        log.err("entry point glGetUniformIndices not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetActiveUniformsiv")) |proc| {
        function_pointers.glGetActiveUniformsiv = @ptrCast(proc);
    } else {
        log.err("entry point glGetActiveUniformsiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetActiveUniformName")) |proc| {
        function_pointers.glGetActiveUniformName = @ptrCast(proc);
    } else {
        log.err("entry point glGetActiveUniformName not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetUniformBlockIndex")) |proc| {
        function_pointers.glGetUniformBlockIndex = @ptrCast(proc);
    } else {
        log.err("entry point glGetUniformBlockIndex not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetActiveUniformBlockiv")) |proc| {
        function_pointers.glGetActiveUniformBlockiv = @ptrCast(proc);
    } else {
        log.err("entry point glGetActiveUniformBlockiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetActiveUniformBlockName")) |proc| {
        function_pointers.glGetActiveUniformBlockName = @ptrCast(proc);
    } else {
        log.err("entry point glGetActiveUniformBlockName not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUniformBlockBinding")) |proc| {
        function_pointers.glUniformBlockBinding = @ptrCast(proc);
    } else {
        log.err("entry point glUniformBlockBinding not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glTexStorage3DMultisample")) |proc| {
        function_pointers.glTexStorage3DMultisample = @ptrCast(proc);
    } else {
        log.err("entry point glTexStorage3DMultisample not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glTextureView")) |proc| {
        function_pointers.glTextureView = @ptrCast(proc);
    } else {
        log.err("entry point glTextureView not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glBindVertexBuffer")) |proc| {
        function_pointers.glBindVertexBuffer = @ptrCast(proc);
    } else {
        log.err("entry point glBindVertexBuffer not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttribFormat")) |proc| {
        function_pointers.glVertexAttribFormat = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttribFormat not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttribIFormat")) |proc| {
        function_pointers.glVertexAttribIFormat = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttribIFormat not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttribLFormat")) |proc| {
        function_pointers.glVertexAttribLFormat = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttribLFormat not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexAttribBinding")) |proc| {
        function_pointers.glVertexAttribBinding = @ptrCast(proc);
    } else {
        log.err("entry point glVertexAttribBinding not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexBindingDivisor")) |proc| {
        function_pointers.glVertexBindingDivisor = @ptrCast(proc);
    } else {
        log.err("entry point glVertexBindingDivisor not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDebugMessageControl")) |proc| {
        function_pointers.glDebugMessageControl = @ptrCast(proc);
    } else {
        log.err("entry point glDebugMessageControl not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDebugMessageInsert")) |proc| {
        function_pointers.glDebugMessageInsert = @ptrCast(proc);
    } else {
        log.err("entry point glDebugMessageInsert not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDebugMessageCallback")) |proc| {
        function_pointers.glDebugMessageCallback = @ptrCast(proc);
    } else {
        log.err("entry point glDebugMessageCallback not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetDebugMessageLog")) |proc| {
        function_pointers.glGetDebugMessageLog = @ptrCast(proc);
    } else {
        log.err("entry point glGetDebugMessageLog not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glPushDebugGroup")) |proc| {
        function_pointers.glPushDebugGroup = @ptrCast(proc);
    } else {
        log.err("entry point glPushDebugGroup not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glPopDebugGroup")) |proc| {
        function_pointers.glPopDebugGroup = @ptrCast(proc);
    } else {
        log.err("entry point glPopDebugGroup not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glObjectLabel")) |proc| {
        function_pointers.glObjectLabel = @ptrCast(proc);
    } else {
        log.err("entry point glObjectLabel not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetObjectLabel")) |proc| {
        function_pointers.glGetObjectLabel = @ptrCast(proc);
    } else {
        log.err("entry point glGetObjectLabel not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glObjectPtrLabel")) |proc| {
        function_pointers.glObjectPtrLabel = @ptrCast(proc);
    } else {
        log.err("entry point glObjectPtrLabel not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetObjectPtrLabel")) |proc| {
        function_pointers.glGetObjectPtrLabel = @ptrCast(proc);
    } else {
        log.err("entry point glGetObjectPtrLabel not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetPointerv")) |proc| {
        function_pointers.glGetPointerv = @ptrCast(proc);
    } else {
        log.err("entry point glGetPointerv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glBufferStorage")) |proc| {
        function_pointers.glBufferStorage = @ptrCast(proc);
    } else {
        log.err("entry point glBufferStorage not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glClearTexImage")) |proc| {
        function_pointers.glClearTexImage = @ptrCast(proc);
    } else {
        log.err("entry point glClearTexImage not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glClearTexSubImage")) |proc| {
        function_pointers.glClearTexSubImage = @ptrCast(proc);
    } else {
        log.err("entry point glClearTexSubImage not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glBindBuffersBase")) |proc| {
        function_pointers.glBindBuffersBase = @ptrCast(proc);
    } else {
        log.err("entry point glBindBuffersBase not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glBindBuffersRange")) |proc| {
        function_pointers.glBindBuffersRange = @ptrCast(proc);
    } else {
        log.err("entry point glBindBuffersRange not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glBindTextures")) |proc| {
        function_pointers.glBindTextures = @ptrCast(proc);
    } else {
        log.err("entry point glBindTextures not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glBindSamplers")) |proc| {
        function_pointers.glBindSamplers = @ptrCast(proc);
    } else {
        log.err("entry point glBindSamplers not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glBindImageTextures")) |proc| {
        function_pointers.glBindImageTextures = @ptrCast(proc);
    } else {
        log.err("entry point glBindImageTextures not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glBindVertexBuffers")) |proc| {
        function_pointers.glBindVertexBuffers = @ptrCast(proc);
    } else {
        log.err("entry point glBindVertexBuffers not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glClipControl")) |proc| {
        function_pointers.glClipControl = @ptrCast(proc);
    } else {
        log.err("entry point glClipControl not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glCreateTransformFeedbacks")) |proc| {
        function_pointers.glCreateTransformFeedbacks = @ptrCast(proc);
    } else {
        log.err("entry point glCreateTransformFeedbacks not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glTransformFeedbackBufferBase")) |proc| {
        function_pointers.glTransformFeedbackBufferBase = @ptrCast(proc);
    } else {
        log.err("entry point glTransformFeedbackBufferBase not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glTransformFeedbackBufferRange")) |proc| {
        function_pointers.glTransformFeedbackBufferRange = @ptrCast(proc);
    } else {
        log.err("entry point glTransformFeedbackBufferRange not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetTransformFeedbackiv")) |proc| {
        function_pointers.glGetTransformFeedbackiv = @ptrCast(proc);
    } else {
        log.err("entry point glGetTransformFeedbackiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetTransformFeedbacki_v")) |proc| {
        function_pointers.glGetTransformFeedbacki_v = @ptrCast(proc);
    } else {
        log.err("entry point glGetTransformFeedbacki_v not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetTransformFeedbacki64_v")) |proc| {
        function_pointers.glGetTransformFeedbacki64_v = @ptrCast(proc);
    } else {
        log.err("entry point glGetTransformFeedbacki64_v not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glCreateBuffers")) |proc| {
        function_pointers.glCreateBuffers = @ptrCast(proc);
    } else {
        log.err("entry point glCreateBuffers not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glNamedBufferStorage")) |proc| {
        function_pointers.glNamedBufferStorage = @ptrCast(proc);
    } else {
        log.err("entry point glNamedBufferStorage not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glNamedBufferData")) |proc| {
        function_pointers.glNamedBufferData = @ptrCast(proc);
    } else {
        log.err("entry point glNamedBufferData not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glNamedBufferSubData")) |proc| {
        function_pointers.glNamedBufferSubData = @ptrCast(proc);
    } else {
        log.err("entry point glNamedBufferSubData not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glCopyNamedBufferSubData")) |proc| {
        function_pointers.glCopyNamedBufferSubData = @ptrCast(proc);
    } else {
        log.err("entry point glCopyNamedBufferSubData not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glClearNamedBufferData")) |proc| {
        function_pointers.glClearNamedBufferData = @ptrCast(proc);
    } else {
        log.err("entry point glClearNamedBufferData not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glClearNamedBufferSubData")) |proc| {
        function_pointers.glClearNamedBufferSubData = @ptrCast(proc);
    } else {
        log.err("entry point glClearNamedBufferSubData not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glMapNamedBuffer")) |proc| {
        function_pointers.glMapNamedBuffer = @ptrCast(proc);
    } else {
        log.err("entry point glMapNamedBuffer not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glMapNamedBufferRange")) |proc| {
        function_pointers.glMapNamedBufferRange = @ptrCast(proc);
    } else {
        log.err("entry point glMapNamedBufferRange not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glUnmapNamedBuffer")) |proc| {
        function_pointers.glUnmapNamedBuffer = @ptrCast(proc);
    } else {
        log.err("entry point glUnmapNamedBuffer not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glFlushMappedNamedBufferRange")) |proc| {
        function_pointers.glFlushMappedNamedBufferRange = @ptrCast(proc);
    } else {
        log.err("entry point glFlushMappedNamedBufferRange not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetNamedBufferParameteriv")) |proc| {
        function_pointers.glGetNamedBufferParameteriv = @ptrCast(proc);
    } else {
        log.err("entry point glGetNamedBufferParameteriv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetNamedBufferParameteri64v")) |proc| {
        function_pointers.glGetNamedBufferParameteri64v = @ptrCast(proc);
    } else {
        log.err("entry point glGetNamedBufferParameteri64v not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetNamedBufferPointerv")) |proc| {
        function_pointers.glGetNamedBufferPointerv = @ptrCast(proc);
    } else {
        log.err("entry point glGetNamedBufferPointerv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetNamedBufferSubData")) |proc| {
        function_pointers.glGetNamedBufferSubData = @ptrCast(proc);
    } else {
        log.err("entry point glGetNamedBufferSubData not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glCreateFramebuffers")) |proc| {
        function_pointers.glCreateFramebuffers = @ptrCast(proc);
    } else {
        log.err("entry point glCreateFramebuffers not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glNamedFramebufferRenderbuffer")) |proc| {
        function_pointers.glNamedFramebufferRenderbuffer = @ptrCast(proc);
    } else {
        log.err("entry point glNamedFramebufferRenderbuffer not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glNamedFramebufferParameteri")) |proc| {
        function_pointers.glNamedFramebufferParameteri = @ptrCast(proc);
    } else {
        log.err("entry point glNamedFramebufferParameteri not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glNamedFramebufferTexture")) |proc| {
        function_pointers.glNamedFramebufferTexture = @ptrCast(proc);
    } else {
        log.err("entry point glNamedFramebufferTexture not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glNamedFramebufferTextureLayer")) |proc| {
        function_pointers.glNamedFramebufferTextureLayer = @ptrCast(proc);
    } else {
        log.err("entry point glNamedFramebufferTextureLayer not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glNamedFramebufferDrawBuffer")) |proc| {
        function_pointers.glNamedFramebufferDrawBuffer = @ptrCast(proc);
    } else {
        log.err("entry point glNamedFramebufferDrawBuffer not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glNamedFramebufferDrawBuffers")) |proc| {
        function_pointers.glNamedFramebufferDrawBuffers = @ptrCast(proc);
    } else {
        log.err("entry point glNamedFramebufferDrawBuffers not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glNamedFramebufferReadBuffer")) |proc| {
        function_pointers.glNamedFramebufferReadBuffer = @ptrCast(proc);
    } else {
        log.err("entry point glNamedFramebufferReadBuffer not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glInvalidateNamedFramebufferData")) |proc| {
        function_pointers.glInvalidateNamedFramebufferData = @ptrCast(proc);
    } else {
        log.err("entry point glInvalidateNamedFramebufferData not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glInvalidateNamedFramebufferSubData")) |proc| {
        function_pointers.glInvalidateNamedFramebufferSubData = @ptrCast(proc);
    } else {
        log.err("entry point glInvalidateNamedFramebufferSubData not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glClearNamedFramebufferiv")) |proc| {
        function_pointers.glClearNamedFramebufferiv = @ptrCast(proc);
    } else {
        log.err("entry point glClearNamedFramebufferiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glClearNamedFramebufferuiv")) |proc| {
        function_pointers.glClearNamedFramebufferuiv = @ptrCast(proc);
    } else {
        log.err("entry point glClearNamedFramebufferuiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glClearNamedFramebufferfv")) |proc| {
        function_pointers.glClearNamedFramebufferfv = @ptrCast(proc);
    } else {
        log.err("entry point glClearNamedFramebufferfv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glClearNamedFramebufferfi")) |proc| {
        function_pointers.glClearNamedFramebufferfi = @ptrCast(proc);
    } else {
        log.err("entry point glClearNamedFramebufferfi not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glBlitNamedFramebuffer")) |proc| {
        function_pointers.glBlitNamedFramebuffer = @ptrCast(proc);
    } else {
        log.err("entry point glBlitNamedFramebuffer not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glCheckNamedFramebufferStatus")) |proc| {
        function_pointers.glCheckNamedFramebufferStatus = @ptrCast(proc);
    } else {
        log.err("entry point glCheckNamedFramebufferStatus not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetNamedFramebufferParameteriv")) |proc| {
        function_pointers.glGetNamedFramebufferParameteriv = @ptrCast(proc);
    } else {
        log.err("entry point glGetNamedFramebufferParameteriv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetNamedFramebufferAttachmentParameteriv")) |proc| {
        function_pointers.glGetNamedFramebufferAttachmentParameteriv = @ptrCast(proc);
    } else {
        log.err("entry point glGetNamedFramebufferAttachmentParameteriv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glCreateRenderbuffers")) |proc| {
        function_pointers.glCreateRenderbuffers = @ptrCast(proc);
    } else {
        log.err("entry point glCreateRenderbuffers not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glNamedRenderbufferStorage")) |proc| {
        function_pointers.glNamedRenderbufferStorage = @ptrCast(proc);
    } else {
        log.err("entry point glNamedRenderbufferStorage not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glNamedRenderbufferStorageMultisample")) |proc| {
        function_pointers.glNamedRenderbufferStorageMultisample = @ptrCast(proc);
    } else {
        log.err("entry point glNamedRenderbufferStorageMultisample not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetNamedRenderbufferParameteriv")) |proc| {
        function_pointers.glGetNamedRenderbufferParameteriv = @ptrCast(proc);
    } else {
        log.err("entry point glGetNamedRenderbufferParameteriv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glCreateTextures")) |proc| {
        function_pointers.glCreateTextures = @ptrCast(proc);
    } else {
        log.err("entry point glCreateTextures not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glTextureBuffer")) |proc| {
        function_pointers.glTextureBuffer = @ptrCast(proc);
    } else {
        log.err("entry point glTextureBuffer not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glTextureBufferRange")) |proc| {
        function_pointers.glTextureBufferRange = @ptrCast(proc);
    } else {
        log.err("entry point glTextureBufferRange not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glTextureStorage1D")) |proc| {
        function_pointers.glTextureStorage1D = @ptrCast(proc);
    } else {
        log.err("entry point glTextureStorage1D not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glTextureStorage2D")) |proc| {
        function_pointers.glTextureStorage2D = @ptrCast(proc);
    } else {
        log.err("entry point glTextureStorage2D not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glTextureStorage3D")) |proc| {
        function_pointers.glTextureStorage3D = @ptrCast(proc);
    } else {
        log.err("entry point glTextureStorage3D not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glTextureStorage2DMultisample")) |proc| {
        function_pointers.glTextureStorage2DMultisample = @ptrCast(proc);
    } else {
        log.err("entry point glTextureStorage2DMultisample not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glTextureStorage3DMultisample")) |proc| {
        function_pointers.glTextureStorage3DMultisample = @ptrCast(proc);
    } else {
        log.err("entry point glTextureStorage3DMultisample not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glTextureSubImage1D")) |proc| {
        function_pointers.glTextureSubImage1D = @ptrCast(proc);
    } else {
        log.err("entry point glTextureSubImage1D not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glTextureSubImage2D")) |proc| {
        function_pointers.glTextureSubImage2D = @ptrCast(proc);
    } else {
        log.err("entry point glTextureSubImage2D not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glTextureSubImage3D")) |proc| {
        function_pointers.glTextureSubImage3D = @ptrCast(proc);
    } else {
        log.err("entry point glTextureSubImage3D not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glCompressedTextureSubImage1D")) |proc| {
        function_pointers.glCompressedTextureSubImage1D = @ptrCast(proc);
    } else {
        log.err("entry point glCompressedTextureSubImage1D not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glCompressedTextureSubImage2D")) |proc| {
        function_pointers.glCompressedTextureSubImage2D = @ptrCast(proc);
    } else {
        log.err("entry point glCompressedTextureSubImage2D not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glCompressedTextureSubImage3D")) |proc| {
        function_pointers.glCompressedTextureSubImage3D = @ptrCast(proc);
    } else {
        log.err("entry point glCompressedTextureSubImage3D not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glCopyTextureSubImage1D")) |proc| {
        function_pointers.glCopyTextureSubImage1D = @ptrCast(proc);
    } else {
        log.err("entry point glCopyTextureSubImage1D not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glCopyTextureSubImage2D")) |proc| {
        function_pointers.glCopyTextureSubImage2D = @ptrCast(proc);
    } else {
        log.err("entry point glCopyTextureSubImage2D not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glCopyTextureSubImage3D")) |proc| {
        function_pointers.glCopyTextureSubImage3D = @ptrCast(proc);
    } else {
        log.err("entry point glCopyTextureSubImage3D not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glTextureParameterf")) |proc| {
        function_pointers.glTextureParameterf = @ptrCast(proc);
    } else {
        log.err("entry point glTextureParameterf not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glTextureParameterfv")) |proc| {
        function_pointers.glTextureParameterfv = @ptrCast(proc);
    } else {
        log.err("entry point glTextureParameterfv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glTextureParameteri")) |proc| {
        function_pointers.glTextureParameteri = @ptrCast(proc);
    } else {
        log.err("entry point glTextureParameteri not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glTextureParameterIiv")) |proc| {
        function_pointers.glTextureParameterIiv = @ptrCast(proc);
    } else {
        log.err("entry point glTextureParameterIiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glTextureParameterIuiv")) |proc| {
        function_pointers.glTextureParameterIuiv = @ptrCast(proc);
    } else {
        log.err("entry point glTextureParameterIuiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glTextureParameteriv")) |proc| {
        function_pointers.glTextureParameteriv = @ptrCast(proc);
    } else {
        log.err("entry point glTextureParameteriv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGenerateTextureMipmap")) |proc| {
        function_pointers.glGenerateTextureMipmap = @ptrCast(proc);
    } else {
        log.err("entry point glGenerateTextureMipmap not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glBindTextureUnit")) |proc| {
        function_pointers.glBindTextureUnit = @ptrCast(proc);
    } else {
        log.err("entry point glBindTextureUnit not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetTextureImage")) |proc| {
        function_pointers.glGetTextureImage = @ptrCast(proc);
    } else {
        log.err("entry point glGetTextureImage not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetCompressedTextureImage")) |proc| {
        function_pointers.glGetCompressedTextureImage = @ptrCast(proc);
    } else {
        log.err("entry point glGetCompressedTextureImage not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetTextureLevelParameterfv")) |proc| {
        function_pointers.glGetTextureLevelParameterfv = @ptrCast(proc);
    } else {
        log.err("entry point glGetTextureLevelParameterfv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetTextureLevelParameteriv")) |proc| {
        function_pointers.glGetTextureLevelParameteriv = @ptrCast(proc);
    } else {
        log.err("entry point glGetTextureLevelParameteriv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetTextureParameterfv")) |proc| {
        function_pointers.glGetTextureParameterfv = @ptrCast(proc);
    } else {
        log.err("entry point glGetTextureParameterfv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetTextureParameterIiv")) |proc| {
        function_pointers.glGetTextureParameterIiv = @ptrCast(proc);
    } else {
        log.err("entry point glGetTextureParameterIiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetTextureParameterIuiv")) |proc| {
        function_pointers.glGetTextureParameterIuiv = @ptrCast(proc);
    } else {
        log.err("entry point glGetTextureParameterIuiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetTextureParameteriv")) |proc| {
        function_pointers.glGetTextureParameteriv = @ptrCast(proc);
    } else {
        log.err("entry point glGetTextureParameteriv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glCreateVertexArrays")) |proc| {
        function_pointers.glCreateVertexArrays = @ptrCast(proc);
    } else {
        log.err("entry point glCreateVertexArrays not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glDisableVertexArrayAttrib")) |proc| {
        function_pointers.glDisableVertexArrayAttrib = @ptrCast(proc);
    } else {
        log.err("entry point glDisableVertexArrayAttrib not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glEnableVertexArrayAttrib")) |proc| {
        function_pointers.glEnableVertexArrayAttrib = @ptrCast(proc);
    } else {
        log.err("entry point glEnableVertexArrayAttrib not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexArrayElementBuffer")) |proc| {
        function_pointers.glVertexArrayElementBuffer = @ptrCast(proc);
    } else {
        log.err("entry point glVertexArrayElementBuffer not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexArrayVertexBuffer")) |proc| {
        function_pointers.glVertexArrayVertexBuffer = @ptrCast(proc);
    } else {
        log.err("entry point glVertexArrayVertexBuffer not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexArrayVertexBuffers")) |proc| {
        function_pointers.glVertexArrayVertexBuffers = @ptrCast(proc);
    } else {
        log.err("entry point glVertexArrayVertexBuffers not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexArrayAttribBinding")) |proc| {
        function_pointers.glVertexArrayAttribBinding = @ptrCast(proc);
    } else {
        log.err("entry point glVertexArrayAttribBinding not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexArrayAttribFormat")) |proc| {
        function_pointers.glVertexArrayAttribFormat = @ptrCast(proc);
    } else {
        log.err("entry point glVertexArrayAttribFormat not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexArrayAttribIFormat")) |proc| {
        function_pointers.glVertexArrayAttribIFormat = @ptrCast(proc);
    } else {
        log.err("entry point glVertexArrayAttribIFormat not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexArrayAttribLFormat")) |proc| {
        function_pointers.glVertexArrayAttribLFormat = @ptrCast(proc);
    } else {
        log.err("entry point glVertexArrayAttribLFormat not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glVertexArrayBindingDivisor")) |proc| {
        function_pointers.glVertexArrayBindingDivisor = @ptrCast(proc);
    } else {
        log.err("entry point glVertexArrayBindingDivisor not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetVertexArrayiv")) |proc| {
        function_pointers.glGetVertexArrayiv = @ptrCast(proc);
    } else {
        log.err("entry point glGetVertexArrayiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetVertexArrayIndexediv")) |proc| {
        function_pointers.glGetVertexArrayIndexediv = @ptrCast(proc);
    } else {
        log.err("entry point glGetVertexArrayIndexediv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetVertexArrayIndexed64iv")) |proc| {
        function_pointers.glGetVertexArrayIndexed64iv = @ptrCast(proc);
    } else {
        log.err("entry point glGetVertexArrayIndexed64iv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glCreateSamplers")) |proc| {
        function_pointers.glCreateSamplers = @ptrCast(proc);
    } else {
        log.err("entry point glCreateSamplers not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glCreateProgramPipelines")) |proc| {
        function_pointers.glCreateProgramPipelines = @ptrCast(proc);
    } else {
        log.err("entry point glCreateProgramPipelines not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glCreateQueries")) |proc| {
        function_pointers.glCreateQueries = @ptrCast(proc);
    } else {
        log.err("entry point glCreateQueries not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetQueryBufferObjecti64v")) |proc| {
        function_pointers.glGetQueryBufferObjecti64v = @ptrCast(proc);
    } else {
        log.err("entry point glGetQueryBufferObjecti64v not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetQueryBufferObjectiv")) |proc| {
        function_pointers.glGetQueryBufferObjectiv = @ptrCast(proc);
    } else {
        log.err("entry point glGetQueryBufferObjectiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetQueryBufferObjectui64v")) |proc| {
        function_pointers.glGetQueryBufferObjectui64v = @ptrCast(proc);
    } else {
        log.err("entry point glGetQueryBufferObjectui64v not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetQueryBufferObjectuiv")) |proc| {
        function_pointers.glGetQueryBufferObjectuiv = @ptrCast(proc);
    } else {
        log.err("entry point glGetQueryBufferObjectuiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glMemoryBarrierByRegion")) |proc| {
        function_pointers.glMemoryBarrierByRegion = @ptrCast(proc);
    } else {
        log.err("entry point glMemoryBarrierByRegion not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetTextureSubImage")) |proc| {
        function_pointers.glGetTextureSubImage = @ptrCast(proc);
    } else {
        log.err("entry point glGetTextureSubImage not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetCompressedTextureSubImage")) |proc| {
        function_pointers.glGetCompressedTextureSubImage = @ptrCast(proc);
    } else {
        log.err("entry point glGetCompressedTextureSubImage not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetGraphicsResetStatus")) |proc| {
        function_pointers.glGetGraphicsResetStatus = @ptrCast(proc);
    } else {
        log.err("entry point glGetGraphicsResetStatus not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetnCompressedTexImage")) |proc| {
        function_pointers.glGetnCompressedTexImage = @ptrCast(proc);
    } else {
        log.err("entry point glGetnCompressedTexImage not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetnTexImage")) |proc| {
        function_pointers.glGetnTexImage = @ptrCast(proc);
    } else {
        log.err("entry point glGetnTexImage not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetnUniformdv")) |proc| {
        function_pointers.glGetnUniformdv = @ptrCast(proc);
    } else {
        log.err("entry point glGetnUniformdv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetnUniformfv")) |proc| {
        function_pointers.glGetnUniformfv = @ptrCast(proc);
    } else {
        log.err("entry point glGetnUniformfv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetnUniformiv")) |proc| {
        function_pointers.glGetnUniformiv = @ptrCast(proc);
    } else {
        log.err("entry point glGetnUniformiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glGetnUniformuiv")) |proc| {
        function_pointers.glGetnUniformuiv = @ptrCast(proc);
    } else {
        log.err("entry point glGetnUniformuiv not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glReadnPixels")) |proc| {
        function_pointers.glReadnPixels = @ptrCast(proc);
    } else {
        log.err("entry point glReadnPixels not found!", .{});
        success = false;
    }
    if(get_proc_address(load_ctx, "glTextureBarrier")) |proc| {
        function_pointers.glTextureBarrier = @ptrCast(proc);
    } else {
        log.err("entry point glTextureBarrier not found!", .{});
        success = false;
    }
    if(!success)
        return error.EntryPointNotFound;
}

const function_signatures = struct {
    const glTexStorage2D = fn(_target: GLenum, _levels: GLsizei, _internalformat: GLenum, _width: GLsizei, _height: GLsizei) callconv(.C) void;
    const glTexStorage1D = fn(_target: GLenum, _levels: GLsizei, _internalformat: GLenum, _width: GLsizei) callconv(.C) void;
    const glDrawTransformFeedbackStreamInstanced = fn(_mode: GLenum, _id: GLuint, _stream: GLuint, _instancecount: GLsizei) callconv(.C) void;
    const glDrawTransformFeedbackInstanced = fn(_mode: GLenum, _id: GLuint, _instancecount: GLsizei) callconv(.C) void;
    const glTexStorage3D = fn(_target: GLenum, _levels: GLsizei, _internalformat: GLenum, _width: GLsizei, _height: GLsizei, _depth: GLsizei) callconv(.C) void;
    const glMemoryBarrier = fn(_barriers: GLbitfield) callconv(.C) void;
    const glBindImageTexture = fn(_unit: GLuint, _texture: GLuint, _level: GLint, _layered: GLboolean, _layer: GLint, _access: GLenum, _format: GLenum) callconv(.C) void;
    const glGetActiveAtomicCounterBufferiv = fn(_program: GLuint, _bufferIndex: GLuint, _pname: GLenum, _params: [*c]GLint) callconv(.C) void;
    const glGetInternalformativ = fn(_target: GLenum, _internalformat: GLenum, _pname: GLenum, _count: GLsizei, _params: [*c]GLint) callconv(.C) void;
    const glDrawElementsInstancedBaseVertexBaseInstance = fn(_mode: GLenum, _count: GLsizei, _type: GLenum, _indices: ?*const anyopaque, _instancecount: GLsizei, _basevertex: GLint, _baseinstance: GLuint) callconv(.C) void;
    const glDrawElementsInstancedBaseInstance = fn(_mode: GLenum, _count: GLsizei, _type: GLenum, _indices: ?*const anyopaque, _instancecount: GLsizei, _baseinstance: GLuint) callconv(.C) void;
    const glDrawArraysInstancedBaseInstance = fn(_mode: GLenum, _first: GLint, _count: GLsizei, _instancecount: GLsizei, _baseinstance: GLuint) callconv(.C) void;
    const glGetDoublei_v = fn(_target: GLenum, _index: GLuint, _data: [*c]GLdouble) callconv(.C) void;
    const glGetFloati_v = fn(_target: GLenum, _index: GLuint, _data: [*c]GLfloat) callconv(.C) void;
    const glDepthRangeIndexed = fn(_index: GLuint, _n: GLdouble, _f: GLdouble) callconv(.C) void;
    const glDepthRangeArrayv = fn(_first: GLuint, _count: GLsizei, _v: [*c]const GLdouble) callconv(.C) void;
    const glScissorIndexedv = fn(_index: GLuint, _v: [*c]const GLint) callconv(.C) void;
    const glScissorIndexed = fn(_index: GLuint, _left: GLint, _bottom: GLint, _width: GLsizei, _height: GLsizei) callconv(.C) void;
    const glScissorArrayv = fn(_first: GLuint, _count: GLsizei, _v: [*c]const GLint) callconv(.C) void;
    const glViewportIndexedfv = fn(_index: GLuint, _v: [*c]const GLfloat) callconv(.C) void;
    const glViewportIndexedf = fn(_index: GLuint, _x: GLfloat, _y: GLfloat, _w: GLfloat, _h: GLfloat) callconv(.C) void;
    const glViewportArrayv = fn(_first: GLuint, _count: GLsizei, _v: [*c]const GLfloat) callconv(.C) void;
    const glGetVertexAttribLdv = fn(_index: GLuint, _pname: GLenum, _params: [*c]GLdouble) callconv(.C) void;
    const glVertexAttribLPointer = fn(_index: GLuint, _size: GLint, _type: GLenum, _stride: GLsizei, _pointer: ?*const anyopaque) callconv(.C) void;
    const glVertexAttribL4dv = fn(_index: GLuint, _v: [*c]const GLdouble) callconv(.C) void;
    const glVertexAttribL3dv = fn(_index: GLuint, _v: [*c]const GLdouble) callconv(.C) void;
    const glVertexAttribL2dv = fn(_index: GLuint, _v: [*c]const GLdouble) callconv(.C) void;
    const glVertexAttribL1dv = fn(_index: GLuint, _v: [*c]const GLdouble) callconv(.C) void;
    const glVertexAttribL4d = fn(_index: GLuint, _x: GLdouble, _y: GLdouble, _z: GLdouble, _w: GLdouble) callconv(.C) void;
    const glVertexAttribL3d = fn(_index: GLuint, _x: GLdouble, _y: GLdouble, _z: GLdouble) callconv(.C) void;
    const glVertexAttribL2d = fn(_index: GLuint, _x: GLdouble, _y: GLdouble) callconv(.C) void;
    const glVertexAttribL1d = fn(_index: GLuint, _x: GLdouble) callconv(.C) void;
    const glValidateProgramPipeline = fn(_pipeline: GLuint) callconv(.C) void;
    const glProgramUniformMatrix4x3dv = fn(_program: GLuint, _location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLdouble) callconv(.C) void;
    const glProgramUniformMatrix3x4dv = fn(_program: GLuint, _location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLdouble) callconv(.C) void;
    const glProgramUniformMatrix4x2dv = fn(_program: GLuint, _location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLdouble) callconv(.C) void;
    const glProgramUniformMatrix2x4dv = fn(_program: GLuint, _location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLdouble) callconv(.C) void;
    const glProgramUniformMatrix3x2dv = fn(_program: GLuint, _location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLdouble) callconv(.C) void;
    const glProgramUniformMatrix2x3dv = fn(_program: GLuint, _location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLdouble) callconv(.C) void;
    const glProgramUniformMatrix4x3fv = fn(_program: GLuint, _location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLfloat) callconv(.C) void;
    const glProgramUniformMatrix3x4fv = fn(_program: GLuint, _location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLfloat) callconv(.C) void;
    const glProgramUniformMatrix4x2fv = fn(_program: GLuint, _location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLfloat) callconv(.C) void;
    const glProgramUniformMatrix2x4fv = fn(_program: GLuint, _location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLfloat) callconv(.C) void;
    const glProgramUniformMatrix3x2fv = fn(_program: GLuint, _location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLfloat) callconv(.C) void;
    const glProgramUniformMatrix2x3fv = fn(_program: GLuint, _location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLfloat) callconv(.C) void;
    const glProgramUniformMatrix4dv = fn(_program: GLuint, _location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLdouble) callconv(.C) void;
    const glProgramUniformMatrix3dv = fn(_program: GLuint, _location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLdouble) callconv(.C) void;
    const glProgramUniformMatrix2dv = fn(_program: GLuint, _location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLdouble) callconv(.C) void;
    const glProgramUniformMatrix4fv = fn(_program: GLuint, _location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLfloat) callconv(.C) void;
    const glProgramUniformMatrix3fv = fn(_program: GLuint, _location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLfloat) callconv(.C) void;
    const glProgramUniformMatrix2fv = fn(_program: GLuint, _location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLfloat) callconv(.C) void;
    const glProgramUniform4uiv = fn(_program: GLuint, _location: GLint, _count: GLsizei, _value: [*c]const GLuint) callconv(.C) void;
    const glProgramUniform4ui = fn(_program: GLuint, _location: GLint, _v0: GLuint, _v1: GLuint, _v2: GLuint, _v3: GLuint) callconv(.C) void;
    const glProgramUniform4dv = fn(_program: GLuint, _location: GLint, _count: GLsizei, _value: [*c]const GLdouble) callconv(.C) void;
    const glProgramUniform4d = fn(_program: GLuint, _location: GLint, _v0: GLdouble, _v1: GLdouble, _v2: GLdouble, _v3: GLdouble) callconv(.C) void;
    const glProgramUniform4fv = fn(_program: GLuint, _location: GLint, _count: GLsizei, _value: [*c]const GLfloat) callconv(.C) void;
    const glProgramUniform4f = fn(_program: GLuint, _location: GLint, _v0: GLfloat, _v1: GLfloat, _v2: GLfloat, _v3: GLfloat) callconv(.C) void;
    const glProgramUniform4iv = fn(_program: GLuint, _location: GLint, _count: GLsizei, _value: [*c]const GLint) callconv(.C) void;
    const glProgramUniform4i = fn(_program: GLuint, _location: GLint, _v0: GLint, _v1: GLint, _v2: GLint, _v3: GLint) callconv(.C) void;
    const glProgramUniform3uiv = fn(_program: GLuint, _location: GLint, _count: GLsizei, _value: [*c]const GLuint) callconv(.C) void;
    const glProgramUniform3ui = fn(_program: GLuint, _location: GLint, _v0: GLuint, _v1: GLuint, _v2: GLuint) callconv(.C) void;
    const glProgramUniform3dv = fn(_program: GLuint, _location: GLint, _count: GLsizei, _value: [*c]const GLdouble) callconv(.C) void;
    const glProgramUniform3d = fn(_program: GLuint, _location: GLint, _v0: GLdouble, _v1: GLdouble, _v2: GLdouble) callconv(.C) void;
    const glProgramUniform3fv = fn(_program: GLuint, _location: GLint, _count: GLsizei, _value: [*c]const GLfloat) callconv(.C) void;
    const glProgramUniform3f = fn(_program: GLuint, _location: GLint, _v0: GLfloat, _v1: GLfloat, _v2: GLfloat) callconv(.C) void;
    const glProgramUniform3iv = fn(_program: GLuint, _location: GLint, _count: GLsizei, _value: [*c]const GLint) callconv(.C) void;
    const glProgramUniform3i = fn(_program: GLuint, _location: GLint, _v0: GLint, _v1: GLint, _v2: GLint) callconv(.C) void;
    const glUseProgramStages = fn(_pipeline: GLuint, _stages: GLbitfield, _program: GLuint) callconv(.C) void;
    const glProgramParameteri = fn(_program: GLuint, _pname: GLenum, _value: GLint) callconv(.C) void;
    const glGetShaderPrecisionFormat = fn(_shadertype: GLenum, _precisiontype: GLenum, _range: [*c]GLint, _precision: [*c]GLint) callconv(.C) void;
    const glShaderBinary = fn(_count: GLsizei, _shaders: [*c]const GLuint, _binaryFormat: GLenum, _binary: ?*const anyopaque, _length: GLsizei) callconv(.C) void;
    const glReleaseShaderCompiler = fn() callconv(.C) void;
    const glGetQueryIndexediv = fn(_target: GLenum, _index: GLuint, _pname: GLenum, _params: [*c]GLint) callconv(.C) void;
    const glEndQueryIndexed = fn(_target: GLenum, _index: GLuint) callconv(.C) void;
    const glBeginQueryIndexed = fn(_target: GLenum, _index: GLuint, _id: GLuint) callconv(.C) void;
    const glDrawTransformFeedbackStream = fn(_mode: GLenum, _id: GLuint, _stream: GLuint) callconv(.C) void;
    const glDrawTransformFeedback = fn(_mode: GLenum, _id: GLuint) callconv(.C) void;
    const glResumeTransformFeedback = fn() callconv(.C) void;
    const glPauseTransformFeedback = fn() callconv(.C) void;
    const glGetProgramStageiv = fn(_program: GLuint, _shadertype: GLenum, _pname: GLenum, _values: [*c]GLint) callconv(.C) void;
    const glGetUniformSubroutineuiv = fn(_shadertype: GLenum, _location: GLint, _params: [*c]GLuint) callconv(.C) void;
    const glUniformSubroutinesuiv = fn(_shadertype: GLenum, _count: GLsizei, _indices: [*c]const GLuint) callconv(.C) void;
    const glGetActiveSubroutineName = fn(_program: GLuint, _shadertype: GLenum, _index: GLuint, _bufSize: GLsizei, _length: [*c]GLsizei, _name: [*c]GLchar) callconv(.C) void;
    const glCullFace = fn(_mode: GLenum) callconv(.C) void;
    const glFrontFace = fn(_mode: GLenum) callconv(.C) void;
    const glHint = fn(_target: GLenum, _mode: GLenum) callconv(.C) void;
    const glLineWidth = fn(_width: GLfloat) callconv(.C) void;
    const glPointSize = fn(_size: GLfloat) callconv(.C) void;
    const glPolygonMode = fn(_face: GLenum, _mode: GLenum) callconv(.C) void;
    const glScissor = fn(_x: GLint, _y: GLint, _width: GLsizei, _height: GLsizei) callconv(.C) void;
    const glTexParameterf = fn(_target: GLenum, _pname: GLenum, _param: GLfloat) callconv(.C) void;
    const glTexParameterfv = fn(_target: GLenum, _pname: GLenum, _params: [*c]const GLfloat) callconv(.C) void;
    const glTexParameteri = fn(_target: GLenum, _pname: GLenum, _param: GLint) callconv(.C) void;
    const glTexParameteriv = fn(_target: GLenum, _pname: GLenum, _params: [*c]const GLint) callconv(.C) void;
    const glTexImage1D = fn(_target: GLenum, _level: GLint, _internalformat: GLint, _width: GLsizei, _border: GLint, _format: GLenum, _type: GLenum, _pixels: ?*const anyopaque) callconv(.C) void;
    const glTexImage2D = fn(_target: GLenum, _level: GLint, _internalformat: GLint, _width: GLsizei, _height: GLsizei, _border: GLint, _format: GLenum, _type: GLenum, _pixels: ?*const anyopaque) callconv(.C) void;
    const glDrawBuffer = fn(_buf: GLenum) callconv(.C) void;
    const glClear = fn(_mask: GLbitfield) callconv(.C) void;
    const glClearColor = fn(_red: GLfloat, _green: GLfloat, _blue: GLfloat, _alpha: GLfloat) callconv(.C) void;
    const glClearStencil = fn(_s: GLint) callconv(.C) void;
    const glClearDepth = fn(_depth: GLdouble) callconv(.C) void;
    const glStencilMask = fn(_mask: GLuint) callconv(.C) void;
    const glColorMask = fn(_red: GLboolean, _green: GLboolean, _blue: GLboolean, _alpha: GLboolean) callconv(.C) void;
    const glDepthMask = fn(_flag: GLboolean) callconv(.C) void;
    const glDisable = fn(_cap: GLenum) callconv(.C) void;
    const glEnable = fn(_cap: GLenum) callconv(.C) void;
    const glFinish = fn() callconv(.C) void;
    const glFlush = fn() callconv(.C) void;
    const glBlendFunc = fn(_sfactor: GLenum, _dfactor: GLenum) callconv(.C) void;
    const glLogicOp = fn(_opcode: GLenum) callconv(.C) void;
    const glStencilFunc = fn(_func: GLenum, _ref: GLint, _mask: GLuint) callconv(.C) void;
    const glStencilOp = fn(_fail: GLenum, _zfail: GLenum, _zpass: GLenum) callconv(.C) void;
    const glDepthFunc = fn(_func: GLenum) callconv(.C) void;
    const glPixelStoref = fn(_pname: GLenum, _param: GLfloat) callconv(.C) void;
    const glPixelStorei = fn(_pname: GLenum, _param: GLint) callconv(.C) void;
    const glReadBuffer = fn(_src: GLenum) callconv(.C) void;
    const glReadPixels = fn(_x: GLint, _y: GLint, _width: GLsizei, _height: GLsizei, _format: GLenum, _type: GLenum, _pixels: ?*anyopaque) callconv(.C) void;
    const glGetBooleanv = fn(_pname: GLenum, _data: [*c]GLboolean) callconv(.C) void;
    const glGetDoublev = fn(_pname: GLenum, _data: [*c]GLdouble) callconv(.C) void;
    const glGetError = fn() callconv(.C) GLenum;
    const glGetFloatv = fn(_pname: GLenum, _data: [*c]GLfloat) callconv(.C) void;
    const glGetIntegerv = fn(_pname: GLenum, _data: [*c]GLint) callconv(.C) void;
    const glGetString = fn(_name: GLenum) callconv(.C) ?[*:0]const GLubyte;
    const glGetTexImage = fn(_target: GLenum, _level: GLint, _format: GLenum, _type: GLenum, _pixels: ?*anyopaque) callconv(.C) void;
    const glGetTexParameterfv = fn(_target: GLenum, _pname: GLenum, _params: [*c]GLfloat) callconv(.C) void;
    const glGetTexParameteriv = fn(_target: GLenum, _pname: GLenum, _params: [*c]GLint) callconv(.C) void;
    const glGetTexLevelParameterfv = fn(_target: GLenum, _level: GLint, _pname: GLenum, _params: [*c]GLfloat) callconv(.C) void;
    const glGetTexLevelParameteriv = fn(_target: GLenum, _level: GLint, _pname: GLenum, _params: [*c]GLint) callconv(.C) void;
    const glIsEnabled = fn(_cap: GLenum) callconv(.C) GLboolean;
    const glDepthRange = fn(_n: GLdouble, _f: GLdouble) callconv(.C) void;
    const glViewport = fn(_x: GLint, _y: GLint, _width: GLsizei, _height: GLsizei) callconv(.C) void;
    const glTexStorage2DMultisample = fn(_target: GLenum, _samples: GLsizei, _internalformat: GLenum, _width: GLsizei, _height: GLsizei, _fixedsamplelocations: GLboolean) callconv(.C) void;
    const glTexBufferRange = fn(_target: GLenum, _internalformat: GLenum, _buffer: GLuint, _offset: GLintptr, _size: GLsizeiptr) callconv(.C) void;
    const glShaderStorageBlockBinding = fn(_program: GLuint, _storageBlockIndex: GLuint, _storageBlockBinding: GLuint) callconv(.C) void;
    const glGetProgramResourceLocationIndex = fn(_program: GLuint, _programInterface: GLenum, _name: [*c]const GLchar) callconv(.C) GLint;
    const glGetProgramResourceLocation = fn(_program: GLuint, _programInterface: GLenum, _name: [*c]const GLchar) callconv(.C) GLint;
    const glGetProgramResourceiv = fn(_program: GLuint, _programInterface: GLenum, _index: GLuint, _propCount: GLsizei, _props: [*c]const GLenum, _count: GLsizei, _length: [*c]GLsizei, _params: [*c]GLint) callconv(.C) void;
    const glGetProgramResourceName = fn(_program: GLuint, _programInterface: GLenum, _index: GLuint, _bufSize: GLsizei, _length: [*c]GLsizei, _name: [*c]GLchar) callconv(.C) void;
    const glGetProgramResourceIndex = fn(_program: GLuint, _programInterface: GLenum, _name: [*c]const GLchar) callconv(.C) GLuint;
    const glGetProgramInterfaceiv = fn(_program: GLuint, _programInterface: GLenum, _pname: GLenum, _params: [*c]GLint) callconv(.C) void;
    const glMultiDrawElementsIndirect = fn(_mode: GLenum, _type: GLenum, _indirect: ?*const anyopaque, _drawcount: GLsizei, _stride: GLsizei) callconv(.C) void;
    const glMultiDrawArraysIndirect = fn(_mode: GLenum, _indirect: ?*const anyopaque, _drawcount: GLsizei, _stride: GLsizei) callconv(.C) void;
    const glInvalidateSubFramebuffer = fn(_target: GLenum, _numAttachments: GLsizei, _attachments: [*c]const GLenum, _x: GLint, _y: GLint, _width: GLsizei, _height: GLsizei) callconv(.C) void;
    const glInvalidateFramebuffer = fn(_target: GLenum, _numAttachments: GLsizei, _attachments: [*c]const GLenum) callconv(.C) void;
    const glInvalidateBufferData = fn(_buffer: GLuint) callconv(.C) void;
    const glInvalidateBufferSubData = fn(_buffer: GLuint, _offset: GLintptr, _length: GLsizeiptr) callconv(.C) void;
    const glInvalidateTexImage = fn(_texture: GLuint, _level: GLint) callconv(.C) void;
    const glInvalidateTexSubImage = fn(_texture: GLuint, _level: GLint, _xoffset: GLint, _yoffset: GLint, _zoffset: GLint, _width: GLsizei, _height: GLsizei, _depth: GLsizei) callconv(.C) void;
    const glGetInternalformati64v = fn(_target: GLenum, _internalformat: GLenum, _pname: GLenum, _count: GLsizei, _params: [*c]GLint64) callconv(.C) void;
    const glGetFramebufferParameteriv = fn(_target: GLenum, _pname: GLenum, _params: [*c]GLint) callconv(.C) void;
    const glFramebufferParameteri = fn(_target: GLenum, _pname: GLenum, _param: GLint) callconv(.C) void;
    const glCopyImageSubData = fn(_srcName: GLuint, _srcTarget: GLenum, _srcLevel: GLint, _srcX: GLint, _srcY: GLint, _srcZ: GLint, _dstName: GLuint, _dstTarget: GLenum, _dstLevel: GLint, _dstX: GLint, _dstY: GLint, _dstZ: GLint, _srcWidth: GLsizei, _srcHeight: GLsizei, _srcDepth: GLsizei) callconv(.C) void;
    const glDispatchComputeIndirect = fn(_indirect: GLintptr) callconv(.C) void;
    const glDispatchCompute = fn(_num_groups_x: GLuint, _num_groups_y: GLuint, _num_groups_z: GLuint) callconv(.C) void;
    const glClearBufferSubData = fn(_target: GLenum, _internalformat: GLenum, _offset: GLintptr, _size: GLsizeiptr, _format: GLenum, _type: GLenum, _data: ?*const anyopaque) callconv(.C) void;
    const glClearBufferData = fn(_target: GLenum, _internalformat: GLenum, _format: GLenum, _type: GLenum, _data: ?*const anyopaque) callconv(.C) void;
    const glGetProgramPipelineInfoLog = fn(_pipeline: GLuint, _bufSize: GLsizei, _length: [*c]GLsizei, _infoLog: [*c]GLchar) callconv(.C) void;
    const glProgramUniform2uiv = fn(_program: GLuint, _location: GLint, _count: GLsizei, _value: [*c]const GLuint) callconv(.C) void;
    const glProgramUniform2ui = fn(_program: GLuint, _location: GLint, _v0: GLuint, _v1: GLuint) callconv(.C) void;
    const glProgramUniform2dv = fn(_program: GLuint, _location: GLint, _count: GLsizei, _value: [*c]const GLdouble) callconv(.C) void;
    const glProgramUniform2d = fn(_program: GLuint, _location: GLint, _v0: GLdouble, _v1: GLdouble) callconv(.C) void;
    const glProgramUniform2fv = fn(_program: GLuint, _location: GLint, _count: GLsizei, _value: [*c]const GLfloat) callconv(.C) void;
    const glProgramUniform2f = fn(_program: GLuint, _location: GLint, _v0: GLfloat, _v1: GLfloat) callconv(.C) void;
    const glProgramUniform2iv = fn(_program: GLuint, _location: GLint, _count: GLsizei, _value: [*c]const GLint) callconv(.C) void;
    const glProgramUniform2i = fn(_program: GLuint, _location: GLint, _v0: GLint, _v1: GLint) callconv(.C) void;
    const glProgramUniform1uiv = fn(_program: GLuint, _location: GLint, _count: GLsizei, _value: [*c]const GLuint) callconv(.C) void;
    const glProgramUniform1ui = fn(_program: GLuint, _location: GLint, _v0: GLuint) callconv(.C) void;
    const glProgramUniform1dv = fn(_program: GLuint, _location: GLint, _count: GLsizei, _value: [*c]const GLdouble) callconv(.C) void;
    const glProgramUniform1d = fn(_program: GLuint, _location: GLint, _v0: GLdouble) callconv(.C) void;
    const glProgramUniform1fv = fn(_program: GLuint, _location: GLint, _count: GLsizei, _value: [*c]const GLfloat) callconv(.C) void;
    const glProgramUniform1f = fn(_program: GLuint, _location: GLint, _v0: GLfloat) callconv(.C) void;
    const glProgramUniform1iv = fn(_program: GLuint, _location: GLint, _count: GLsizei, _value: [*c]const GLint) callconv(.C) void;
    const glProgramUniform1i = fn(_program: GLuint, _location: GLint, _v0: GLint) callconv(.C) void;
    const glGetProgramPipelineiv = fn(_pipeline: GLuint, _pname: GLenum, _params: [*c]GLint) callconv(.C) void;
    const glIsProgramPipeline = fn(_pipeline: GLuint) callconv(.C) GLboolean;
    const glGenProgramPipelines = fn(_n: GLsizei, _pipelines: [*c]GLuint) callconv(.C) void;
    const glDeleteProgramPipelines = fn(_n: GLsizei, _pipelines: [*c]const GLuint) callconv(.C) void;
    const glBindProgramPipeline = fn(_pipeline: GLuint) callconv(.C) void;
    const glCreateShaderProgramv = fn(_type: GLenum, _count: GLsizei, _strings: [*c]const [*c]const GLchar) callconv(.C) GLuint;
    const glActiveShaderProgram = fn(_pipeline: GLuint, _program: GLuint) callconv(.C) void;
    const glProgramBinary = fn(_program: GLuint, _binaryFormat: GLenum, _binary: ?*const anyopaque, _length: GLsizei) callconv(.C) void;
    const glGetProgramBinary = fn(_program: GLuint, _bufSize: GLsizei, _length: [*c]GLsizei, _binaryFormat: [*c]GLenum, _binary: ?*anyopaque) callconv(.C) void;
    const glClearDepthf = fn(_d: GLfloat) callconv(.C) void;
    const glDepthRangef = fn(_n: GLfloat, _f: GLfloat) callconv(.C) void;
    const glIsTransformFeedback = fn(_id: GLuint) callconv(.C) GLboolean;
    const glGenTransformFeedbacks = fn(_n: GLsizei, _ids: [*c]GLuint) callconv(.C) void;
    const glDeleteTransformFeedbacks = fn(_n: GLsizei, _ids: [*c]const GLuint) callconv(.C) void;
    const glBindTransformFeedback = fn(_target: GLenum, _id: GLuint) callconv(.C) void;
    const glPatchParameterfv = fn(_pname: GLenum, _values: [*c]const GLfloat) callconv(.C) void;
    const glPatchParameteri = fn(_pname: GLenum, _value: GLint) callconv(.C) void;
    const glDrawArrays = fn(_mode: GLenum, _first: GLint, _count: GLsizei) callconv(.C) void;
    const glDrawElements = fn(_mode: GLenum, _count: GLsizei, _type: GLenum, _indices: ?*const anyopaque) callconv(.C) void;
    const glPolygonOffset = fn(_factor: GLfloat, _units: GLfloat) callconv(.C) void;
    const glCopyTexImage1D = fn(_target: GLenum, _level: GLint, _internalformat: GLenum, _x: GLint, _y: GLint, _width: GLsizei, _border: GLint) callconv(.C) void;
    const glCopyTexImage2D = fn(_target: GLenum, _level: GLint, _internalformat: GLenum, _x: GLint, _y: GLint, _width: GLsizei, _height: GLsizei, _border: GLint) callconv(.C) void;
    const glCopyTexSubImage1D = fn(_target: GLenum, _level: GLint, _xoffset: GLint, _x: GLint, _y: GLint, _width: GLsizei) callconv(.C) void;
    const glCopyTexSubImage2D = fn(_target: GLenum, _level: GLint, _xoffset: GLint, _yoffset: GLint, _x: GLint, _y: GLint, _width: GLsizei, _height: GLsizei) callconv(.C) void;
    const glTexSubImage1D = fn(_target: GLenum, _level: GLint, _xoffset: GLint, _width: GLsizei, _format: GLenum, _type: GLenum, _pixels: ?*const anyopaque) callconv(.C) void;
    const glTexSubImage2D = fn(_target: GLenum, _level: GLint, _xoffset: GLint, _yoffset: GLint, _width: GLsizei, _height: GLsizei, _format: GLenum, _type: GLenum, _pixels: ?*const anyopaque) callconv(.C) void;
    const glBindTexture = fn(_target: GLenum, _texture: GLuint) callconv(.C) void;
    const glDeleteTextures = fn(_n: GLsizei, _textures: [*c]const GLuint) callconv(.C) void;
    const glGenTextures = fn(_n: GLsizei, _textures: [*c]GLuint) callconv(.C) void;
    const glIsTexture = fn(_texture: GLuint) callconv(.C) GLboolean;
    const glGetActiveSubroutineUniformName = fn(_program: GLuint, _shadertype: GLenum, _index: GLuint, _bufSize: GLsizei, _length: [*c]GLsizei, _name: [*c]GLchar) callconv(.C) void;
    const glGetActiveSubroutineUniformiv = fn(_program: GLuint, _shadertype: GLenum, _index: GLuint, _pname: GLenum, _values: [*c]GLint) callconv(.C) void;
    const glGetSubroutineIndex = fn(_program: GLuint, _shadertype: GLenum, _name: [*c]const GLchar) callconv(.C) GLuint;
    const glGetSubroutineUniformLocation = fn(_program: GLuint, _shadertype: GLenum, _name: [*c]const GLchar) callconv(.C) GLint;
    const glGetUniformdv = fn(_program: GLuint, _location: GLint, _params: [*c]GLdouble) callconv(.C) void;
    const glUniformMatrix4x3dv = fn(_location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLdouble) callconv(.C) void;
    const glUniformMatrix4x2dv = fn(_location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLdouble) callconv(.C) void;
    const glUniformMatrix3x4dv = fn(_location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLdouble) callconv(.C) void;
    const glUniformMatrix3x2dv = fn(_location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLdouble) callconv(.C) void;
    const glUniformMatrix2x4dv = fn(_location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLdouble) callconv(.C) void;
    const glUniformMatrix2x3dv = fn(_location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLdouble) callconv(.C) void;
    const glUniformMatrix4dv = fn(_location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLdouble) callconv(.C) void;
    const glUniformMatrix3dv = fn(_location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLdouble) callconv(.C) void;
    const glDrawRangeElements = fn(_mode: GLenum, _start: GLuint, _end: GLuint, _count: GLsizei, _type: GLenum, _indices: ?*const anyopaque) callconv(.C) void;
    const glTexImage3D = fn(_target: GLenum, _level: GLint, _internalformat: GLint, _width: GLsizei, _height: GLsizei, _depth: GLsizei, _border: GLint, _format: GLenum, _type: GLenum, _pixels: ?*const anyopaque) callconv(.C) void;
    const glTexSubImage3D = fn(_target: GLenum, _level: GLint, _xoffset: GLint, _yoffset: GLint, _zoffset: GLint, _width: GLsizei, _height: GLsizei, _depth: GLsizei, _format: GLenum, _type: GLenum, _pixels: ?*const anyopaque) callconv(.C) void;
    const glCopyTexSubImage3D = fn(_target: GLenum, _level: GLint, _xoffset: GLint, _yoffset: GLint, _zoffset: GLint, _x: GLint, _y: GLint, _width: GLsizei, _height: GLsizei) callconv(.C) void;
    const glUniformMatrix2dv = fn(_location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLdouble) callconv(.C) void;
    const glUniform4dv = fn(_location: GLint, _count: GLsizei, _value: [*c]const GLdouble) callconv(.C) void;
    const glUniform3dv = fn(_location: GLint, _count: GLsizei, _value: [*c]const GLdouble) callconv(.C) void;
    const glUniform2dv = fn(_location: GLint, _count: GLsizei, _value: [*c]const GLdouble) callconv(.C) void;
    const glUniform1dv = fn(_location: GLint, _count: GLsizei, _value: [*c]const GLdouble) callconv(.C) void;
    const glUniform4d = fn(_location: GLint, _x: GLdouble, _y: GLdouble, _z: GLdouble, _w: GLdouble) callconv(.C) void;
    const glUniform3d = fn(_location: GLint, _x: GLdouble, _y: GLdouble, _z: GLdouble) callconv(.C) void;
    const glUniform2d = fn(_location: GLint, _x: GLdouble, _y: GLdouble) callconv(.C) void;
    const glUniform1d = fn(_location: GLint, _x: GLdouble) callconv(.C) void;
    const glDrawElementsIndirect = fn(_mode: GLenum, _type: GLenum, _indirect: ?*const anyopaque) callconv(.C) void;
    const glDrawArraysIndirect = fn(_mode: GLenum, _indirect: ?*const anyopaque) callconv(.C) void;
    const glBlendFuncSeparatei = fn(_buf: GLuint, _srcRGB: GLenum, _dstRGB: GLenum, _srcAlpha: GLenum, _dstAlpha: GLenum) callconv(.C) void;
    const glBlendFunci = fn(_buf: GLuint, _src: GLenum, _dst: GLenum) callconv(.C) void;
    const glBlendEquationSeparatei = fn(_buf: GLuint, _modeRGB: GLenum, _modeAlpha: GLenum) callconv(.C) void;
    const glBlendEquationi = fn(_buf: GLuint, _mode: GLenum) callconv(.C) void;
    const glMinSampleShading = fn(_value: GLfloat) callconv(.C) void;
    const glActiveTexture = fn(_texture: GLenum) callconv(.C) void;
    const glSampleCoverage = fn(_value: GLfloat, _invert: GLboolean) callconv(.C) void;
    const glCompressedTexImage3D = fn(_target: GLenum, _level: GLint, _internalformat: GLenum, _width: GLsizei, _height: GLsizei, _depth: GLsizei, _border: GLint, _imageSize: GLsizei, _data: ?*const anyopaque) callconv(.C) void;
    const glCompressedTexImage2D = fn(_target: GLenum, _level: GLint, _internalformat: GLenum, _width: GLsizei, _height: GLsizei, _border: GLint, _imageSize: GLsizei, _data: ?*const anyopaque) callconv(.C) void;
    const glCompressedTexImage1D = fn(_target: GLenum, _level: GLint, _internalformat: GLenum, _width: GLsizei, _border: GLint, _imageSize: GLsizei, _data: ?*const anyopaque) callconv(.C) void;
    const glCompressedTexSubImage3D = fn(_target: GLenum, _level: GLint, _xoffset: GLint, _yoffset: GLint, _zoffset: GLint, _width: GLsizei, _height: GLsizei, _depth: GLsizei, _format: GLenum, _imageSize: GLsizei, _data: ?*const anyopaque) callconv(.C) void;
    const glCompressedTexSubImage2D = fn(_target: GLenum, _level: GLint, _xoffset: GLint, _yoffset: GLint, _width: GLsizei, _height: GLsizei, _format: GLenum, _imageSize: GLsizei, _data: ?*const anyopaque) callconv(.C) void;
    const glCompressedTexSubImage1D = fn(_target: GLenum, _level: GLint, _xoffset: GLint, _width: GLsizei, _format: GLenum, _imageSize: GLsizei, _data: ?*const anyopaque) callconv(.C) void;
    const glGetCompressedTexImage = fn(_target: GLenum, _level: GLint, _img: ?*anyopaque) callconv(.C) void;
    const glVertexAttribP4uiv = fn(_index: GLuint, _type: GLenum, _normalized: GLboolean, _value: [*c]const GLuint) callconv(.C) void;
    const glVertexAttribP4ui = fn(_index: GLuint, _type: GLenum, _normalized: GLboolean, _value: GLuint) callconv(.C) void;
    const glVertexAttribP3uiv = fn(_index: GLuint, _type: GLenum, _normalized: GLboolean, _value: [*c]const GLuint) callconv(.C) void;
    const glVertexAttribP3ui = fn(_index: GLuint, _type: GLenum, _normalized: GLboolean, _value: GLuint) callconv(.C) void;
    const glVertexAttribP2uiv = fn(_index: GLuint, _type: GLenum, _normalized: GLboolean, _value: [*c]const GLuint) callconv(.C) void;
    const glVertexAttribP2ui = fn(_index: GLuint, _type: GLenum, _normalized: GLboolean, _value: GLuint) callconv(.C) void;
    const glVertexAttribP1uiv = fn(_index: GLuint, _type: GLenum, _normalized: GLboolean, _value: [*c]const GLuint) callconv(.C) void;
    const glVertexAttribP1ui = fn(_index: GLuint, _type: GLenum, _normalized: GLboolean, _value: GLuint) callconv(.C) void;
    const glVertexAttribDivisor = fn(_index: GLuint, _divisor: GLuint) callconv(.C) void;
    const glGetQueryObjectui64v = fn(_id: GLuint, _pname: GLenum, _params: [*c]GLuint64) callconv(.C) void;
    const glGetQueryObjecti64v = fn(_id: GLuint, _pname: GLenum, _params: [*c]GLint64) callconv(.C) void;
    const glQueryCounter = fn(_id: GLuint, _target: GLenum) callconv(.C) void;
    const glGetSamplerParameterIuiv = fn(_sampler: GLuint, _pname: GLenum, _params: [*c]GLuint) callconv(.C) void;
    const glGetSamplerParameterfv = fn(_sampler: GLuint, _pname: GLenum, _params: [*c]GLfloat) callconv(.C) void;
    const glGetSamplerParameterIiv = fn(_sampler: GLuint, _pname: GLenum, _params: [*c]GLint) callconv(.C) void;
    const glGetSamplerParameteriv = fn(_sampler: GLuint, _pname: GLenum, _params: [*c]GLint) callconv(.C) void;
    const glSamplerParameterIuiv = fn(_sampler: GLuint, _pname: GLenum, _param: [*c]const GLuint) callconv(.C) void;
    const glSamplerParameterIiv = fn(_sampler: GLuint, _pname: GLenum, _param: [*c]const GLint) callconv(.C) void;
    const glSamplerParameterfv = fn(_sampler: GLuint, _pname: GLenum, _param: [*c]const GLfloat) callconv(.C) void;
    const glSamplerParameterf = fn(_sampler: GLuint, _pname: GLenum, _param: GLfloat) callconv(.C) void;
    const glSamplerParameteriv = fn(_sampler: GLuint, _pname: GLenum, _param: [*c]const GLint) callconv(.C) void;
    const glSamplerParameteri = fn(_sampler: GLuint, _pname: GLenum, _param: GLint) callconv(.C) void;
    const glBindSampler = fn(_unit: GLuint, _sampler: GLuint) callconv(.C) void;
    const glIsSampler = fn(_sampler: GLuint) callconv(.C) GLboolean;
    const glDeleteSamplers = fn(_count: GLsizei, _samplers: [*c]const GLuint) callconv(.C) void;
    const glGenSamplers = fn(_count: GLsizei, _samplers: [*c]GLuint) callconv(.C) void;
    const glGetFragDataIndex = fn(_program: GLuint, _name: [*c]const GLchar) callconv(.C) GLint;
    const glBindFragDataLocationIndexed = fn(_program: GLuint, _colorNumber: GLuint, _index: GLuint, _name: [*c]const GLchar) callconv(.C) void;
    const glSampleMaski = fn(_maskNumber: GLuint, _mask: GLbitfield) callconv(.C) void;
    const glGetMultisamplefv = fn(_pname: GLenum, _index: GLuint, _val: [*c]GLfloat) callconv(.C) void;
    const glTexImage3DMultisample = fn(_target: GLenum, _samples: GLsizei, _internalformat: GLenum, _width: GLsizei, _height: GLsizei, _depth: GLsizei, _fixedsamplelocations: GLboolean) callconv(.C) void;
    const glTexImage2DMultisample = fn(_target: GLenum, _samples: GLsizei, _internalformat: GLenum, _width: GLsizei, _height: GLsizei, _fixedsamplelocations: GLboolean) callconv(.C) void;
    const glFramebufferTexture = fn(_target: GLenum, _attachment: GLenum, _texture: GLuint, _level: GLint) callconv(.C) void;
    const glGetBufferParameteri64v = fn(_target: GLenum, _pname: GLenum, _params: [*c]GLint64) callconv(.C) void;
    const glBlendFuncSeparate = fn(_sfactorRGB: GLenum, _dfactorRGB: GLenum, _sfactorAlpha: GLenum, _dfactorAlpha: GLenum) callconv(.C) void;
    const glMultiDrawArrays = fn(_mode: GLenum, _first: [*c]const GLint, _count: [*c]const GLsizei, _drawcount: GLsizei) callconv(.C) void;
    const glMultiDrawElements = fn(_mode: GLenum, _count: [*c]const GLsizei, _type: GLenum, _indices: [*c]const ?*const anyopaque, _drawcount: GLsizei) callconv(.C) void;
    const glPointParameterf = fn(_pname: GLenum, _param: GLfloat) callconv(.C) void;
    const glPointParameterfv = fn(_pname: GLenum, _params: [*c]const GLfloat) callconv(.C) void;
    const glPointParameteri = fn(_pname: GLenum, _param: GLint) callconv(.C) void;
    const glPointParameteriv = fn(_pname: GLenum, _params: [*c]const GLint) callconv(.C) void;
    const glGetInteger64i_v = fn(_target: GLenum, _index: GLuint, _data: [*c]GLint64) callconv(.C) void;
    const glGetSynciv = fn(_sync: GLsync, _pname: GLenum, _count: GLsizei, _length: [*c]GLsizei, _values: [*c]GLint) callconv(.C) void;
    const glGetInteger64v = fn(_pname: GLenum, _data: [*c]GLint64) callconv(.C) void;
    const glWaitSync = fn(_sync: GLsync, _flags: GLbitfield, _timeout: GLuint64) callconv(.C) void;
    const glClientWaitSync = fn(_sync: GLsync, _flags: GLbitfield, _timeout: GLuint64) callconv(.C) GLenum;
    const glDeleteSync = fn(_sync: GLsync) callconv(.C) void;
    const glIsSync = fn(_sync: GLsync) callconv(.C) GLboolean;
    const glFenceSync = fn(_condition: GLenum, _flags: GLbitfield) callconv(.C) GLsync;
    const glBlendColor = fn(_red: GLfloat, _green: GLfloat, _blue: GLfloat, _alpha: GLfloat) callconv(.C) void;
    const glBlendEquation = fn(_mode: GLenum) callconv(.C) void;
    const glProvokingVertex = fn(_mode: GLenum) callconv(.C) void;
    const glMultiDrawElementsBaseVertex = fn(_mode: GLenum, _count: [*c]const GLsizei, _type: GLenum, _indices: [*c]const ?*const anyopaque, _drawcount: GLsizei, _basevertex: [*c]const GLint) callconv(.C) void;
    const glDrawElementsInstancedBaseVertex = fn(_mode: GLenum, _count: GLsizei, _type: GLenum, _indices: ?*const anyopaque, _instancecount: GLsizei, _basevertex: GLint) callconv(.C) void;
    const glDrawRangeElementsBaseVertex = fn(_mode: GLenum, _start: GLuint, _end: GLuint, _count: GLsizei, _type: GLenum, _indices: ?*const anyopaque, _basevertex: GLint) callconv(.C) void;
    const glDrawElementsBaseVertex = fn(_mode: GLenum, _count: GLsizei, _type: GLenum, _indices: ?*const anyopaque, _basevertex: GLint) callconv(.C) void;
    const glGenQueries = fn(_n: GLsizei, _ids: [*c]GLuint) callconv(.C) void;
    const glDeleteQueries = fn(_n: GLsizei, _ids: [*c]const GLuint) callconv(.C) void;
    const glIsQuery = fn(_id: GLuint) callconv(.C) GLboolean;
    const glBeginQuery = fn(_target: GLenum, _id: GLuint) callconv(.C) void;
    const glEndQuery = fn(_target: GLenum) callconv(.C) void;
    const glGetQueryiv = fn(_target: GLenum, _pname: GLenum, _params: [*c]GLint) callconv(.C) void;
    const glGetQueryObjectiv = fn(_id: GLuint, _pname: GLenum, _params: [*c]GLint) callconv(.C) void;
    const glGetQueryObjectuiv = fn(_id: GLuint, _pname: GLenum, _params: [*c]GLuint) callconv(.C) void;
    const glBindBuffer = fn(_target: GLenum, _buffer: GLuint) callconv(.C) void;
    const glDeleteBuffers = fn(_n: GLsizei, _buffers: [*c]const GLuint) callconv(.C) void;
    const glGenBuffers = fn(_n: GLsizei, _buffers: [*c]GLuint) callconv(.C) void;
    const glIsBuffer = fn(_buffer: GLuint) callconv(.C) GLboolean;
    const glBufferData = fn(_target: GLenum, _size: GLsizeiptr, _data: ?*const anyopaque, _usage: GLenum) callconv(.C) void;
    const glBufferSubData = fn(_target: GLenum, _offset: GLintptr, _size: GLsizeiptr, _data: ?*const anyopaque) callconv(.C) void;
    const glGetBufferSubData = fn(_target: GLenum, _offset: GLintptr, _size: GLsizeiptr, _data: ?*anyopaque) callconv(.C) void;
    const glMapBuffer = fn(_target: GLenum, _access: GLenum) callconv(.C) ?*anyopaque;
    const glUnmapBuffer = fn(_target: GLenum) callconv(.C) GLboolean;
    const glGetBufferParameteriv = fn(_target: GLenum, _pname: GLenum, _params: [*c]GLint) callconv(.C) void;
    const glGetBufferPointerv = fn(_target: GLenum, _pname: GLenum, _params: ?*?*anyopaque) callconv(.C) void;
    const glBlendEquationSeparate = fn(_modeRGB: GLenum, _modeAlpha: GLenum) callconv(.C) void;
    const glDrawBuffers = fn(_n: GLsizei, _bufs: [*c]const GLenum) callconv(.C) void;
    const glStencilOpSeparate = fn(_face: GLenum, _sfail: GLenum, _dpfail: GLenum, _dppass: GLenum) callconv(.C) void;
    const glStencilFuncSeparate = fn(_face: GLenum, _func: GLenum, _ref: GLint, _mask: GLuint) callconv(.C) void;
    const glStencilMaskSeparate = fn(_face: GLenum, _mask: GLuint) callconv(.C) void;
    const glAttachShader = fn(_program: GLuint, _shader: GLuint) callconv(.C) void;
    const glBindAttribLocation = fn(_program: GLuint, _index: GLuint, _name: [*c]const GLchar) callconv(.C) void;
    const glCompileShader = fn(_shader: GLuint) callconv(.C) void;
    const glCreateProgram = fn() callconv(.C) GLuint;
    const glCreateShader = fn(_type: GLenum) callconv(.C) GLuint;
    const glDeleteProgram = fn(_program: GLuint) callconv(.C) void;
    const glDeleteShader = fn(_shader: GLuint) callconv(.C) void;
    const glDetachShader = fn(_program: GLuint, _shader: GLuint) callconv(.C) void;
    const glDisableVertexAttribArray = fn(_index: GLuint) callconv(.C) void;
    const glEnableVertexAttribArray = fn(_index: GLuint) callconv(.C) void;
    const glGetActiveAttrib = fn(_program: GLuint, _index: GLuint, _bufSize: GLsizei, _length: [*c]GLsizei, _size: [*c]GLint, _type: [*c]GLenum, _name: [*c]GLchar) callconv(.C) void;
    const glGetActiveUniform = fn(_program: GLuint, _index: GLuint, _bufSize: GLsizei, _length: [*c]GLsizei, _size: [*c]GLint, _type: [*c]GLenum, _name: [*c]GLchar) callconv(.C) void;
    const glGetAttachedShaders = fn(_program: GLuint, _maxCount: GLsizei, _count: [*c]GLsizei, _shaders: [*c]GLuint) callconv(.C) void;
    const glGetAttribLocation = fn(_program: GLuint, _name: [*c]const GLchar) callconv(.C) GLint;
    const glGetProgramiv = fn(_program: GLuint, _pname: GLenum, _params: [*c]GLint) callconv(.C) void;
    const glGetProgramInfoLog = fn(_program: GLuint, _bufSize: GLsizei, _length: [*c]GLsizei, _infoLog: [*c]GLchar) callconv(.C) void;
    const glGetShaderiv = fn(_shader: GLuint, _pname: GLenum, _params: [*c]GLint) callconv(.C) void;
    const glGetShaderInfoLog = fn(_shader: GLuint, _bufSize: GLsizei, _length: [*c]GLsizei, _infoLog: [*c]GLchar) callconv(.C) void;
    const glGetShaderSource = fn(_shader: GLuint, _bufSize: GLsizei, _length: [*c]GLsizei, _source: [*c]GLchar) callconv(.C) void;
    const glGetUniformLocation = fn(_program: GLuint, _name: [*c]const GLchar) callconv(.C) GLint;
    const glGetUniformfv = fn(_program: GLuint, _location: GLint, _params: [*c]GLfloat) callconv(.C) void;
    const glGetUniformiv = fn(_program: GLuint, _location: GLint, _params: [*c]GLint) callconv(.C) void;
    const glGetVertexAttribdv = fn(_index: GLuint, _pname: GLenum, _params: [*c]GLdouble) callconv(.C) void;
    const glGetVertexAttribfv = fn(_index: GLuint, _pname: GLenum, _params: [*c]GLfloat) callconv(.C) void;
    const glGetVertexAttribiv = fn(_index: GLuint, _pname: GLenum, _params: [*c]GLint) callconv(.C) void;
    const glGetVertexAttribPointerv = fn(_index: GLuint, _pname: GLenum, _pointer: ?*?*anyopaque) callconv(.C) void;
    const glIsProgram = fn(_program: GLuint) callconv(.C) GLboolean;
    const glIsShader = fn(_shader: GLuint) callconv(.C) GLboolean;
    const glLinkProgram = fn(_program: GLuint) callconv(.C) void;
    const glShaderSource = fn(_shader: GLuint, _count: GLsizei, _string: [*c]const [*c]const GLchar, _length: [*c]const GLint) callconv(.C) void;
    const glUseProgram = fn(_program: GLuint) callconv(.C) void;
    const glUniform1f = fn(_location: GLint, _v0: GLfloat) callconv(.C) void;
    const glUniform2f = fn(_location: GLint, _v0: GLfloat, _v1: GLfloat) callconv(.C) void;
    const glUniform3f = fn(_location: GLint, _v0: GLfloat, _v1: GLfloat, _v2: GLfloat) callconv(.C) void;
    const glUniform4f = fn(_location: GLint, _v0: GLfloat, _v1: GLfloat, _v2: GLfloat, _v3: GLfloat) callconv(.C) void;
    const glUniform1i = fn(_location: GLint, _v0: GLint) callconv(.C) void;
    const glUniform2i = fn(_location: GLint, _v0: GLint, _v1: GLint) callconv(.C) void;
    const glUniform3i = fn(_location: GLint, _v0: GLint, _v1: GLint, _v2: GLint) callconv(.C) void;
    const glUniform4i = fn(_location: GLint, _v0: GLint, _v1: GLint, _v2: GLint, _v3: GLint) callconv(.C) void;
    const glUniform1fv = fn(_location: GLint, _count: GLsizei, _value: [*c]const GLfloat) callconv(.C) void;
    const glUniform2fv = fn(_location: GLint, _count: GLsizei, _value: [*c]const GLfloat) callconv(.C) void;
    const glUniform3fv = fn(_location: GLint, _count: GLsizei, _value: [*c]const GLfloat) callconv(.C) void;
    const glUniform4fv = fn(_location: GLint, _count: GLsizei, _value: [*c]const GLfloat) callconv(.C) void;
    const glUniform1iv = fn(_location: GLint, _count: GLsizei, _value: [*c]const GLint) callconv(.C) void;
    const glUniform2iv = fn(_location: GLint, _count: GLsizei, _value: [*c]const GLint) callconv(.C) void;
    const glUniform3iv = fn(_location: GLint, _count: GLsizei, _value: [*c]const GLint) callconv(.C) void;
    const glUniform4iv = fn(_location: GLint, _count: GLsizei, _value: [*c]const GLint) callconv(.C) void;
    const glUniformMatrix2fv = fn(_location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLfloat) callconv(.C) void;
    const glUniformMatrix3fv = fn(_location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLfloat) callconv(.C) void;
    const glUniformMatrix4fv = fn(_location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLfloat) callconv(.C) void;
    const glValidateProgram = fn(_program: GLuint) callconv(.C) void;
    const glVertexAttrib1d = fn(_index: GLuint, _x: GLdouble) callconv(.C) void;
    const glVertexAttrib1dv = fn(_index: GLuint, _v: [*c]const GLdouble) callconv(.C) void;
    const glVertexAttrib1f = fn(_index: GLuint, _x: GLfloat) callconv(.C) void;
    const glVertexAttrib1fv = fn(_index: GLuint, _v: [*c]const GLfloat) callconv(.C) void;
    const glVertexAttrib1s = fn(_index: GLuint, _x: GLshort) callconv(.C) void;
    const glVertexAttrib1sv = fn(_index: GLuint, _v: [*c]const GLshort) callconv(.C) void;
    const glVertexAttrib2d = fn(_index: GLuint, _x: GLdouble, _y: GLdouble) callconv(.C) void;
    const glVertexAttrib2dv = fn(_index: GLuint, _v: [*c]const GLdouble) callconv(.C) void;
    const glVertexAttrib2f = fn(_index: GLuint, _x: GLfloat, _y: GLfloat) callconv(.C) void;
    const glVertexAttrib2fv = fn(_index: GLuint, _v: [*c]const GLfloat) callconv(.C) void;
    const glVertexAttrib2s = fn(_index: GLuint, _x: GLshort, _y: GLshort) callconv(.C) void;
    const glVertexAttrib2sv = fn(_index: GLuint, _v: [*c]const GLshort) callconv(.C) void;
    const glVertexAttrib3d = fn(_index: GLuint, _x: GLdouble, _y: GLdouble, _z: GLdouble) callconv(.C) void;
    const glVertexAttrib3dv = fn(_index: GLuint, _v: [*c]const GLdouble) callconv(.C) void;
    const glVertexAttrib3f = fn(_index: GLuint, _x: GLfloat, _y: GLfloat, _z: GLfloat) callconv(.C) void;
    const glVertexAttrib3fv = fn(_index: GLuint, _v: [*c]const GLfloat) callconv(.C) void;
    const glVertexAttrib3s = fn(_index: GLuint, _x: GLshort, _y: GLshort, _z: GLshort) callconv(.C) void;
    const glVertexAttrib3sv = fn(_index: GLuint, _v: [*c]const GLshort) callconv(.C) void;
    const glVertexAttrib4Nbv = fn(_index: GLuint, _v: [*c]const GLbyte) callconv(.C) void;
    const glVertexAttrib4Niv = fn(_index: GLuint, _v: [*c]const GLint) callconv(.C) void;
    const glVertexAttrib4Nsv = fn(_index: GLuint, _v: [*c]const GLshort) callconv(.C) void;
    const glVertexAttrib4Nub = fn(_index: GLuint, _x: GLubyte, _y: GLubyte, _z: GLubyte, _w: GLubyte) callconv(.C) void;
    const glVertexAttrib4Nubv = fn(_index: GLuint, _v: ?[*:0]const GLubyte) callconv(.C) void;
    const glVertexAttrib4Nuiv = fn(_index: GLuint, _v: [*c]const GLuint) callconv(.C) void;
    const glVertexAttrib4Nusv = fn(_index: GLuint, _v: [*c]const GLushort) callconv(.C) void;
    const glVertexAttrib4bv = fn(_index: GLuint, _v: [*c]const GLbyte) callconv(.C) void;
    const glVertexAttrib4d = fn(_index: GLuint, _x: GLdouble, _y: GLdouble, _z: GLdouble, _w: GLdouble) callconv(.C) void;
    const glVertexAttrib4dv = fn(_index: GLuint, _v: [*c]const GLdouble) callconv(.C) void;
    const glVertexAttrib4f = fn(_index: GLuint, _x: GLfloat, _y: GLfloat, _z: GLfloat, _w: GLfloat) callconv(.C) void;
    const glVertexAttrib4fv = fn(_index: GLuint, _v: [*c]const GLfloat) callconv(.C) void;
    const glVertexAttrib4iv = fn(_index: GLuint, _v: [*c]const GLint) callconv(.C) void;
    const glVertexAttrib4s = fn(_index: GLuint, _x: GLshort, _y: GLshort, _z: GLshort, _w: GLshort) callconv(.C) void;
    const glVertexAttrib4sv = fn(_index: GLuint, _v: [*c]const GLshort) callconv(.C) void;
    const glVertexAttrib4ubv = fn(_index: GLuint, _v: ?[*:0]const GLubyte) callconv(.C) void;
    const glVertexAttrib4uiv = fn(_index: GLuint, _v: [*c]const GLuint) callconv(.C) void;
    const glVertexAttrib4usv = fn(_index: GLuint, _v: [*c]const GLushort) callconv(.C) void;
    const glVertexAttribPointer = fn(_index: GLuint, _size: GLint, _type: GLenum, _normalized: GLboolean, _stride: GLsizei, _pointer: ?*const anyopaque) callconv(.C) void;
    const glUniformMatrix2x3fv = fn(_location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLfloat) callconv(.C) void;
    const glUniformMatrix3x2fv = fn(_location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLfloat) callconv(.C) void;
    const glUniformMatrix2x4fv = fn(_location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLfloat) callconv(.C) void;
    const glUniformMatrix4x2fv = fn(_location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLfloat) callconv(.C) void;
    const glUniformMatrix3x4fv = fn(_location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLfloat) callconv(.C) void;
    const glUniformMatrix4x3fv = fn(_location: GLint, _count: GLsizei, _transpose: GLboolean, _value: [*c]const GLfloat) callconv(.C) void;
    const glColorMaski = fn(_index: GLuint, _r: GLboolean, _g: GLboolean, _b: GLboolean, _a: GLboolean) callconv(.C) void;
    const glGetBooleani_v = fn(_target: GLenum, _index: GLuint, _data: [*c]GLboolean) callconv(.C) void;
    const glGetIntegeri_v = fn(_target: GLenum, _index: GLuint, _data: [*c]GLint) callconv(.C) void;
    const glEnablei = fn(_target: GLenum, _index: GLuint) callconv(.C) void;
    const glDisablei = fn(_target: GLenum, _index: GLuint) callconv(.C) void;
    const glIsEnabledi = fn(_target: GLenum, _index: GLuint) callconv(.C) GLboolean;
    const glBeginTransformFeedback = fn(_primitiveMode: GLenum) callconv(.C) void;
    const glEndTransformFeedback = fn() callconv(.C) void;
    const glBindBufferRange = fn(_target: GLenum, _index: GLuint, _buffer: GLuint, _offset: GLintptr, _size: GLsizeiptr) callconv(.C) void;
    const glBindBufferBase = fn(_target: GLenum, _index: GLuint, _buffer: GLuint) callconv(.C) void;
    const glTransformFeedbackVaryings = fn(_program: GLuint, _count: GLsizei, _varyings: [*c]const [*c]const GLchar, _bufferMode: GLenum) callconv(.C) void;
    const glGetTransformFeedbackVarying = fn(_program: GLuint, _index: GLuint, _bufSize: GLsizei, _length: [*c]GLsizei, _size: [*c]GLsizei, _type: [*c]GLenum, _name: [*c]GLchar) callconv(.C) void;
    const glClampColor = fn(_target: GLenum, _clamp: GLenum) callconv(.C) void;
    const glBeginConditionalRender = fn(_id: GLuint, _mode: GLenum) callconv(.C) void;
    const glEndConditionalRender = fn() callconv(.C) void;
    const glVertexAttribIPointer = fn(_index: GLuint, _size: GLint, _type: GLenum, _stride: GLsizei, _pointer: ?*const anyopaque) callconv(.C) void;
    const glGetVertexAttribIiv = fn(_index: GLuint, _pname: GLenum, _params: [*c]GLint) callconv(.C) void;
    const glGetVertexAttribIuiv = fn(_index: GLuint, _pname: GLenum, _params: [*c]GLuint) callconv(.C) void;
    const glVertexAttribI1i = fn(_index: GLuint, _x: GLint) callconv(.C) void;
    const glVertexAttribI2i = fn(_index: GLuint, _x: GLint, _y: GLint) callconv(.C) void;
    const glVertexAttribI3i = fn(_index: GLuint, _x: GLint, _y: GLint, _z: GLint) callconv(.C) void;
    const glVertexAttribI4i = fn(_index: GLuint, _x: GLint, _y: GLint, _z: GLint, _w: GLint) callconv(.C) void;
    const glVertexAttribI1ui = fn(_index: GLuint, _x: GLuint) callconv(.C) void;
    const glVertexAttribI2ui = fn(_index: GLuint, _x: GLuint, _y: GLuint) callconv(.C) void;
    const glVertexAttribI3ui = fn(_index: GLuint, _x: GLuint, _y: GLuint, _z: GLuint) callconv(.C) void;
    const glVertexAttribI4ui = fn(_index: GLuint, _x: GLuint, _y: GLuint, _z: GLuint, _w: GLuint) callconv(.C) void;
    const glVertexAttribI1iv = fn(_index: GLuint, _v: [*c]const GLint) callconv(.C) void;
    const glVertexAttribI2iv = fn(_index: GLuint, _v: [*c]const GLint) callconv(.C) void;
    const glVertexAttribI3iv = fn(_index: GLuint, _v: [*c]const GLint) callconv(.C) void;
    const glVertexAttribI4iv = fn(_index: GLuint, _v: [*c]const GLint) callconv(.C) void;
    const glVertexAttribI1uiv = fn(_index: GLuint, _v: [*c]const GLuint) callconv(.C) void;
    const glVertexAttribI2uiv = fn(_index: GLuint, _v: [*c]const GLuint) callconv(.C) void;
    const glVertexAttribI3uiv = fn(_index: GLuint, _v: [*c]const GLuint) callconv(.C) void;
    const glVertexAttribI4uiv = fn(_index: GLuint, _v: [*c]const GLuint) callconv(.C) void;
    const glVertexAttribI4bv = fn(_index: GLuint, _v: [*c]const GLbyte) callconv(.C) void;
    const glVertexAttribI4sv = fn(_index: GLuint, _v: [*c]const GLshort) callconv(.C) void;
    const glVertexAttribI4ubv = fn(_index: GLuint, _v: ?[*:0]const GLubyte) callconv(.C) void;
    const glVertexAttribI4usv = fn(_index: GLuint, _v: [*c]const GLushort) callconv(.C) void;
    const glGetUniformuiv = fn(_program: GLuint, _location: GLint, _params: [*c]GLuint) callconv(.C) void;
    const glBindFragDataLocation = fn(_program: GLuint, _color: GLuint, _name: [*c]const GLchar) callconv(.C) void;
    const glGetFragDataLocation = fn(_program: GLuint, _name: [*c]const GLchar) callconv(.C) GLint;
    const glUniform1ui = fn(_location: GLint, _v0: GLuint) callconv(.C) void;
    const glUniform2ui = fn(_location: GLint, _v0: GLuint, _v1: GLuint) callconv(.C) void;
    const glUniform3ui = fn(_location: GLint, _v0: GLuint, _v1: GLuint, _v2: GLuint) callconv(.C) void;
    const glUniform4ui = fn(_location: GLint, _v0: GLuint, _v1: GLuint, _v2: GLuint, _v3: GLuint) callconv(.C) void;
    const glUniform1uiv = fn(_location: GLint, _count: GLsizei, _value: [*c]const GLuint) callconv(.C) void;
    const glUniform2uiv = fn(_location: GLint, _count: GLsizei, _value: [*c]const GLuint) callconv(.C) void;
    const glUniform3uiv = fn(_location: GLint, _count: GLsizei, _value: [*c]const GLuint) callconv(.C) void;
    const glUniform4uiv = fn(_location: GLint, _count: GLsizei, _value: [*c]const GLuint) callconv(.C) void;
    const glTexParameterIiv = fn(_target: GLenum, _pname: GLenum, _params: [*c]const GLint) callconv(.C) void;
    const glTexParameterIuiv = fn(_target: GLenum, _pname: GLenum, _params: [*c]const GLuint) callconv(.C) void;
    const glGetTexParameterIiv = fn(_target: GLenum, _pname: GLenum, _params: [*c]GLint) callconv(.C) void;
    const glGetTexParameterIuiv = fn(_target: GLenum, _pname: GLenum, _params: [*c]GLuint) callconv(.C) void;
    const glClearBufferiv = fn(_buffer: GLenum, _drawbuffer: GLint, _value: [*c]const GLint) callconv(.C) void;
    const glClearBufferuiv = fn(_buffer: GLenum, _drawbuffer: GLint, _value: [*c]const GLuint) callconv(.C) void;
    const glClearBufferfv = fn(_buffer: GLenum, _drawbuffer: GLint, _value: [*c]const GLfloat) callconv(.C) void;
    const glClearBufferfi = fn(_buffer: GLenum, _drawbuffer: GLint, _depth: GLfloat, _stencil: GLint) callconv(.C) void;
    const glGetStringi = fn(_name: GLenum, _index: GLuint) callconv(.C) ?[*:0]const GLubyte;
    const glIsRenderbuffer = fn(_renderbuffer: GLuint) callconv(.C) GLboolean;
    const glBindRenderbuffer = fn(_target: GLenum, _renderbuffer: GLuint) callconv(.C) void;
    const glDeleteRenderbuffers = fn(_n: GLsizei, _renderbuffers: [*c]const GLuint) callconv(.C) void;
    const glGenRenderbuffers = fn(_n: GLsizei, _renderbuffers: [*c]GLuint) callconv(.C) void;
    const glRenderbufferStorage = fn(_target: GLenum, _internalformat: GLenum, _width: GLsizei, _height: GLsizei) callconv(.C) void;
    const glGetRenderbufferParameteriv = fn(_target: GLenum, _pname: GLenum, _params: [*c]GLint) callconv(.C) void;
    const glIsFramebuffer = fn(_framebuffer: GLuint) callconv(.C) GLboolean;
    const glBindFramebuffer = fn(_target: GLenum, _framebuffer: GLuint) callconv(.C) void;
    const glDeleteFramebuffers = fn(_n: GLsizei, _framebuffers: [*c]const GLuint) callconv(.C) void;
    const glGenFramebuffers = fn(_n: GLsizei, _framebuffers: [*c]GLuint) callconv(.C) void;
    const glCheckFramebufferStatus = fn(_target: GLenum) callconv(.C) GLenum;
    const glFramebufferTexture1D = fn(_target: GLenum, _attachment: GLenum, _textarget: GLenum, _texture: GLuint, _level: GLint) callconv(.C) void;
    const glFramebufferTexture2D = fn(_target: GLenum, _attachment: GLenum, _textarget: GLenum, _texture: GLuint, _level: GLint) callconv(.C) void;
    const glFramebufferTexture3D = fn(_target: GLenum, _attachment: GLenum, _textarget: GLenum, _texture: GLuint, _level: GLint, _zoffset: GLint) callconv(.C) void;
    const glFramebufferRenderbuffer = fn(_target: GLenum, _attachment: GLenum, _renderbuffertarget: GLenum, _renderbuffer: GLuint) callconv(.C) void;
    const glGetFramebufferAttachmentParameteriv = fn(_target: GLenum, _attachment: GLenum, _pname: GLenum, _params: [*c]GLint) callconv(.C) void;
    const glGenerateMipmap = fn(_target: GLenum) callconv(.C) void;
    const glBlitFramebuffer = fn(_srcX0: GLint, _srcY0: GLint, _srcX1: GLint, _srcY1: GLint, _dstX0: GLint, _dstY0: GLint, _dstX1: GLint, _dstY1: GLint, _mask: GLbitfield, _filter: GLenum) callconv(.C) void;
    const glRenderbufferStorageMultisample = fn(_target: GLenum, _samples: GLsizei, _internalformat: GLenum, _width: GLsizei, _height: GLsizei) callconv(.C) void;
    const glFramebufferTextureLayer = fn(_target: GLenum, _attachment: GLenum, _texture: GLuint, _level: GLint, _layer: GLint) callconv(.C) void;
    const glMapBufferRange = fn(_target: GLenum, _offset: GLintptr, _length: GLsizeiptr, _access: GLbitfield) callconv(.C) ?*anyopaque;
    const glFlushMappedBufferRange = fn(_target: GLenum, _offset: GLintptr, _length: GLsizeiptr) callconv(.C) void;
    const glBindVertexArray = fn(_array: GLuint) callconv(.C) void;
    const glDeleteVertexArrays = fn(_n: GLsizei, _arrays: [*c]const GLuint) callconv(.C) void;
    const glGenVertexArrays = fn(_n: GLsizei, _arrays: [*c]GLuint) callconv(.C) void;
    const glIsVertexArray = fn(_array: GLuint) callconv(.C) GLboolean;
    const glDrawArraysInstanced = fn(_mode: GLenum, _first: GLint, _count: GLsizei, _instancecount: GLsizei) callconv(.C) void;
    const glDrawElementsInstanced = fn(_mode: GLenum, _count: GLsizei, _type: GLenum, _indices: ?*const anyopaque, _instancecount: GLsizei) callconv(.C) void;
    const glTexBuffer = fn(_target: GLenum, _internalformat: GLenum, _buffer: GLuint) callconv(.C) void;
    const glPrimitiveRestartIndex = fn(_index: GLuint) callconv(.C) void;
    const glCopyBufferSubData = fn(_readTarget: GLenum, _writeTarget: GLenum, _readOffset: GLintptr, _writeOffset: GLintptr, _size: GLsizeiptr) callconv(.C) void;
    const glGetUniformIndices = fn(_program: GLuint, _uniformCount: GLsizei, _uniformNames: [*c]const [*c]const GLchar, _uniformIndices: [*c]GLuint) callconv(.C) void;
    const glGetActiveUniformsiv = fn(_program: GLuint, _uniformCount: GLsizei, _uniformIndices: [*c]const GLuint, _pname: GLenum, _params: [*c]GLint) callconv(.C) void;
    const glGetActiveUniformName = fn(_program: GLuint, _uniformIndex: GLuint, _bufSize: GLsizei, _length: [*c]GLsizei, _uniformName: [*c]GLchar) callconv(.C) void;
    const glGetUniformBlockIndex = fn(_program: GLuint, _uniformBlockName: [*c]const GLchar) callconv(.C) GLuint;
    const glGetActiveUniformBlockiv = fn(_program: GLuint, _uniformBlockIndex: GLuint, _pname: GLenum, _params: [*c]GLint) callconv(.C) void;
    const glGetActiveUniformBlockName = fn(_program: GLuint, _uniformBlockIndex: GLuint, _bufSize: GLsizei, _length: [*c]GLsizei, _uniformBlockName: [*c]GLchar) callconv(.C) void;
    const glUniformBlockBinding = fn(_program: GLuint, _uniformBlockIndex: GLuint, _uniformBlockBinding: GLuint) callconv(.C) void;
    const glTexStorage3DMultisample = fn(_target: GLenum, _samples: GLsizei, _internalformat: GLenum, _width: GLsizei, _height: GLsizei, _depth: GLsizei, _fixedsamplelocations: GLboolean) callconv(.C) void;
    const glTextureView = fn(_texture: GLuint, _target: GLenum, _origtexture: GLuint, _internalformat: GLenum, _minlevel: GLuint, _numlevels: GLuint, _minlayer: GLuint, _numlayers: GLuint) callconv(.C) void;
    const glBindVertexBuffer = fn(_bindingindex: GLuint, _buffer: GLuint, _offset: GLintptr, _stride: GLsizei) callconv(.C) void;
    const glVertexAttribFormat = fn(_attribindex: GLuint, _size: GLint, _type: GLenum, _normalized: GLboolean, _relativeoffset: GLuint) callconv(.C) void;
    const glVertexAttribIFormat = fn(_attribindex: GLuint, _size: GLint, _type: GLenum, _relativeoffset: GLuint) callconv(.C) void;
    const glVertexAttribLFormat = fn(_attribindex: GLuint, _size: GLint, _type: GLenum, _relativeoffset: GLuint) callconv(.C) void;
    const glVertexAttribBinding = fn(_attribindex: GLuint, _bindingindex: GLuint) callconv(.C) void;
    const glVertexBindingDivisor = fn(_bindingindex: GLuint, _divisor: GLuint) callconv(.C) void;
    const glDebugMessageControl = fn(_source: GLenum, _type: GLenum, _severity: GLenum, _count: GLsizei, _ids: [*c]const GLuint, _enabled: GLboolean) callconv(.C) void;
    const glDebugMessageInsert = fn(_source: GLenum, _type: GLenum, _id: GLuint, _severity: GLenum, _length: GLsizei, _buf: [*c]const GLchar) callconv(.C) void;
    const glDebugMessageCallback = fn(_callback: GLDEBUGPROC, _userParam: ?*const anyopaque) callconv(.C) void;
    const glGetDebugMessageLog = fn(_count: GLuint, _bufSize: GLsizei, _sources: [*c]GLenum, _types: [*c]GLenum, _ids: [*c]GLuint, _severities: [*c]GLenum, _lengths: [*c]GLsizei, _messageLog: [*c]GLchar) callconv(.C) GLuint;
    const glPushDebugGroup = fn(_source: GLenum, _id: GLuint, _length: GLsizei, _message: [*c]const GLchar) callconv(.C) void;
    const glPopDebugGroup = fn() callconv(.C) void;
    const glObjectLabel = fn(_identifier: GLenum, _name: GLuint, _length: GLsizei, _label: [*c]const GLchar) callconv(.C) void;
    const glGetObjectLabel = fn(_identifier: GLenum, _name: GLuint, _bufSize: GLsizei, _length: [*c]GLsizei, _label: [*c]GLchar) callconv(.C) void;
    const glObjectPtrLabel = fn(_ptr: ?*const anyopaque, _length: GLsizei, _label: [*c]const GLchar) callconv(.C) void;
    const glGetObjectPtrLabel = fn(_ptr: ?*const anyopaque, _bufSize: GLsizei, _length: [*c]GLsizei, _label: [*c]GLchar) callconv(.C) void;
    const glGetPointerv = fn(_pname: GLenum, _params: ?*?*anyopaque) callconv(.C) void;
    const glBufferStorage = fn(_target: GLenum, _size: GLsizeiptr, _data: ?*const anyopaque, _flags: GLbitfield) callconv(.C) void;
    const glClearTexImage = fn(_texture: GLuint, _level: GLint, _format: GLenum, _type: GLenum, _data: ?*const anyopaque) callconv(.C) void;
    const glClearTexSubImage = fn(_texture: GLuint, _level: GLint, _xoffset: GLint, _yoffset: GLint, _zoffset: GLint, _width: GLsizei, _height: GLsizei, _depth: GLsizei, _format: GLenum, _type: GLenum, _data: ?*const anyopaque) callconv(.C) void;
    const glBindBuffersBase = fn(_target: GLenum, _first: GLuint, _count: GLsizei, _buffers: [*c]const GLuint) callconv(.C) void;
    const glBindBuffersRange = fn(_target: GLenum, _first: GLuint, _count: GLsizei, _buffers: [*c]const GLuint, _offsets: [*c]const GLintptr, _sizes: [*c]const GLsizeiptr) callconv(.C) void;
    const glBindTextures = fn(_first: GLuint, _count: GLsizei, _textures: [*c]const GLuint) callconv(.C) void;
    const glBindSamplers = fn(_first: GLuint, _count: GLsizei, _samplers: [*c]const GLuint) callconv(.C) void;
    const glBindImageTextures = fn(_first: GLuint, _count: GLsizei, _textures: [*c]const GLuint) callconv(.C) void;
    const glBindVertexBuffers = fn(_first: GLuint, _count: GLsizei, _buffers: [*c]const GLuint, _offsets: [*c]const GLintptr, _strides: [*c]const GLsizei) callconv(.C) void;
    const glClipControl = fn(_origin: GLenum, _depth: GLenum) callconv(.C) void;
    const glCreateTransformFeedbacks = fn(_n: GLsizei, _ids: [*c]GLuint) callconv(.C) void;
    const glTransformFeedbackBufferBase = fn(_xfb: GLuint, _index: GLuint, _buffer: GLuint) callconv(.C) void;
    const glTransformFeedbackBufferRange = fn(_xfb: GLuint, _index: GLuint, _buffer: GLuint, _offset: GLintptr, _size: GLsizeiptr) callconv(.C) void;
    const glGetTransformFeedbackiv = fn(_xfb: GLuint, _pname: GLenum, _param: [*c]GLint) callconv(.C) void;
    const glGetTransformFeedbacki_v = fn(_xfb: GLuint, _pname: GLenum, _index: GLuint, _param: [*c]GLint) callconv(.C) void;
    const glGetTransformFeedbacki64_v = fn(_xfb: GLuint, _pname: GLenum, _index: GLuint, _param: [*c]GLint64) callconv(.C) void;
    const glCreateBuffers = fn(_n: GLsizei, _buffers: [*c]GLuint) callconv(.C) void;
    const glNamedBufferStorage = fn(_buffer: GLuint, _size: GLsizeiptr, _data: ?*const anyopaque, _flags: GLbitfield) callconv(.C) void;
    const glNamedBufferData = fn(_buffer: GLuint, _size: GLsizeiptr, _data: ?*const anyopaque, _usage: GLenum) callconv(.C) void;
    const glNamedBufferSubData = fn(_buffer: GLuint, _offset: GLintptr, _size: GLsizeiptr, _data: ?*const anyopaque) callconv(.C) void;
    const glCopyNamedBufferSubData = fn(_readBuffer: GLuint, _writeBuffer: GLuint, _readOffset: GLintptr, _writeOffset: GLintptr, _size: GLsizeiptr) callconv(.C) void;
    const glClearNamedBufferData = fn(_buffer: GLuint, _internalformat: GLenum, _format: GLenum, _type: GLenum, _data: ?*const anyopaque) callconv(.C) void;
    const glClearNamedBufferSubData = fn(_buffer: GLuint, _internalformat: GLenum, _offset: GLintptr, _size: GLsizeiptr, _format: GLenum, _type: GLenum, _data: ?*const anyopaque) callconv(.C) void;
    const glMapNamedBuffer = fn(_buffer: GLuint, _access: GLenum) callconv(.C) ?*anyopaque;
    const glMapNamedBufferRange = fn(_buffer: GLuint, _offset: GLintptr, _length: GLsizeiptr, _access: GLbitfield) callconv(.C) ?*anyopaque;
    const glUnmapNamedBuffer = fn(_buffer: GLuint) callconv(.C) GLboolean;
    const glFlushMappedNamedBufferRange = fn(_buffer: GLuint, _offset: GLintptr, _length: GLsizeiptr) callconv(.C) void;
    const glGetNamedBufferParameteriv = fn(_buffer: GLuint, _pname: GLenum, _params: [*c]GLint) callconv(.C) void;
    const glGetNamedBufferParameteri64v = fn(_buffer: GLuint, _pname: GLenum, _params: [*c]GLint64) callconv(.C) void;
    const glGetNamedBufferPointerv = fn(_buffer: GLuint, _pname: GLenum, _params: ?*?*anyopaque) callconv(.C) void;
    const glGetNamedBufferSubData = fn(_buffer: GLuint, _offset: GLintptr, _size: GLsizeiptr, _data: ?*anyopaque) callconv(.C) void;
    const glCreateFramebuffers = fn(_n: GLsizei, _framebuffers: [*c]GLuint) callconv(.C) void;
    const glNamedFramebufferRenderbuffer = fn(_framebuffer: GLuint, _attachment: GLenum, _renderbuffertarget: GLenum, _renderbuffer: GLuint) callconv(.C) void;
    const glNamedFramebufferParameteri = fn(_framebuffer: GLuint, _pname: GLenum, _param: GLint) callconv(.C) void;
    const glNamedFramebufferTexture = fn(_framebuffer: GLuint, _attachment: GLenum, _texture: GLuint, _level: GLint) callconv(.C) void;
    const glNamedFramebufferTextureLayer = fn(_framebuffer: GLuint, _attachment: GLenum, _texture: GLuint, _level: GLint, _layer: GLint) callconv(.C) void;
    const glNamedFramebufferDrawBuffer = fn(_framebuffer: GLuint, _buf: GLenum) callconv(.C) void;
    const glNamedFramebufferDrawBuffers = fn(_framebuffer: GLuint, _n: GLsizei, _bufs: [*c]const GLenum) callconv(.C) void;
    const glNamedFramebufferReadBuffer = fn(_framebuffer: GLuint, _src: GLenum) callconv(.C) void;
    const glInvalidateNamedFramebufferData = fn(_framebuffer: GLuint, _numAttachments: GLsizei, _attachments: [*c]const GLenum) callconv(.C) void;
    const glInvalidateNamedFramebufferSubData = fn(_framebuffer: GLuint, _numAttachments: GLsizei, _attachments: [*c]const GLenum, _x: GLint, _y: GLint, _width: GLsizei, _height: GLsizei) callconv(.C) void;
    const glClearNamedFramebufferiv = fn(_framebuffer: GLuint, _buffer: GLenum, _drawbuffer: GLint, _value: [*c]const GLint) callconv(.C) void;
    const glClearNamedFramebufferuiv = fn(_framebuffer: GLuint, _buffer: GLenum, _drawbuffer: GLint, _value: [*c]const GLuint) callconv(.C) void;
    const glClearNamedFramebufferfv = fn(_framebuffer: GLuint, _buffer: GLenum, _drawbuffer: GLint, _value: [*c]const GLfloat) callconv(.C) void;
    const glClearNamedFramebufferfi = fn(_framebuffer: GLuint, _buffer: GLenum, _drawbuffer: GLint, _depth: GLfloat, _stencil: GLint) callconv(.C) void;
    const glBlitNamedFramebuffer = fn(_readFramebuffer: GLuint, _drawFramebuffer: GLuint, _srcX0: GLint, _srcY0: GLint, _srcX1: GLint, _srcY1: GLint, _dstX0: GLint, _dstY0: GLint, _dstX1: GLint, _dstY1: GLint, _mask: GLbitfield, _filter: GLenum) callconv(.C) void;
    const glCheckNamedFramebufferStatus = fn(_framebuffer: GLuint, _target: GLenum) callconv(.C) GLenum;
    const glGetNamedFramebufferParameteriv = fn(_framebuffer: GLuint, _pname: GLenum, _param: [*c]GLint) callconv(.C) void;
    const glGetNamedFramebufferAttachmentParameteriv = fn(_framebuffer: GLuint, _attachment: GLenum, _pname: GLenum, _params: [*c]GLint) callconv(.C) void;
    const glCreateRenderbuffers = fn(_n: GLsizei, _renderbuffers: [*c]GLuint) callconv(.C) void;
    const glNamedRenderbufferStorage = fn(_renderbuffer: GLuint, _internalformat: GLenum, _width: GLsizei, _height: GLsizei) callconv(.C) void;
    const glNamedRenderbufferStorageMultisample = fn(_renderbuffer: GLuint, _samples: GLsizei, _internalformat: GLenum, _width: GLsizei, _height: GLsizei) callconv(.C) void;
    const glGetNamedRenderbufferParameteriv = fn(_renderbuffer: GLuint, _pname: GLenum, _params: [*c]GLint) callconv(.C) void;
    const glCreateTextures = fn(_target: GLenum, _n: GLsizei, _textures: [*c]GLuint) callconv(.C) void;
    const glTextureBuffer = fn(_texture: GLuint, _internalformat: GLenum, _buffer: GLuint) callconv(.C) void;
    const glTextureBufferRange = fn(_texture: GLuint, _internalformat: GLenum, _buffer: GLuint, _offset: GLintptr, _size: GLsizeiptr) callconv(.C) void;
    const glTextureStorage1D = fn(_texture: GLuint, _levels: GLsizei, _internalformat: GLenum, _width: GLsizei) callconv(.C) void;
    const glTextureStorage2D = fn(_texture: GLuint, _levels: GLsizei, _internalformat: GLenum, _width: GLsizei, _height: GLsizei) callconv(.C) void;
    const glTextureStorage3D = fn(_texture: GLuint, _levels: GLsizei, _internalformat: GLenum, _width: GLsizei, _height: GLsizei, _depth: GLsizei) callconv(.C) void;
    const glTextureStorage2DMultisample = fn(_texture: GLuint, _samples: GLsizei, _internalformat: GLenum, _width: GLsizei, _height: GLsizei, _fixedsamplelocations: GLboolean) callconv(.C) void;
    const glTextureStorage3DMultisample = fn(_texture: GLuint, _samples: GLsizei, _internalformat: GLenum, _width: GLsizei, _height: GLsizei, _depth: GLsizei, _fixedsamplelocations: GLboolean) callconv(.C) void;
    const glTextureSubImage1D = fn(_texture: GLuint, _level: GLint, _xoffset: GLint, _width: GLsizei, _format: GLenum, _type: GLenum, _pixels: ?*const anyopaque) callconv(.C) void;
    const glTextureSubImage2D = fn(_texture: GLuint, _level: GLint, _xoffset: GLint, _yoffset: GLint, _width: GLsizei, _height: GLsizei, _format: GLenum, _type: GLenum, _pixels: ?*const anyopaque) callconv(.C) void;
    const glTextureSubImage3D = fn(_texture: GLuint, _level: GLint, _xoffset: GLint, _yoffset: GLint, _zoffset: GLint, _width: GLsizei, _height: GLsizei, _depth: GLsizei, _format: GLenum, _type: GLenum, _pixels: ?*const anyopaque) callconv(.C) void;
    const glCompressedTextureSubImage1D = fn(_texture: GLuint, _level: GLint, _xoffset: GLint, _width: GLsizei, _format: GLenum, _imageSize: GLsizei, _data: ?*const anyopaque) callconv(.C) void;
    const glCompressedTextureSubImage2D = fn(_texture: GLuint, _level: GLint, _xoffset: GLint, _yoffset: GLint, _width: GLsizei, _height: GLsizei, _format: GLenum, _imageSize: GLsizei, _data: ?*const anyopaque) callconv(.C) void;
    const glCompressedTextureSubImage3D = fn(_texture: GLuint, _level: GLint, _xoffset: GLint, _yoffset: GLint, _zoffset: GLint, _width: GLsizei, _height: GLsizei, _depth: GLsizei, _format: GLenum, _imageSize: GLsizei, _data: ?*const anyopaque) callconv(.C) void;
    const glCopyTextureSubImage1D = fn(_texture: GLuint, _level: GLint, _xoffset: GLint, _x: GLint, _y: GLint, _width: GLsizei) callconv(.C) void;
    const glCopyTextureSubImage2D = fn(_texture: GLuint, _level: GLint, _xoffset: GLint, _yoffset: GLint, _x: GLint, _y: GLint, _width: GLsizei, _height: GLsizei) callconv(.C) void;
    const glCopyTextureSubImage3D = fn(_texture: GLuint, _level: GLint, _xoffset: GLint, _yoffset: GLint, _zoffset: GLint, _x: GLint, _y: GLint, _width: GLsizei, _height: GLsizei) callconv(.C) void;
    const glTextureParameterf = fn(_texture: GLuint, _pname: GLenum, _param: GLfloat) callconv(.C) void;
    const glTextureParameterfv = fn(_texture: GLuint, _pname: GLenum, _param: [*c]const GLfloat) callconv(.C) void;
    const glTextureParameteri = fn(_texture: GLuint, _pname: GLenum, _param: GLint) callconv(.C) void;
    const glTextureParameterIiv = fn(_texture: GLuint, _pname: GLenum, _params: [*c]const GLint) callconv(.C) void;
    const glTextureParameterIuiv = fn(_texture: GLuint, _pname: GLenum, _params: [*c]const GLuint) callconv(.C) void;
    const glTextureParameteriv = fn(_texture: GLuint, _pname: GLenum, _param: [*c]const GLint) callconv(.C) void;
    const glGenerateTextureMipmap = fn(_texture: GLuint) callconv(.C) void;
    const glBindTextureUnit = fn(_unit: GLuint, _texture: GLuint) callconv(.C) void;
    const glGetTextureImage = fn(_texture: GLuint, _level: GLint, _format: GLenum, _type: GLenum, _bufSize: GLsizei, _pixels: ?*anyopaque) callconv(.C) void;
    const glGetCompressedTextureImage = fn(_texture: GLuint, _level: GLint, _bufSize: GLsizei, _pixels: ?*anyopaque) callconv(.C) void;
    const glGetTextureLevelParameterfv = fn(_texture: GLuint, _level: GLint, _pname: GLenum, _params: [*c]GLfloat) callconv(.C) void;
    const glGetTextureLevelParameteriv = fn(_texture: GLuint, _level: GLint, _pname: GLenum, _params: [*c]GLint) callconv(.C) void;
    const glGetTextureParameterfv = fn(_texture: GLuint, _pname: GLenum, _params: [*c]GLfloat) callconv(.C) void;
    const glGetTextureParameterIiv = fn(_texture: GLuint, _pname: GLenum, _params: [*c]GLint) callconv(.C) void;
    const glGetTextureParameterIuiv = fn(_texture: GLuint, _pname: GLenum, _params: [*c]GLuint) callconv(.C) void;
    const glGetTextureParameteriv = fn(_texture: GLuint, _pname: GLenum, _params: [*c]GLint) callconv(.C) void;
    const glCreateVertexArrays = fn(_n: GLsizei, _arrays: [*c]GLuint) callconv(.C) void;
    const glDisableVertexArrayAttrib = fn(_vaobj: GLuint, _index: GLuint) callconv(.C) void;
    const glEnableVertexArrayAttrib = fn(_vaobj: GLuint, _index: GLuint) callconv(.C) void;
    const glVertexArrayElementBuffer = fn(_vaobj: GLuint, _buffer: GLuint) callconv(.C) void;
    const glVertexArrayVertexBuffer = fn(_vaobj: GLuint, _bindingindex: GLuint, _buffer: GLuint, _offset: GLintptr, _stride: GLsizei) callconv(.C) void;
    const glVertexArrayVertexBuffers = fn(_vaobj: GLuint, _first: GLuint, _count: GLsizei, _buffers: [*c]const GLuint, _offsets: [*c]const GLintptr, _strides: [*c]const GLsizei) callconv(.C) void;
    const glVertexArrayAttribBinding = fn(_vaobj: GLuint, _attribindex: GLuint, _bindingindex: GLuint) callconv(.C) void;
    const glVertexArrayAttribFormat = fn(_vaobj: GLuint, _attribindex: GLuint, _size: GLint, _type: GLenum, _normalized: GLboolean, _relativeoffset: GLuint) callconv(.C) void;
    const glVertexArrayAttribIFormat = fn(_vaobj: GLuint, _attribindex: GLuint, _size: GLint, _type: GLenum, _relativeoffset: GLuint) callconv(.C) void;
    const glVertexArrayAttribLFormat = fn(_vaobj: GLuint, _attribindex: GLuint, _size: GLint, _type: GLenum, _relativeoffset: GLuint) callconv(.C) void;
    const glVertexArrayBindingDivisor = fn(_vaobj: GLuint, _bindingindex: GLuint, _divisor: GLuint) callconv(.C) void;
    const glGetVertexArrayiv = fn(_vaobj: GLuint, _pname: GLenum, _param: [*c]GLint) callconv(.C) void;
    const glGetVertexArrayIndexediv = fn(_vaobj: GLuint, _index: GLuint, _pname: GLenum, _param: [*c]GLint) callconv(.C) void;
    const glGetVertexArrayIndexed64iv = fn(_vaobj: GLuint, _index: GLuint, _pname: GLenum, _param: [*c]GLint64) callconv(.C) void;
    const glCreateSamplers = fn(_n: GLsizei, _samplers: [*c]GLuint) callconv(.C) void;
    const glCreateProgramPipelines = fn(_n: GLsizei, _pipelines: [*c]GLuint) callconv(.C) void;
    const glCreateQueries = fn(_target: GLenum, _n: GLsizei, _ids: [*c]GLuint) callconv(.C) void;
    const glGetQueryBufferObjecti64v = fn(_id: GLuint, _buffer: GLuint, _pname: GLenum, _offset: GLintptr) callconv(.C) void;
    const glGetQueryBufferObjectiv = fn(_id: GLuint, _buffer: GLuint, _pname: GLenum, _offset: GLintptr) callconv(.C) void;
    const glGetQueryBufferObjectui64v = fn(_id: GLuint, _buffer: GLuint, _pname: GLenum, _offset: GLintptr) callconv(.C) void;
    const glGetQueryBufferObjectuiv = fn(_id: GLuint, _buffer: GLuint, _pname: GLenum, _offset: GLintptr) callconv(.C) void;
    const glMemoryBarrierByRegion = fn(_barriers: GLbitfield) callconv(.C) void;
    const glGetTextureSubImage = fn(_texture: GLuint, _level: GLint, _xoffset: GLint, _yoffset: GLint, _zoffset: GLint, _width: GLsizei, _height: GLsizei, _depth: GLsizei, _format: GLenum, _type: GLenum, _bufSize: GLsizei, _pixels: ?*anyopaque) callconv(.C) void;
    const glGetCompressedTextureSubImage = fn(_texture: GLuint, _level: GLint, _xoffset: GLint, _yoffset: GLint, _zoffset: GLint, _width: GLsizei, _height: GLsizei, _depth: GLsizei, _bufSize: GLsizei, _pixels: ?*anyopaque) callconv(.C) void;
    const glGetGraphicsResetStatus = fn() callconv(.C) GLenum;
    const glGetnCompressedTexImage = fn(_target: GLenum, _lod: GLint, _bufSize: GLsizei, _pixels: ?*anyopaque) callconv(.C) void;
    const glGetnTexImage = fn(_target: GLenum, _level: GLint, _format: GLenum, _type: GLenum, _bufSize: GLsizei, _pixels: ?*anyopaque) callconv(.C) void;
    const glGetnUniformdv = fn(_program: GLuint, _location: GLint, _bufSize: GLsizei, _params: [*c]GLdouble) callconv(.C) void;
    const glGetnUniformfv = fn(_program: GLuint, _location: GLint, _bufSize: GLsizei, _params: [*c]GLfloat) callconv(.C) void;
    const glGetnUniformiv = fn(_program: GLuint, _location: GLint, _bufSize: GLsizei, _params: [*c]GLint) callconv(.C) void;
    const glGetnUniformuiv = fn(_program: GLuint, _location: GLint, _bufSize: GLsizei, _params: [*c]GLuint) callconv(.C) void;
    const glReadnPixels = fn(_x: GLint, _y: GLint, _width: GLsizei, _height: GLsizei, _format: GLenum, _type: GLenum, _bufSize: GLsizei, _data: ?*anyopaque) callconv(.C) void;
    const glTextureBarrier = fn() callconv(.C) void;
};

const function_pointers = struct {
    var glTexStorage2D: *const function_signatures.glTexStorage2D = undefined;
    var glTexStorage1D: *const function_signatures.glTexStorage1D = undefined;
    var glDrawTransformFeedbackStreamInstanced: *const function_signatures.glDrawTransformFeedbackStreamInstanced = undefined;
    var glDrawTransformFeedbackInstanced: *const function_signatures.glDrawTransformFeedbackInstanced = undefined;
    var glTexStorage3D: *const function_signatures.glTexStorage3D = undefined;
    var glMemoryBarrier: *const function_signatures.glMemoryBarrier = undefined;
    var glBindImageTexture: *const function_signatures.glBindImageTexture = undefined;
    var glGetActiveAtomicCounterBufferiv: *const function_signatures.glGetActiveAtomicCounterBufferiv = undefined;
    var glGetInternalformativ: *const function_signatures.glGetInternalformativ = undefined;
    var glDrawElementsInstancedBaseVertexBaseInstance: *const function_signatures.glDrawElementsInstancedBaseVertexBaseInstance = undefined;
    var glDrawElementsInstancedBaseInstance: *const function_signatures.glDrawElementsInstancedBaseInstance = undefined;
    var glDrawArraysInstancedBaseInstance: *const function_signatures.glDrawArraysInstancedBaseInstance = undefined;
    var glGetDoublei_v: *const function_signatures.glGetDoublei_v = undefined;
    var glGetFloati_v: *const function_signatures.glGetFloati_v = undefined;
    var glDepthRangeIndexed: *const function_signatures.glDepthRangeIndexed = undefined;
    var glDepthRangeArrayv: *const function_signatures.glDepthRangeArrayv = undefined;
    var glScissorIndexedv: *const function_signatures.glScissorIndexedv = undefined;
    var glScissorIndexed: *const function_signatures.glScissorIndexed = undefined;
    var glScissorArrayv: *const function_signatures.glScissorArrayv = undefined;
    var glViewportIndexedfv: *const function_signatures.glViewportIndexedfv = undefined;
    var glViewportIndexedf: *const function_signatures.glViewportIndexedf = undefined;
    var glViewportArrayv: *const function_signatures.glViewportArrayv = undefined;
    var glGetVertexAttribLdv: *const function_signatures.glGetVertexAttribLdv = undefined;
    var glVertexAttribLPointer: *const function_signatures.glVertexAttribLPointer = undefined;
    var glVertexAttribL4dv: *const function_signatures.glVertexAttribL4dv = undefined;
    var glVertexAttribL3dv: *const function_signatures.glVertexAttribL3dv = undefined;
    var glVertexAttribL2dv: *const function_signatures.glVertexAttribL2dv = undefined;
    var glVertexAttribL1dv: *const function_signatures.glVertexAttribL1dv = undefined;
    var glVertexAttribL4d: *const function_signatures.glVertexAttribL4d = undefined;
    var glVertexAttribL3d: *const function_signatures.glVertexAttribL3d = undefined;
    var glVertexAttribL2d: *const function_signatures.glVertexAttribL2d = undefined;
    var glVertexAttribL1d: *const function_signatures.glVertexAttribL1d = undefined;
    var glValidateProgramPipeline: *const function_signatures.glValidateProgramPipeline = undefined;
    var glProgramUniformMatrix4x3dv: *const function_signatures.glProgramUniformMatrix4x3dv = undefined;
    var glProgramUniformMatrix3x4dv: *const function_signatures.glProgramUniformMatrix3x4dv = undefined;
    var glProgramUniformMatrix4x2dv: *const function_signatures.glProgramUniformMatrix4x2dv = undefined;
    var glProgramUniformMatrix2x4dv: *const function_signatures.glProgramUniformMatrix2x4dv = undefined;
    var glProgramUniformMatrix3x2dv: *const function_signatures.glProgramUniformMatrix3x2dv = undefined;
    var glProgramUniformMatrix2x3dv: *const function_signatures.glProgramUniformMatrix2x3dv = undefined;
    var glProgramUniformMatrix4x3fv: *const function_signatures.glProgramUniformMatrix4x3fv = undefined;
    var glProgramUniformMatrix3x4fv: *const function_signatures.glProgramUniformMatrix3x4fv = undefined;
    var glProgramUniformMatrix4x2fv: *const function_signatures.glProgramUniformMatrix4x2fv = undefined;
    var glProgramUniformMatrix2x4fv: *const function_signatures.glProgramUniformMatrix2x4fv = undefined;
    var glProgramUniformMatrix3x2fv: *const function_signatures.glProgramUniformMatrix3x2fv = undefined;
    var glProgramUniformMatrix2x3fv: *const function_signatures.glProgramUniformMatrix2x3fv = undefined;
    var glProgramUniformMatrix4dv: *const function_signatures.glProgramUniformMatrix4dv = undefined;
    var glProgramUniformMatrix3dv: *const function_signatures.glProgramUniformMatrix3dv = undefined;
    var glProgramUniformMatrix2dv: *const function_signatures.glProgramUniformMatrix2dv = undefined;
    var glProgramUniformMatrix4fv: *const function_signatures.glProgramUniformMatrix4fv = undefined;
    var glProgramUniformMatrix3fv: *const function_signatures.glProgramUniformMatrix3fv = undefined;
    var glProgramUniformMatrix2fv: *const function_signatures.glProgramUniformMatrix2fv = undefined;
    var glProgramUniform4uiv: *const function_signatures.glProgramUniform4uiv = undefined;
    var glProgramUniform4ui: *const function_signatures.glProgramUniform4ui = undefined;
    var glProgramUniform4dv: *const function_signatures.glProgramUniform4dv = undefined;
    var glProgramUniform4d: *const function_signatures.glProgramUniform4d = undefined;
    var glProgramUniform4fv: *const function_signatures.glProgramUniform4fv = undefined;
    var glProgramUniform4f: *const function_signatures.glProgramUniform4f = undefined;
    var glProgramUniform4iv: *const function_signatures.glProgramUniform4iv = undefined;
    var glProgramUniform4i: *const function_signatures.glProgramUniform4i = undefined;
    var glProgramUniform3uiv: *const function_signatures.glProgramUniform3uiv = undefined;
    var glProgramUniform3ui: *const function_signatures.glProgramUniform3ui = undefined;
    var glProgramUniform3dv: *const function_signatures.glProgramUniform3dv = undefined;
    var glProgramUniform3d: *const function_signatures.glProgramUniform3d = undefined;
    var glProgramUniform3fv: *const function_signatures.glProgramUniform3fv = undefined;
    var glProgramUniform3f: *const function_signatures.glProgramUniform3f = undefined;
    var glProgramUniform3iv: *const function_signatures.glProgramUniform3iv = undefined;
    var glProgramUniform3i: *const function_signatures.glProgramUniform3i = undefined;
    var glUseProgramStages: *const function_signatures.glUseProgramStages = undefined;
    var glProgramParameteri: *const function_signatures.glProgramParameteri = undefined;
    var glGetShaderPrecisionFormat: *const function_signatures.glGetShaderPrecisionFormat = undefined;
    var glShaderBinary: *const function_signatures.glShaderBinary = undefined;
    var glReleaseShaderCompiler: *const function_signatures.glReleaseShaderCompiler = undefined;
    var glGetQueryIndexediv: *const function_signatures.glGetQueryIndexediv = undefined;
    var glEndQueryIndexed: *const function_signatures.glEndQueryIndexed = undefined;
    var glBeginQueryIndexed: *const function_signatures.glBeginQueryIndexed = undefined;
    var glDrawTransformFeedbackStream: *const function_signatures.glDrawTransformFeedbackStream = undefined;
    var glDrawTransformFeedback: *const function_signatures.glDrawTransformFeedback = undefined;
    var glResumeTransformFeedback: *const function_signatures.glResumeTransformFeedback = undefined;
    var glPauseTransformFeedback: *const function_signatures.glPauseTransformFeedback = undefined;
    var glGetProgramStageiv: *const function_signatures.glGetProgramStageiv = undefined;
    var glGetUniformSubroutineuiv: *const function_signatures.glGetUniformSubroutineuiv = undefined;
    var glUniformSubroutinesuiv: *const function_signatures.glUniformSubroutinesuiv = undefined;
    var glGetActiveSubroutineName: *const function_signatures.glGetActiveSubroutineName = undefined;
    var glCullFace: *const function_signatures.glCullFace = undefined;
    var glFrontFace: *const function_signatures.glFrontFace = undefined;
    var glHint: *const function_signatures.glHint = undefined;
    var glLineWidth: *const function_signatures.glLineWidth = undefined;
    var glPointSize: *const function_signatures.glPointSize = undefined;
    var glPolygonMode: *const function_signatures.glPolygonMode = undefined;
    var glScissor: *const function_signatures.glScissor = undefined;
    var glTexParameterf: *const function_signatures.glTexParameterf = undefined;
    var glTexParameterfv: *const function_signatures.glTexParameterfv = undefined;
    var glTexParameteri: *const function_signatures.glTexParameteri = undefined;
    var glTexParameteriv: *const function_signatures.glTexParameteriv = undefined;
    var glTexImage1D: *const function_signatures.glTexImage1D = undefined;
    var glTexImage2D: *const function_signatures.glTexImage2D = undefined;
    var glDrawBuffer: *const function_signatures.glDrawBuffer = undefined;
    var glClear: *const function_signatures.glClear = undefined;
    var glClearColor: *const function_signatures.glClearColor = undefined;
    var glClearStencil: *const function_signatures.glClearStencil = undefined;
    var glClearDepth: *const function_signatures.glClearDepth = undefined;
    var glStencilMask: *const function_signatures.glStencilMask = undefined;
    var glColorMask: *const function_signatures.glColorMask = undefined;
    var glDepthMask: *const function_signatures.glDepthMask = undefined;
    var glDisable: *const function_signatures.glDisable = undefined;
    var glEnable: *const function_signatures.glEnable = undefined;
    var glFinish: *const function_signatures.glFinish = undefined;
    var glFlush: *const function_signatures.glFlush = undefined;
    var glBlendFunc: *const function_signatures.glBlendFunc = undefined;
    var glLogicOp: *const function_signatures.glLogicOp = undefined;
    var glStencilFunc: *const function_signatures.glStencilFunc = undefined;
    var glStencilOp: *const function_signatures.glStencilOp = undefined;
    var glDepthFunc: *const function_signatures.glDepthFunc = undefined;
    var glPixelStoref: *const function_signatures.glPixelStoref = undefined;
    var glPixelStorei: *const function_signatures.glPixelStorei = undefined;
    var glReadBuffer: *const function_signatures.glReadBuffer = undefined;
    var glReadPixels: *const function_signatures.glReadPixels = undefined;
    var glGetBooleanv: *const function_signatures.glGetBooleanv = undefined;
    var glGetDoublev: *const function_signatures.glGetDoublev = undefined;
    var glGetError: *const function_signatures.glGetError = undefined;
    var glGetFloatv: *const function_signatures.glGetFloatv = undefined;
    var glGetIntegerv: *const function_signatures.glGetIntegerv = undefined;
    var glGetString: *const function_signatures.glGetString = undefined;
    var glGetTexImage: *const function_signatures.glGetTexImage = undefined;
    var glGetTexParameterfv: *const function_signatures.glGetTexParameterfv = undefined;
    var glGetTexParameteriv: *const function_signatures.glGetTexParameteriv = undefined;
    var glGetTexLevelParameterfv: *const function_signatures.glGetTexLevelParameterfv = undefined;
    var glGetTexLevelParameteriv: *const function_signatures.glGetTexLevelParameteriv = undefined;
    var glIsEnabled: *const function_signatures.glIsEnabled = undefined;
    var glDepthRange: *const function_signatures.glDepthRange = undefined;
    var glViewport: *const function_signatures.glViewport = undefined;
    var glTexStorage2DMultisample: *const function_signatures.glTexStorage2DMultisample = undefined;
    var glTexBufferRange: *const function_signatures.glTexBufferRange = undefined;
    var glShaderStorageBlockBinding: *const function_signatures.glShaderStorageBlockBinding = undefined;
    var glGetProgramResourceLocationIndex: *const function_signatures.glGetProgramResourceLocationIndex = undefined;
    var glGetProgramResourceLocation: *const function_signatures.glGetProgramResourceLocation = undefined;
    var glGetProgramResourceiv: *const function_signatures.glGetProgramResourceiv = undefined;
    var glGetProgramResourceName: *const function_signatures.glGetProgramResourceName = undefined;
    var glGetProgramResourceIndex: *const function_signatures.glGetProgramResourceIndex = undefined;
    var glGetProgramInterfaceiv: *const function_signatures.glGetProgramInterfaceiv = undefined;
    var glMultiDrawElementsIndirect: *const function_signatures.glMultiDrawElementsIndirect = undefined;
    var glMultiDrawArraysIndirect: *const function_signatures.glMultiDrawArraysIndirect = undefined;
    var glInvalidateSubFramebuffer: *const function_signatures.glInvalidateSubFramebuffer = undefined;
    var glInvalidateFramebuffer: *const function_signatures.glInvalidateFramebuffer = undefined;
    var glInvalidateBufferData: *const function_signatures.glInvalidateBufferData = undefined;
    var glInvalidateBufferSubData: *const function_signatures.glInvalidateBufferSubData = undefined;
    var glInvalidateTexImage: *const function_signatures.glInvalidateTexImage = undefined;
    var glInvalidateTexSubImage: *const function_signatures.glInvalidateTexSubImage = undefined;
    var glGetInternalformati64v: *const function_signatures.glGetInternalformati64v = undefined;
    var glGetFramebufferParameteriv: *const function_signatures.glGetFramebufferParameteriv = undefined;
    var glFramebufferParameteri: *const function_signatures.glFramebufferParameteri = undefined;
    var glCopyImageSubData: *const function_signatures.glCopyImageSubData = undefined;
    var glDispatchComputeIndirect: *const function_signatures.glDispatchComputeIndirect = undefined;
    var glDispatchCompute: *const function_signatures.glDispatchCompute = undefined;
    var glClearBufferSubData: *const function_signatures.glClearBufferSubData = undefined;
    var glClearBufferData: *const function_signatures.glClearBufferData = undefined;
    var glGetProgramPipelineInfoLog: *const function_signatures.glGetProgramPipelineInfoLog = undefined;
    var glProgramUniform2uiv: *const function_signatures.glProgramUniform2uiv = undefined;
    var glProgramUniform2ui: *const function_signatures.glProgramUniform2ui = undefined;
    var glProgramUniform2dv: *const function_signatures.glProgramUniform2dv = undefined;
    var glProgramUniform2d: *const function_signatures.glProgramUniform2d = undefined;
    var glProgramUniform2fv: *const function_signatures.glProgramUniform2fv = undefined;
    var glProgramUniform2f: *const function_signatures.glProgramUniform2f = undefined;
    var glProgramUniform2iv: *const function_signatures.glProgramUniform2iv = undefined;
    var glProgramUniform2i: *const function_signatures.glProgramUniform2i = undefined;
    var glProgramUniform1uiv: *const function_signatures.glProgramUniform1uiv = undefined;
    var glProgramUniform1ui: *const function_signatures.glProgramUniform1ui = undefined;
    var glProgramUniform1dv: *const function_signatures.glProgramUniform1dv = undefined;
    var glProgramUniform1d: *const function_signatures.glProgramUniform1d = undefined;
    var glProgramUniform1fv: *const function_signatures.glProgramUniform1fv = undefined;
    var glProgramUniform1f: *const function_signatures.glProgramUniform1f = undefined;
    var glProgramUniform1iv: *const function_signatures.glProgramUniform1iv = undefined;
    var glProgramUniform1i: *const function_signatures.glProgramUniform1i = undefined;
    var glGetProgramPipelineiv: *const function_signatures.glGetProgramPipelineiv = undefined;
    var glIsProgramPipeline: *const function_signatures.glIsProgramPipeline = undefined;
    var glGenProgramPipelines: *const function_signatures.glGenProgramPipelines = undefined;
    var glDeleteProgramPipelines: *const function_signatures.glDeleteProgramPipelines = undefined;
    var glBindProgramPipeline: *const function_signatures.glBindProgramPipeline = undefined;
    var glCreateShaderProgramv: *const function_signatures.glCreateShaderProgramv = undefined;
    var glActiveShaderProgram: *const function_signatures.glActiveShaderProgram = undefined;
    var glProgramBinary: *const function_signatures.glProgramBinary = undefined;
    var glGetProgramBinary: *const function_signatures.glGetProgramBinary = undefined;
    var glClearDepthf: *const function_signatures.glClearDepthf = undefined;
    var glDepthRangef: *const function_signatures.glDepthRangef = undefined;
    var glIsTransformFeedback: *const function_signatures.glIsTransformFeedback = undefined;
    var glGenTransformFeedbacks: *const function_signatures.glGenTransformFeedbacks = undefined;
    var glDeleteTransformFeedbacks: *const function_signatures.glDeleteTransformFeedbacks = undefined;
    var glBindTransformFeedback: *const function_signatures.glBindTransformFeedback = undefined;
    var glPatchParameterfv: *const function_signatures.glPatchParameterfv = undefined;
    var glPatchParameteri: *const function_signatures.glPatchParameteri = undefined;
    var glDrawArrays: *const function_signatures.glDrawArrays = undefined;
    var glDrawElements: *const function_signatures.glDrawElements = undefined;
    var glPolygonOffset: *const function_signatures.glPolygonOffset = undefined;
    var glCopyTexImage1D: *const function_signatures.glCopyTexImage1D = undefined;
    var glCopyTexImage2D: *const function_signatures.glCopyTexImage2D = undefined;
    var glCopyTexSubImage1D: *const function_signatures.glCopyTexSubImage1D = undefined;
    var glCopyTexSubImage2D: *const function_signatures.glCopyTexSubImage2D = undefined;
    var glTexSubImage1D: *const function_signatures.glTexSubImage1D = undefined;
    var glTexSubImage2D: *const function_signatures.glTexSubImage2D = undefined;
    var glBindTexture: *const function_signatures.glBindTexture = undefined;
    var glDeleteTextures: *const function_signatures.glDeleteTextures = undefined;
    var glGenTextures: *const function_signatures.glGenTextures = undefined;
    var glIsTexture: *const function_signatures.glIsTexture = undefined;
    var glGetActiveSubroutineUniformName: *const function_signatures.glGetActiveSubroutineUniformName = undefined;
    var glGetActiveSubroutineUniformiv: *const function_signatures.glGetActiveSubroutineUniformiv = undefined;
    var glGetSubroutineIndex: *const function_signatures.glGetSubroutineIndex = undefined;
    var glGetSubroutineUniformLocation: *const function_signatures.glGetSubroutineUniformLocation = undefined;
    var glGetUniformdv: *const function_signatures.glGetUniformdv = undefined;
    var glUniformMatrix4x3dv: *const function_signatures.glUniformMatrix4x3dv = undefined;
    var glUniformMatrix4x2dv: *const function_signatures.glUniformMatrix4x2dv = undefined;
    var glUniformMatrix3x4dv: *const function_signatures.glUniformMatrix3x4dv = undefined;
    var glUniformMatrix3x2dv: *const function_signatures.glUniformMatrix3x2dv = undefined;
    var glUniformMatrix2x4dv: *const function_signatures.glUniformMatrix2x4dv = undefined;
    var glUniformMatrix2x3dv: *const function_signatures.glUniformMatrix2x3dv = undefined;
    var glUniformMatrix4dv: *const function_signatures.glUniformMatrix4dv = undefined;
    var glUniformMatrix3dv: *const function_signatures.glUniformMatrix3dv = undefined;
    var glDrawRangeElements: *const function_signatures.glDrawRangeElements = undefined;
    var glTexImage3D: *const function_signatures.glTexImage3D = undefined;
    var glTexSubImage3D: *const function_signatures.glTexSubImage3D = undefined;
    var glCopyTexSubImage3D: *const function_signatures.glCopyTexSubImage3D = undefined;
    var glUniformMatrix2dv: *const function_signatures.glUniformMatrix2dv = undefined;
    var glUniform4dv: *const function_signatures.glUniform4dv = undefined;
    var glUniform3dv: *const function_signatures.glUniform3dv = undefined;
    var glUniform2dv: *const function_signatures.glUniform2dv = undefined;
    var glUniform1dv: *const function_signatures.glUniform1dv = undefined;
    var glUniform4d: *const function_signatures.glUniform4d = undefined;
    var glUniform3d: *const function_signatures.glUniform3d = undefined;
    var glUniform2d: *const function_signatures.glUniform2d = undefined;
    var glUniform1d: *const function_signatures.glUniform1d = undefined;
    var glDrawElementsIndirect: *const function_signatures.glDrawElementsIndirect = undefined;
    var glDrawArraysIndirect: *const function_signatures.glDrawArraysIndirect = undefined;
    var glBlendFuncSeparatei: *const function_signatures.glBlendFuncSeparatei = undefined;
    var glBlendFunci: *const function_signatures.glBlendFunci = undefined;
    var glBlendEquationSeparatei: *const function_signatures.glBlendEquationSeparatei = undefined;
    var glBlendEquationi: *const function_signatures.glBlendEquationi = undefined;
    var glMinSampleShading: *const function_signatures.glMinSampleShading = undefined;
    var glActiveTexture: *const function_signatures.glActiveTexture = undefined;
    var glSampleCoverage: *const function_signatures.glSampleCoverage = undefined;
    var glCompressedTexImage3D: *const function_signatures.glCompressedTexImage3D = undefined;
    var glCompressedTexImage2D: *const function_signatures.glCompressedTexImage2D = undefined;
    var glCompressedTexImage1D: *const function_signatures.glCompressedTexImage1D = undefined;
    var glCompressedTexSubImage3D: *const function_signatures.glCompressedTexSubImage3D = undefined;
    var glCompressedTexSubImage2D: *const function_signatures.glCompressedTexSubImage2D = undefined;
    var glCompressedTexSubImage1D: *const function_signatures.glCompressedTexSubImage1D = undefined;
    var glGetCompressedTexImage: *const function_signatures.glGetCompressedTexImage = undefined;
    var glVertexAttribP4uiv: *const function_signatures.glVertexAttribP4uiv = undefined;
    var glVertexAttribP4ui: *const function_signatures.glVertexAttribP4ui = undefined;
    var glVertexAttribP3uiv: *const function_signatures.glVertexAttribP3uiv = undefined;
    var glVertexAttribP3ui: *const function_signatures.glVertexAttribP3ui = undefined;
    var glVertexAttribP2uiv: *const function_signatures.glVertexAttribP2uiv = undefined;
    var glVertexAttribP2ui: *const function_signatures.glVertexAttribP2ui = undefined;
    var glVertexAttribP1uiv: *const function_signatures.glVertexAttribP1uiv = undefined;
    var glVertexAttribP1ui: *const function_signatures.glVertexAttribP1ui = undefined;
    var glVertexAttribDivisor: *const function_signatures.glVertexAttribDivisor = undefined;
    var glGetQueryObjectui64v: *const function_signatures.glGetQueryObjectui64v = undefined;
    var glGetQueryObjecti64v: *const function_signatures.glGetQueryObjecti64v = undefined;
    var glQueryCounter: *const function_signatures.glQueryCounter = undefined;
    var glGetSamplerParameterIuiv: *const function_signatures.glGetSamplerParameterIuiv = undefined;
    var glGetSamplerParameterfv: *const function_signatures.glGetSamplerParameterfv = undefined;
    var glGetSamplerParameterIiv: *const function_signatures.glGetSamplerParameterIiv = undefined;
    var glGetSamplerParameteriv: *const function_signatures.glGetSamplerParameteriv = undefined;
    var glSamplerParameterIuiv: *const function_signatures.glSamplerParameterIuiv = undefined;
    var glSamplerParameterIiv: *const function_signatures.glSamplerParameterIiv = undefined;
    var glSamplerParameterfv: *const function_signatures.glSamplerParameterfv = undefined;
    var glSamplerParameterf: *const function_signatures.glSamplerParameterf = undefined;
    var glSamplerParameteriv: *const function_signatures.glSamplerParameteriv = undefined;
    var glSamplerParameteri: *const function_signatures.glSamplerParameteri = undefined;
    var glBindSampler: *const function_signatures.glBindSampler = undefined;
    var glIsSampler: *const function_signatures.glIsSampler = undefined;
    var glDeleteSamplers: *const function_signatures.glDeleteSamplers = undefined;
    var glGenSamplers: *const function_signatures.glGenSamplers = undefined;
    var glGetFragDataIndex: *const function_signatures.glGetFragDataIndex = undefined;
    var glBindFragDataLocationIndexed: *const function_signatures.glBindFragDataLocationIndexed = undefined;
    var glSampleMaski: *const function_signatures.glSampleMaski = undefined;
    var glGetMultisamplefv: *const function_signatures.glGetMultisamplefv = undefined;
    var glTexImage3DMultisample: *const function_signatures.glTexImage3DMultisample = undefined;
    var glTexImage2DMultisample: *const function_signatures.glTexImage2DMultisample = undefined;
    var glFramebufferTexture: *const function_signatures.glFramebufferTexture = undefined;
    var glGetBufferParameteri64v: *const function_signatures.glGetBufferParameteri64v = undefined;
    var glBlendFuncSeparate: *const function_signatures.glBlendFuncSeparate = undefined;
    var glMultiDrawArrays: *const function_signatures.glMultiDrawArrays = undefined;
    var glMultiDrawElements: *const function_signatures.glMultiDrawElements = undefined;
    var glPointParameterf: *const function_signatures.glPointParameterf = undefined;
    var glPointParameterfv: *const function_signatures.glPointParameterfv = undefined;
    var glPointParameteri: *const function_signatures.glPointParameteri = undefined;
    var glPointParameteriv: *const function_signatures.glPointParameteriv = undefined;
    var glGetInteger64i_v: *const function_signatures.glGetInteger64i_v = undefined;
    var glGetSynciv: *const function_signatures.glGetSynciv = undefined;
    var glGetInteger64v: *const function_signatures.glGetInteger64v = undefined;
    var glWaitSync: *const function_signatures.glWaitSync = undefined;
    var glClientWaitSync: *const function_signatures.glClientWaitSync = undefined;
    var glDeleteSync: *const function_signatures.glDeleteSync = undefined;
    var glIsSync: *const function_signatures.glIsSync = undefined;
    var glFenceSync: *const function_signatures.glFenceSync = undefined;
    var glBlendColor: *const function_signatures.glBlendColor = undefined;
    var glBlendEquation: *const function_signatures.glBlendEquation = undefined;
    var glProvokingVertex: *const function_signatures.glProvokingVertex = undefined;
    var glMultiDrawElementsBaseVertex: *const function_signatures.glMultiDrawElementsBaseVertex = undefined;
    var glDrawElementsInstancedBaseVertex: *const function_signatures.glDrawElementsInstancedBaseVertex = undefined;
    var glDrawRangeElementsBaseVertex: *const function_signatures.glDrawRangeElementsBaseVertex = undefined;
    var glDrawElementsBaseVertex: *const function_signatures.glDrawElementsBaseVertex = undefined;
    var glGenQueries: *const function_signatures.glGenQueries = undefined;
    var glDeleteQueries: *const function_signatures.glDeleteQueries = undefined;
    var glIsQuery: *const function_signatures.glIsQuery = undefined;
    var glBeginQuery: *const function_signatures.glBeginQuery = undefined;
    var glEndQuery: *const function_signatures.glEndQuery = undefined;
    var glGetQueryiv: *const function_signatures.glGetQueryiv = undefined;
    var glGetQueryObjectiv: *const function_signatures.glGetQueryObjectiv = undefined;
    var glGetQueryObjectuiv: *const function_signatures.glGetQueryObjectuiv = undefined;
    var glBindBuffer: *const function_signatures.glBindBuffer = undefined;
    var glDeleteBuffers: *const function_signatures.glDeleteBuffers = undefined;
    var glGenBuffers: *const function_signatures.glGenBuffers = undefined;
    var glIsBuffer: *const function_signatures.glIsBuffer = undefined;
    var glBufferData: *const function_signatures.glBufferData = undefined;
    var glBufferSubData: *const function_signatures.glBufferSubData = undefined;
    var glGetBufferSubData: *const function_signatures.glGetBufferSubData = undefined;
    var glMapBuffer: *const function_signatures.glMapBuffer = undefined;
    var glUnmapBuffer: *const function_signatures.glUnmapBuffer = undefined;
    var glGetBufferParameteriv: *const function_signatures.glGetBufferParameteriv = undefined;
    var glGetBufferPointerv: *const function_signatures.glGetBufferPointerv = undefined;
    var glBlendEquationSeparate: *const function_signatures.glBlendEquationSeparate = undefined;
    var glDrawBuffers: *const function_signatures.glDrawBuffers = undefined;
    var glStencilOpSeparate: *const function_signatures.glStencilOpSeparate = undefined;
    var glStencilFuncSeparate: *const function_signatures.glStencilFuncSeparate = undefined;
    var glStencilMaskSeparate: *const function_signatures.glStencilMaskSeparate = undefined;
    var glAttachShader: *const function_signatures.glAttachShader = undefined;
    var glBindAttribLocation: *const function_signatures.glBindAttribLocation = undefined;
    var glCompileShader: *const function_signatures.glCompileShader = undefined;
    var glCreateProgram: *const function_signatures.glCreateProgram = undefined;
    var glCreateShader: *const function_signatures.glCreateShader = undefined;
    var glDeleteProgram: *const function_signatures.glDeleteProgram = undefined;
    var glDeleteShader: *const function_signatures.glDeleteShader = undefined;
    var glDetachShader: *const function_signatures.glDetachShader = undefined;
    var glDisableVertexAttribArray: *const function_signatures.glDisableVertexAttribArray = undefined;
    var glEnableVertexAttribArray: *const function_signatures.glEnableVertexAttribArray = undefined;
    var glGetActiveAttrib: *const function_signatures.glGetActiveAttrib = undefined;
    var glGetActiveUniform: *const function_signatures.glGetActiveUniform = undefined;
    var glGetAttachedShaders: *const function_signatures.glGetAttachedShaders = undefined;
    var glGetAttribLocation: *const function_signatures.glGetAttribLocation = undefined;
    var glGetProgramiv: *const function_signatures.glGetProgramiv = undefined;
    var glGetProgramInfoLog: *const function_signatures.glGetProgramInfoLog = undefined;
    var glGetShaderiv: *const function_signatures.glGetShaderiv = undefined;
    var glGetShaderInfoLog: *const function_signatures.glGetShaderInfoLog = undefined;
    var glGetShaderSource: *const function_signatures.glGetShaderSource = undefined;
    var glGetUniformLocation: *const function_signatures.glGetUniformLocation = undefined;
    var glGetUniformfv: *const function_signatures.glGetUniformfv = undefined;
    var glGetUniformiv: *const function_signatures.glGetUniformiv = undefined;
    var glGetVertexAttribdv: *const function_signatures.glGetVertexAttribdv = undefined;
    var glGetVertexAttribfv: *const function_signatures.glGetVertexAttribfv = undefined;
    var glGetVertexAttribiv: *const function_signatures.glGetVertexAttribiv = undefined;
    var glGetVertexAttribPointerv: *const function_signatures.glGetVertexAttribPointerv = undefined;
    var glIsProgram: *const function_signatures.glIsProgram = undefined;
    var glIsShader: *const function_signatures.glIsShader = undefined;
    var glLinkProgram: *const function_signatures.glLinkProgram = undefined;
    var glShaderSource: *const function_signatures.glShaderSource = undefined;
    var glUseProgram: *const function_signatures.glUseProgram = undefined;
    var glUniform1f: *const function_signatures.glUniform1f = undefined;
    var glUniform2f: *const function_signatures.glUniform2f = undefined;
    var glUniform3f: *const function_signatures.glUniform3f = undefined;
    var glUniform4f: *const function_signatures.glUniform4f = undefined;
    var glUniform1i: *const function_signatures.glUniform1i = undefined;
    var glUniform2i: *const function_signatures.glUniform2i = undefined;
    var glUniform3i: *const function_signatures.glUniform3i = undefined;
    var glUniform4i: *const function_signatures.glUniform4i = undefined;
    var glUniform1fv: *const function_signatures.glUniform1fv = undefined;
    var glUniform2fv: *const function_signatures.glUniform2fv = undefined;
    var glUniform3fv: *const function_signatures.glUniform3fv = undefined;
    var glUniform4fv: *const function_signatures.glUniform4fv = undefined;
    var glUniform1iv: *const function_signatures.glUniform1iv = undefined;
    var glUniform2iv: *const function_signatures.glUniform2iv = undefined;
    var glUniform3iv: *const function_signatures.glUniform3iv = undefined;
    var glUniform4iv: *const function_signatures.glUniform4iv = undefined;
    var glUniformMatrix2fv: *const function_signatures.glUniformMatrix2fv = undefined;
    var glUniformMatrix3fv: *const function_signatures.glUniformMatrix3fv = undefined;
    var glUniformMatrix4fv: *const function_signatures.glUniformMatrix4fv = undefined;
    var glValidateProgram: *const function_signatures.glValidateProgram = undefined;
    var glVertexAttrib1d: *const function_signatures.glVertexAttrib1d = undefined;
    var glVertexAttrib1dv: *const function_signatures.glVertexAttrib1dv = undefined;
    var glVertexAttrib1f: *const function_signatures.glVertexAttrib1f = undefined;
    var glVertexAttrib1fv: *const function_signatures.glVertexAttrib1fv = undefined;
    var glVertexAttrib1s: *const function_signatures.glVertexAttrib1s = undefined;
    var glVertexAttrib1sv: *const function_signatures.glVertexAttrib1sv = undefined;
    var glVertexAttrib2d: *const function_signatures.glVertexAttrib2d = undefined;
    var glVertexAttrib2dv: *const function_signatures.glVertexAttrib2dv = undefined;
    var glVertexAttrib2f: *const function_signatures.glVertexAttrib2f = undefined;
    var glVertexAttrib2fv: *const function_signatures.glVertexAttrib2fv = undefined;
    var glVertexAttrib2s: *const function_signatures.glVertexAttrib2s = undefined;
    var glVertexAttrib2sv: *const function_signatures.glVertexAttrib2sv = undefined;
    var glVertexAttrib3d: *const function_signatures.glVertexAttrib3d = undefined;
    var glVertexAttrib3dv: *const function_signatures.glVertexAttrib3dv = undefined;
    var glVertexAttrib3f: *const function_signatures.glVertexAttrib3f = undefined;
    var glVertexAttrib3fv: *const function_signatures.glVertexAttrib3fv = undefined;
    var glVertexAttrib3s: *const function_signatures.glVertexAttrib3s = undefined;
    var glVertexAttrib3sv: *const function_signatures.glVertexAttrib3sv = undefined;
    var glVertexAttrib4Nbv: *const function_signatures.glVertexAttrib4Nbv = undefined;
    var glVertexAttrib4Niv: *const function_signatures.glVertexAttrib4Niv = undefined;
    var glVertexAttrib4Nsv: *const function_signatures.glVertexAttrib4Nsv = undefined;
    var glVertexAttrib4Nub: *const function_signatures.glVertexAttrib4Nub = undefined;
    var glVertexAttrib4Nubv: *const function_signatures.glVertexAttrib4Nubv = undefined;
    var glVertexAttrib4Nuiv: *const function_signatures.glVertexAttrib4Nuiv = undefined;
    var glVertexAttrib4Nusv: *const function_signatures.glVertexAttrib4Nusv = undefined;
    var glVertexAttrib4bv: *const function_signatures.glVertexAttrib4bv = undefined;
    var glVertexAttrib4d: *const function_signatures.glVertexAttrib4d = undefined;
    var glVertexAttrib4dv: *const function_signatures.glVertexAttrib4dv = undefined;
    var glVertexAttrib4f: *const function_signatures.glVertexAttrib4f = undefined;
    var glVertexAttrib4fv: *const function_signatures.glVertexAttrib4fv = undefined;
    var glVertexAttrib4iv: *const function_signatures.glVertexAttrib4iv = undefined;
    var glVertexAttrib4s: *const function_signatures.glVertexAttrib4s = undefined;
    var glVertexAttrib4sv: *const function_signatures.glVertexAttrib4sv = undefined;
    var glVertexAttrib4ubv: *const function_signatures.glVertexAttrib4ubv = undefined;
    var glVertexAttrib4uiv: *const function_signatures.glVertexAttrib4uiv = undefined;
    var glVertexAttrib4usv: *const function_signatures.glVertexAttrib4usv = undefined;
    var glVertexAttribPointer: *const function_signatures.glVertexAttribPointer = undefined;
    var glUniformMatrix2x3fv: *const function_signatures.glUniformMatrix2x3fv = undefined;
    var glUniformMatrix3x2fv: *const function_signatures.glUniformMatrix3x2fv = undefined;
    var glUniformMatrix2x4fv: *const function_signatures.glUniformMatrix2x4fv = undefined;
    var glUniformMatrix4x2fv: *const function_signatures.glUniformMatrix4x2fv = undefined;
    var glUniformMatrix3x4fv: *const function_signatures.glUniformMatrix3x4fv = undefined;
    var glUniformMatrix4x3fv: *const function_signatures.glUniformMatrix4x3fv = undefined;
    var glColorMaski: *const function_signatures.glColorMaski = undefined;
    var glGetBooleani_v: *const function_signatures.glGetBooleani_v = undefined;
    var glGetIntegeri_v: *const function_signatures.glGetIntegeri_v = undefined;
    var glEnablei: *const function_signatures.glEnablei = undefined;
    var glDisablei: *const function_signatures.glDisablei = undefined;
    var glIsEnabledi: *const function_signatures.glIsEnabledi = undefined;
    var glBeginTransformFeedback: *const function_signatures.glBeginTransformFeedback = undefined;
    var glEndTransformFeedback: *const function_signatures.glEndTransformFeedback = undefined;
    var glBindBufferRange: *const function_signatures.glBindBufferRange = undefined;
    var glBindBufferBase: *const function_signatures.glBindBufferBase = undefined;
    var glTransformFeedbackVaryings: *const function_signatures.glTransformFeedbackVaryings = undefined;
    var glGetTransformFeedbackVarying: *const function_signatures.glGetTransformFeedbackVarying = undefined;
    var glClampColor: *const function_signatures.glClampColor = undefined;
    var glBeginConditionalRender: *const function_signatures.glBeginConditionalRender = undefined;
    var glEndConditionalRender: *const function_signatures.glEndConditionalRender = undefined;
    var glVertexAttribIPointer: *const function_signatures.glVertexAttribIPointer = undefined;
    var glGetVertexAttribIiv: *const function_signatures.glGetVertexAttribIiv = undefined;
    var glGetVertexAttribIuiv: *const function_signatures.glGetVertexAttribIuiv = undefined;
    var glVertexAttribI1i: *const function_signatures.glVertexAttribI1i = undefined;
    var glVertexAttribI2i: *const function_signatures.glVertexAttribI2i = undefined;
    var glVertexAttribI3i: *const function_signatures.glVertexAttribI3i = undefined;
    var glVertexAttribI4i: *const function_signatures.glVertexAttribI4i = undefined;
    var glVertexAttribI1ui: *const function_signatures.glVertexAttribI1ui = undefined;
    var glVertexAttribI2ui: *const function_signatures.glVertexAttribI2ui = undefined;
    var glVertexAttribI3ui: *const function_signatures.glVertexAttribI3ui = undefined;
    var glVertexAttribI4ui: *const function_signatures.glVertexAttribI4ui = undefined;
    var glVertexAttribI1iv: *const function_signatures.glVertexAttribI1iv = undefined;
    var glVertexAttribI2iv: *const function_signatures.glVertexAttribI2iv = undefined;
    var glVertexAttribI3iv: *const function_signatures.glVertexAttribI3iv = undefined;
    var glVertexAttribI4iv: *const function_signatures.glVertexAttribI4iv = undefined;
    var glVertexAttribI1uiv: *const function_signatures.glVertexAttribI1uiv = undefined;
    var glVertexAttribI2uiv: *const function_signatures.glVertexAttribI2uiv = undefined;
    var glVertexAttribI3uiv: *const function_signatures.glVertexAttribI3uiv = undefined;
    var glVertexAttribI4uiv: *const function_signatures.glVertexAttribI4uiv = undefined;
    var glVertexAttribI4bv: *const function_signatures.glVertexAttribI4bv = undefined;
    var glVertexAttribI4sv: *const function_signatures.glVertexAttribI4sv = undefined;
    var glVertexAttribI4ubv: *const function_signatures.glVertexAttribI4ubv = undefined;
    var glVertexAttribI4usv: *const function_signatures.glVertexAttribI4usv = undefined;
    var glGetUniformuiv: *const function_signatures.glGetUniformuiv = undefined;
    var glBindFragDataLocation: *const function_signatures.glBindFragDataLocation = undefined;
    var glGetFragDataLocation: *const function_signatures.glGetFragDataLocation = undefined;
    var glUniform1ui: *const function_signatures.glUniform1ui = undefined;
    var glUniform2ui: *const function_signatures.glUniform2ui = undefined;
    var glUniform3ui: *const function_signatures.glUniform3ui = undefined;
    var glUniform4ui: *const function_signatures.glUniform4ui = undefined;
    var glUniform1uiv: *const function_signatures.glUniform1uiv = undefined;
    var glUniform2uiv: *const function_signatures.glUniform2uiv = undefined;
    var glUniform3uiv: *const function_signatures.glUniform3uiv = undefined;
    var glUniform4uiv: *const function_signatures.glUniform4uiv = undefined;
    var glTexParameterIiv: *const function_signatures.glTexParameterIiv = undefined;
    var glTexParameterIuiv: *const function_signatures.glTexParameterIuiv = undefined;
    var glGetTexParameterIiv: *const function_signatures.glGetTexParameterIiv = undefined;
    var glGetTexParameterIuiv: *const function_signatures.glGetTexParameterIuiv = undefined;
    var glClearBufferiv: *const function_signatures.glClearBufferiv = undefined;
    var glClearBufferuiv: *const function_signatures.glClearBufferuiv = undefined;
    var glClearBufferfv: *const function_signatures.glClearBufferfv = undefined;
    var glClearBufferfi: *const function_signatures.glClearBufferfi = undefined;
    var glGetStringi: *const function_signatures.glGetStringi = undefined;
    var glIsRenderbuffer: *const function_signatures.glIsRenderbuffer = undefined;
    var glBindRenderbuffer: *const function_signatures.glBindRenderbuffer = undefined;
    var glDeleteRenderbuffers: *const function_signatures.glDeleteRenderbuffers = undefined;
    var glGenRenderbuffers: *const function_signatures.glGenRenderbuffers = undefined;
    var glRenderbufferStorage: *const function_signatures.glRenderbufferStorage = undefined;
    var glGetRenderbufferParameteriv: *const function_signatures.glGetRenderbufferParameteriv = undefined;
    var glIsFramebuffer: *const function_signatures.glIsFramebuffer = undefined;
    var glBindFramebuffer: *const function_signatures.glBindFramebuffer = undefined;
    var glDeleteFramebuffers: *const function_signatures.glDeleteFramebuffers = undefined;
    var glGenFramebuffers: *const function_signatures.glGenFramebuffers = undefined;
    var glCheckFramebufferStatus: *const function_signatures.glCheckFramebufferStatus = undefined;
    var glFramebufferTexture1D: *const function_signatures.glFramebufferTexture1D = undefined;
    var glFramebufferTexture2D: *const function_signatures.glFramebufferTexture2D = undefined;
    var glFramebufferTexture3D: *const function_signatures.glFramebufferTexture3D = undefined;
    var glFramebufferRenderbuffer: *const function_signatures.glFramebufferRenderbuffer = undefined;
    var glGetFramebufferAttachmentParameteriv: *const function_signatures.glGetFramebufferAttachmentParameteriv = undefined;
    var glGenerateMipmap: *const function_signatures.glGenerateMipmap = undefined;
    var glBlitFramebuffer: *const function_signatures.glBlitFramebuffer = undefined;
    var glRenderbufferStorageMultisample: *const function_signatures.glRenderbufferStorageMultisample = undefined;
    var glFramebufferTextureLayer: *const function_signatures.glFramebufferTextureLayer = undefined;
    var glMapBufferRange: *const function_signatures.glMapBufferRange = undefined;
    var glFlushMappedBufferRange: *const function_signatures.glFlushMappedBufferRange = undefined;
    var glBindVertexArray: *const function_signatures.glBindVertexArray = undefined;
    var glDeleteVertexArrays: *const function_signatures.glDeleteVertexArrays = undefined;
    var glGenVertexArrays: *const function_signatures.glGenVertexArrays = undefined;
    var glIsVertexArray: *const function_signatures.glIsVertexArray = undefined;
    var glDrawArraysInstanced: *const function_signatures.glDrawArraysInstanced = undefined;
    var glDrawElementsInstanced: *const function_signatures.glDrawElementsInstanced = undefined;
    var glTexBuffer: *const function_signatures.glTexBuffer = undefined;
    var glPrimitiveRestartIndex: *const function_signatures.glPrimitiveRestartIndex = undefined;
    var glCopyBufferSubData: *const function_signatures.glCopyBufferSubData = undefined;
    var glGetUniformIndices: *const function_signatures.glGetUniformIndices = undefined;
    var glGetActiveUniformsiv: *const function_signatures.glGetActiveUniformsiv = undefined;
    var glGetActiveUniformName: *const function_signatures.glGetActiveUniformName = undefined;
    var glGetUniformBlockIndex: *const function_signatures.glGetUniformBlockIndex = undefined;
    var glGetActiveUniformBlockiv: *const function_signatures.glGetActiveUniformBlockiv = undefined;
    var glGetActiveUniformBlockName: *const function_signatures.glGetActiveUniformBlockName = undefined;
    var glUniformBlockBinding: *const function_signatures.glUniformBlockBinding = undefined;
    var glTexStorage3DMultisample: *const function_signatures.glTexStorage3DMultisample = undefined;
    var glTextureView: *const function_signatures.glTextureView = undefined;
    var glBindVertexBuffer: *const function_signatures.glBindVertexBuffer = undefined;
    var glVertexAttribFormat: *const function_signatures.glVertexAttribFormat = undefined;
    var glVertexAttribIFormat: *const function_signatures.glVertexAttribIFormat = undefined;
    var glVertexAttribLFormat: *const function_signatures.glVertexAttribLFormat = undefined;
    var glVertexAttribBinding: *const function_signatures.glVertexAttribBinding = undefined;
    var glVertexBindingDivisor: *const function_signatures.glVertexBindingDivisor = undefined;
    var glDebugMessageControl: *const function_signatures.glDebugMessageControl = undefined;
    var glDebugMessageInsert: *const function_signatures.glDebugMessageInsert = undefined;
    var glDebugMessageCallback: *const function_signatures.glDebugMessageCallback = undefined;
    var glGetDebugMessageLog: *const function_signatures.glGetDebugMessageLog = undefined;
    var glPushDebugGroup: *const function_signatures.glPushDebugGroup = undefined;
    var glPopDebugGroup: *const function_signatures.glPopDebugGroup = undefined;
    var glObjectLabel: *const function_signatures.glObjectLabel = undefined;
    var glGetObjectLabel: *const function_signatures.glGetObjectLabel = undefined;
    var glObjectPtrLabel: *const function_signatures.glObjectPtrLabel = undefined;
    var glGetObjectPtrLabel: *const function_signatures.glGetObjectPtrLabel = undefined;
    var glGetPointerv: *const function_signatures.glGetPointerv = undefined;
    var glBufferStorage: *const function_signatures.glBufferStorage = undefined;
    var glClearTexImage: *const function_signatures.glClearTexImage = undefined;
    var glClearTexSubImage: *const function_signatures.glClearTexSubImage = undefined;
    var glBindBuffersBase: *const function_signatures.glBindBuffersBase = undefined;
    var glBindBuffersRange: *const function_signatures.glBindBuffersRange = undefined;
    var glBindTextures: *const function_signatures.glBindTextures = undefined;
    var glBindSamplers: *const function_signatures.glBindSamplers = undefined;
    var glBindImageTextures: *const function_signatures.glBindImageTextures = undefined;
    var glBindVertexBuffers: *const function_signatures.glBindVertexBuffers = undefined;
    var glClipControl: *const function_signatures.glClipControl = undefined;
    var glCreateTransformFeedbacks: *const function_signatures.glCreateTransformFeedbacks = undefined;
    var glTransformFeedbackBufferBase: *const function_signatures.glTransformFeedbackBufferBase = undefined;
    var glTransformFeedbackBufferRange: *const function_signatures.glTransformFeedbackBufferRange = undefined;
    var glGetTransformFeedbackiv: *const function_signatures.glGetTransformFeedbackiv = undefined;
    var glGetTransformFeedbacki_v: *const function_signatures.glGetTransformFeedbacki_v = undefined;
    var glGetTransformFeedbacki64_v: *const function_signatures.glGetTransformFeedbacki64_v = undefined;
    var glCreateBuffers: *const function_signatures.glCreateBuffers = undefined;
    var glNamedBufferStorage: *const function_signatures.glNamedBufferStorage = undefined;
    var glNamedBufferData: *const function_signatures.glNamedBufferData = undefined;
    var glNamedBufferSubData: *const function_signatures.glNamedBufferSubData = undefined;
    var glCopyNamedBufferSubData: *const function_signatures.glCopyNamedBufferSubData = undefined;
    var glClearNamedBufferData: *const function_signatures.glClearNamedBufferData = undefined;
    var glClearNamedBufferSubData: *const function_signatures.glClearNamedBufferSubData = undefined;
    var glMapNamedBuffer: *const function_signatures.glMapNamedBuffer = undefined;
    var glMapNamedBufferRange: *const function_signatures.glMapNamedBufferRange = undefined;
    var glUnmapNamedBuffer: *const function_signatures.glUnmapNamedBuffer = undefined;
    var glFlushMappedNamedBufferRange: *const function_signatures.glFlushMappedNamedBufferRange = undefined;
    var glGetNamedBufferParameteriv: *const function_signatures.glGetNamedBufferParameteriv = undefined;
    var glGetNamedBufferParameteri64v: *const function_signatures.glGetNamedBufferParameteri64v = undefined;
    var glGetNamedBufferPointerv: *const function_signatures.glGetNamedBufferPointerv = undefined;
    var glGetNamedBufferSubData: *const function_signatures.glGetNamedBufferSubData = undefined;
    var glCreateFramebuffers: *const function_signatures.glCreateFramebuffers = undefined;
    var glNamedFramebufferRenderbuffer: *const function_signatures.glNamedFramebufferRenderbuffer = undefined;
    var glNamedFramebufferParameteri: *const function_signatures.glNamedFramebufferParameteri = undefined;
    var glNamedFramebufferTexture: *const function_signatures.glNamedFramebufferTexture = undefined;
    var glNamedFramebufferTextureLayer: *const function_signatures.glNamedFramebufferTextureLayer = undefined;
    var glNamedFramebufferDrawBuffer: *const function_signatures.glNamedFramebufferDrawBuffer = undefined;
    var glNamedFramebufferDrawBuffers: *const function_signatures.glNamedFramebufferDrawBuffers = undefined;
    var glNamedFramebufferReadBuffer: *const function_signatures.glNamedFramebufferReadBuffer = undefined;
    var glInvalidateNamedFramebufferData: *const function_signatures.glInvalidateNamedFramebufferData = undefined;
    var glInvalidateNamedFramebufferSubData: *const function_signatures.glInvalidateNamedFramebufferSubData = undefined;
    var glClearNamedFramebufferiv: *const function_signatures.glClearNamedFramebufferiv = undefined;
    var glClearNamedFramebufferuiv: *const function_signatures.glClearNamedFramebufferuiv = undefined;
    var glClearNamedFramebufferfv: *const function_signatures.glClearNamedFramebufferfv = undefined;
    var glClearNamedFramebufferfi: *const function_signatures.glClearNamedFramebufferfi = undefined;
    var glBlitNamedFramebuffer: *const function_signatures.glBlitNamedFramebuffer = undefined;
    var glCheckNamedFramebufferStatus: *const function_signatures.glCheckNamedFramebufferStatus = undefined;
    var glGetNamedFramebufferParameteriv: *const function_signatures.glGetNamedFramebufferParameteriv = undefined;
    var glGetNamedFramebufferAttachmentParameteriv: *const function_signatures.glGetNamedFramebufferAttachmentParameteriv = undefined;
    var glCreateRenderbuffers: *const function_signatures.glCreateRenderbuffers = undefined;
    var glNamedRenderbufferStorage: *const function_signatures.glNamedRenderbufferStorage = undefined;
    var glNamedRenderbufferStorageMultisample: *const function_signatures.glNamedRenderbufferStorageMultisample = undefined;
    var glGetNamedRenderbufferParameteriv: *const function_signatures.glGetNamedRenderbufferParameteriv = undefined;
    var glCreateTextures: *const function_signatures.glCreateTextures = undefined;
    var glTextureBuffer: *const function_signatures.glTextureBuffer = undefined;
    var glTextureBufferRange: *const function_signatures.glTextureBufferRange = undefined;
    var glTextureStorage1D: *const function_signatures.glTextureStorage1D = undefined;
    var glTextureStorage2D: *const function_signatures.glTextureStorage2D = undefined;
    var glTextureStorage3D: *const function_signatures.glTextureStorage3D = undefined;
    var glTextureStorage2DMultisample: *const function_signatures.glTextureStorage2DMultisample = undefined;
    var glTextureStorage3DMultisample: *const function_signatures.glTextureStorage3DMultisample = undefined;
    var glTextureSubImage1D: *const function_signatures.glTextureSubImage1D = undefined;
    var glTextureSubImage2D: *const function_signatures.glTextureSubImage2D = undefined;
    var glTextureSubImage3D: *const function_signatures.glTextureSubImage3D = undefined;
    var glCompressedTextureSubImage1D: *const function_signatures.glCompressedTextureSubImage1D = undefined;
    var glCompressedTextureSubImage2D: *const function_signatures.glCompressedTextureSubImage2D = undefined;
    var glCompressedTextureSubImage3D: *const function_signatures.glCompressedTextureSubImage3D = undefined;
    var glCopyTextureSubImage1D: *const function_signatures.glCopyTextureSubImage1D = undefined;
    var glCopyTextureSubImage2D: *const function_signatures.glCopyTextureSubImage2D = undefined;
    var glCopyTextureSubImage3D: *const function_signatures.glCopyTextureSubImage3D = undefined;
    var glTextureParameterf: *const function_signatures.glTextureParameterf = undefined;
    var glTextureParameterfv: *const function_signatures.glTextureParameterfv = undefined;
    var glTextureParameteri: *const function_signatures.glTextureParameteri = undefined;
    var glTextureParameterIiv: *const function_signatures.glTextureParameterIiv = undefined;
    var glTextureParameterIuiv: *const function_signatures.glTextureParameterIuiv = undefined;
    var glTextureParameteriv: *const function_signatures.glTextureParameteriv = undefined;
    var glGenerateTextureMipmap: *const function_signatures.glGenerateTextureMipmap = undefined;
    var glBindTextureUnit: *const function_signatures.glBindTextureUnit = undefined;
    var glGetTextureImage: *const function_signatures.glGetTextureImage = undefined;
    var glGetCompressedTextureImage: *const function_signatures.glGetCompressedTextureImage = undefined;
    var glGetTextureLevelParameterfv: *const function_signatures.glGetTextureLevelParameterfv = undefined;
    var glGetTextureLevelParameteriv: *const function_signatures.glGetTextureLevelParameteriv = undefined;
    var glGetTextureParameterfv: *const function_signatures.glGetTextureParameterfv = undefined;
    var glGetTextureParameterIiv: *const function_signatures.glGetTextureParameterIiv = undefined;
    var glGetTextureParameterIuiv: *const function_signatures.glGetTextureParameterIuiv = undefined;
    var glGetTextureParameteriv: *const function_signatures.glGetTextureParameteriv = undefined;
    var glCreateVertexArrays: *const function_signatures.glCreateVertexArrays = undefined;
    var glDisableVertexArrayAttrib: *const function_signatures.glDisableVertexArrayAttrib = undefined;
    var glEnableVertexArrayAttrib: *const function_signatures.glEnableVertexArrayAttrib = undefined;
    var glVertexArrayElementBuffer: *const function_signatures.glVertexArrayElementBuffer = undefined;
    var glVertexArrayVertexBuffer: *const function_signatures.glVertexArrayVertexBuffer = undefined;
    var glVertexArrayVertexBuffers: *const function_signatures.glVertexArrayVertexBuffers = undefined;
    var glVertexArrayAttribBinding: *const function_signatures.glVertexArrayAttribBinding = undefined;
    var glVertexArrayAttribFormat: *const function_signatures.glVertexArrayAttribFormat = undefined;
    var glVertexArrayAttribIFormat: *const function_signatures.glVertexArrayAttribIFormat = undefined;
    var glVertexArrayAttribLFormat: *const function_signatures.glVertexArrayAttribLFormat = undefined;
    var glVertexArrayBindingDivisor: *const function_signatures.glVertexArrayBindingDivisor = undefined;
    var glGetVertexArrayiv: *const function_signatures.glGetVertexArrayiv = undefined;
    var glGetVertexArrayIndexediv: *const function_signatures.glGetVertexArrayIndexediv = undefined;
    var glGetVertexArrayIndexed64iv: *const function_signatures.glGetVertexArrayIndexed64iv = undefined;
    var glCreateSamplers: *const function_signatures.glCreateSamplers = undefined;
    var glCreateProgramPipelines: *const function_signatures.glCreateProgramPipelines = undefined;
    var glCreateQueries: *const function_signatures.glCreateQueries = undefined;
    var glGetQueryBufferObjecti64v: *const function_signatures.glGetQueryBufferObjecti64v = undefined;
    var glGetQueryBufferObjectiv: *const function_signatures.glGetQueryBufferObjectiv = undefined;
    var glGetQueryBufferObjectui64v: *const function_signatures.glGetQueryBufferObjectui64v = undefined;
    var glGetQueryBufferObjectuiv: *const function_signatures.glGetQueryBufferObjectuiv = undefined;
    var glMemoryBarrierByRegion: *const function_signatures.glMemoryBarrierByRegion = undefined;
    var glGetTextureSubImage: *const function_signatures.glGetTextureSubImage = undefined;
    var glGetCompressedTextureSubImage: *const function_signatures.glGetCompressedTextureSubImage = undefined;
    var glGetGraphicsResetStatus: *const function_signatures.glGetGraphicsResetStatus = undefined;
    var glGetnCompressedTexImage: *const function_signatures.glGetnCompressedTexImage = undefined;
    var glGetnTexImage: *const function_signatures.glGetnTexImage = undefined;
    var glGetnUniformdv: *const function_signatures.glGetnUniformdv = undefined;
    var glGetnUniformfv: *const function_signatures.glGetnUniformfv = undefined;
    var glGetnUniformiv: *const function_signatures.glGetnUniformiv = undefined;
    var glGetnUniformuiv: *const function_signatures.glGetnUniformuiv = undefined;
    var glReadnPixels: *const function_signatures.glReadnPixels = undefined;
    var glTextureBarrier: *const function_signatures.glTextureBarrier = undefined;
};

test {
    _ = load;
    @setEvalBranchQuota(100_000); // Yes, this is necessary. OpenGL gets quite large!
    std.testing.refAllDecls(@This());
}

References

This page is referenced by the following documents: