// GENERATED by the `generator` package — do not edit by hand.
// MoonBit dispatch wrappers for GL commands.

///|
let d_glAccum : Dispatch = Dispatch::new("glAccum")

///|
pub fn gl_accum(op : UInt, value : Float) -> Unit {
  let fp : FuncRef[(UInt, Float) -> Unit] = d_glAccum.get().unsafe_into()
  fp(op, value)
}

///|
let d_glAccumxOES : Dispatch = Dispatch::new("glAccumxOES")

///|
pub fn gl_accumx_oes(op : UInt, value : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glAccumxOES.get().unsafe_into()
  fp(op, value)
}

///|
let d_glActiveProgramEXT : Dispatch = Dispatch::new("glActiveProgramEXT")

///|
pub fn gl_active_program_ext(program : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glActiveProgramEXT.get().unsafe_into()
  fp(program)
}

///|
let d_glActiveShaderProgram : Dispatch = Dispatch::new("glActiveShaderProgram")

///|
pub fn gl_active_shader_program(pipeline : UInt, program : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glActiveShaderProgram
    .get()
    .unsafe_into()
  fp(pipeline, program)
}

///|
let d_glActiveShaderProgramEXT : Dispatch = Dispatch::new(
  "glActiveShaderProgramEXT",
)

///|
pub fn gl_active_shader_program_ext(pipeline : UInt, program : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glActiveShaderProgramEXT
    .get()
    .unsafe_into()
  fp(pipeline, program)
}

///|
let d_glActiveStencilFaceEXT : Dispatch = Dispatch::new(
  "glActiveStencilFaceEXT",
)

///|
pub fn gl_active_stencil_face_ext(face : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glActiveStencilFaceEXT
    .get()
    .unsafe_into()
  fp(face)
}

///|
let d_glActiveTexture : Dispatch = Dispatch::with_aliases("glActiveTexture", [
  "glActiveTextureARB",
])

///|
pub fn gl_active_texture(texture : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glActiveTexture.get().unsafe_into()
  fp(texture)
}

///|
let d_glActiveTextureARB : Dispatch = Dispatch::with_aliases(
  "glActiveTextureARB",
  ["glActiveTexture"],
)

///|
pub fn gl_active_texture_arb(texture : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glActiveTextureARB.get().unsafe_into()
  fp(texture)
}

///|
let d_glActiveVaryingNV : Dispatch = Dispatch::new("glActiveVaryingNV")

///|
pub fn gl_active_varying_nv(program : UInt, name : Bytes) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Byte]) -> Unit] = d_glActiveVaryingNV
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(name, fn(name_p) { fp(program, name_p) })
}

///|
let d_glAlphaFragmentOp1ATI : Dispatch = Dispatch::new("glAlphaFragmentOp1ATI")

///|
pub fn gl_alpha_fragment_op1_ati(
  op : UInt,
  dst : UInt,
  dstMod : UInt,
  arg1 : UInt,
  arg1Rep : UInt,
  arg1Mod : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, UInt, UInt) -> Unit] = d_glAlphaFragmentOp1ATI
    .get()
    .unsafe_into()
  fp(op, dst, dstMod, arg1, arg1Rep, arg1Mod)
}

///|
let d_glAlphaFragmentOp2ATI : Dispatch = Dispatch::new("glAlphaFragmentOp2ATI")

///|
pub fn gl_alpha_fragment_op2_ati(
  op : UInt,
  dst : UInt,
  dstMod : UInt,
  arg1 : UInt,
  arg1Rep : UInt,
  arg1Mod : UInt,
  arg2 : UInt,
  arg2Rep : UInt,
  arg2Mod : UInt,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, UInt, UInt, UInt, UInt, UInt, UInt, UInt) -> Unit,
  ] = d_glAlphaFragmentOp2ATI.get().unsafe_into()
  fp(op, dst, dstMod, arg1, arg1Rep, arg1Mod, arg2, arg2Rep, arg2Mod)
}

///|
let d_glAlphaFragmentOp3ATI : Dispatch = Dispatch::new("glAlphaFragmentOp3ATI")

///|
pub fn gl_alpha_fragment_op3_ati(
  op : UInt,
  dst : UInt,
  dstMod : UInt,
  arg1 : UInt,
  arg1Rep : UInt,
  arg1Mod : UInt,
  arg2 : UInt,
  arg2Rep : UInt,
  arg2Mod : UInt,
  arg3 : UInt,
  arg3Rep : UInt,
  arg3Mod : UInt,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, UInt, UInt, UInt, UInt, UInt, UInt, UInt, UInt, UInt, UInt) -> Unit,
  ] = d_glAlphaFragmentOp3ATI.get().unsafe_into()
  fp(
    op, dst, dstMod, arg1, arg1Rep, arg1Mod, arg2, arg2Rep, arg2Mod, arg3, arg3Rep,
    arg3Mod,
  )
}

///|
let d_glAlphaFunc : Dispatch = Dispatch::new("glAlphaFunc")

///|
pub fn gl_alpha_func(func : UInt, ref_ : Float) -> Unit {
  let fp : FuncRef[(UInt, Float) -> Unit] = d_glAlphaFunc.get().unsafe_into()
  fp(func, ref_)
}

///|
let d_glAlphaFuncQCOM : Dispatch = Dispatch::new("glAlphaFuncQCOM")

///|
pub fn gl_alpha_func_qcom(func : UInt, ref_ : Float) -> Unit {
  let fp : FuncRef[(UInt, Float) -> Unit] = d_glAlphaFuncQCOM
    .get()
    .unsafe_into()
  fp(func, ref_)
}

///|
let d_glAlphaFuncx : Dispatch = Dispatch::new("glAlphaFuncx")

///|
pub fn gl_alpha_funcx(func : UInt, ref_ : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glAlphaFuncx.get().unsafe_into()
  fp(func, ref_)
}

///|
let d_glAlphaFuncxOES : Dispatch = Dispatch::new("glAlphaFuncxOES")

///|
pub fn gl_alpha_funcx_oes(func : UInt, ref_ : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glAlphaFuncxOES.get().unsafe_into()
  fp(func, ref_)
}

///|
let d_glAlphaToCoverageDitherControlNV : Dispatch = Dispatch::new(
  "glAlphaToCoverageDitherControlNV",
)

///|
pub fn gl_alpha_to_coverage_dither_control_nv(mode : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glAlphaToCoverageDitherControlNV
    .get()
    .unsafe_into()
  fp(mode)
}

///|
let d_glApplyFramebufferAttachmentCMAAINTEL : Dispatch = Dispatch::new(
  "glApplyFramebufferAttachmentCMAAINTEL",
)

///|
pub fn gl_apply_framebuffer_attachment_cmaaintel() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glApplyFramebufferAttachmentCMAAINTEL
    .get()
    .unsafe_into()
  fp()
}

///|
let d_glApplyTextureEXT : Dispatch = Dispatch::new("glApplyTextureEXT")

///|
pub fn gl_apply_texture_ext(mode : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glApplyTextureEXT.get().unsafe_into()
  fp(mode)
}

///|
let d_glAcquireKeyedMutexWin32EXT : Dispatch = Dispatch::new(
  "glAcquireKeyedMutexWin32EXT",
)

///|
pub fn gl_acquire_keyed_mutex_win32_ext(
  memory : UInt,
  key : UInt64,
  timeout : UInt,
) -> Bool {
  let fp : FuncRef[(UInt, UInt64, UInt) -> Int] = d_glAcquireKeyedMutexWin32EXT
    .get()
    .unsafe_into()
  (fp(memory, key, timeout) & 0xFF) != 0
}

///|
let d_glAreProgramsResidentNV : Dispatch = Dispatch::new(
  "glAreProgramsResidentNV",
)

///|
pub fn gl_are_programs_resident_nv(
  n : Int,
  programs : FixedArray[UInt],
  residences : Bytes,
) -> Bool {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt], @pointer.Pointer[Byte]) -> Int] = d_glAreProgramsResidentNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(programs, fn(programs_p) {
    @pointer.borrow_bytes(residences, fn(residences_p) {
      (fp(n, programs_p, residences_p) & 0xFF) != 0
    })
  })
}

///|
let d_glAreTexturesResident : Dispatch = Dispatch::new("glAreTexturesResident")

///|
pub fn gl_are_textures_resident(
  n : Int,
  textures : FixedArray[UInt],
  residences : Bytes,
) -> Bool {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt], @pointer.Pointer[Byte]) -> Int] = d_glAreTexturesResident
    .get()
    .unsafe_into()
  @pointer.borrow_array(textures, fn(textures_p) {
    @pointer.borrow_bytes(residences, fn(residences_p) {
      (fp(n, textures_p, residences_p) & 0xFF) != 0
    })
  })
}

///|
let d_glAreTexturesResidentEXT : Dispatch = Dispatch::new(
  "glAreTexturesResidentEXT",
)

///|
pub fn gl_are_textures_resident_ext(
  n : Int,
  textures : FixedArray[UInt],
  residences : Bytes,
) -> Bool {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt], @pointer.Pointer[Byte]) -> Int] = d_glAreTexturesResidentEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(textures, fn(textures_p) {
    @pointer.borrow_bytes(residences, fn(residences_p) {
      (fp(n, textures_p, residences_p) & 0xFF) != 0
    })
  })
}

///|
let d_glArrayElement : Dispatch = Dispatch::with_aliases("glArrayElement", [
  "glArrayElementEXT",
])

///|
pub fn gl_array_element(i : Int) -> Unit {
  let fp : FuncRef[(Int) -> Unit] = d_glArrayElement.get().unsafe_into()
  fp(i)
}

///|
let d_glArrayElementEXT : Dispatch = Dispatch::with_aliases(
  "glArrayElementEXT",
  ["glArrayElement"],
)

///|
pub fn gl_array_element_ext(i : Int) -> Unit {
  let fp : FuncRef[(Int) -> Unit] = d_glArrayElementEXT.get().unsafe_into()
  fp(i)
}

///|
let d_glArrayObjectATI : Dispatch = Dispatch::new("glArrayObjectATI")

///|
pub fn gl_array_object_ati(
  array : UInt,
  size : Int,
  type_ : UInt,
  stride : Int,
  buffer : UInt,
  offset : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int, UInt, UInt) -> Unit] = d_glArrayObjectATI
    .get()
    .unsafe_into()
  fp(array, size, type_, stride, buffer, offset)
}

///|
let d_glAsyncCopyBufferSubDataNVX : Dispatch = Dispatch::new(
  "glAsyncCopyBufferSubDataNVX",
)

///|
pub fn gl_async_copy_buffer_sub_data_nvx(
  waitSemaphoreCount : Int,
  waitSemaphoreArray : FixedArray[UInt],
  fenceValueArray : FixedArray[UInt64],
  readGpu : UInt,
  writeGpuMask : UInt,
  readBuffer : UInt,
  writeBuffer : UInt,
  readOffset : Int64,
  writeOffset : Int64,
  size : Int64,
  signalSemaphoreCount : Int,
  signalSemaphoreArray : FixedArray[UInt],
  signalValueArray : FixedArray[UInt64],
) -> UInt {
  let fp : FuncRef[
    (
      Int,
      @pointer.Pointer[UInt],
      @pointer.Pointer[UInt64],
      UInt,
      UInt,
      UInt,
      UInt,
      Int64,
      Int64,
      Int64,
      Int,
      @pointer.Pointer[UInt],
      @pointer.Pointer[UInt64],
    ) -> UInt,
  ] = d_glAsyncCopyBufferSubDataNVX.get().unsafe_into()
  @pointer.borrow_array(waitSemaphoreArray, fn(waitSemaphoreArray_p) {
    @pointer.borrow_array(fenceValueArray, fn(fenceValueArray_p) {
      @pointer.borrow_array(signalSemaphoreArray, fn(signalSemaphoreArray_p) {
        @pointer.borrow_array(signalValueArray, fn(signalValueArray_p) {
          fp(
            waitSemaphoreCount, waitSemaphoreArray_p, fenceValueArray_p, readGpu,
            writeGpuMask, readBuffer, writeBuffer, readOffset, writeOffset, size,
            signalSemaphoreCount, signalSemaphoreArray_p, signalValueArray_p,
          )
        })
      })
    })
  })
}

///|
let d_glAsyncCopyImageSubDataNVX : Dispatch = Dispatch::new(
  "glAsyncCopyImageSubDataNVX",
)

///|
pub fn gl_async_copy_image_sub_data_nvx(
  waitSemaphoreCount : Int,
  waitSemaphoreArray : FixedArray[UInt],
  waitValueArray : FixedArray[UInt64],
  srcGpu : UInt,
  dstGpuMask : UInt,
  srcName : UInt,
  srcTarget : UInt,
  srcLevel : Int,
  srcX : Int,
  srcY : Int,
  srcZ : Int,
  dstName : UInt,
  dstTarget : UInt,
  dstLevel : Int,
  dstX : Int,
  dstY : Int,
  dstZ : Int,
  srcWidth : Int,
  srcHeight : Int,
  srcDepth : Int,
  signalSemaphoreCount : Int,
  signalSemaphoreArray : FixedArray[UInt],
  signalValueArray : FixedArray[UInt64],
) -> UInt {
  let fp : FuncRef[
    (
      Int,
      @pointer.Pointer[UInt],
      @pointer.Pointer[UInt64],
      UInt,
      UInt,
      UInt,
      UInt,
      Int,
      Int,
      Int,
      Int,
      UInt,
      UInt,
      Int,
      Int,
      Int,
      Int,
      Int,
      Int,
      Int,
      Int,
      @pointer.Pointer[UInt],
      @pointer.Pointer[UInt64],
    ) -> UInt,
  ] = d_glAsyncCopyImageSubDataNVX.get().unsafe_into()
  @pointer.borrow_array(waitSemaphoreArray, fn(waitSemaphoreArray_p) {
    @pointer.borrow_array(waitValueArray, fn(waitValueArray_p) {
      @pointer.borrow_array(signalSemaphoreArray, fn(signalSemaphoreArray_p) {
        @pointer.borrow_array(signalValueArray, fn(signalValueArray_p) {
          fp(
            waitSemaphoreCount, waitSemaphoreArray_p, waitValueArray_p, srcGpu, dstGpuMask,
            srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName, dstTarget, dstLevel,
            dstX, dstY, dstZ, srcWidth, srcHeight, srcDepth, signalSemaphoreCount,
            signalSemaphoreArray_p, signalValueArray_p,
          )
        })
      })
    })
  })
}

///|
let d_glAsyncMarkerSGIX : Dispatch = Dispatch::new("glAsyncMarkerSGIX")

///|
pub fn gl_async_marker_sgix(marker : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glAsyncMarkerSGIX.get().unsafe_into()
  fp(marker)
}

///|
let d_glAttachShader : Dispatch = Dispatch::with_aliases("glAttachShader", [
  "glAttachObjectARB",
])

///|
pub fn gl_attach_shader(program : UInt, shader : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glAttachShader.get().unsafe_into()
  fp(program, shader)
}

///|
let d_glBegin : Dispatch = Dispatch::new("glBegin")

///|
pub fn gl_begin(mode : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glBegin.get().unsafe_into()
  fp(mode)
}

///|
let d_glBeginConditionalRender : Dispatch = Dispatch::with_aliases(
  "glBeginConditionalRender",
  ["glBeginConditionalRenderNV"],
)

///|
pub fn gl_begin_conditional_render(id : UInt, mode : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glBeginConditionalRender
    .get()
    .unsafe_into()
  fp(id, mode)
}

///|
let d_glBeginConditionalRenderNV : Dispatch = Dispatch::with_aliases(
  "glBeginConditionalRenderNV",
  ["glBeginConditionalRender"],
)

///|
pub fn gl_begin_conditional_render_nv(id : UInt, mode : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glBeginConditionalRenderNV
    .get()
    .unsafe_into()
  fp(id, mode)
}

///|
let d_glBeginConditionalRenderNVX : Dispatch = Dispatch::new(
  "glBeginConditionalRenderNVX",
)

///|
pub fn gl_begin_conditional_render_nvx(id : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glBeginConditionalRenderNVX
    .get()
    .unsafe_into()
  fp(id)
}

///|
let d_glBeginFragmentShaderATI : Dispatch = Dispatch::new(
  "glBeginFragmentShaderATI",
)

///|
pub fn gl_begin_fragment_shader_ati() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glBeginFragmentShaderATI.get().unsafe_into()
  fp()
}

///|
let d_glBeginOcclusionQueryNV : Dispatch = Dispatch::new(
  "glBeginOcclusionQueryNV",
)

///|
pub fn gl_begin_occlusion_query_nv(id : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glBeginOcclusionQueryNV
    .get()
    .unsafe_into()
  fp(id)
}

///|
let d_glBeginPerfMonitorAMD : Dispatch = Dispatch::new("glBeginPerfMonitorAMD")

///|
pub fn gl_begin_perf_monitor_amd(monitor : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glBeginPerfMonitorAMD.get().unsafe_into()
  fp(monitor)
}

///|
let d_glBeginPerfQueryINTEL : Dispatch = Dispatch::new("glBeginPerfQueryINTEL")

///|
pub fn gl_begin_perf_query_intel(queryHandle : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glBeginPerfQueryINTEL.get().unsafe_into()
  fp(queryHandle)
}

///|
let d_glBeginQuery : Dispatch = Dispatch::with_aliases("glBeginQuery", [
  "glBeginQueryARB",
])

///|
pub fn gl_begin_query(target : UInt, id : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glBeginQuery.get().unsafe_into()
  fp(target, id)
}

///|
let d_glBeginQueryARB : Dispatch = Dispatch::with_aliases("glBeginQueryARB", [
  "glBeginQuery",
])

///|
pub fn gl_begin_query_arb(target : UInt, id : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glBeginQueryARB.get().unsafe_into()
  fp(target, id)
}

///|
let d_glBeginQueryEXT : Dispatch = Dispatch::new("glBeginQueryEXT")

///|
pub fn gl_begin_query_ext(target : UInt, id : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glBeginQueryEXT.get().unsafe_into()
  fp(target, id)
}

///|
let d_glBeginQueryIndexed : Dispatch = Dispatch::new("glBeginQueryIndexed")

///|
pub fn gl_begin_query_indexed(target : UInt, index : UInt, id : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glBeginQueryIndexed
    .get()
    .unsafe_into()
  fp(target, index, id)
}

///|
let d_glBeginTransformFeedback : Dispatch = Dispatch::with_aliases(
  "glBeginTransformFeedback",
  ["glBeginTransformFeedbackEXT", "glBeginTransformFeedbackNV"],
)

///|
pub fn gl_begin_transform_feedback(primitiveMode : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glBeginTransformFeedback
    .get()
    .unsafe_into()
  fp(primitiveMode)
}

///|
let d_glBeginTransformFeedbackEXT : Dispatch = Dispatch::with_aliases(
  "glBeginTransformFeedbackEXT",
  ["glBeginTransformFeedback", "glBeginTransformFeedbackNV"],
)

///|
pub fn gl_begin_transform_feedback_ext(primitiveMode : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glBeginTransformFeedbackEXT
    .get()
    .unsafe_into()
  fp(primitiveMode)
}

///|
let d_glBeginTransformFeedbackNV : Dispatch = Dispatch::with_aliases(
  "glBeginTransformFeedbackNV",
  ["glBeginTransformFeedback", "glBeginTransformFeedbackEXT"],
)

///|
pub fn gl_begin_transform_feedback_nv(primitiveMode : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glBeginTransformFeedbackNV
    .get()
    .unsafe_into()
  fp(primitiveMode)
}

///|
let d_glBeginVertexShaderEXT : Dispatch = Dispatch::new(
  "glBeginVertexShaderEXT",
)

///|
pub fn gl_begin_vertex_shader_ext() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glBeginVertexShaderEXT.get().unsafe_into()
  fp()
}

///|
let d_glBeginVideoCaptureNV : Dispatch = Dispatch::new("glBeginVideoCaptureNV")

///|
pub fn gl_begin_video_capture_nv(video_capture_slot : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glBeginVideoCaptureNV.get().unsafe_into()
  fp(video_capture_slot)
}

///|
let d_glBindAttribLocation : Dispatch = Dispatch::with_aliases(
  "glBindAttribLocation",
  ["glBindAttribLocationARB"],
)

///|
pub fn gl_bind_attrib_location(
  program : UInt,
  index : UInt,
  name : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Byte]) -> Unit] = d_glBindAttribLocation
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(name, fn(name_p) { fp(program, index, name_p) })
}

///|
let d_glBindBuffer : Dispatch = Dispatch::with_aliases("glBindBuffer", [
  "glBindBufferARB",
])

///|
pub fn gl_bind_buffer(target : UInt, buffer : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glBindBuffer.get().unsafe_into()
  fp(target, buffer)
}

///|
let d_glBindBufferARB : Dispatch = Dispatch::with_aliases("glBindBufferARB", [
  "glBindBuffer",
])

///|
pub fn gl_bind_buffer_arb(target : UInt, buffer : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glBindBufferARB.get().unsafe_into()
  fp(target, buffer)
}

///|
let d_glBindBufferBase : Dispatch = Dispatch::with_aliases("glBindBufferBase", [
  "glBindBufferBaseEXT", "glBindBufferBaseNV",
])

///|
pub fn gl_bind_buffer_base(target : UInt, index : UInt, buffer : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glBindBufferBase
    .get()
    .unsafe_into()
  fp(target, index, buffer)
}

///|
let d_glBindBufferBaseEXT : Dispatch = Dispatch::with_aliases(
  "glBindBufferBaseEXT",
  ["glBindBufferBase", "glBindBufferBaseNV"],
)

///|
pub fn gl_bind_buffer_base_ext(
  target : UInt,
  index : UInt,
  buffer : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glBindBufferBaseEXT
    .get()
    .unsafe_into()
  fp(target, index, buffer)
}

///|
let d_glBindBufferBaseNV : Dispatch = Dispatch::with_aliases(
  "glBindBufferBaseNV",
  ["glBindBufferBase", "glBindBufferBaseEXT"],
)

///|
pub fn gl_bind_buffer_base_nv(
  target : UInt,
  index : UInt,
  buffer : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glBindBufferBaseNV
    .get()
    .unsafe_into()
  fp(target, index, buffer)
}

///|
let d_glBindBufferOffsetEXT : Dispatch = Dispatch::with_aliases(
  "glBindBufferOffsetEXT",
  ["glBindBufferOffsetNV"],
)

///|
pub fn gl_bind_buffer_offset_ext(
  target : UInt,
  index : UInt,
  buffer : UInt,
  offset : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int64) -> Unit] = d_glBindBufferOffsetEXT
    .get()
    .unsafe_into()
  fp(target, index, buffer, offset)
}

///|
let d_glBindBufferOffsetNV : Dispatch = Dispatch::with_aliases(
  "glBindBufferOffsetNV",
  ["glBindBufferOffsetEXT"],
)

///|
pub fn gl_bind_buffer_offset_nv(
  target : UInt,
  index : UInt,
  buffer : UInt,
  offset : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int64) -> Unit] = d_glBindBufferOffsetNV
    .get()
    .unsafe_into()
  fp(target, index, buffer, offset)
}

///|
let d_glBindBufferRange : Dispatch = Dispatch::with_aliases(
  "glBindBufferRange",
  ["glBindBufferRangeEXT", "glBindBufferRangeNV"],
)

///|
pub fn gl_bind_buffer_range(
  target : UInt,
  index : UInt,
  buffer : UInt,
  offset : Int64,
  size : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int64, Int64) -> Unit] = d_glBindBufferRange
    .get()
    .unsafe_into()
  fp(target, index, buffer, offset, size)
}

///|
let d_glBindBufferRangeEXT : Dispatch = Dispatch::with_aliases(
  "glBindBufferRangeEXT",
  ["glBindBufferRange", "glBindBufferRangeNV"],
)

///|
pub fn gl_bind_buffer_range_ext(
  target : UInt,
  index : UInt,
  buffer : UInt,
  offset : Int64,
  size : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int64, Int64) -> Unit] = d_glBindBufferRangeEXT
    .get()
    .unsafe_into()
  fp(target, index, buffer, offset, size)
}

///|
let d_glBindBufferRangeNV : Dispatch = Dispatch::with_aliases(
  "glBindBufferRangeNV",
  ["glBindBufferRange", "glBindBufferRangeEXT"],
)

///|
pub fn gl_bind_buffer_range_nv(
  target : UInt,
  index : UInt,
  buffer : UInt,
  offset : Int64,
  size : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int64, Int64) -> Unit] = d_glBindBufferRangeNV
    .get()
    .unsafe_into()
  fp(target, index, buffer, offset, size)
}

///|
let d_glBindBuffersBase : Dispatch = Dispatch::new("glBindBuffersBase")

///|
pub fn gl_bind_buffers_base(
  target : UInt,
  first : UInt,
  count : Int,
  buffers : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, @pointer.Pointer[UInt]) -> Unit] = d_glBindBuffersBase
    .get()
    .unsafe_into()
  @pointer.borrow_array(buffers, fn(buffers_p) {
    fp(target, first, count, buffers_p)
  })
}

///|
let d_glBindFragDataLocation : Dispatch = Dispatch::with_aliases(
  "glBindFragDataLocation",
  ["glBindFragDataLocationEXT"],
)

///|
pub fn gl_bind_frag_data_location(
  program : UInt,
  color : UInt,
  name : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Byte]) -> Unit] = d_glBindFragDataLocation
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(name, fn(name_p) { fp(program, color, name_p) })
}

///|
let d_glBindFragDataLocationEXT : Dispatch = Dispatch::with_aliases(
  "glBindFragDataLocationEXT",
  ["glBindFragDataLocation"],
)

///|
pub fn gl_bind_frag_data_location_ext(
  program : UInt,
  color : UInt,
  name : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Byte]) -> Unit] = d_glBindFragDataLocationEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(name, fn(name_p) { fp(program, color, name_p) })
}

///|
let d_glBindFragDataLocationIndexed : Dispatch = Dispatch::with_aliases(
  "glBindFragDataLocationIndexed",
  ["glBindFragDataLocationIndexedEXT"],
)

///|
pub fn gl_bind_frag_data_location_indexed(
  program : UInt,
  colorNumber : UInt,
  index : UInt,
  name : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Byte]) -> Unit] = d_glBindFragDataLocationIndexed
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(name, fn(name_p) {
    fp(program, colorNumber, index, name_p)
  })
}

///|
let d_glBindFragDataLocationIndexedEXT : Dispatch = Dispatch::with_aliases(
  "glBindFragDataLocationIndexedEXT",
  ["glBindFragDataLocationIndexed"],
)

///|
pub fn gl_bind_frag_data_location_indexed_ext(
  program : UInt,
  colorNumber : UInt,
  index : UInt,
  name : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Byte]) -> Unit] = d_glBindFragDataLocationIndexedEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(name, fn(name_p) {
    fp(program, colorNumber, index, name_p)
  })
}

///|
let d_glBindFragmentShaderATI : Dispatch = Dispatch::new(
  "glBindFragmentShaderATI",
)

///|
pub fn gl_bind_fragment_shader_ati(id : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glBindFragmentShaderATI
    .get()
    .unsafe_into()
  fp(id)
}

///|
let d_glBindFramebuffer : Dispatch = Dispatch::new("glBindFramebuffer")

///|
pub fn gl_bind_framebuffer(target : UInt, framebuffer : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glBindFramebuffer
    .get()
    .unsafe_into()
  fp(target, framebuffer)
}

///|
let d_glBindFramebufferEXT : Dispatch = Dispatch::new("glBindFramebufferEXT")

///|
pub fn gl_bind_framebuffer_ext(target : UInt, framebuffer : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glBindFramebufferEXT
    .get()
    .unsafe_into()
  fp(target, framebuffer)
}

///|
let d_glBindFramebufferOES : Dispatch = Dispatch::new("glBindFramebufferOES")

///|
pub fn gl_bind_framebuffer_oes(target : UInt, framebuffer : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glBindFramebufferOES
    .get()
    .unsafe_into()
  fp(target, framebuffer)
}

///|
let d_glBindImageTexture : Dispatch = Dispatch::new("glBindImageTexture")

///|
pub fn gl_bind_image_texture(
  unit : UInt,
  texture : UInt,
  level : Int,
  layered : Bool,
  layer : Int,
  access : UInt,
  format : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, Bool, Int, UInt, UInt) -> Unit] = d_glBindImageTexture
    .get()
    .unsafe_into()
  fp(unit, texture, level, layered, layer, access, format)
}

///|
let d_glBindImageTextureEXT : Dispatch = Dispatch::new("glBindImageTextureEXT")

///|
pub fn gl_bind_image_texture_ext(
  index : UInt,
  texture : UInt,
  level : Int,
  layered : Bool,
  layer : Int,
  access : UInt,
  format : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, Bool, Int, UInt, Int) -> Unit] = d_glBindImageTextureEXT
    .get()
    .unsafe_into()
  fp(index, texture, level, layered, layer, access, format)
}

///|
let d_glBindImageTextures : Dispatch = Dispatch::new("glBindImageTextures")

///|
pub fn gl_bind_image_textures(
  first : UInt,
  count : Int,
  textures : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[UInt]) -> Unit] = d_glBindImageTextures
    .get()
    .unsafe_into()
  @pointer.borrow_array(textures, fn(textures_p) {
    fp(first, count, textures_p)
  })
}

///|
let d_glBindLightParameterEXT : Dispatch = Dispatch::new(
  "glBindLightParameterEXT",
)

///|
pub fn gl_bind_light_parameter_ext(light : UInt, value : UInt) -> UInt {
  let fp : FuncRef[(UInt, UInt) -> UInt] = d_glBindLightParameterEXT
    .get()
    .unsafe_into()
  fp(light, value)
}

///|
let d_glBindMaterialParameterEXT : Dispatch = Dispatch::new(
  "glBindMaterialParameterEXT",
)

///|
pub fn gl_bind_material_parameter_ext(face : UInt, value : UInt) -> UInt {
  let fp : FuncRef[(UInt, UInt) -> UInt] = d_glBindMaterialParameterEXT
    .get()
    .unsafe_into()
  fp(face, value)
}

///|
let d_glBindMultiTextureEXT : Dispatch = Dispatch::new("glBindMultiTextureEXT")

///|
pub fn gl_bind_multi_texture_ext(
  texunit : UInt,
  target : UInt,
  texture : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glBindMultiTextureEXT
    .get()
    .unsafe_into()
  fp(texunit, target, texture)
}

///|
let d_glBindParameterEXT : Dispatch = Dispatch::new("glBindParameterEXT")

///|
pub fn gl_bind_parameter_ext(value : UInt) -> UInt {
  let fp : FuncRef[(UInt) -> UInt] = d_glBindParameterEXT.get().unsafe_into()
  fp(value)
}

///|
let d_glBindProgramARB : Dispatch = Dispatch::with_aliases("glBindProgramARB", [
  "glBindProgramNV",
])

///|
pub fn gl_bind_program_arb(target : UInt, program : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glBindProgramARB
    .get()
    .unsafe_into()
  fp(target, program)
}

///|
let d_glBindProgramNV : Dispatch = Dispatch::with_aliases("glBindProgramNV", [
  "glBindProgramARB",
])

///|
pub fn gl_bind_program_nv(target : UInt, id : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glBindProgramNV.get().unsafe_into()
  fp(target, id)
}

///|
let d_glBindProgramPipeline : Dispatch = Dispatch::new("glBindProgramPipeline")

///|
pub fn gl_bind_program_pipeline(pipeline : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glBindProgramPipeline.get().unsafe_into()
  fp(pipeline)
}

///|
let d_glBindProgramPipelineEXT : Dispatch = Dispatch::new(
  "glBindProgramPipelineEXT",
)

///|
pub fn gl_bind_program_pipeline_ext(pipeline : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glBindProgramPipelineEXT
    .get()
    .unsafe_into()
  fp(pipeline)
}

///|
let d_glBindRenderbuffer : Dispatch = Dispatch::new("glBindRenderbuffer")

///|
pub fn gl_bind_renderbuffer(target : UInt, renderbuffer : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glBindRenderbuffer
    .get()
    .unsafe_into()
  fp(target, renderbuffer)
}

///|
let d_glBindRenderbufferEXT : Dispatch = Dispatch::new("glBindRenderbufferEXT")

///|
pub fn gl_bind_renderbuffer_ext(target : UInt, renderbuffer : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glBindRenderbufferEXT
    .get()
    .unsafe_into()
  fp(target, renderbuffer)
}

///|
let d_glBindRenderbufferOES : Dispatch = Dispatch::new("glBindRenderbufferOES")

///|
pub fn gl_bind_renderbuffer_oes(target : UInt, renderbuffer : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glBindRenderbufferOES
    .get()
    .unsafe_into()
  fp(target, renderbuffer)
}

///|
let d_glBindSampler : Dispatch = Dispatch::new("glBindSampler")

///|
pub fn gl_bind_sampler(unit : UInt, sampler : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glBindSampler.get().unsafe_into()
  fp(unit, sampler)
}

///|
let d_glBindSamplers : Dispatch = Dispatch::new("glBindSamplers")

///|
pub fn gl_bind_samplers(
  first : UInt,
  count : Int,
  samplers : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[UInt]) -> Unit] = d_glBindSamplers
    .get()
    .unsafe_into()
  @pointer.borrow_array(samplers, fn(samplers_p) {
    fp(first, count, samplers_p)
  })
}

///|
let d_glBindShadingRateImageNV : Dispatch = Dispatch::new(
  "glBindShadingRateImageNV",
)

///|
pub fn gl_bind_shading_rate_image_nv(texture : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glBindShadingRateImageNV
    .get()
    .unsafe_into()
  fp(texture)
}

///|
let d_glBindTexGenParameterEXT : Dispatch = Dispatch::new(
  "glBindTexGenParameterEXT",
)

///|
pub fn gl_bind_tex_gen_parameter_ext(
  unit : UInt,
  coord : UInt,
  value : UInt,
) -> UInt {
  let fp : FuncRef[(UInt, UInt, UInt) -> UInt] = d_glBindTexGenParameterEXT
    .get()
    .unsafe_into()
  fp(unit, coord, value)
}

///|
let d_glBindTexture : Dispatch = Dispatch::with_aliases("glBindTexture", [
  "glBindTextureEXT",
])

///|
pub fn gl_bind_texture(target : UInt, texture : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glBindTexture.get().unsafe_into()
  fp(target, texture)
}

///|
let d_glBindTextureEXT : Dispatch = Dispatch::with_aliases("glBindTextureEXT", [
  "glBindTexture",
])

///|
pub fn gl_bind_texture_ext(target : UInt, texture : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glBindTextureEXT
    .get()
    .unsafe_into()
  fp(target, texture)
}

///|
let d_glBindTextureUnit : Dispatch = Dispatch::new("glBindTextureUnit")

///|
pub fn gl_bind_texture_unit(unit : UInt, texture : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glBindTextureUnit
    .get()
    .unsafe_into()
  fp(unit, texture)
}

///|
let d_glBindTextureUnitParameterEXT : Dispatch = Dispatch::new(
  "glBindTextureUnitParameterEXT",
)

///|
pub fn gl_bind_texture_unit_parameter_ext(unit : UInt, value : UInt) -> UInt {
  let fp : FuncRef[(UInt, UInt) -> UInt] = d_glBindTextureUnitParameterEXT
    .get()
    .unsafe_into()
  fp(unit, value)
}

///|
let d_glBindTextures : Dispatch = Dispatch::new("glBindTextures")

///|
pub fn gl_bind_textures(
  first : UInt,
  count : Int,
  textures : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[UInt]) -> Unit] = d_glBindTextures
    .get()
    .unsafe_into()
  @pointer.borrow_array(textures, fn(textures_p) {
    fp(first, count, textures_p)
  })
}

///|
let d_glBindTransformFeedback : Dispatch = Dispatch::new(
  "glBindTransformFeedback",
)

///|
pub fn gl_bind_transform_feedback(target : UInt, id : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glBindTransformFeedback
    .get()
    .unsafe_into()
  fp(target, id)
}

///|
let d_glBindTransformFeedbackNV : Dispatch = Dispatch::new(
  "glBindTransformFeedbackNV",
)

///|
pub fn gl_bind_transform_feedback_nv(target : UInt, id : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glBindTransformFeedbackNV
    .get()
    .unsafe_into()
  fp(target, id)
}

///|
let d_glBindVertexArray : Dispatch = Dispatch::with_aliases(
  "glBindVertexArray",
  ["glBindVertexArrayOES"],
)

///|
pub fn gl_bind_vertex_array(array : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glBindVertexArray.get().unsafe_into()
  fp(array)
}

///|
let d_glBindVertexArrayAPPLE : Dispatch = Dispatch::new(
  "glBindVertexArrayAPPLE",
)

///|
pub fn gl_bind_vertex_array_apple(array : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glBindVertexArrayAPPLE
    .get()
    .unsafe_into()
  fp(array)
}

///|
let d_glBindVertexArrayOES : Dispatch = Dispatch::with_aliases(
  "glBindVertexArrayOES",
  ["glBindVertexArray"],
)

///|
pub fn gl_bind_vertex_array_oes(array : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glBindVertexArrayOES.get().unsafe_into()
  fp(array)
}

///|
let d_glBindVertexBuffer : Dispatch = Dispatch::new("glBindVertexBuffer")

///|
pub fn gl_bind_vertex_buffer(
  bindingindex : UInt,
  buffer : UInt,
  offset : Int64,
  stride : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int64, Int) -> Unit] = d_glBindVertexBuffer
    .get()
    .unsafe_into()
  fp(bindingindex, buffer, offset, stride)
}

///|
let d_glBindVertexShaderEXT : Dispatch = Dispatch::new("glBindVertexShaderEXT")

///|
pub fn gl_bind_vertex_shader_ext(id : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glBindVertexShaderEXT.get().unsafe_into()
  fp(id)
}

///|
let d_glBindVideoCaptureStreamBufferNV : Dispatch = Dispatch::new(
  "glBindVideoCaptureStreamBufferNV",
)

///|
pub fn gl_bind_video_capture_stream_buffer_nv(
  video_capture_slot : UInt,
  stream : UInt,
  frame_region : UInt,
  offset : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int64) -> Unit] = d_glBindVideoCaptureStreamBufferNV
    .get()
    .unsafe_into()
  fp(video_capture_slot, stream, frame_region, offset)
}

///|
let d_glBindVideoCaptureStreamTextureNV : Dispatch = Dispatch::new(
  "glBindVideoCaptureStreamTextureNV",
)

///|
pub fn gl_bind_video_capture_stream_texture_nv(
  video_capture_slot : UInt,
  stream : UInt,
  frame_region : UInt,
  target : UInt,
  texture : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, UInt) -> Unit] = d_glBindVideoCaptureStreamTextureNV
    .get()
    .unsafe_into()
  fp(video_capture_slot, stream, frame_region, target, texture)
}

///|
let d_glBinormal3bEXT : Dispatch = Dispatch::new("glBinormal3bEXT")

///|
pub fn gl_binormal3b_ext(bx : Int, by : Int, bz : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glBinormal3bEXT
    .get()
    .unsafe_into()
  fp(bx, by, bz)
}

///|
let d_glBinormal3bvEXT : Dispatch = Dispatch::new("glBinormal3bvEXT")

///|
pub fn gl_binormal3bv_ext(v : Bytes) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Byte]) -> Unit] = d_glBinormal3bvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(v, fn(v_p) { fp(v_p) })
}

///|
let d_glBinormal3dEXT : Dispatch = Dispatch::new("glBinormal3dEXT")

///|
pub fn gl_binormal3d_ext(bx : Double, by : Double, bz : Double) -> Unit {
  let fp : FuncRef[(Double, Double, Double) -> Unit] = d_glBinormal3dEXT
    .get()
    .unsafe_into()
  fp(bx, by, bz)
}

///|
let d_glBinormal3dvEXT : Dispatch = Dispatch::new("glBinormal3dvEXT")

///|
pub fn gl_binormal3dv_ext(v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Double]) -> Unit] = d_glBinormal3dvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glBinormal3fEXT : Dispatch = Dispatch::new("glBinormal3fEXT")

///|
pub fn gl_binormal3f_ext(bx : Float, by : Float, bz : Float) -> Unit {
  let fp : FuncRef[(Float, Float, Float) -> Unit] = d_glBinormal3fEXT
    .get()
    .unsafe_into()
  fp(bx, by, bz)
}

///|
let d_glBinormal3fvEXT : Dispatch = Dispatch::new("glBinormal3fvEXT")

///|
pub fn gl_binormal3fv_ext(v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Float]) -> Unit] = d_glBinormal3fvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glBinormal3iEXT : Dispatch = Dispatch::new("glBinormal3iEXT")

///|
pub fn gl_binormal3i_ext(bx : Int, by : Int, bz : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glBinormal3iEXT
    .get()
    .unsafe_into()
  fp(bx, by, bz)
}

///|
let d_glBinormal3ivEXT : Dispatch = Dispatch::new("glBinormal3ivEXT")

///|
pub fn gl_binormal3iv_ext(v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glBinormal3ivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glBinormal3sEXT : Dispatch = Dispatch::new("glBinormal3sEXT")

///|
pub fn gl_binormal3s_ext(bx : Int, by : Int, bz : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glBinormal3sEXT
    .get()
    .unsafe_into()
  fp(bx, by, bz)
}

///|
let d_glBinormal3svEXT : Dispatch = Dispatch::new("glBinormal3svEXT")

///|
pub fn gl_binormal3sv_ext(v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int16]) -> Unit] = d_glBinormal3svEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glBinormalPointerEXT : Dispatch = Dispatch::new("glBinormalPointerEXT")

///|
pub fn gl_binormal_pointer_ext(
  type_ : UInt,
  stride : Int,
  pointer : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Byte]) -> Unit] = d_glBinormalPointerEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(pointer, fn(pointer_p) { fp(type_, stride, pointer_p) })
}

///|
let d_glBitmap : Dispatch = Dispatch::new("glBitmap")

///|
pub fn gl_bitmap(
  width : Int,
  height : Int,
  xorig : Float,
  yorig : Float,
  xmove : Float,
  ymove : Float,
  bitmap : Bytes,
) -> Unit {
  let fp : FuncRef[
    (Int, Int, Float, Float, Float, Float, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glBitmap.get().unsafe_into()
  @pointer.borrow_bytes(bitmap, fn(bitmap_p) {
    fp(width, height, xorig, yorig, xmove, ymove, bitmap_p)
  })
}

///|
let d_glBitmapxOES : Dispatch = Dispatch::new("glBitmapxOES")

///|
pub fn gl_bitmapx_oes(
  width : Int,
  height : Int,
  xorig : Int,
  yorig : Int,
  xmove : Int,
  ymove : Int,
  bitmap : Bytes,
) -> Unit {
  let fp : FuncRef[
    (Int, Int, Int, Int, Int, Int, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glBitmapxOES.get().unsafe_into()
  @pointer.borrow_bytes(bitmap, fn(bitmap_p) {
    fp(width, height, xorig, yorig, xmove, ymove, bitmap_p)
  })
}

///|
let d_glBlendBarrier : Dispatch = Dispatch::with_aliases("glBlendBarrier", [
  "glBlendBarrierKHR", "glBlendBarrierNV",
])

///|
pub fn gl_blend_barrier() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glBlendBarrier.get().unsafe_into()
  fp()
}

///|
let d_glBlendBarrierKHR : Dispatch = Dispatch::with_aliases(
  "glBlendBarrierKHR",
  ["glBlendBarrier", "glBlendBarrierNV"],
)

///|
pub fn gl_blend_barrier_khr() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glBlendBarrierKHR.get().unsafe_into()
  fp()
}

///|
let d_glBlendBarrierNV : Dispatch = Dispatch::with_aliases("glBlendBarrierNV", [
  "glBlendBarrier", "glBlendBarrierKHR",
])

///|
pub fn gl_blend_barrier_nv() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glBlendBarrierNV.get().unsafe_into()
  fp()
}

///|
let d_glBlendColor : Dispatch = Dispatch::with_aliases("glBlendColor", [
  "glBlendColorEXT",
])

///|
pub fn gl_blend_color(
  red : Float,
  green : Float,
  blue : Float,
  alpha : Float,
) -> Unit {
  let fp : FuncRef[(Float, Float, Float, Float) -> Unit] = d_glBlendColor
    .get()
    .unsafe_into()
  fp(red, green, blue, alpha)
}

///|
let d_glBlendColorEXT : Dispatch = Dispatch::with_aliases("glBlendColorEXT", [
  "glBlendColor",
])

///|
pub fn gl_blend_color_ext(
  red : Float,
  green : Float,
  blue : Float,
  alpha : Float,
) -> Unit {
  let fp : FuncRef[(Float, Float, Float, Float) -> Unit] = d_glBlendColorEXT
    .get()
    .unsafe_into()
  fp(red, green, blue, alpha)
}

///|
let d_glBlendColorxOES : Dispatch = Dispatch::new("glBlendColorxOES")

///|
pub fn gl_blend_colorx_oes(
  red : Int,
  green : Int,
  blue : Int,
  alpha : Int,
) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int) -> Unit] = d_glBlendColorxOES
    .get()
    .unsafe_into()
  fp(red, green, blue, alpha)
}

///|
let d_glBlendEquation : Dispatch = Dispatch::with_aliases("glBlendEquation", [
  "glBlendEquationEXT",
])

///|
pub fn gl_blend_equation(mode : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glBlendEquation.get().unsafe_into()
  fp(mode)
}

///|
let d_glBlendEquationEXT : Dispatch = Dispatch::with_aliases(
  "glBlendEquationEXT",
  ["glBlendEquation"],
)

///|
pub fn gl_blend_equation_ext(mode : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glBlendEquationEXT.get().unsafe_into()
  fp(mode)
}

///|
let d_glBlendEquationIndexedAMD : Dispatch = Dispatch::with_aliases(
  "glBlendEquationIndexedAMD",
  [
    "glBlendEquationi", "glBlendEquationiARB", "glBlendEquationiEXT", "glBlendEquationiOES",
  ],
)

///|
pub fn gl_blend_equation_indexed_amd(buf : UInt, mode : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glBlendEquationIndexedAMD
    .get()
    .unsafe_into()
  fp(buf, mode)
}

///|
let d_glBlendEquationOES : Dispatch = Dispatch::new("glBlendEquationOES")

///|
pub fn gl_blend_equation_oes(mode : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glBlendEquationOES.get().unsafe_into()
  fp(mode)
}

///|
let d_glBlendEquationSeparate : Dispatch = Dispatch::with_aliases(
  "glBlendEquationSeparate",
  ["glBlendEquationSeparateEXT"],
)

///|
pub fn gl_blend_equation_separate(modeRGB : UInt, modeAlpha : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glBlendEquationSeparate
    .get()
    .unsafe_into()
  fp(modeRGB, modeAlpha)
}

///|
let d_glBlendEquationSeparateEXT : Dispatch = Dispatch::with_aliases(
  "glBlendEquationSeparateEXT",
  ["glBlendEquationSeparate"],
)

///|
pub fn gl_blend_equation_separate_ext(modeRGB : UInt, modeAlpha : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glBlendEquationSeparateEXT
    .get()
    .unsafe_into()
  fp(modeRGB, modeAlpha)
}

///|
let d_glBlendEquationSeparateIndexedAMD : Dispatch = Dispatch::with_aliases(
  "glBlendEquationSeparateIndexedAMD",
  [
    "glBlendEquationSeparatei", "glBlendEquationSeparateiARB", "glBlendEquationSeparateiEXT",
    "glBlendEquationSeparateiOES",
  ],
)

///|
pub fn gl_blend_equation_separate_indexed_amd(
  buf : UInt,
  modeRGB : UInt,
  modeAlpha : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glBlendEquationSeparateIndexedAMD
    .get()
    .unsafe_into()
  fp(buf, modeRGB, modeAlpha)
}

///|
let d_glBlendEquationSeparateOES : Dispatch = Dispatch::new(
  "glBlendEquationSeparateOES",
)

///|
pub fn gl_blend_equation_separate_oes(modeRGB : UInt, modeAlpha : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glBlendEquationSeparateOES
    .get()
    .unsafe_into()
  fp(modeRGB, modeAlpha)
}

///|
let d_glBlendEquationSeparatei : Dispatch = Dispatch::with_aliases(
  "glBlendEquationSeparatei",
  [
    "glBlendEquationSeparateIndexedAMD", "glBlendEquationSeparateiARB", "glBlendEquationSeparateiEXT",
    "glBlendEquationSeparateiOES",
  ],
)

///|
pub fn gl_blend_equation_separatei(
  buf : UInt,
  modeRGB : UInt,
  modeAlpha : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glBlendEquationSeparatei
    .get()
    .unsafe_into()
  fp(buf, modeRGB, modeAlpha)
}

///|
let d_glBlendEquationSeparateiARB : Dispatch = Dispatch::with_aliases(
  "glBlendEquationSeparateiARB",
  [
    "glBlendEquationSeparateIndexedAMD", "glBlendEquationSeparatei", "glBlendEquationSeparateiEXT",
    "glBlendEquationSeparateiOES",
  ],
)

///|
pub fn gl_blend_equation_separatei_arb(
  buf : UInt,
  modeRGB : UInt,
  modeAlpha : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glBlendEquationSeparateiARB
    .get()
    .unsafe_into()
  fp(buf, modeRGB, modeAlpha)
}

///|
let d_glBlendEquationSeparateiEXT : Dispatch = Dispatch::with_aliases(
  "glBlendEquationSeparateiEXT",
  [
    "glBlendEquationSeparateIndexedAMD", "glBlendEquationSeparatei", "glBlendEquationSeparateiARB",
    "glBlendEquationSeparateiOES",
  ],
)

///|
pub fn gl_blend_equation_separatei_ext(
  buf : UInt,
  modeRGB : UInt,
  modeAlpha : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glBlendEquationSeparateiEXT
    .get()
    .unsafe_into()
  fp(buf, modeRGB, modeAlpha)
}

///|
let d_glBlendEquationSeparateiOES : Dispatch = Dispatch::with_aliases(
  "glBlendEquationSeparateiOES",
  [
    "glBlendEquationSeparateIndexedAMD", "glBlendEquationSeparatei", "glBlendEquationSeparateiARB",
    "glBlendEquationSeparateiEXT",
  ],
)

///|
pub fn gl_blend_equation_separatei_oes(
  buf : UInt,
  modeRGB : UInt,
  modeAlpha : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glBlendEquationSeparateiOES
    .get()
    .unsafe_into()
  fp(buf, modeRGB, modeAlpha)
}

///|
let d_glBlendEquationi : Dispatch = Dispatch::with_aliases("glBlendEquationi", [
  "glBlendEquationIndexedAMD", "glBlendEquationiARB", "glBlendEquationiEXT", "glBlendEquationiOES",
])

///|
pub fn gl_blend_equationi(buf : UInt, mode : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glBlendEquationi
    .get()
    .unsafe_into()
  fp(buf, mode)
}

///|
let d_glBlendEquationiARB : Dispatch = Dispatch::with_aliases(
  "glBlendEquationiARB",
  [
    "glBlendEquationIndexedAMD", "glBlendEquationi", "glBlendEquationiEXT", "glBlendEquationiOES",
  ],
)

///|
pub fn gl_blend_equationi_arb(buf : UInt, mode : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glBlendEquationiARB
    .get()
    .unsafe_into()
  fp(buf, mode)
}

///|
let d_glBlendEquationiEXT : Dispatch = Dispatch::with_aliases(
  "glBlendEquationiEXT",
  [
    "glBlendEquationIndexedAMD", "glBlendEquationi", "glBlendEquationiARB", "glBlendEquationiOES",
  ],
)

///|
pub fn gl_blend_equationi_ext(buf : UInt, mode : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glBlendEquationiEXT
    .get()
    .unsafe_into()
  fp(buf, mode)
}

///|
let d_glBlendEquationiOES : Dispatch = Dispatch::with_aliases(
  "glBlendEquationiOES",
  [
    "glBlendEquationIndexedAMD", "glBlendEquationi", "glBlendEquationiARB", "glBlendEquationiEXT",
  ],
)

///|
pub fn gl_blend_equationi_oes(buf : UInt, mode : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glBlendEquationiOES
    .get()
    .unsafe_into()
  fp(buf, mode)
}

///|
let d_glBlendFunc : Dispatch = Dispatch::new("glBlendFunc")

///|
pub fn gl_blend_func(sfactor : UInt, dfactor : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glBlendFunc.get().unsafe_into()
  fp(sfactor, dfactor)
}

///|
let d_glBlendFuncIndexedAMD : Dispatch = Dispatch::with_aliases(
  "glBlendFuncIndexedAMD",
  ["glBlendFunci", "glBlendFunciARB", "glBlendFunciEXT", "glBlendFunciOES"],
)

///|
pub fn gl_blend_func_indexed_amd(buf : UInt, src : UInt, dst : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glBlendFuncIndexedAMD
    .get()
    .unsafe_into()
  fp(buf, src, dst)
}

///|
let d_glBlendFuncSeparate : Dispatch = Dispatch::with_aliases(
  "glBlendFuncSeparate",
  ["glBlendFuncSeparateEXT", "glBlendFuncSeparateINGR"],
)

///|
pub fn gl_blend_func_separate(
  sfactorRGB : UInt,
  dfactorRGB : UInt,
  sfactorAlpha : UInt,
  dfactorAlpha : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt) -> Unit] = d_glBlendFuncSeparate
    .get()
    .unsafe_into()
  fp(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha)
}

///|
let d_glBlendFuncSeparateEXT : Dispatch = Dispatch::with_aliases(
  "glBlendFuncSeparateEXT",
  ["glBlendFuncSeparate", "glBlendFuncSeparateINGR"],
)

///|
pub fn gl_blend_func_separate_ext(
  sfactorRGB : UInt,
  dfactorRGB : UInt,
  sfactorAlpha : UInt,
  dfactorAlpha : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt) -> Unit] = d_glBlendFuncSeparateEXT
    .get()
    .unsafe_into()
  fp(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha)
}

///|
let d_glBlendFuncSeparateINGR : Dispatch = Dispatch::with_aliases(
  "glBlendFuncSeparateINGR",
  ["glBlendFuncSeparate", "glBlendFuncSeparateEXT"],
)

///|
pub fn gl_blend_func_separate_ingr(
  sfactorRGB : UInt,
  dfactorRGB : UInt,
  sfactorAlpha : UInt,
  dfactorAlpha : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt) -> Unit] = d_glBlendFuncSeparateINGR
    .get()
    .unsafe_into()
  fp(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha)
}

///|
let d_glBlendFuncSeparateIndexedAMD : Dispatch = Dispatch::with_aliases(
  "glBlendFuncSeparateIndexedAMD",
  [
    "glBlendFuncSeparatei", "glBlendFuncSeparateiARB", "glBlendFuncSeparateiEXT",
    "glBlendFuncSeparateiOES",
  ],
)

///|
pub fn gl_blend_func_separate_indexed_amd(
  buf : UInt,
  srcRGB : UInt,
  dstRGB : UInt,
  srcAlpha : UInt,
  dstAlpha : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, UInt) -> Unit] = d_glBlendFuncSeparateIndexedAMD
    .get()
    .unsafe_into()
  fp(buf, srcRGB, dstRGB, srcAlpha, dstAlpha)
}

///|
let d_glBlendFuncSeparateOES : Dispatch = Dispatch::new(
  "glBlendFuncSeparateOES",
)

///|
pub fn gl_blend_func_separate_oes(
  srcRGB : UInt,
  dstRGB : UInt,
  srcAlpha : UInt,
  dstAlpha : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt) -> Unit] = d_glBlendFuncSeparateOES
    .get()
    .unsafe_into()
  fp(srcRGB, dstRGB, srcAlpha, dstAlpha)
}

///|
let d_glBlendFuncSeparatei : Dispatch = Dispatch::with_aliases(
  "glBlendFuncSeparatei",
  [
    "glBlendFuncSeparateIndexedAMD", "glBlendFuncSeparateiARB", "glBlendFuncSeparateiEXT",
    "glBlendFuncSeparateiOES",
  ],
)

///|
pub fn gl_blend_func_separatei(
  buf : UInt,
  srcRGB : UInt,
  dstRGB : UInt,
  srcAlpha : UInt,
  dstAlpha : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, UInt) -> Unit] = d_glBlendFuncSeparatei
    .get()
    .unsafe_into()
  fp(buf, srcRGB, dstRGB, srcAlpha, dstAlpha)
}

///|
let d_glBlendFuncSeparateiARB : Dispatch = Dispatch::with_aliases(
  "glBlendFuncSeparateiARB",
  [
    "glBlendFuncSeparateIndexedAMD", "glBlendFuncSeparatei", "glBlendFuncSeparateiEXT",
    "glBlendFuncSeparateiOES",
  ],
)

///|
pub fn gl_blend_func_separatei_arb(
  buf : UInt,
  srcRGB : UInt,
  dstRGB : UInt,
  srcAlpha : UInt,
  dstAlpha : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, UInt) -> Unit] = d_glBlendFuncSeparateiARB
    .get()
    .unsafe_into()
  fp(buf, srcRGB, dstRGB, srcAlpha, dstAlpha)
}

///|
let d_glBlendFuncSeparateiEXT : Dispatch = Dispatch::with_aliases(
  "glBlendFuncSeparateiEXT",
  [
    "glBlendFuncSeparateIndexedAMD", "glBlendFuncSeparatei", "glBlendFuncSeparateiARB",
    "glBlendFuncSeparateiOES",
  ],
)

///|
pub fn gl_blend_func_separatei_ext(
  buf : UInt,
  srcRGB : UInt,
  dstRGB : UInt,
  srcAlpha : UInt,
  dstAlpha : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, UInt) -> Unit] = d_glBlendFuncSeparateiEXT
    .get()
    .unsafe_into()
  fp(buf, srcRGB, dstRGB, srcAlpha, dstAlpha)
}

///|
let d_glBlendFuncSeparateiOES : Dispatch = Dispatch::with_aliases(
  "glBlendFuncSeparateiOES",
  [
    "glBlendFuncSeparateIndexedAMD", "glBlendFuncSeparatei", "glBlendFuncSeparateiARB",
    "glBlendFuncSeparateiEXT",
  ],
)

///|
pub fn gl_blend_func_separatei_oes(
  buf : UInt,
  srcRGB : UInt,
  dstRGB : UInt,
  srcAlpha : UInt,
  dstAlpha : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, UInt) -> Unit] = d_glBlendFuncSeparateiOES
    .get()
    .unsafe_into()
  fp(buf, srcRGB, dstRGB, srcAlpha, dstAlpha)
}

///|
let d_glBlendFunci : Dispatch = Dispatch::with_aliases("glBlendFunci", [
  "glBlendFuncIndexedAMD", "glBlendFunciARB", "glBlendFunciEXT", "glBlendFunciOES",
])

///|
pub fn gl_blend_funci(buf : UInt, src : UInt, dst : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glBlendFunci
    .get()
    .unsafe_into()
  fp(buf, src, dst)
}

///|
let d_glBlendFunciARB : Dispatch = Dispatch::with_aliases("glBlendFunciARB", [
  "glBlendFuncIndexedAMD", "glBlendFunci", "glBlendFunciEXT", "glBlendFunciOES",
])

///|
pub fn gl_blend_funci_arb(buf : UInt, src : UInt, dst : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glBlendFunciARB
    .get()
    .unsafe_into()
  fp(buf, src, dst)
}

///|
let d_glBlendFunciEXT : Dispatch = Dispatch::with_aliases("glBlendFunciEXT", [
  "glBlendFuncIndexedAMD", "glBlendFunci", "glBlendFunciARB", "glBlendFunciOES",
])

///|
pub fn gl_blend_funci_ext(buf : UInt, src : UInt, dst : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glBlendFunciEXT
    .get()
    .unsafe_into()
  fp(buf, src, dst)
}

///|
let d_glBlendFunciOES : Dispatch = Dispatch::with_aliases("glBlendFunciOES", [
  "glBlendFuncIndexedAMD", "glBlendFunci", "glBlendFunciARB", "glBlendFunciEXT",
])

///|
pub fn gl_blend_funci_oes(buf : UInt, src : UInt, dst : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glBlendFunciOES
    .get()
    .unsafe_into()
  fp(buf, src, dst)
}

///|
let d_glBlendParameteriNV : Dispatch = Dispatch::new("glBlendParameteriNV")

///|
pub fn gl_blend_parameteri_nv(pname : UInt, value : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glBlendParameteriNV
    .get()
    .unsafe_into()
  fp(pname, value)
}

///|
let d_glBlitFramebuffer : Dispatch = Dispatch::with_aliases(
  "glBlitFramebuffer",
  ["glBlitFramebufferEXT", "glBlitFramebufferNV"],
)

///|
pub fn gl_blit_framebuffer(
  srcX0 : Int,
  srcY0 : Int,
  srcX1 : Int,
  srcY1 : Int,
  dstX0 : Int,
  dstY0 : Int,
  dstX1 : Int,
  dstY1 : Int,
  mask : UInt,
  filter : UInt,
) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int, Int, Int, Int, Int, UInt, UInt) -> Unit] = d_glBlitFramebuffer
    .get()
    .unsafe_into()
  fp(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter)
}

///|
let d_glBlitFramebufferANGLE : Dispatch = Dispatch::new(
  "glBlitFramebufferANGLE",
)

///|
pub fn gl_blit_framebuffer_angle(
  srcX0 : Int,
  srcY0 : Int,
  srcX1 : Int,
  srcY1 : Int,
  dstX0 : Int,
  dstY0 : Int,
  dstX1 : Int,
  dstY1 : Int,
  mask : UInt,
  filter : UInt,
) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int, Int, Int, Int, Int, UInt, UInt) -> Unit] = d_glBlitFramebufferANGLE
    .get()
    .unsafe_into()
  fp(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter)
}

///|
let d_glBlitFramebufferEXT : Dispatch = Dispatch::with_aliases(
  "glBlitFramebufferEXT",
  ["glBlitFramebuffer", "glBlitFramebufferNV"],
)

///|
pub fn gl_blit_framebuffer_ext(
  srcX0 : Int,
  srcY0 : Int,
  srcX1 : Int,
  srcY1 : Int,
  dstX0 : Int,
  dstY0 : Int,
  dstX1 : Int,
  dstY1 : Int,
  mask : UInt,
  filter : UInt,
) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int, Int, Int, Int, Int, UInt, UInt) -> Unit] = d_glBlitFramebufferEXT
    .get()
    .unsafe_into()
  fp(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter)
}

///|
let d_glBlitFramebufferLayerEXT : Dispatch = Dispatch::new(
  "glBlitFramebufferLayerEXT",
)

///|
pub fn gl_blit_framebuffer_layer_ext(
  srcX0 : Int,
  srcY0 : Int,
  srcX1 : Int,
  srcY1 : Int,
  srcLayer : Int,
  dstX0 : Int,
  dstY0 : Int,
  dstX1 : Int,
  dstY1 : Int,
  dstLayer : Int,
  mask : UInt,
  filter : UInt,
) -> Unit {
  let fp : FuncRef[
    (Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, UInt, UInt) -> Unit,
  ] = d_glBlitFramebufferLayerEXT.get().unsafe_into()
  fp(
    srcX0, srcY0, srcX1, srcY1, srcLayer, dstX0, dstY0, dstX1, dstY1, dstLayer, mask,
    filter,
  )
}

///|
let d_glBlitFramebufferLayersEXT : Dispatch = Dispatch::new(
  "glBlitFramebufferLayersEXT",
)

///|
pub fn gl_blit_framebuffer_layers_ext(
  srcX0 : Int,
  srcY0 : Int,
  srcX1 : Int,
  srcY1 : Int,
  dstX0 : Int,
  dstY0 : Int,
  dstX1 : Int,
  dstY1 : Int,
  mask : UInt,
  filter : UInt,
) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int, Int, Int, Int, Int, UInt, UInt) -> Unit] = d_glBlitFramebufferLayersEXT
    .get()
    .unsafe_into()
  fp(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter)
}

///|
let d_glBlitFramebufferNV : Dispatch = Dispatch::with_aliases(
  "glBlitFramebufferNV",
  ["glBlitFramebuffer", "glBlitFramebufferEXT"],
)

///|
pub fn gl_blit_framebuffer_nv(
  srcX0 : Int,
  srcY0 : Int,
  srcX1 : Int,
  srcY1 : Int,
  dstX0 : Int,
  dstY0 : Int,
  dstX1 : Int,
  dstY1 : Int,
  mask : UInt,
  filter : UInt,
) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int, Int, Int, Int, Int, UInt, UInt) -> Unit] = d_glBlitFramebufferNV
    .get()
    .unsafe_into()
  fp(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter)
}

///|
let d_glBlitNamedFramebuffer : Dispatch = Dispatch::new(
  "glBlitNamedFramebuffer",
)

///|
pub fn gl_blit_named_framebuffer(
  readFramebuffer : UInt,
  drawFramebuffer : UInt,
  srcX0 : Int,
  srcY0 : Int,
  srcX1 : Int,
  srcY1 : Int,
  dstX0 : Int,
  dstY0 : Int,
  dstX1 : Int,
  dstY1 : Int,
  mask : UInt,
  filter : UInt,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, Int, Int, Int, Int, Int, Int, Int, Int, UInt, UInt) -> Unit,
  ] = d_glBlitNamedFramebuffer.get().unsafe_into()
  fp(
    readFramebuffer, drawFramebuffer, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1,
    dstY1, mask, filter,
  )
}

///|
let d_glBufferAddressRangeNV : Dispatch = Dispatch::new(
  "glBufferAddressRangeNV",
)

///|
pub fn gl_buffer_address_range_nv(
  pname : UInt,
  index : UInt,
  address : UInt64,
  length : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt64, Int64) -> Unit] = d_glBufferAddressRangeNV
    .get()
    .unsafe_into()
  fp(pname, index, address, length)
}

///|
let d_glBufferAttachMemoryNV : Dispatch = Dispatch::new(
  "glBufferAttachMemoryNV",
)

///|
pub fn gl_buffer_attach_memory_nv(
  target : UInt,
  memory : UInt,
  offset : UInt64,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt64) -> Unit] = d_glBufferAttachMemoryNV
    .get()
    .unsafe_into()
  fp(target, memory, offset)
}

///|
let d_glBufferPageCommitmentARB : Dispatch = Dispatch::new(
  "glBufferPageCommitmentARB",
)

///|
pub fn gl_buffer_page_commitment_arb(
  target : UInt,
  offset : Int64,
  size : Int64,
  commit : Bool,
) -> Unit {
  let fp : FuncRef[(UInt, Int64, Int64, Bool) -> Unit] = d_glBufferPageCommitmentARB
    .get()
    .unsafe_into()
  fp(target, offset, size, commit)
}

///|
let d_glBufferPageCommitmentMemNV : Dispatch = Dispatch::new(
  "glBufferPageCommitmentMemNV",
)

///|
pub fn gl_buffer_page_commitment_mem_nv(
  target : UInt,
  offset : Int64,
  size : Int64,
  memory : UInt,
  memOffset : UInt64,
  commit : Bool,
) -> Unit {
  let fp : FuncRef[(UInt, Int64, Int64, UInt, UInt64, Bool) -> Unit] = d_glBufferPageCommitmentMemNV
    .get()
    .unsafe_into()
  fp(target, offset, size, memory, memOffset, commit)
}

///|
let d_glBufferParameteriAPPLE : Dispatch = Dispatch::new(
  "glBufferParameteriAPPLE",
)

///|
pub fn gl_buffer_parameteri_apple(
  target : UInt,
  pname : UInt,
  param : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int) -> Unit] = d_glBufferParameteriAPPLE
    .get()
    .unsafe_into()
  fp(target, pname, param)
}

///|
let d_glBufferStorage : Dispatch = Dispatch::with_aliases("glBufferStorage", [
  "glBufferStorageEXT",
])

///|
pub fn gl_buffer_storage(
  target : UInt,
  size : Int64,
  data : Bytes,
  flags : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, Int64, @pointer.Pointer[Byte], UInt) -> Unit] = d_glBufferStorage
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) { fp(target, size, data_p, flags) })
}

///|
let d_glBufferStorageEXT : Dispatch = Dispatch::with_aliases(
  "glBufferStorageEXT",
  ["glBufferStorage"],
)

///|
pub fn gl_buffer_storage_ext(
  target : UInt,
  size : Int64,
  data : Bytes,
  flags : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, Int64, @pointer.Pointer[Byte], UInt) -> Unit] = d_glBufferStorageEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) { fp(target, size, data_p, flags) })
}

///|
let d_glBufferStorageExternalEXT : Dispatch = Dispatch::new(
  "glBufferStorageExternalEXT",
)

///|
pub fn gl_buffer_storage_external_ext(
  target : UInt,
  offset : Int64,
  size : Int64,
  clientBuffer : GLeglClientBufferEXT,
  flags : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, Int64, Int64, GLeglClientBufferEXT, UInt) -> Unit] = d_glBufferStorageExternalEXT
    .get()
    .unsafe_into()
  fp(target, offset, size, clientBuffer, flags)
}

///|
let d_glBufferStorageMemEXT : Dispatch = Dispatch::new("glBufferStorageMemEXT")

///|
pub fn gl_buffer_storage_mem_ext(
  target : UInt,
  size : Int64,
  memory : UInt,
  offset : UInt64,
) -> Unit {
  let fp : FuncRef[(UInt, Int64, UInt, UInt64) -> Unit] = d_glBufferStorageMemEXT
    .get()
    .unsafe_into()
  fp(target, size, memory, offset)
}

///|
let d_glCallCommandListNV : Dispatch = Dispatch::new("glCallCommandListNV")

///|
pub fn gl_call_command_list_nv(list : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glCallCommandListNV.get().unsafe_into()
  fp(list)
}

///|
let d_glCallList : Dispatch = Dispatch::new("glCallList")

///|
pub fn gl_call_list(list : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glCallList.get().unsafe_into()
  fp(list)
}

///|
let d_glCallLists : Dispatch = Dispatch::new("glCallLists")

///|
pub fn gl_call_lists(n : Int, type_ : UInt, lists : Bytes) -> Unit {
  let fp : FuncRef[(Int, UInt, @pointer.Pointer[Byte]) -> Unit] = d_glCallLists
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(lists, fn(lists_p) { fp(n, type_, lists_p) })
}

///|
let d_glCheckFramebufferStatus : Dispatch = Dispatch::with_aliases(
  "glCheckFramebufferStatus",
  ["glCheckFramebufferStatusEXT"],
)

///|
pub fn gl_check_framebuffer_status(target : UInt) -> UInt {
  let fp : FuncRef[(UInt) -> UInt] = d_glCheckFramebufferStatus
    .get()
    .unsafe_into()
  fp(target)
}

///|
let d_glCheckFramebufferStatusEXT : Dispatch = Dispatch::with_aliases(
  "glCheckFramebufferStatusEXT",
  ["glCheckFramebufferStatus"],
)

///|
pub fn gl_check_framebuffer_status_ext(target : UInt) -> UInt {
  let fp : FuncRef[(UInt) -> UInt] = d_glCheckFramebufferStatusEXT
    .get()
    .unsafe_into()
  fp(target)
}

///|
let d_glCheckFramebufferStatusOES : Dispatch = Dispatch::new(
  "glCheckFramebufferStatusOES",
)

///|
pub fn gl_check_framebuffer_status_oes(target : UInt) -> UInt {
  let fp : FuncRef[(UInt) -> UInt] = d_glCheckFramebufferStatusOES
    .get()
    .unsafe_into()
  fp(target)
}

///|
let d_glCheckNamedFramebufferStatus : Dispatch = Dispatch::new(
  "glCheckNamedFramebufferStatus",
)

///|
pub fn gl_check_named_framebuffer_status(
  framebuffer : UInt,
  target : UInt,
) -> UInt {
  let fp : FuncRef[(UInt, UInt) -> UInt] = d_glCheckNamedFramebufferStatus
    .get()
    .unsafe_into()
  fp(framebuffer, target)
}

///|
let d_glCheckNamedFramebufferStatusEXT : Dispatch = Dispatch::new(
  "glCheckNamedFramebufferStatusEXT",
)

///|
pub fn gl_check_named_framebuffer_status_ext(
  framebuffer : UInt,
  target : UInt,
) -> UInt {
  let fp : FuncRef[(UInt, UInt) -> UInt] = d_glCheckNamedFramebufferStatusEXT
    .get()
    .unsafe_into()
  fp(framebuffer, target)
}

///|
let d_glClampColor : Dispatch = Dispatch::with_aliases("glClampColor", [
  "glClampColorARB",
])

///|
pub fn gl_clamp_color(target : UInt, clamp : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glClampColor.get().unsafe_into()
  fp(target, clamp)
}

///|
let d_glClampColorARB : Dispatch = Dispatch::with_aliases("glClampColorARB", [
  "glClampColor",
])

///|
pub fn gl_clamp_color_arb(target : UInt, clamp : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glClampColorARB.get().unsafe_into()
  fp(target, clamp)
}

///|
let d_glClear : Dispatch = Dispatch::new("glClear")

///|
pub fn gl_clear(mask : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glClear.get().unsafe_into()
  fp(mask)
}

///|
let d_glClearAccum : Dispatch = Dispatch::new("glClearAccum")

///|
pub fn gl_clear_accum(
  red : Float,
  green : Float,
  blue : Float,
  alpha : Float,
) -> Unit {
  let fp : FuncRef[(Float, Float, Float, Float) -> Unit] = d_glClearAccum
    .get()
    .unsafe_into()
  fp(red, green, blue, alpha)
}

///|
let d_glClearAccumxOES : Dispatch = Dispatch::new("glClearAccumxOES")

///|
pub fn gl_clear_accumx_oes(
  red : Int,
  green : Int,
  blue : Int,
  alpha : Int,
) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int) -> Unit] = d_glClearAccumxOES
    .get()
    .unsafe_into()
  fp(red, green, blue, alpha)
}

///|
let d_glClearBufferData : Dispatch = Dispatch::new("glClearBufferData")

///|
pub fn gl_clear_buffer_data(
  target : UInt,
  internalformat : UInt,
  format : UInt,
  type_ : UInt,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, @pointer.Pointer[Byte]) -> Unit] = d_glClearBufferData
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) {
    fp(target, internalformat, format, type_, data_p)
  })
}

///|
let d_glClearBufferSubData : Dispatch = Dispatch::new("glClearBufferSubData")

///|
pub fn gl_clear_buffer_sub_data(
  target : UInt,
  internalformat : UInt,
  offset : Int64,
  size : Int64,
  format : UInt,
  type_ : UInt,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, Int64, Int64, UInt, UInt, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glClearBufferSubData.get().unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) {
    fp(target, internalformat, offset, size, format, type_, data_p)
  })
}

///|
let d_glClearBufferfi : Dispatch = Dispatch::new("glClearBufferfi")

///|
pub fn gl_clear_bufferfi(
  buffer : UInt,
  drawbuffer : Int,
  depth : Float,
  stencil : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Float, Int) -> Unit] = d_glClearBufferfi
    .get()
    .unsafe_into()
  fp(buffer, drawbuffer, depth, stencil)
}

///|
let d_glClearBufferfv : Dispatch = Dispatch::new("glClearBufferfv")

///|
pub fn gl_clear_bufferfv(
  buffer : UInt,
  drawbuffer : Int,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Float]) -> Unit] = d_glClearBufferfv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(buffer, drawbuffer, value_p) })
}

///|
let d_glClearBufferiv : Dispatch = Dispatch::new("glClearBufferiv")

///|
pub fn gl_clear_bufferiv(
  buffer : UInt,
  drawbuffer : Int,
  value : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Int]) -> Unit] = d_glClearBufferiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(buffer, drawbuffer, value_p) })
}

///|
let d_glClearBufferuiv : Dispatch = Dispatch::new("glClearBufferuiv")

///|
pub fn gl_clear_bufferuiv(
  buffer : UInt,
  drawbuffer : Int,
  value : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[UInt]) -> Unit] = d_glClearBufferuiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(buffer, drawbuffer, value_p) })
}

///|
let d_glClearColor : Dispatch = Dispatch::new("glClearColor")

///|
pub fn gl_clear_color(
  red : Float,
  green : Float,
  blue : Float,
  alpha : Float,
) -> Unit {
  let fp : FuncRef[(Float, Float, Float, Float) -> Unit] = d_glClearColor
    .get()
    .unsafe_into()
  fp(red, green, blue, alpha)
}

///|
let d_glClearColorIiEXT : Dispatch = Dispatch::new("glClearColorIiEXT")

///|
pub fn gl_clear_color_ii_ext(
  red : Int,
  green : Int,
  blue : Int,
  alpha : Int,
) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int) -> Unit] = d_glClearColorIiEXT
    .get()
    .unsafe_into()
  fp(red, green, blue, alpha)
}

///|
let d_glClearColorIuiEXT : Dispatch = Dispatch::new("glClearColorIuiEXT")

///|
pub fn gl_clear_color_iui_ext(
  red : UInt,
  green : UInt,
  blue : UInt,
  alpha : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt) -> Unit] = d_glClearColorIuiEXT
    .get()
    .unsafe_into()
  fp(red, green, blue, alpha)
}

///|
let d_glClearColorx : Dispatch = Dispatch::new("glClearColorx")

///|
pub fn gl_clear_colorx(red : Int, green : Int, blue : Int, alpha : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int) -> Unit] = d_glClearColorx
    .get()
    .unsafe_into()
  fp(red, green, blue, alpha)
}

///|
let d_glClearColorxOES : Dispatch = Dispatch::new("glClearColorxOES")

///|
pub fn gl_clear_colorx_oes(
  red : Int,
  green : Int,
  blue : Int,
  alpha : Int,
) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int) -> Unit] = d_glClearColorxOES
    .get()
    .unsafe_into()
  fp(red, green, blue, alpha)
}

///|
let d_glClearDepth : Dispatch = Dispatch::new("glClearDepth")

///|
pub fn gl_clear_depth(depth : Double) -> Unit {
  let fp : FuncRef[(Double) -> Unit] = d_glClearDepth.get().unsafe_into()
  fp(depth)
}

///|
let d_glClearDepthdNV : Dispatch = Dispatch::new("glClearDepthdNV")

///|
pub fn gl_clear_depthd_nv(depth : Double) -> Unit {
  let fp : FuncRef[(Double) -> Unit] = d_glClearDepthdNV.get().unsafe_into()
  fp(depth)
}

///|
let d_glClearDepthf : Dispatch = Dispatch::with_aliases("glClearDepthf", [
  "glClearDepthfOES",
])

///|
pub fn gl_clear_depthf(d : Float) -> Unit {
  let fp : FuncRef[(Float) -> Unit] = d_glClearDepthf.get().unsafe_into()
  fp(d)
}

///|
let d_glClearDepthfOES : Dispatch = Dispatch::with_aliases("glClearDepthfOES", [
  "glClearDepthf",
])

///|
pub fn gl_clear_depthf_oes(depth : Float) -> Unit {
  let fp : FuncRef[(Float) -> Unit] = d_glClearDepthfOES.get().unsafe_into()
  fp(depth)
}

///|
let d_glClearDepthx : Dispatch = Dispatch::new("glClearDepthx")

///|
pub fn gl_clear_depthx(depth : Int) -> Unit {
  let fp : FuncRef[(Int) -> Unit] = d_glClearDepthx.get().unsafe_into()
  fp(depth)
}

///|
let d_glClearDepthxOES : Dispatch = Dispatch::new("glClearDepthxOES")

///|
pub fn gl_clear_depthx_oes(depth : Int) -> Unit {
  let fp : FuncRef[(Int) -> Unit] = d_glClearDepthxOES.get().unsafe_into()
  fp(depth)
}

///|
let d_glClearIndex : Dispatch = Dispatch::new("glClearIndex")

///|
pub fn gl_clear_index(c : Float) -> Unit {
  let fp : FuncRef[(Float) -> Unit] = d_glClearIndex.get().unsafe_into()
  fp(c)
}

///|
let d_glClearNamedBufferData : Dispatch = Dispatch::new(
  "glClearNamedBufferData",
)

///|
pub fn gl_clear_named_buffer_data(
  buffer : UInt,
  internalformat : UInt,
  format : UInt,
  type_ : UInt,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, @pointer.Pointer[Byte]) -> Unit] = d_glClearNamedBufferData
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) {
    fp(buffer, internalformat, format, type_, data_p)
  })
}

///|
let d_glClearNamedBufferDataEXT : Dispatch = Dispatch::new(
  "glClearNamedBufferDataEXT",
)

///|
pub fn gl_clear_named_buffer_data_ext(
  buffer : UInt,
  internalformat : UInt,
  format : UInt,
  type_ : UInt,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, @pointer.Pointer[Byte]) -> Unit] = d_glClearNamedBufferDataEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) {
    fp(buffer, internalformat, format, type_, data_p)
  })
}

///|
let d_glClearNamedBufferSubData : Dispatch = Dispatch::new(
  "glClearNamedBufferSubData",
)

///|
pub fn gl_clear_named_buffer_sub_data(
  buffer : UInt,
  internalformat : UInt,
  offset : Int64,
  size : Int64,
  format : UInt,
  type_ : UInt,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, Int64, Int64, UInt, UInt, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glClearNamedBufferSubData.get().unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) {
    fp(buffer, internalformat, offset, size, format, type_, data_p)
  })
}

///|
let d_glClearNamedBufferSubDataEXT : Dispatch = Dispatch::new(
  "glClearNamedBufferSubDataEXT",
)

///|
pub fn gl_clear_named_buffer_sub_data_ext(
  buffer : UInt,
  internalformat : UInt,
  offset : Int64,
  size : Int64,
  format : UInt,
  type_ : UInt,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, Int64, Int64, UInt, UInt, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glClearNamedBufferSubDataEXT.get().unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) {
    fp(buffer, internalformat, offset, size, format, type_, data_p)
  })
}

///|
let d_glClearNamedFramebufferfi : Dispatch = Dispatch::new(
  "glClearNamedFramebufferfi",
)

///|
pub fn gl_clear_named_framebufferfi(
  framebuffer : UInt,
  buffer : UInt,
  drawbuffer : Int,
  depth : Float,
  stencil : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, Float, Int) -> Unit] = d_glClearNamedFramebufferfi
    .get()
    .unsafe_into()
  fp(framebuffer, buffer, drawbuffer, depth, stencil)
}

///|
let d_glClearNamedFramebufferfv : Dispatch = Dispatch::new(
  "glClearNamedFramebufferfv",
)

///|
pub fn gl_clear_named_framebufferfv(
  framebuffer : UInt,
  buffer : UInt,
  drawbuffer : Int,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, @pointer.Pointer[Float]) -> Unit] = d_glClearNamedFramebufferfv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(framebuffer, buffer, drawbuffer, value_p)
  })
}

///|
let d_glClearNamedFramebufferiv : Dispatch = Dispatch::new(
  "glClearNamedFramebufferiv",
)

///|
pub fn gl_clear_named_framebufferiv(
  framebuffer : UInt,
  buffer : UInt,
  drawbuffer : Int,
  value : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, @pointer.Pointer[Int]) -> Unit] = d_glClearNamedFramebufferiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(framebuffer, buffer, drawbuffer, value_p)
  })
}

///|
let d_glClearNamedFramebufferuiv : Dispatch = Dispatch::new(
  "glClearNamedFramebufferuiv",
)

///|
pub fn gl_clear_named_framebufferuiv(
  framebuffer : UInt,
  buffer : UInt,
  drawbuffer : Int,
  value : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, @pointer.Pointer[UInt]) -> Unit] = d_glClearNamedFramebufferuiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(framebuffer, buffer, drawbuffer, value_p)
  })
}

///|
let d_glClearPixelLocalStorageuiEXT : Dispatch = Dispatch::new(
  "glClearPixelLocalStorageuiEXT",
)

///|
pub fn gl_clear_pixel_local_storageui_ext(
  offset : Int,
  n : Int,
  values : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[UInt]) -> Unit] = d_glClearPixelLocalStorageuiEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(values, fn(values_p) { fp(offset, n, values_p) })
}

///|
let d_glClearStencil : Dispatch = Dispatch::new("glClearStencil")

///|
pub fn gl_clear_stencil(s : Int) -> Unit {
  let fp : FuncRef[(Int) -> Unit] = d_glClearStencil.get().unsafe_into()
  fp(s)
}

///|
let d_glClearTexImage : Dispatch = Dispatch::with_aliases("glClearTexImage", [
  "glClearTexImageEXT",
])

///|
pub fn gl_clear_tex_image(
  texture : UInt,
  level : Int,
  format : UInt,
  type_ : UInt,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, UInt, @pointer.Pointer[Byte]) -> Unit] = d_glClearTexImage
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) {
    fp(texture, level, format, type_, data_p)
  })
}

///|
let d_glClearTexImageEXT : Dispatch = Dispatch::with_aliases(
  "glClearTexImageEXT",
  ["glClearTexImage"],
)

///|
pub fn gl_clear_tex_image_ext(
  texture : UInt,
  level : Int,
  format : UInt,
  type_ : UInt,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, UInt, @pointer.Pointer[Byte]) -> Unit] = d_glClearTexImageEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) {
    fp(texture, level, format, type_, data_p)
  })
}

///|
let d_glClearTexSubImage : Dispatch = Dispatch::with_aliases(
  "glClearTexSubImage",
  ["glClearTexSubImageEXT"],
)

///|
pub fn gl_clear_tex_sub_image(
  texture : UInt,
  level : Int,
  xoffset : Int,
  yoffset : Int,
  zoffset : Int,
  width : Int,
  height : Int,
  depth : Int,
  format : UInt,
  type_ : UInt,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      Int,
      Int,
      Int,
      Int,
      Int,
      Int,
      Int,
      UInt,
      UInt,
      @pointer.Pointer[Byte],
    ) -> Unit,
  ] = d_glClearTexSubImage.get().unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) {
    fp(
      texture, level, xoffset, yoffset, zoffset, width, height, depth, format, type_,
      data_p,
    )
  })
}

///|
let d_glClearTexSubImageEXT : Dispatch = Dispatch::with_aliases(
  "glClearTexSubImageEXT",
  ["glClearTexSubImage"],
)

///|
pub fn gl_clear_tex_sub_image_ext(
  texture : UInt,
  level : Int,
  xoffset : Int,
  yoffset : Int,
  zoffset : Int,
  width : Int,
  height : Int,
  depth : Int,
  format : UInt,
  type_ : UInt,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      Int,
      Int,
      Int,
      Int,
      Int,
      Int,
      Int,
      UInt,
      UInt,
      @pointer.Pointer[Byte],
    ) -> Unit,
  ] = d_glClearTexSubImageEXT.get().unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) {
    fp(
      texture, level, xoffset, yoffset, zoffset, width, height, depth, format, type_,
      data_p,
    )
  })
}

///|
let d_glClientActiveTexture : Dispatch = Dispatch::with_aliases(
  "glClientActiveTexture",
  ["glClientActiveTextureARB"],
)

///|
pub fn gl_client_active_texture(texture : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glClientActiveTexture.get().unsafe_into()
  fp(texture)
}

///|
let d_glClientActiveTextureARB : Dispatch = Dispatch::with_aliases(
  "glClientActiveTextureARB",
  ["glClientActiveTexture"],
)

///|
pub fn gl_client_active_texture_arb(texture : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glClientActiveTextureARB
    .get()
    .unsafe_into()
  fp(texture)
}

///|
let d_glClientActiveVertexStreamATI : Dispatch = Dispatch::new(
  "glClientActiveVertexStreamATI",
)

///|
pub fn gl_client_active_vertex_stream_ati(stream : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glClientActiveVertexStreamATI
    .get()
    .unsafe_into()
  fp(stream)
}

///|
let d_glClientAttribDefaultEXT : Dispatch = Dispatch::new(
  "glClientAttribDefaultEXT",
)

///|
pub fn gl_client_attrib_default_ext(mask : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glClientAttribDefaultEXT
    .get()
    .unsafe_into()
  fp(mask)
}

///|
let d_glClientWaitSemaphoreui64NVX : Dispatch = Dispatch::new(
  "glClientWaitSemaphoreui64NVX",
)

///|
pub fn gl_client_wait_semaphoreui64_nvx(
  fenceObjectCount : Int,
  semaphoreArray : FixedArray[UInt],
  fenceValueArray : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[
    (Int, @pointer.Pointer[UInt], @pointer.Pointer[UInt64]) -> Unit,
  ] = d_glClientWaitSemaphoreui64NVX.get().unsafe_into()
  @pointer.borrow_array(semaphoreArray, fn(semaphoreArray_p) {
    @pointer.borrow_array(fenceValueArray, fn(fenceValueArray_p) {
      fp(fenceObjectCount, semaphoreArray_p, fenceValueArray_p)
    })
  })
}

///|
let d_glClientWaitSync : Dispatch = Dispatch::with_aliases("glClientWaitSync", [
  "glClientWaitSyncAPPLE",
])

///|
pub fn gl_client_wait_sync(
  sync : GLsync,
  flags : UInt,
  timeout : UInt64,
) -> UInt {
  let fp : FuncRef[(GLsync, UInt, UInt64) -> UInt] = d_glClientWaitSync
    .get()
    .unsafe_into()
  fp(sync, flags, timeout)
}

///|
let d_glClientWaitSyncAPPLE : Dispatch = Dispatch::with_aliases(
  "glClientWaitSyncAPPLE",
  ["glClientWaitSync"],
)

///|
pub fn gl_client_wait_sync_apple(
  sync : GLsync,
  flags : UInt,
  timeout : UInt64,
) -> UInt {
  let fp : FuncRef[(GLsync, UInt, UInt64) -> UInt] = d_glClientWaitSyncAPPLE
    .get()
    .unsafe_into()
  fp(sync, flags, timeout)
}

///|
let d_glClipControl : Dispatch = Dispatch::with_aliases("glClipControl", [
  "glClipControlEXT",
])

///|
pub fn gl_clip_control(origin : UInt, depth : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glClipControl.get().unsafe_into()
  fp(origin, depth)
}

///|
let d_glClipControlEXT : Dispatch = Dispatch::with_aliases("glClipControlEXT", [
  "glClipControl",
])

///|
pub fn gl_clip_control_ext(origin : UInt, depth : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glClipControlEXT
    .get()
    .unsafe_into()
  fp(origin, depth)
}

///|
let d_glClipPlane : Dispatch = Dispatch::new("glClipPlane")

///|
pub fn gl_clip_plane(plane : UInt, equation : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Double]) -> Unit] = d_glClipPlane
    .get()
    .unsafe_into()
  @pointer.borrow_array(equation, fn(equation_p) { fp(plane, equation_p) })
}

///|
let d_glClipPlanef : Dispatch = Dispatch::new("glClipPlanef")

///|
pub fn gl_clip_planef(p : UInt, eqn : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glClipPlanef
    .get()
    .unsafe_into()
  @pointer.borrow_array(eqn, fn(eqn_p) { fp(p, eqn_p) })
}

///|
let d_glClipPlanefIMG : Dispatch = Dispatch::new("glClipPlanefIMG")

///|
pub fn gl_clip_planef_img(p : UInt, eqn : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glClipPlanefIMG
    .get()
    .unsafe_into()
  @pointer.borrow_array(eqn, fn(eqn_p) { fp(p, eqn_p) })
}

///|
let d_glClipPlanefOES : Dispatch = Dispatch::new("glClipPlanefOES")

///|
pub fn gl_clip_planef_oes(plane : UInt, equation : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glClipPlanefOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(equation, fn(equation_p) { fp(plane, equation_p) })
}

///|
let d_glClipPlanex : Dispatch = Dispatch::new("glClipPlanex")

///|
pub fn gl_clip_planex(plane : UInt, equation : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glClipPlanex
    .get()
    .unsafe_into()
  @pointer.borrow_array(equation, fn(equation_p) { fp(plane, equation_p) })
}

///|
let d_glClipPlanexIMG : Dispatch = Dispatch::new("glClipPlanexIMG")

///|
pub fn gl_clip_planex_img(p : UInt, eqn : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glClipPlanexIMG
    .get()
    .unsafe_into()
  @pointer.borrow_array(eqn, fn(eqn_p) { fp(p, eqn_p) })
}

///|
let d_glClipPlanexOES : Dispatch = Dispatch::new("glClipPlanexOES")

///|
pub fn gl_clip_planex_oes(plane : UInt, equation : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glClipPlanexOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(equation, fn(equation_p) { fp(plane, equation_p) })
}

///|
let d_glColor3b : Dispatch = Dispatch::new("glColor3b")

///|
pub fn gl_color3b(red : Int, green : Int, blue : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glColor3b.get().unsafe_into()
  fp(red, green, blue)
}

///|
let d_glColor3bv : Dispatch = Dispatch::new("glColor3bv")

///|
pub fn gl_color3bv(v : Bytes) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Byte]) -> Unit] = d_glColor3bv
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(v, fn(v_p) { fp(v_p) })
}

///|
let d_glColor3d : Dispatch = Dispatch::new("glColor3d")

///|
pub fn gl_color3d(red : Double, green : Double, blue : Double) -> Unit {
  let fp : FuncRef[(Double, Double, Double) -> Unit] = d_glColor3d
    .get()
    .unsafe_into()
  fp(red, green, blue)
}

///|
let d_glColor3dv : Dispatch = Dispatch::new("glColor3dv")

///|
pub fn gl_color3dv(v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Double]) -> Unit] = d_glColor3dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glColor3f : Dispatch = Dispatch::new("glColor3f")

///|
pub fn gl_color3f(red : Float, green : Float, blue : Float) -> Unit {
  let fp : FuncRef[(Float, Float, Float) -> Unit] = d_glColor3f
    .get()
    .unsafe_into()
  fp(red, green, blue)
}

///|
let d_glColor3fVertex3fSUN : Dispatch = Dispatch::new("glColor3fVertex3fSUN")

///|
pub fn gl_color3f_vertex3f_sun(
  r : Float,
  g : Float,
  b : Float,
  x : Float,
  y : Float,
  z : Float,
) -> Unit {
  let fp : FuncRef[(Float, Float, Float, Float, Float, Float) -> Unit] = d_glColor3fVertex3fSUN
    .get()
    .unsafe_into()
  fp(r, g, b, x, y, z)
}

///|
let d_glColor3fVertex3fvSUN : Dispatch = Dispatch::new("glColor3fVertex3fvSUN")

///|
pub fn gl_color3f_vertex3fv_sun(
  c : FixedArray[Float],
  v : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Float], @pointer.Pointer[Float]) -> Unit] = d_glColor3fVertex3fvSUN
    .get()
    .unsafe_into()
  @pointer.borrow_array(c, fn(c_p) {
    @pointer.borrow_array(v, fn(v_p) { fp(c_p, v_p) })
  })
}

///|
let d_glColor3fv : Dispatch = Dispatch::new("glColor3fv")

///|
pub fn gl_color3fv(v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Float]) -> Unit] = d_glColor3fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glColor3hNV : Dispatch = Dispatch::new("glColor3hNV")

///|
pub fn gl_color3h_nv(red : Int, green : Int, blue : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glColor3hNV.get().unsafe_into()
  fp(red, green, blue)
}

///|
let d_glColor3hvNV : Dispatch = Dispatch::new("glColor3hvNV")

///|
pub fn gl_color3hv_nv(v : FixedArray[UInt16]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[UInt16]) -> Unit] = d_glColor3hvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glColor3i : Dispatch = Dispatch::new("glColor3i")

///|
pub fn gl_color3i(red : Int, green : Int, blue : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glColor3i.get().unsafe_into()
  fp(red, green, blue)
}

///|
let d_glColor3iv : Dispatch = Dispatch::new("glColor3iv")

///|
pub fn gl_color3iv(v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glColor3iv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glColor3s : Dispatch = Dispatch::new("glColor3s")

///|
pub fn gl_color3s(red : Int, green : Int, blue : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glColor3s.get().unsafe_into()
  fp(red, green, blue)
}

///|
let d_glColor3sv : Dispatch = Dispatch::new("glColor3sv")

///|
pub fn gl_color3sv(v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int16]) -> Unit] = d_glColor3sv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glColor3ub : Dispatch = Dispatch::new("glColor3ub")

///|
pub fn gl_color3ub(red : Int, green : Int, blue : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glColor3ub.get().unsafe_into()
  fp(red, green, blue)
}

///|
let d_glColor3ubv : Dispatch = Dispatch::new("glColor3ubv")

///|
pub fn gl_color3ubv(v : Bytes) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Byte]) -> Unit] = d_glColor3ubv
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(v, fn(v_p) { fp(v_p) })
}

///|
let d_glColor3ui : Dispatch = Dispatch::new("glColor3ui")

///|
pub fn gl_color3ui(red : UInt, green : UInt, blue : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glColor3ui
    .get()
    .unsafe_into()
  fp(red, green, blue)
}

///|
let d_glColor3uiv : Dispatch = Dispatch::new("glColor3uiv")

///|
pub fn gl_color3uiv(v : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[UInt]) -> Unit] = d_glColor3uiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glColor3us : Dispatch = Dispatch::new("glColor3us")

///|
pub fn gl_color3us(red : Int, green : Int, blue : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glColor3us.get().unsafe_into()
  fp(red, green, blue)
}

///|
let d_glColor3usv : Dispatch = Dispatch::new("glColor3usv")

///|
pub fn gl_color3usv(v : FixedArray[UInt16]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[UInt16]) -> Unit] = d_glColor3usv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glColor3xOES : Dispatch = Dispatch::new("glColor3xOES")

///|
pub fn gl_color3x_oes(red : Int, green : Int, blue : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glColor3xOES.get().unsafe_into()
  fp(red, green, blue)
}

///|
let d_glColor3xvOES : Dispatch = Dispatch::new("glColor3xvOES")

///|
pub fn gl_color3xv_oes(components : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glColor3xvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(components, fn(components_p) { fp(components_p) })
}

///|
let d_glColor4b : Dispatch = Dispatch::new("glColor4b")

///|
pub fn gl_color4b(red : Int, green : Int, blue : Int, alpha : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int) -> Unit] = d_glColor4b
    .get()
    .unsafe_into()
  fp(red, green, blue, alpha)
}

///|
let d_glColor4bv : Dispatch = Dispatch::new("glColor4bv")

///|
pub fn gl_color4bv(v : Bytes) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Byte]) -> Unit] = d_glColor4bv
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(v, fn(v_p) { fp(v_p) })
}

///|
let d_glColor4d : Dispatch = Dispatch::new("glColor4d")

///|
pub fn gl_color4d(
  red : Double,
  green : Double,
  blue : Double,
  alpha : Double,
) -> Unit {
  let fp : FuncRef[(Double, Double, Double, Double) -> Unit] = d_glColor4d
    .get()
    .unsafe_into()
  fp(red, green, blue, alpha)
}

///|
let d_glColor4dv : Dispatch = Dispatch::new("glColor4dv")

///|
pub fn gl_color4dv(v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Double]) -> Unit] = d_glColor4dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glColor4f : Dispatch = Dispatch::new("glColor4f")

///|
pub fn gl_color4f(
  red : Float,
  green : Float,
  blue : Float,
  alpha : Float,
) -> Unit {
  let fp : FuncRef[(Float, Float, Float, Float) -> Unit] = d_glColor4f
    .get()
    .unsafe_into()
  fp(red, green, blue, alpha)
}

///|
let d_glColor4fNormal3fVertex3fSUN : Dispatch = Dispatch::new(
  "glColor4fNormal3fVertex3fSUN",
)

///|
pub fn gl_color4f_normal3f_vertex3f_sun(
  r : Float,
  g : Float,
  b : Float,
  a : Float,
  nx : Float,
  ny : Float,
  nz : Float,
  x : Float,
  y : Float,
  z : Float,
) -> Unit {
  let fp : FuncRef[
    (Float, Float, Float, Float, Float, Float, Float, Float, Float, Float) -> Unit,
  ] = d_glColor4fNormal3fVertex3fSUN.get().unsafe_into()
  fp(r, g, b, a, nx, ny, nz, x, y, z)
}

///|
let d_glColor4fNormal3fVertex3fvSUN : Dispatch = Dispatch::new(
  "glColor4fNormal3fVertex3fvSUN",
)

///|
pub fn gl_color4f_normal3f_vertex3fv_sun(
  c : FixedArray[Float],
  n : FixedArray[Float],
  v : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[
    (@pointer.Pointer[Float], @pointer.Pointer[Float], @pointer.Pointer[Float]) -> Unit,
  ] = d_glColor4fNormal3fVertex3fvSUN.get().unsafe_into()
  @pointer.borrow_array(c, fn(c_p) {
    @pointer.borrow_array(n, fn(n_p) {
      @pointer.borrow_array(v, fn(v_p) { fp(c_p, n_p, v_p) })
    })
  })
}

///|
let d_glColor4fv : Dispatch = Dispatch::new("glColor4fv")

///|
pub fn gl_color4fv(v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Float]) -> Unit] = d_glColor4fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glColor4hNV : Dispatch = Dispatch::new("glColor4hNV")

///|
pub fn gl_color4h_nv(red : Int, green : Int, blue : Int, alpha : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int) -> Unit] = d_glColor4hNV
    .get()
    .unsafe_into()
  fp(red, green, blue, alpha)
}

///|
let d_glColor4hvNV : Dispatch = Dispatch::new("glColor4hvNV")

///|
pub fn gl_color4hv_nv(v : FixedArray[UInt16]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[UInt16]) -> Unit] = d_glColor4hvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glColor4i : Dispatch = Dispatch::new("glColor4i")

///|
pub fn gl_color4i(red : Int, green : Int, blue : Int, alpha : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int) -> Unit] = d_glColor4i
    .get()
    .unsafe_into()
  fp(red, green, blue, alpha)
}

///|
let d_glColor4iv : Dispatch = Dispatch::new("glColor4iv")

///|
pub fn gl_color4iv(v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glColor4iv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glColor4s : Dispatch = Dispatch::new("glColor4s")

///|
pub fn gl_color4s(red : Int, green : Int, blue : Int, alpha : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int) -> Unit] = d_glColor4s
    .get()
    .unsafe_into()
  fp(red, green, blue, alpha)
}

///|
let d_glColor4sv : Dispatch = Dispatch::new("glColor4sv")

///|
pub fn gl_color4sv(v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int16]) -> Unit] = d_glColor4sv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glColor4ub : Dispatch = Dispatch::new("glColor4ub")

///|
pub fn gl_color4ub(red : Int, green : Int, blue : Int, alpha : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int) -> Unit] = d_glColor4ub
    .get()
    .unsafe_into()
  fp(red, green, blue, alpha)
}

///|
let d_glColor4ubVertex2fSUN : Dispatch = Dispatch::new("glColor4ubVertex2fSUN")

///|
pub fn gl_color4ub_vertex2f_sun(
  r : Int,
  g : Int,
  b : Int,
  a : Int,
  x : Float,
  y : Float,
) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int, Float, Float) -> Unit] = d_glColor4ubVertex2fSUN
    .get()
    .unsafe_into()
  fp(r, g, b, a, x, y)
}

///|
let d_glColor4ubVertex2fvSUN : Dispatch = Dispatch::new(
  "glColor4ubVertex2fvSUN",
)

///|
pub fn gl_color4ub_vertex2fv_sun(c : Bytes, v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Byte], @pointer.Pointer[Float]) -> Unit] = d_glColor4ubVertex2fvSUN
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(c, fn(c_p) {
    @pointer.borrow_array(v, fn(v_p) { fp(c_p, v_p) })
  })
}

///|
let d_glColor4ubVertex3fSUN : Dispatch = Dispatch::new("glColor4ubVertex3fSUN")

///|
pub fn gl_color4ub_vertex3f_sun(
  r : Int,
  g : Int,
  b : Int,
  a : Int,
  x : Float,
  y : Float,
  z : Float,
) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int, Float, Float, Float) -> Unit] = d_glColor4ubVertex3fSUN
    .get()
    .unsafe_into()
  fp(r, g, b, a, x, y, z)
}

///|
let d_glColor4ubVertex3fvSUN : Dispatch = Dispatch::new(
  "glColor4ubVertex3fvSUN",
)

///|
pub fn gl_color4ub_vertex3fv_sun(c : Bytes, v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Byte], @pointer.Pointer[Float]) -> Unit] = d_glColor4ubVertex3fvSUN
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(c, fn(c_p) {
    @pointer.borrow_array(v, fn(v_p) { fp(c_p, v_p) })
  })
}

///|
let d_glColor4ubv : Dispatch = Dispatch::new("glColor4ubv")

///|
pub fn gl_color4ubv(v : Bytes) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Byte]) -> Unit] = d_glColor4ubv
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(v, fn(v_p) { fp(v_p) })
}

///|
let d_glColor4ui : Dispatch = Dispatch::new("glColor4ui")

///|
pub fn gl_color4ui(red : UInt, green : UInt, blue : UInt, alpha : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt) -> Unit] = d_glColor4ui
    .get()
    .unsafe_into()
  fp(red, green, blue, alpha)
}

///|
let d_glColor4uiv : Dispatch = Dispatch::new("glColor4uiv")

///|
pub fn gl_color4uiv(v : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[UInt]) -> Unit] = d_glColor4uiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glColor4us : Dispatch = Dispatch::new("glColor4us")

///|
pub fn gl_color4us(red : Int, green : Int, blue : Int, alpha : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int) -> Unit] = d_glColor4us
    .get()
    .unsafe_into()
  fp(red, green, blue, alpha)
}

///|
let d_glColor4usv : Dispatch = Dispatch::new("glColor4usv")

///|
pub fn gl_color4usv(v : FixedArray[UInt16]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[UInt16]) -> Unit] = d_glColor4usv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glColor4x : Dispatch = Dispatch::new("glColor4x")

///|
pub fn gl_color4x(red : Int, green : Int, blue : Int, alpha : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int) -> Unit] = d_glColor4x
    .get()
    .unsafe_into()
  fp(red, green, blue, alpha)
}

///|
let d_glColor4xOES : Dispatch = Dispatch::new("glColor4xOES")

///|
pub fn gl_color4x_oes(red : Int, green : Int, blue : Int, alpha : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int) -> Unit] = d_glColor4xOES
    .get()
    .unsafe_into()
  fp(red, green, blue, alpha)
}

///|
let d_glColor4xvOES : Dispatch = Dispatch::new("glColor4xvOES")

///|
pub fn gl_color4xv_oes(components : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glColor4xvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(components, fn(components_p) { fp(components_p) })
}

///|
let d_glColorFormatNV : Dispatch = Dispatch::new("glColorFormatNV")

///|
pub fn gl_color_format_nv(size : Int, type_ : UInt, stride : Int) -> Unit {
  let fp : FuncRef[(Int, UInt, Int) -> Unit] = d_glColorFormatNV
    .get()
    .unsafe_into()
  fp(size, type_, stride)
}

///|
let d_glColorFragmentOp1ATI : Dispatch = Dispatch::new("glColorFragmentOp1ATI")

///|
pub fn gl_color_fragment_op1_ati(
  op : UInt,
  dst : UInt,
  dstMask : UInt,
  dstMod : UInt,
  arg1 : UInt,
  arg1Rep : UInt,
  arg1Mod : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, UInt, UInt, UInt) -> Unit] = d_glColorFragmentOp1ATI
    .get()
    .unsafe_into()
  fp(op, dst, dstMask, dstMod, arg1, arg1Rep, arg1Mod)
}

///|
let d_glColorFragmentOp2ATI : Dispatch = Dispatch::new("glColorFragmentOp2ATI")

///|
pub fn gl_color_fragment_op2_ati(
  op : UInt,
  dst : UInt,
  dstMask : UInt,
  dstMod : UInt,
  arg1 : UInt,
  arg1Rep : UInt,
  arg1Mod : UInt,
  arg2 : UInt,
  arg2Rep : UInt,
  arg2Mod : UInt,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, UInt, UInt, UInt, UInt, UInt, UInt, UInt, UInt) -> Unit,
  ] = d_glColorFragmentOp2ATI.get().unsafe_into()
  fp(op, dst, dstMask, dstMod, arg1, arg1Rep, arg1Mod, arg2, arg2Rep, arg2Mod)
}

///|
let d_glColorFragmentOp3ATI : Dispatch = Dispatch::new("glColorFragmentOp3ATI")

///|
pub fn gl_color_fragment_op3_ati(
  op : UInt,
  dst : UInt,
  dstMask : UInt,
  dstMod : UInt,
  arg1 : UInt,
  arg1Rep : UInt,
  arg1Mod : UInt,
  arg2 : UInt,
  arg2Rep : UInt,
  arg2Mod : UInt,
  arg3 : UInt,
  arg3Rep : UInt,
  arg3Mod : UInt,
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      UInt,
      UInt,
      UInt,
      UInt,
      UInt,
      UInt,
      UInt,
      UInt,
      UInt,
      UInt,
      UInt,
      UInt,
    ) -> Unit,
  ] = d_glColorFragmentOp3ATI.get().unsafe_into()
  fp(
    op, dst, dstMask, dstMod, arg1, arg1Rep, arg1Mod, arg2, arg2Rep, arg2Mod, arg3,
    arg3Rep, arg3Mod,
  )
}

///|
let d_glColorMask : Dispatch = Dispatch::new("glColorMask")

///|
pub fn gl_color_mask(
  red : Bool,
  green : Bool,
  blue : Bool,
  alpha : Bool,
) -> Unit {
  let fp : FuncRef[(Bool, Bool, Bool, Bool) -> Unit] = d_glColorMask
    .get()
    .unsafe_into()
  fp(red, green, blue, alpha)
}

///|
let d_glColorMaskIndexedEXT : Dispatch = Dispatch::with_aliases(
  "glColorMaskIndexedEXT",
  ["glColorMaski", "glColorMaskiEXT", "glColorMaskiOES"],
)

///|
pub fn gl_color_mask_indexed_ext(
  index : UInt,
  r : Bool,
  g : Bool,
  b : Bool,
  a : Bool,
) -> Unit {
  let fp : FuncRef[(UInt, Bool, Bool, Bool, Bool) -> Unit] = d_glColorMaskIndexedEXT
    .get()
    .unsafe_into()
  fp(index, r, g, b, a)
}

///|
let d_glColorMaski : Dispatch = Dispatch::with_aliases("glColorMaski", [
  "glColorMaskIndexedEXT", "glColorMaskiEXT", "glColorMaskiOES",
])

///|
pub fn gl_color_maski(
  index : UInt,
  r : Bool,
  g : Bool,
  b : Bool,
  a : Bool,
) -> Unit {
  let fp : FuncRef[(UInt, Bool, Bool, Bool, Bool) -> Unit] = d_glColorMaski
    .get()
    .unsafe_into()
  fp(index, r, g, b, a)
}

///|
let d_glColorMaskiEXT : Dispatch = Dispatch::with_aliases("glColorMaskiEXT", [
  "glColorMaskIndexedEXT", "glColorMaski", "glColorMaskiOES",
])

///|
pub fn gl_color_maski_ext(
  index : UInt,
  r : Bool,
  g : Bool,
  b : Bool,
  a : Bool,
) -> Unit {
  let fp : FuncRef[(UInt, Bool, Bool, Bool, Bool) -> Unit] = d_glColorMaskiEXT
    .get()
    .unsafe_into()
  fp(index, r, g, b, a)
}

///|
let d_glColorMaskiOES : Dispatch = Dispatch::with_aliases("glColorMaskiOES", [
  "glColorMaskIndexedEXT", "glColorMaski", "glColorMaskiEXT",
])

///|
pub fn gl_color_maski_oes(
  index : UInt,
  r : Bool,
  g : Bool,
  b : Bool,
  a : Bool,
) -> Unit {
  let fp : FuncRef[(UInt, Bool, Bool, Bool, Bool) -> Unit] = d_glColorMaskiOES
    .get()
    .unsafe_into()
  fp(index, r, g, b, a)
}

///|
let d_glColorMaterial : Dispatch = Dispatch::new("glColorMaterial")

///|
pub fn gl_color_material(face : UInt, mode : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glColorMaterial.get().unsafe_into()
  fp(face, mode)
}

///|
let d_glColorP3ui : Dispatch = Dispatch::new("glColorP3ui")

///|
pub fn gl_color_p3ui(type_ : UInt, color : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glColorP3ui.get().unsafe_into()
  fp(type_, color)
}

///|
let d_glColorP3uiv : Dispatch = Dispatch::new("glColorP3uiv")

///|
pub fn gl_color_p3uiv(type_ : UInt, color : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt]) -> Unit] = d_glColorP3uiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(color, fn(color_p) { fp(type_, color_p) })
}

///|
let d_glColorP4ui : Dispatch = Dispatch::new("glColorP4ui")

///|
pub fn gl_color_p4ui(type_ : UInt, color : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glColorP4ui.get().unsafe_into()
  fp(type_, color)
}

///|
let d_glColorP4uiv : Dispatch = Dispatch::new("glColorP4uiv")

///|
pub fn gl_color_p4uiv(type_ : UInt, color : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt]) -> Unit] = d_glColorP4uiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(color, fn(color_p) { fp(type_, color_p) })
}

///|
let d_glColorPointer : Dispatch = Dispatch::new("glColorPointer")

///|
/// Configure a vertex array from the buffer currently bound to `GL_ARRAY_BUFFER`.
/// `offset` is a byte offset; client-side arrays are not accepted.
pub fn gl_color_pointer(
  size : Int,
  type_ : UInt,
  stride : Int,
  offset : Int64,
) -> Unit {
  let fp : FuncRef[(Int, UInt, Int, @pointer.Pointer[Unit]) -> Unit] = d_glColorPointer
    .get()
    .unsafe_into()
  fp(size, type_, stride, @pointer.Pointer::unsafe_from_int64(offset))
}

///|
let d_glColorPointerEXT : Dispatch = Dispatch::new("glColorPointerEXT")

///|
pub fn gl_color_pointer_ext(
  size : Int,
  type_ : UInt,
  stride : Int,
  count : Int,
  pointer : Bytes,
) -> Unit {
  let fp : FuncRef[(Int, UInt, Int, Int, @pointer.Pointer[Byte]) -> Unit] = d_glColorPointerEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(pointer, fn(pointer_p) {
    fp(size, type_, stride, count, pointer_p)
  })
}

///|
let d_glColorSubTable : Dispatch = Dispatch::with_aliases("glColorSubTable", [
  "glColorSubTableEXT",
])

///|
pub fn gl_color_sub_table(
  target : UInt,
  start : Int,
  count : Int,
  format : UInt,
  type_ : UInt,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, UInt, UInt, @pointer.Pointer[Byte]) -> Unit] = d_glColorSubTable
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) {
    fp(target, start, count, format, type_, data_p)
  })
}

///|
let d_glColorSubTableEXT : Dispatch = Dispatch::with_aliases(
  "glColorSubTableEXT",
  ["glColorSubTable"],
)

///|
pub fn gl_color_sub_table_ext(
  target : UInt,
  start : Int,
  count : Int,
  format : UInt,
  type_ : UInt,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, UInt, UInt, @pointer.Pointer[Byte]) -> Unit] = d_glColorSubTableEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) {
    fp(target, start, count, format, type_, data_p)
  })
}

///|
let d_glColorTable : Dispatch = Dispatch::with_aliases("glColorTable", [
  "glColorTableEXT", "glColorTableSGI",
])

///|
pub fn gl_color_table(
  target : UInt,
  internalformat : UInt,
  width : Int,
  format : UInt,
  type_ : UInt,
  table : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, Int, UInt, UInt, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glColorTable.get().unsafe_into()
  @pointer.borrow_bytes(table, fn(table_p) {
    fp(target, internalformat, width, format, type_, table_p)
  })
}

///|
let d_glColorTableEXT : Dispatch = Dispatch::with_aliases("glColorTableEXT", [
  "glColorTable", "glColorTableSGI",
])

///|
pub fn gl_color_table_ext(
  target : UInt,
  internalFormat : UInt,
  width : Int,
  format : UInt,
  type_ : UInt,
  table : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, Int, UInt, UInt, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glColorTableEXT.get().unsafe_into()
  @pointer.borrow_bytes(table, fn(table_p) {
    fp(target, internalFormat, width, format, type_, table_p)
  })
}

///|
let d_glColorTableParameterfv : Dispatch = Dispatch::with_aliases(
  "glColorTableParameterfv",
  ["glColorTableParameterfvSGI"],
)

///|
pub fn gl_color_table_parameterfv(
  target : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glColorTableParameterfv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glColorTableParameterfvSGI : Dispatch = Dispatch::with_aliases(
  "glColorTableParameterfvSGI",
  ["glColorTableParameterfv"],
)

///|
pub fn gl_color_table_parameterfv_sgi(
  target : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glColorTableParameterfvSGI
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glColorTableParameteriv : Dispatch = Dispatch::with_aliases(
  "glColorTableParameteriv",
  ["glColorTableParameterivSGI"],
)

///|
pub fn gl_color_table_parameteriv(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glColorTableParameteriv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glColorTableParameterivSGI : Dispatch = Dispatch::with_aliases(
  "glColorTableParameterivSGI",
  ["glColorTableParameteriv"],
)

///|
pub fn gl_color_table_parameteriv_sgi(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glColorTableParameterivSGI
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glColorTableSGI : Dispatch = Dispatch::with_aliases("glColorTableSGI", [
  "glColorTable", "glColorTableEXT",
])

///|
pub fn gl_color_table_sgi(
  target : UInt,
  internalformat : UInt,
  width : Int,
  format : UInt,
  type_ : UInt,
  table : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, Int, UInt, UInt, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glColorTableSGI.get().unsafe_into()
  @pointer.borrow_bytes(table, fn(table_p) {
    fp(target, internalformat, width, format, type_, table_p)
  })
}

///|
let d_glCombinerInputNV : Dispatch = Dispatch::new("glCombinerInputNV")

///|
pub fn gl_combiner_input_nv(
  stage : UInt,
  portion : UInt,
  variable : UInt,
  input : UInt,
  mapping : UInt,
  componentUsage : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, UInt, UInt) -> Unit] = d_glCombinerInputNV
    .get()
    .unsafe_into()
  fp(stage, portion, variable, input, mapping, componentUsage)
}

///|
let d_glCombinerOutputNV : Dispatch = Dispatch::new("glCombinerOutputNV")

///|
pub fn gl_combiner_output_nv(
  stage : UInt,
  portion : UInt,
  abOutput : UInt,
  cdOutput : UInt,
  sumOutput : UInt,
  scale : UInt,
  bias : UInt,
  abDotProduct : Bool,
  cdDotProduct : Bool,
  muxSum : Bool,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, UInt, UInt, UInt, UInt, UInt, Bool, Bool, Bool) -> Unit,
  ] = d_glCombinerOutputNV.get().unsafe_into()
  fp(
    stage, portion, abOutput, cdOutput, sumOutput, scale, bias, abDotProduct, cdDotProduct,
    muxSum,
  )
}

///|
let d_glCombinerParameterfNV : Dispatch = Dispatch::new(
  "glCombinerParameterfNV",
)

///|
pub fn gl_combiner_parameterf_nv(pname : UInt, param : Float) -> Unit {
  let fp : FuncRef[(UInt, Float) -> Unit] = d_glCombinerParameterfNV
    .get()
    .unsafe_into()
  fp(pname, param)
}

///|
let d_glCombinerParameterfvNV : Dispatch = Dispatch::new(
  "glCombinerParameterfvNV",
)

///|
pub fn gl_combiner_parameterfv_nv(
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glCombinerParameterfvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(pname, params_p) })
}

///|
let d_glCombinerParameteriNV : Dispatch = Dispatch::new(
  "glCombinerParameteriNV",
)

///|
pub fn gl_combiner_parameteri_nv(pname : UInt, param : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glCombinerParameteriNV
    .get()
    .unsafe_into()
  fp(pname, param)
}

///|
let d_glCombinerParameterivNV : Dispatch = Dispatch::new(
  "glCombinerParameterivNV",
)

///|
pub fn gl_combiner_parameteriv_nv(
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glCombinerParameterivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(pname, params_p) })
}

///|
let d_glCombinerStageParameterfvNV : Dispatch = Dispatch::new(
  "glCombinerStageParameterfvNV",
)

///|
pub fn gl_combiner_stage_parameterfv_nv(
  stage : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glCombinerStageParameterfvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(stage, pname, params_p) })
}

///|
let d_glCommandListSegmentsNV : Dispatch = Dispatch::new(
  "glCommandListSegmentsNV",
)

///|
pub fn gl_command_list_segments_nv(list : UInt, segments : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glCommandListSegmentsNV
    .get()
    .unsafe_into()
  fp(list, segments)
}

///|
let d_glCompileCommandListNV : Dispatch = Dispatch::new(
  "glCompileCommandListNV",
)

///|
pub fn gl_compile_command_list_nv(list : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glCompileCommandListNV
    .get()
    .unsafe_into()
  fp(list)
}

///|
let d_glCompileShader : Dispatch = Dispatch::with_aliases("glCompileShader", [
  "glCompileShaderARB",
])

///|
pub fn gl_compile_shader(shader : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glCompileShader.get().unsafe_into()
  fp(shader)
}

///|
let d_glCompileShaderIncludeARB : Dispatch = Dispatch::new(
  "glCompileShaderIncludeARB",
)

///|
pub fn gl_compile_shader_include_arb(
  shader : UInt,
  count : Int,
  path : FixedArray[Bytes],
  length : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, @pointer.Pointer[Bytes], @pointer.Pointer[Int]) -> Unit,
  ] = d_glCompileShaderIncludeARB.get().unsafe_into()
  @pointer.borrow_array(path, fn(path_p) {
    @pointer.borrow_array(length, fn(length_p) {
      fp(shader, count, path_p, length_p)
    })
  })
}

///|
let d_glCompressedMultiTexImage1DEXT : Dispatch = Dispatch::new(
  "glCompressedMultiTexImage1DEXT",
)

///|
pub fn gl_compressed_multi_tex_image1_dext(
  texunit : UInt,
  target : UInt,
  level : Int,
  internalformat : UInt,
  width : Int,
  border : Int,
  imageSize : Int,
  bits : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, Int, UInt, Int, Int, Int, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glCompressedMultiTexImage1DEXT.get().unsafe_into()
  @pointer.borrow_bytes(bits, fn(bits_p) {
    fp(texunit, target, level, internalformat, width, border, imageSize, bits_p)
  })
}

///|
let d_glCompressedMultiTexImage2DEXT : Dispatch = Dispatch::new(
  "glCompressedMultiTexImage2DEXT",
)

///|
pub fn gl_compressed_multi_tex_image2_dext(
  texunit : UInt,
  target : UInt,
  level : Int,
  internalformat : UInt,
  width : Int,
  height : Int,
  border : Int,
  imageSize : Int,
  bits : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, Int, UInt, Int, Int, Int, Int, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glCompressedMultiTexImage2DEXT.get().unsafe_into()
  @pointer.borrow_bytes(bits, fn(bits_p) {
    fp(
      texunit, target, level, internalformat, width, height, border, imageSize, bits_p,
    )
  })
}

///|
let d_glCompressedMultiTexImage3DEXT : Dispatch = Dispatch::new(
  "glCompressedMultiTexImage3DEXT",
)

///|
pub fn gl_compressed_multi_tex_image3_dext(
  texunit : UInt,
  target : UInt,
  level : Int,
  internalformat : UInt,
  width : Int,
  height : Int,
  depth : Int,
  border : Int,
  imageSize : Int,
  bits : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, Int, UInt, Int, Int, Int, Int, Int, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glCompressedMultiTexImage3DEXT.get().unsafe_into()
  @pointer.borrow_bytes(bits, fn(bits_p) {
    fp(
      texunit, target, level, internalformat, width, height, depth, border, imageSize,
      bits_p,
    )
  })
}

///|
let d_glCompressedMultiTexSubImage1DEXT : Dispatch = Dispatch::new(
  "glCompressedMultiTexSubImage1DEXT",
)

///|
pub fn gl_compressed_multi_tex_sub_image1_dext(
  texunit : UInt,
  target : UInt,
  level : Int,
  xoffset : Int,
  width : Int,
  format : UInt,
  imageSize : Int,
  bits : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, Int, Int, Int, UInt, Int, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glCompressedMultiTexSubImage1DEXT.get().unsafe_into()
  @pointer.borrow_bytes(bits, fn(bits_p) {
    fp(texunit, target, level, xoffset, width, format, imageSize, bits_p)
  })
}

///|
let d_glCompressedMultiTexSubImage2DEXT : Dispatch = Dispatch::new(
  "glCompressedMultiTexSubImage2DEXT",
)

///|
pub fn gl_compressed_multi_tex_sub_image2_dext(
  texunit : UInt,
  target : UInt,
  level : Int,
  xoffset : Int,
  yoffset : Int,
  width : Int,
  height : Int,
  format : UInt,
  imageSize : Int,
  bits : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, Int, Int, Int, Int, Int, UInt, Int, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glCompressedMultiTexSubImage2DEXT.get().unsafe_into()
  @pointer.borrow_bytes(bits, fn(bits_p) {
    fp(
      texunit, target, level, xoffset, yoffset, width, height, format, imageSize,
      bits_p,
    )
  })
}

///|
let d_glCompressedMultiTexSubImage3DEXT : Dispatch = Dispatch::new(
  "glCompressedMultiTexSubImage3DEXT",
)

///|
pub fn gl_compressed_multi_tex_sub_image3_dext(
  texunit : UInt,
  target : UInt,
  level : Int,
  xoffset : Int,
  yoffset : Int,
  zoffset : Int,
  width : Int,
  height : Int,
  depth : Int,
  format : UInt,
  imageSize : Int,
  bits : Bytes,
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      UInt,
      Int,
      Int,
      Int,
      Int,
      Int,
      Int,
      Int,
      UInt,
      Int,
      @pointer.Pointer[Byte],
    ) -> Unit,
  ] = d_glCompressedMultiTexSubImage3DEXT.get().unsafe_into()
  @pointer.borrow_bytes(bits, fn(bits_p) {
    fp(
      texunit, target, level, xoffset, yoffset, zoffset, width, height, depth, format,
      imageSize, bits_p,
    )
  })
}

///|
let d_glCompressedTexImage1D : Dispatch = Dispatch::with_aliases(
  "glCompressedTexImage1D",
  ["glCompressedTexImage1DARB"],
)

///|
pub fn gl_compressed_tex_image1_d(
  target : UInt,
  level : Int,
  internalformat : UInt,
  width : Int,
  border : Int,
  imageSize : Int,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, UInt, Int, Int, Int, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glCompressedTexImage1D.get().unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) {
    fp(target, level, internalformat, width, border, imageSize, data_p)
  })
}

///|
let d_glCompressedTexImage1DARB : Dispatch = Dispatch::with_aliases(
  "glCompressedTexImage1DARB",
  ["glCompressedTexImage1D"],
)

///|
pub fn gl_compressed_tex_image1_darb(
  target : UInt,
  level : Int,
  internalformat : UInt,
  width : Int,
  border : Int,
  imageSize : Int,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, UInt, Int, Int, Int, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glCompressedTexImage1DARB.get().unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) {
    fp(target, level, internalformat, width, border, imageSize, data_p)
  })
}

///|
let d_glCompressedTexImage2D : Dispatch = Dispatch::with_aliases(
  "glCompressedTexImage2D",
  ["glCompressedTexImage2DARB"],
)

///|
pub fn gl_compressed_tex_image2_d(
  target : UInt,
  level : Int,
  internalformat : UInt,
  width : Int,
  height : Int,
  border : Int,
  imageSize : Int,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, UInt, Int, Int, Int, Int, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glCompressedTexImage2D.get().unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) {
    fp(target, level, internalformat, width, height, border, imageSize, data_p)
  })
}

///|
let d_glCompressedTexImage2DARB : Dispatch = Dispatch::with_aliases(
  "glCompressedTexImage2DARB",
  ["glCompressedTexImage2D"],
)

///|
pub fn gl_compressed_tex_image2_darb(
  target : UInt,
  level : Int,
  internalformat : UInt,
  width : Int,
  height : Int,
  border : Int,
  imageSize : Int,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, UInt, Int, Int, Int, Int, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glCompressedTexImage2DARB.get().unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) {
    fp(target, level, internalformat, width, height, border, imageSize, data_p)
  })
}

///|
let d_glCompressedTexImage3D : Dispatch = Dispatch::with_aliases(
  "glCompressedTexImage3D",
  ["glCompressedTexImage3DARB"],
)

///|
pub fn gl_compressed_tex_image3_d(
  target : UInt,
  level : Int,
  internalformat : UInt,
  width : Int,
  height : Int,
  depth : Int,
  border : Int,
  imageSize : Int,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, UInt, Int, Int, Int, Int, Int, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glCompressedTexImage3D.get().unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) {
    fp(
      target, level, internalformat, width, height, depth, border, imageSize, data_p,
    )
  })
}

///|
let d_glCompressedTexImage3DARB : Dispatch = Dispatch::with_aliases(
  "glCompressedTexImage3DARB",
  ["glCompressedTexImage3D"],
)

///|
pub fn gl_compressed_tex_image3_darb(
  target : UInt,
  level : Int,
  internalformat : UInt,
  width : Int,
  height : Int,
  depth : Int,
  border : Int,
  imageSize : Int,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, UInt, Int, Int, Int, Int, Int, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glCompressedTexImage3DARB.get().unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) {
    fp(
      target, level, internalformat, width, height, depth, border, imageSize, data_p,
    )
  })
}

///|
let d_glCompressedTexImage3DOES : Dispatch = Dispatch::new(
  "glCompressedTexImage3DOES",
)

///|
pub fn gl_compressed_tex_image3_does(
  target : UInt,
  level : Int,
  internalformat : UInt,
  width : Int,
  height : Int,
  depth : Int,
  border : Int,
  imageSize : Int,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, UInt, Int, Int, Int, Int, Int, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glCompressedTexImage3DOES.get().unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) {
    fp(
      target, level, internalformat, width, height, depth, border, imageSize, data_p,
    )
  })
}

///|
let d_glCompressedTexSubImage1D : Dispatch = Dispatch::with_aliases(
  "glCompressedTexSubImage1D",
  ["glCompressedTexSubImage1DARB"],
)

///|
pub fn gl_compressed_tex_sub_image1_d(
  target : UInt,
  level : Int,
  xoffset : Int,
  width : Int,
  format : UInt,
  imageSize : Int,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, Int, Int, UInt, Int, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glCompressedTexSubImage1D.get().unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) {
    fp(target, level, xoffset, width, format, imageSize, data_p)
  })
}

///|
let d_glCompressedTexSubImage1DARB : Dispatch = Dispatch::with_aliases(
  "glCompressedTexSubImage1DARB",
  ["glCompressedTexSubImage1D"],
)

///|
pub fn gl_compressed_tex_sub_image1_darb(
  target : UInt,
  level : Int,
  xoffset : Int,
  width : Int,
  format : UInt,
  imageSize : Int,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, Int, Int, UInt, Int, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glCompressedTexSubImage1DARB.get().unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) {
    fp(target, level, xoffset, width, format, imageSize, data_p)
  })
}

///|
let d_glCompressedTexSubImage2D : Dispatch = Dispatch::with_aliases(
  "glCompressedTexSubImage2D",
  ["glCompressedTexSubImage2DARB"],
)

///|
pub fn gl_compressed_tex_sub_image2_d(
  target : UInt,
  level : Int,
  xoffset : Int,
  yoffset : Int,
  width : Int,
  height : Int,
  format : UInt,
  imageSize : Int,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, Int, Int, Int, Int, UInt, Int, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glCompressedTexSubImage2D.get().unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) {
    fp(
      target, level, xoffset, yoffset, width, height, format, imageSize, data_p,
    )
  })
}

///|
let d_glCompressedTexSubImage2DARB : Dispatch = Dispatch::with_aliases(
  "glCompressedTexSubImage2DARB",
  ["glCompressedTexSubImage2D"],
)

///|
pub fn gl_compressed_tex_sub_image2_darb(
  target : UInt,
  level : Int,
  xoffset : Int,
  yoffset : Int,
  width : Int,
  height : Int,
  format : UInt,
  imageSize : Int,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, Int, Int, Int, Int, UInt, Int, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glCompressedTexSubImage2DARB.get().unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) {
    fp(
      target, level, xoffset, yoffset, width, height, format, imageSize, data_p,
    )
  })
}

///|
let d_glCompressedTexSubImage3D : Dispatch = Dispatch::with_aliases(
  "glCompressedTexSubImage3D",
  ["glCompressedTexSubImage3DARB"],
)

///|
pub fn gl_compressed_tex_sub_image3_d(
  target : UInt,
  level : Int,
  xoffset : Int,
  yoffset : Int,
  zoffset : Int,
  width : Int,
  height : Int,
  depth : Int,
  format : UInt,
  imageSize : Int,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, Int, Int, Int, Int, Int, Int, UInt, Int, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glCompressedTexSubImage3D.get().unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) {
    fp(
      target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize,
      data_p,
    )
  })
}

///|
let d_glCompressedTexSubImage3DARB : Dispatch = Dispatch::with_aliases(
  "glCompressedTexSubImage3DARB",
  ["glCompressedTexSubImage3D"],
)

///|
pub fn gl_compressed_tex_sub_image3_darb(
  target : UInt,
  level : Int,
  xoffset : Int,
  yoffset : Int,
  zoffset : Int,
  width : Int,
  height : Int,
  depth : Int,
  format : UInt,
  imageSize : Int,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, Int, Int, Int, Int, Int, Int, UInt, Int, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glCompressedTexSubImage3DARB.get().unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) {
    fp(
      target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize,
      data_p,
    )
  })
}

///|
let d_glCompressedTexSubImage3DOES : Dispatch = Dispatch::new(
  "glCompressedTexSubImage3DOES",
)

///|
pub fn gl_compressed_tex_sub_image3_does(
  target : UInt,
  level : Int,
  xoffset : Int,
  yoffset : Int,
  zoffset : Int,
  width : Int,
  height : Int,
  depth : Int,
  format : UInt,
  imageSize : Int,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, Int, Int, Int, Int, Int, Int, UInt, Int, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glCompressedTexSubImage3DOES.get().unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) {
    fp(
      target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize,
      data_p,
    )
  })
}

///|
let d_glCompressedTextureImage1DEXT : Dispatch = Dispatch::new(
  "glCompressedTextureImage1DEXT",
)

///|
pub fn gl_compressed_texture_image1_dext(
  texture : UInt,
  target : UInt,
  level : Int,
  internalformat : UInt,
  width : Int,
  border : Int,
  imageSize : Int,
  bits : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, Int, UInt, Int, Int, Int, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glCompressedTextureImage1DEXT.get().unsafe_into()
  @pointer.borrow_bytes(bits, fn(bits_p) {
    fp(texture, target, level, internalformat, width, border, imageSize, bits_p)
  })
}

///|
let d_glCompressedTextureImage2DEXT : Dispatch = Dispatch::new(
  "glCompressedTextureImage2DEXT",
)

///|
pub fn gl_compressed_texture_image2_dext(
  texture : UInt,
  target : UInt,
  level : Int,
  internalformat : UInt,
  width : Int,
  height : Int,
  border : Int,
  imageSize : Int,
  bits : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, Int, UInt, Int, Int, Int, Int, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glCompressedTextureImage2DEXT.get().unsafe_into()
  @pointer.borrow_bytes(bits, fn(bits_p) {
    fp(
      texture, target, level, internalformat, width, height, border, imageSize, bits_p,
    )
  })
}

///|
let d_glCompressedTextureImage3DEXT : Dispatch = Dispatch::new(
  "glCompressedTextureImage3DEXT",
)

///|
pub fn gl_compressed_texture_image3_dext(
  texture : UInt,
  target : UInt,
  level : Int,
  internalformat : UInt,
  width : Int,
  height : Int,
  depth : Int,
  border : Int,
  imageSize : Int,
  bits : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, Int, UInt, Int, Int, Int, Int, Int, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glCompressedTextureImage3DEXT.get().unsafe_into()
  @pointer.borrow_bytes(bits, fn(bits_p) {
    fp(
      texture, target, level, internalformat, width, height, depth, border, imageSize,
      bits_p,
    )
  })
}

///|
let d_glCompressedTextureSubImage1D : Dispatch = Dispatch::new(
  "glCompressedTextureSubImage1D",
)

///|
pub fn gl_compressed_texture_sub_image1_d(
  texture : UInt,
  level : Int,
  xoffset : Int,
  width : Int,
  format : UInt,
  imageSize : Int,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, Int, Int, UInt, Int, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glCompressedTextureSubImage1D.get().unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) {
    fp(texture, level, xoffset, width, format, imageSize, data_p)
  })
}

///|
let d_glCompressedTextureSubImage1DEXT : Dispatch = Dispatch::new(
  "glCompressedTextureSubImage1DEXT",
)

///|
pub fn gl_compressed_texture_sub_image1_dext(
  texture : UInt,
  target : UInt,
  level : Int,
  xoffset : Int,
  width : Int,
  format : UInt,
  imageSize : Int,
  bits : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, Int, Int, Int, UInt, Int, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glCompressedTextureSubImage1DEXT.get().unsafe_into()
  @pointer.borrow_bytes(bits, fn(bits_p) {
    fp(texture, target, level, xoffset, width, format, imageSize, bits_p)
  })
}

///|
let d_glCompressedTextureSubImage2D : Dispatch = Dispatch::new(
  "glCompressedTextureSubImage2D",
)

///|
pub fn gl_compressed_texture_sub_image2_d(
  texture : UInt,
  level : Int,
  xoffset : Int,
  yoffset : Int,
  width : Int,
  height : Int,
  format : UInt,
  imageSize : Int,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, Int, Int, Int, Int, UInt, Int, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glCompressedTextureSubImage2D.get().unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) {
    fp(
      texture, level, xoffset, yoffset, width, height, format, imageSize, data_p,
    )
  })
}

///|
let d_glCompressedTextureSubImage2DEXT : Dispatch = Dispatch::new(
  "glCompressedTextureSubImage2DEXT",
)

///|
pub fn gl_compressed_texture_sub_image2_dext(
  texture : UInt,
  target : UInt,
  level : Int,
  xoffset : Int,
  yoffset : Int,
  width : Int,
  height : Int,
  format : UInt,
  imageSize : Int,
  bits : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, Int, Int, Int, Int, Int, UInt, Int, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glCompressedTextureSubImage2DEXT.get().unsafe_into()
  @pointer.borrow_bytes(bits, fn(bits_p) {
    fp(
      texture, target, level, xoffset, yoffset, width, height, format, imageSize,
      bits_p,
    )
  })
}

///|
let d_glCompressedTextureSubImage3D : Dispatch = Dispatch::new(
  "glCompressedTextureSubImage3D",
)

///|
pub fn gl_compressed_texture_sub_image3_d(
  texture : UInt,
  level : Int,
  xoffset : Int,
  yoffset : Int,
  zoffset : Int,
  width : Int,
  height : Int,
  depth : Int,
  format : UInt,
  imageSize : Int,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, Int, Int, Int, Int, Int, Int, UInt, Int, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glCompressedTextureSubImage3D.get().unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) {
    fp(
      texture, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize,
      data_p,
    )
  })
}

///|
let d_glCompressedTextureSubImage3DEXT : Dispatch = Dispatch::new(
  "glCompressedTextureSubImage3DEXT",
)

///|
pub fn gl_compressed_texture_sub_image3_dext(
  texture : UInt,
  target : UInt,
  level : Int,
  xoffset : Int,
  yoffset : Int,
  zoffset : Int,
  width : Int,
  height : Int,
  depth : Int,
  format : UInt,
  imageSize : Int,
  bits : Bytes,
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      UInt,
      Int,
      Int,
      Int,
      Int,
      Int,
      Int,
      Int,
      UInt,
      Int,
      @pointer.Pointer[Byte],
    ) -> Unit,
  ] = d_glCompressedTextureSubImage3DEXT.get().unsafe_into()
  @pointer.borrow_bytes(bits, fn(bits_p) {
    fp(
      texture, target, level, xoffset, yoffset, zoffset, width, height, depth, format,
      imageSize, bits_p,
    )
  })
}

///|
let d_glConservativeRasterParameterfNV : Dispatch = Dispatch::new(
  "glConservativeRasterParameterfNV",
)

///|
pub fn gl_conservative_raster_parameterf_nv(
  pname : UInt,
  value : Float,
) -> Unit {
  let fp : FuncRef[(UInt, Float) -> Unit] = d_glConservativeRasterParameterfNV
    .get()
    .unsafe_into()
  fp(pname, value)
}

///|
let d_glConservativeRasterParameteriNV : Dispatch = Dispatch::new(
  "glConservativeRasterParameteriNV",
)

///|
pub fn gl_conservative_raster_parameteri_nv(pname : UInt, param : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glConservativeRasterParameteriNV
    .get()
    .unsafe_into()
  fp(pname, param)
}

///|
let d_glConvolutionFilter1D : Dispatch = Dispatch::with_aliases(
  "glConvolutionFilter1D",
  ["glConvolutionFilter1DEXT"],
)

///|
pub fn gl_convolution_filter1_d(
  target : UInt,
  internalformat : UInt,
  width : Int,
  format : UInt,
  type_ : UInt,
  image : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, Int, UInt, UInt, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glConvolutionFilter1D.get().unsafe_into()
  @pointer.borrow_bytes(image, fn(image_p) {
    fp(target, internalformat, width, format, type_, image_p)
  })
}

///|
let d_glConvolutionFilter1DEXT : Dispatch = Dispatch::with_aliases(
  "glConvolutionFilter1DEXT",
  ["glConvolutionFilter1D"],
)

///|
pub fn gl_convolution_filter1_dext(
  target : UInt,
  internalformat : UInt,
  width : Int,
  format : UInt,
  type_ : UInt,
  image : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, Int, UInt, UInt, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glConvolutionFilter1DEXT.get().unsafe_into()
  @pointer.borrow_bytes(image, fn(image_p) {
    fp(target, internalformat, width, format, type_, image_p)
  })
}

///|
let d_glConvolutionFilter2D : Dispatch = Dispatch::with_aliases(
  "glConvolutionFilter2D",
  ["glConvolutionFilter2DEXT"],
)

///|
pub fn gl_convolution_filter2_d(
  target : UInt,
  internalformat : UInt,
  width : Int,
  height : Int,
  format : UInt,
  type_ : UInt,
  image : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, Int, Int, UInt, UInt, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glConvolutionFilter2D.get().unsafe_into()
  @pointer.borrow_bytes(image, fn(image_p) {
    fp(target, internalformat, width, height, format, type_, image_p)
  })
}

///|
let d_glConvolutionFilter2DEXT : Dispatch = Dispatch::with_aliases(
  "glConvolutionFilter2DEXT",
  ["glConvolutionFilter2D"],
)

///|
pub fn gl_convolution_filter2_dext(
  target : UInt,
  internalformat : UInt,
  width : Int,
  height : Int,
  format : UInt,
  type_ : UInt,
  image : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, Int, Int, UInt, UInt, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glConvolutionFilter2DEXT.get().unsafe_into()
  @pointer.borrow_bytes(image, fn(image_p) {
    fp(target, internalformat, width, height, format, type_, image_p)
  })
}

///|
let d_glConvolutionParameterf : Dispatch = Dispatch::with_aliases(
  "glConvolutionParameterf",
  ["glConvolutionParameterfEXT"],
)

///|
pub fn gl_convolution_parameterf(
  target : UInt,
  pname : UInt,
  params : Float,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Float) -> Unit] = d_glConvolutionParameterf
    .get()
    .unsafe_into()
  fp(target, pname, params)
}

///|
let d_glConvolutionParameterfEXT : Dispatch = Dispatch::with_aliases(
  "glConvolutionParameterfEXT",
  ["glConvolutionParameterf"],
)

///|
pub fn gl_convolution_parameterf_ext(
  target : UInt,
  pname : UInt,
  params : Float,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Float) -> Unit] = d_glConvolutionParameterfEXT
    .get()
    .unsafe_into()
  fp(target, pname, params)
}

///|
let d_glConvolutionParameterfv : Dispatch = Dispatch::with_aliases(
  "glConvolutionParameterfv",
  ["glConvolutionParameterfvEXT"],
)

///|
pub fn gl_convolution_parameterfv(
  target : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glConvolutionParameterfv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glConvolutionParameterfvEXT : Dispatch = Dispatch::with_aliases(
  "glConvolutionParameterfvEXT",
  ["glConvolutionParameterfv"],
)

///|
pub fn gl_convolution_parameterfv_ext(
  target : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glConvolutionParameterfvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glConvolutionParameteri : Dispatch = Dispatch::with_aliases(
  "glConvolutionParameteri",
  ["glConvolutionParameteriEXT"],
)

///|
pub fn gl_convolution_parameteri(
  target : UInt,
  pname : UInt,
  params : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int) -> Unit] = d_glConvolutionParameteri
    .get()
    .unsafe_into()
  fp(target, pname, params)
}

///|
let d_glConvolutionParameteriEXT : Dispatch = Dispatch::with_aliases(
  "glConvolutionParameteriEXT",
  ["glConvolutionParameteri"],
)

///|
pub fn gl_convolution_parameteri_ext(
  target : UInt,
  pname : UInt,
  params : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int) -> Unit] = d_glConvolutionParameteriEXT
    .get()
    .unsafe_into()
  fp(target, pname, params)
}

///|
let d_glConvolutionParameteriv : Dispatch = Dispatch::with_aliases(
  "glConvolutionParameteriv",
  ["glConvolutionParameterivEXT"],
)

///|
pub fn gl_convolution_parameteriv(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glConvolutionParameteriv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glConvolutionParameterivEXT : Dispatch = Dispatch::with_aliases(
  "glConvolutionParameterivEXT",
  ["glConvolutionParameteriv"],
)

///|
pub fn gl_convolution_parameteriv_ext(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glConvolutionParameterivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glConvolutionParameterxOES : Dispatch = Dispatch::new(
  "glConvolutionParameterxOES",
)

///|
pub fn gl_convolution_parameterx_oes(
  target : UInt,
  pname : UInt,
  param : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int) -> Unit] = d_glConvolutionParameterxOES
    .get()
    .unsafe_into()
  fp(target, pname, param)
}

///|
let d_glConvolutionParameterxvOES : Dispatch = Dispatch::new(
  "glConvolutionParameterxvOES",
)

///|
pub fn gl_convolution_parameterxv_oes(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glConvolutionParameterxvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glCopyBufferSubData : Dispatch = Dispatch::with_aliases(
  "glCopyBufferSubData",
  ["glCopyBufferSubDataNV"],
)

///|
pub fn gl_copy_buffer_sub_data(
  readTarget : UInt,
  writeTarget : UInt,
  readOffset : Int64,
  writeOffset : Int64,
  size : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int64, Int64, Int64) -> Unit] = d_glCopyBufferSubData
    .get()
    .unsafe_into()
  fp(readTarget, writeTarget, readOffset, writeOffset, size)
}

///|
let d_glCopyBufferSubDataNV : Dispatch = Dispatch::with_aliases(
  "glCopyBufferSubDataNV",
  ["glCopyBufferSubData"],
)

///|
pub fn gl_copy_buffer_sub_data_nv(
  readTarget : UInt,
  writeTarget : UInt,
  readOffset : Int64,
  writeOffset : Int64,
  size : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int64, Int64, Int64) -> Unit] = d_glCopyBufferSubDataNV
    .get()
    .unsafe_into()
  fp(readTarget, writeTarget, readOffset, writeOffset, size)
}

///|
let d_glCopyColorSubTable : Dispatch = Dispatch::with_aliases(
  "glCopyColorSubTable",
  ["glCopyColorSubTableEXT"],
)

///|
pub fn gl_copy_color_sub_table(
  target : UInt,
  start : Int,
  x : Int,
  y : Int,
  width : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int) -> Unit] = d_glCopyColorSubTable
    .get()
    .unsafe_into()
  fp(target, start, x, y, width)
}

///|
let d_glCopyColorSubTableEXT : Dispatch = Dispatch::with_aliases(
  "glCopyColorSubTableEXT",
  ["glCopyColorSubTable"],
)

///|
pub fn gl_copy_color_sub_table_ext(
  target : UInt,
  start : Int,
  x : Int,
  y : Int,
  width : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int) -> Unit] = d_glCopyColorSubTableEXT
    .get()
    .unsafe_into()
  fp(target, start, x, y, width)
}

///|
let d_glCopyColorTable : Dispatch = Dispatch::with_aliases("glCopyColorTable", [
  "glCopyColorTableSGI",
])

///|
pub fn gl_copy_color_table(
  target : UInt,
  internalformat : UInt,
  x : Int,
  y : Int,
  width : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, Int, Int) -> Unit] = d_glCopyColorTable
    .get()
    .unsafe_into()
  fp(target, internalformat, x, y, width)
}

///|
let d_glCopyColorTableSGI : Dispatch = Dispatch::with_aliases(
  "glCopyColorTableSGI",
  ["glCopyColorTable"],
)

///|
pub fn gl_copy_color_table_sgi(
  target : UInt,
  internalformat : UInt,
  x : Int,
  y : Int,
  width : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, Int, Int) -> Unit] = d_glCopyColorTableSGI
    .get()
    .unsafe_into()
  fp(target, internalformat, x, y, width)
}

///|
let d_glCopyConvolutionFilter1D : Dispatch = Dispatch::with_aliases(
  "glCopyConvolutionFilter1D",
  ["glCopyConvolutionFilter1DEXT"],
)

///|
pub fn gl_copy_convolution_filter1_d(
  target : UInt,
  internalformat : UInt,
  x : Int,
  y : Int,
  width : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, Int, Int) -> Unit] = d_glCopyConvolutionFilter1D
    .get()
    .unsafe_into()
  fp(target, internalformat, x, y, width)
}

///|
let d_glCopyConvolutionFilter1DEXT : Dispatch = Dispatch::with_aliases(
  "glCopyConvolutionFilter1DEXT",
  ["glCopyConvolutionFilter1D"],
)

///|
pub fn gl_copy_convolution_filter1_dext(
  target : UInt,
  internalformat : UInt,
  x : Int,
  y : Int,
  width : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, Int, Int) -> Unit] = d_glCopyConvolutionFilter1DEXT
    .get()
    .unsafe_into()
  fp(target, internalformat, x, y, width)
}

///|
let d_glCopyConvolutionFilter2D : Dispatch = Dispatch::with_aliases(
  "glCopyConvolutionFilter2D",
  ["glCopyConvolutionFilter2DEXT"],
)

///|
pub fn gl_copy_convolution_filter2_d(
  target : UInt,
  internalformat : UInt,
  x : Int,
  y : Int,
  width : Int,
  height : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, Int, Int, Int) -> Unit] = d_glCopyConvolutionFilter2D
    .get()
    .unsafe_into()
  fp(target, internalformat, x, y, width, height)
}

///|
let d_glCopyConvolutionFilter2DEXT : Dispatch = Dispatch::with_aliases(
  "glCopyConvolutionFilter2DEXT",
  ["glCopyConvolutionFilter2D"],
)

///|
pub fn gl_copy_convolution_filter2_dext(
  target : UInt,
  internalformat : UInt,
  x : Int,
  y : Int,
  width : Int,
  height : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, Int, Int, Int) -> Unit] = d_glCopyConvolutionFilter2DEXT
    .get()
    .unsafe_into()
  fp(target, internalformat, x, y, width, height)
}

///|
let d_glCopyImageSubData : Dispatch = Dispatch::with_aliases(
  "glCopyImageSubData",
  ["glCopyImageSubDataEXT", "glCopyImageSubDataOES"],
)

///|
pub fn gl_copy_image_sub_data(
  srcName : UInt,
  srcTarget : UInt,
  srcLevel : Int,
  srcX : Int,
  srcY : Int,
  srcZ : Int,
  dstName : UInt,
  dstTarget : UInt,
  dstLevel : Int,
  dstX : Int,
  dstY : Int,
  dstZ : Int,
  srcWidth : Int,
  srcHeight : Int,
  srcDepth : Int,
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      UInt,
      Int,
      Int,
      Int,
      Int,
      UInt,
      UInt,
      Int,
      Int,
      Int,
      Int,
      Int,
      Int,
      Int,
    ) -> Unit,
  ] = d_glCopyImageSubData.get().unsafe_into()
  fp(
    srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName, dstTarget, dstLevel,
    dstX, dstY, dstZ, srcWidth, srcHeight, srcDepth,
  )
}

///|
let d_glCopyImageSubDataEXT : Dispatch = Dispatch::with_aliases(
  "glCopyImageSubDataEXT",
  ["glCopyImageSubData", "glCopyImageSubDataOES"],
)

///|
pub fn gl_copy_image_sub_data_ext(
  srcName : UInt,
  srcTarget : UInt,
  srcLevel : Int,
  srcX : Int,
  srcY : Int,
  srcZ : Int,
  dstName : UInt,
  dstTarget : UInt,
  dstLevel : Int,
  dstX : Int,
  dstY : Int,
  dstZ : Int,
  srcWidth : Int,
  srcHeight : Int,
  srcDepth : Int,
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      UInt,
      Int,
      Int,
      Int,
      Int,
      UInt,
      UInt,
      Int,
      Int,
      Int,
      Int,
      Int,
      Int,
      Int,
    ) -> Unit,
  ] = d_glCopyImageSubDataEXT.get().unsafe_into()
  fp(
    srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName, dstTarget, dstLevel,
    dstX, dstY, dstZ, srcWidth, srcHeight, srcDepth,
  )
}

///|
let d_glCopyImageSubDataNV : Dispatch = Dispatch::new("glCopyImageSubDataNV")

///|
pub fn gl_copy_image_sub_data_nv(
  srcName : UInt,
  srcTarget : UInt,
  srcLevel : Int,
  srcX : Int,
  srcY : Int,
  srcZ : Int,
  dstName : UInt,
  dstTarget : UInt,
  dstLevel : Int,
  dstX : Int,
  dstY : Int,
  dstZ : Int,
  width : Int,
  height : Int,
  depth : Int,
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      UInt,
      Int,
      Int,
      Int,
      Int,
      UInt,
      UInt,
      Int,
      Int,
      Int,
      Int,
      Int,
      Int,
      Int,
    ) -> Unit,
  ] = d_glCopyImageSubDataNV.get().unsafe_into()
  fp(
    srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName, dstTarget, dstLevel,
    dstX, dstY, dstZ, width, height, depth,
  )
}

///|
let d_glCopyImageSubDataOES : Dispatch = Dispatch::with_aliases(
  "glCopyImageSubDataOES",
  ["glCopyImageSubData", "glCopyImageSubDataEXT"],
)

///|
pub fn gl_copy_image_sub_data_oes(
  srcName : UInt,
  srcTarget : UInt,
  srcLevel : Int,
  srcX : Int,
  srcY : Int,
  srcZ : Int,
  dstName : UInt,
  dstTarget : UInt,
  dstLevel : Int,
  dstX : Int,
  dstY : Int,
  dstZ : Int,
  srcWidth : Int,
  srcHeight : Int,
  srcDepth : Int,
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      UInt,
      Int,
      Int,
      Int,
      Int,
      UInt,
      UInt,
      Int,
      Int,
      Int,
      Int,
      Int,
      Int,
      Int,
    ) -> Unit,
  ] = d_glCopyImageSubDataOES.get().unsafe_into()
  fp(
    srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName, dstTarget, dstLevel,
    dstX, dstY, dstZ, srcWidth, srcHeight, srcDepth,
  )
}

///|
let d_glCopyMultiTexImage1DEXT : Dispatch = Dispatch::new(
  "glCopyMultiTexImage1DEXT",
)

///|
pub fn gl_copy_multi_tex_image1_dext(
  texunit : UInt,
  target : UInt,
  level : Int,
  internalformat : UInt,
  x : Int,
  y : Int,
  width : Int,
  border : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, UInt, Int, Int, Int, Int) -> Unit] = d_glCopyMultiTexImage1DEXT
    .get()
    .unsafe_into()
  fp(texunit, target, level, internalformat, x, y, width, border)
}

///|
let d_glCopyMultiTexImage2DEXT : Dispatch = Dispatch::new(
  "glCopyMultiTexImage2DEXT",
)

///|
pub fn gl_copy_multi_tex_image2_dext(
  texunit : UInt,
  target : UInt,
  level : Int,
  internalformat : UInt,
  x : Int,
  y : Int,
  width : Int,
  height : Int,
  border : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, UInt, Int, Int, Int, Int, Int) -> Unit] = d_glCopyMultiTexImage2DEXT
    .get()
    .unsafe_into()
  fp(texunit, target, level, internalformat, x, y, width, height, border)
}

///|
let d_glCopyMultiTexSubImage1DEXT : Dispatch = Dispatch::new(
  "glCopyMultiTexSubImage1DEXT",
)

///|
pub fn gl_copy_multi_tex_sub_image1_dext(
  texunit : UInt,
  target : UInt,
  level : Int,
  xoffset : Int,
  x : Int,
  y : Int,
  width : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, Int, Int, Int, Int) -> Unit] = d_glCopyMultiTexSubImage1DEXT
    .get()
    .unsafe_into()
  fp(texunit, target, level, xoffset, x, y, width)
}

///|
let d_glCopyMultiTexSubImage2DEXT : Dispatch = Dispatch::new(
  "glCopyMultiTexSubImage2DEXT",
)

///|
pub fn gl_copy_multi_tex_sub_image2_dext(
  texunit : UInt,
  target : UInt,
  level : Int,
  xoffset : Int,
  yoffset : Int,
  x : Int,
  y : Int,
  width : Int,
  height : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, Int, Int, Int, Int, Int, Int) -> Unit] = d_glCopyMultiTexSubImage2DEXT
    .get()
    .unsafe_into()
  fp(texunit, target, level, xoffset, yoffset, x, y, width, height)
}

///|
let d_glCopyMultiTexSubImage3DEXT : Dispatch = Dispatch::new(
  "glCopyMultiTexSubImage3DEXT",
)

///|
pub fn gl_copy_multi_tex_sub_image3_dext(
  texunit : UInt,
  target : UInt,
  level : Int,
  xoffset : Int,
  yoffset : Int,
  zoffset : Int,
  x : Int,
  y : Int,
  width : Int,
  height : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, Int, Int, Int, Int, Int, Int, Int) -> Unit] = d_glCopyMultiTexSubImage3DEXT
    .get()
    .unsafe_into()
  fp(texunit, target, level, xoffset, yoffset, zoffset, x, y, width, height)
}

///|
let d_glCopyNamedBufferSubData : Dispatch = Dispatch::new(
  "glCopyNamedBufferSubData",
)

///|
pub fn gl_copy_named_buffer_sub_data(
  readBuffer : UInt,
  writeBuffer : UInt,
  readOffset : Int64,
  writeOffset : Int64,
  size : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int64, Int64, Int64) -> Unit] = d_glCopyNamedBufferSubData
    .get()
    .unsafe_into()
  fp(readBuffer, writeBuffer, readOffset, writeOffset, size)
}

///|
let d_glCopyPathNV : Dispatch = Dispatch::new("glCopyPathNV")

///|
pub fn gl_copy_path_nv(resultPath : UInt, srcPath : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glCopyPathNV.get().unsafe_into()
  fp(resultPath, srcPath)
}

///|
let d_glCopyPixels : Dispatch = Dispatch::new("glCopyPixels")

///|
pub fn gl_copy_pixels(
  x : Int,
  y : Int,
  width : Int,
  height : Int,
  type_ : UInt,
) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int, UInt) -> Unit] = d_glCopyPixels
    .get()
    .unsafe_into()
  fp(x, y, width, height, type_)
}

///|
let d_glCopyTexImage1D : Dispatch = Dispatch::with_aliases("glCopyTexImage1D", [
  "glCopyTexImage1DEXT",
])

///|
pub fn gl_copy_tex_image1_d(
  target : UInt,
  level : Int,
  internalformat : UInt,
  x : Int,
  y : Int,
  width : Int,
  border : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int, Int, Int, Int) -> Unit] = d_glCopyTexImage1D
    .get()
    .unsafe_into()
  fp(target, level, internalformat, x, y, width, border)
}

///|
let d_glCopyTexImage1DEXT : Dispatch = Dispatch::with_aliases(
  "glCopyTexImage1DEXT",
  ["glCopyTexImage1D"],
)

///|
pub fn gl_copy_tex_image1_dext(
  target : UInt,
  level : Int,
  internalformat : UInt,
  x : Int,
  y : Int,
  width : Int,
  border : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int, Int, Int, Int) -> Unit] = d_glCopyTexImage1DEXT
    .get()
    .unsafe_into()
  fp(target, level, internalformat, x, y, width, border)
}

///|
let d_glCopyTexImage2D : Dispatch = Dispatch::with_aliases("glCopyTexImage2D", [
  "glCopyTexImage2DEXT",
])

///|
pub fn gl_copy_tex_image2_d(
  target : UInt,
  level : Int,
  internalformat : UInt,
  x : Int,
  y : Int,
  width : Int,
  height : Int,
  border : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int, Int, Int, Int, Int) -> Unit] = d_glCopyTexImage2D
    .get()
    .unsafe_into()
  fp(target, level, internalformat, x, y, width, height, border)
}

///|
let d_glCopyTexImage2DEXT : Dispatch = Dispatch::with_aliases(
  "glCopyTexImage2DEXT",
  ["glCopyTexImage2D"],
)

///|
pub fn gl_copy_tex_image2_dext(
  target : UInt,
  level : Int,
  internalformat : UInt,
  x : Int,
  y : Int,
  width : Int,
  height : Int,
  border : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int, Int, Int, Int, Int) -> Unit] = d_glCopyTexImage2DEXT
    .get()
    .unsafe_into()
  fp(target, level, internalformat, x, y, width, height, border)
}

///|
let d_glCopyTexSubImage1D : Dispatch = Dispatch::with_aliases(
  "glCopyTexSubImage1D",
  ["glCopyTexSubImage1DEXT"],
)

///|
pub fn gl_copy_tex_sub_image1_d(
  target : UInt,
  level : Int,
  xoffset : Int,
  x : Int,
  y : Int,
  width : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int, Int) -> Unit] = d_glCopyTexSubImage1D
    .get()
    .unsafe_into()
  fp(target, level, xoffset, x, y, width)
}

///|
let d_glCopyTexSubImage1DEXT : Dispatch = Dispatch::with_aliases(
  "glCopyTexSubImage1DEXT",
  ["glCopyTexSubImage1D"],
)

///|
pub fn gl_copy_tex_sub_image1_dext(
  target : UInt,
  level : Int,
  xoffset : Int,
  x : Int,
  y : Int,
  width : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int, Int) -> Unit] = d_glCopyTexSubImage1DEXT
    .get()
    .unsafe_into()
  fp(target, level, xoffset, x, y, width)
}

///|
let d_glCopyTexSubImage2D : Dispatch = Dispatch::with_aliases(
  "glCopyTexSubImage2D",
  ["glCopyTexSubImage2DEXT"],
)

///|
pub fn gl_copy_tex_sub_image2_d(
  target : UInt,
  level : Int,
  xoffset : Int,
  yoffset : Int,
  x : Int,
  y : Int,
  width : Int,
  height : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int, Int, Int, Int) -> Unit] = d_glCopyTexSubImage2D
    .get()
    .unsafe_into()
  fp(target, level, xoffset, yoffset, x, y, width, height)
}

///|
let d_glCopyTexSubImage2DEXT : Dispatch = Dispatch::with_aliases(
  "glCopyTexSubImage2DEXT",
  ["glCopyTexSubImage2D"],
)

///|
pub fn gl_copy_tex_sub_image2_dext(
  target : UInt,
  level : Int,
  xoffset : Int,
  yoffset : Int,
  x : Int,
  y : Int,
  width : Int,
  height : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int, Int, Int, Int) -> Unit] = d_glCopyTexSubImage2DEXT
    .get()
    .unsafe_into()
  fp(target, level, xoffset, yoffset, x, y, width, height)
}

///|
let d_glCopyTexSubImage3D : Dispatch = Dispatch::with_aliases(
  "glCopyTexSubImage3D",
  ["glCopyTexSubImage3DEXT"],
)

///|
pub fn gl_copy_tex_sub_image3_d(
  target : UInt,
  level : Int,
  xoffset : Int,
  yoffset : Int,
  zoffset : Int,
  x : Int,
  y : Int,
  width : Int,
  height : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int, Int, Int, Int, Int) -> Unit] = d_glCopyTexSubImage3D
    .get()
    .unsafe_into()
  fp(target, level, xoffset, yoffset, zoffset, x, y, width, height)
}

///|
let d_glCopyTexSubImage3DEXT : Dispatch = Dispatch::with_aliases(
  "glCopyTexSubImage3DEXT",
  ["glCopyTexSubImage3D"],
)

///|
pub fn gl_copy_tex_sub_image3_dext(
  target : UInt,
  level : Int,
  xoffset : Int,
  yoffset : Int,
  zoffset : Int,
  x : Int,
  y : Int,
  width : Int,
  height : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int, Int, Int, Int, Int) -> Unit] = d_glCopyTexSubImage3DEXT
    .get()
    .unsafe_into()
  fp(target, level, xoffset, yoffset, zoffset, x, y, width, height)
}

///|
let d_glCopyTexSubImage3DOES : Dispatch = Dispatch::new(
  "glCopyTexSubImage3DOES",
)

///|
pub fn gl_copy_tex_sub_image3_does(
  target : UInt,
  level : Int,
  xoffset : Int,
  yoffset : Int,
  zoffset : Int,
  x : Int,
  y : Int,
  width : Int,
  height : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int, Int, Int, Int, Int) -> Unit] = d_glCopyTexSubImage3DOES
    .get()
    .unsafe_into()
  fp(target, level, xoffset, yoffset, zoffset, x, y, width, height)
}

///|
let d_glCopyTextureImage1DEXT : Dispatch = Dispatch::new(
  "glCopyTextureImage1DEXT",
)

///|
pub fn gl_copy_texture_image1_dext(
  texture : UInt,
  target : UInt,
  level : Int,
  internalformat : UInt,
  x : Int,
  y : Int,
  width : Int,
  border : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, UInt, Int, Int, Int, Int) -> Unit] = d_glCopyTextureImage1DEXT
    .get()
    .unsafe_into()
  fp(texture, target, level, internalformat, x, y, width, border)
}

///|
let d_glCopyTextureImage2DEXT : Dispatch = Dispatch::new(
  "glCopyTextureImage2DEXT",
)

///|
pub fn gl_copy_texture_image2_dext(
  texture : UInt,
  target : UInt,
  level : Int,
  internalformat : UInt,
  x : Int,
  y : Int,
  width : Int,
  height : Int,
  border : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, UInt, Int, Int, Int, Int, Int) -> Unit] = d_glCopyTextureImage2DEXT
    .get()
    .unsafe_into()
  fp(texture, target, level, internalformat, x, y, width, height, border)
}

///|
let d_glCopyTextureLevelsAPPLE : Dispatch = Dispatch::new(
  "glCopyTextureLevelsAPPLE",
)

///|
pub fn gl_copy_texture_levels_apple(
  destinationTexture : UInt,
  sourceTexture : UInt,
  sourceBaseLevel : Int,
  sourceLevelCount : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, Int) -> Unit] = d_glCopyTextureLevelsAPPLE
    .get()
    .unsafe_into()
  fp(destinationTexture, sourceTexture, sourceBaseLevel, sourceLevelCount)
}

///|
let d_glCopyTextureSubImage1D : Dispatch = Dispatch::new(
  "glCopyTextureSubImage1D",
)

///|
pub fn gl_copy_texture_sub_image1_d(
  texture : UInt,
  level : Int,
  xoffset : Int,
  x : Int,
  y : Int,
  width : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int, Int) -> Unit] = d_glCopyTextureSubImage1D
    .get()
    .unsafe_into()
  fp(texture, level, xoffset, x, y, width)
}

///|
let d_glCopyTextureSubImage1DEXT : Dispatch = Dispatch::new(
  "glCopyTextureSubImage1DEXT",
)

///|
pub fn gl_copy_texture_sub_image1_dext(
  texture : UInt,
  target : UInt,
  level : Int,
  xoffset : Int,
  x : Int,
  y : Int,
  width : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, Int, Int, Int, Int) -> Unit] = d_glCopyTextureSubImage1DEXT
    .get()
    .unsafe_into()
  fp(texture, target, level, xoffset, x, y, width)
}

///|
let d_glCopyTextureSubImage2D : Dispatch = Dispatch::new(
  "glCopyTextureSubImage2D",
)

///|
pub fn gl_copy_texture_sub_image2_d(
  texture : UInt,
  level : Int,
  xoffset : Int,
  yoffset : Int,
  x : Int,
  y : Int,
  width : Int,
  height : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int, Int, Int, Int) -> Unit] = d_glCopyTextureSubImage2D
    .get()
    .unsafe_into()
  fp(texture, level, xoffset, yoffset, x, y, width, height)
}

///|
let d_glCopyTextureSubImage2DEXT : Dispatch = Dispatch::new(
  "glCopyTextureSubImage2DEXT",
)

///|
pub fn gl_copy_texture_sub_image2_dext(
  texture : UInt,
  target : UInt,
  level : Int,
  xoffset : Int,
  yoffset : Int,
  x : Int,
  y : Int,
  width : Int,
  height : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, Int, Int, Int, Int, Int, Int) -> Unit] = d_glCopyTextureSubImage2DEXT
    .get()
    .unsafe_into()
  fp(texture, target, level, xoffset, yoffset, x, y, width, height)
}

///|
let d_glCopyTextureSubImage3D : Dispatch = Dispatch::new(
  "glCopyTextureSubImage3D",
)

///|
pub fn gl_copy_texture_sub_image3_d(
  texture : UInt,
  level : Int,
  xoffset : Int,
  yoffset : Int,
  zoffset : Int,
  x : Int,
  y : Int,
  width : Int,
  height : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int, Int, Int, Int, Int) -> Unit] = d_glCopyTextureSubImage3D
    .get()
    .unsafe_into()
  fp(texture, level, xoffset, yoffset, zoffset, x, y, width, height)
}

///|
let d_glCopyTextureSubImage3DEXT : Dispatch = Dispatch::new(
  "glCopyTextureSubImage3DEXT",
)

///|
pub fn gl_copy_texture_sub_image3_dext(
  texture : UInt,
  target : UInt,
  level : Int,
  xoffset : Int,
  yoffset : Int,
  zoffset : Int,
  x : Int,
  y : Int,
  width : Int,
  height : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, Int, Int, Int, Int, Int, Int, Int) -> Unit] = d_glCopyTextureSubImage3DEXT
    .get()
    .unsafe_into()
  fp(texture, target, level, xoffset, yoffset, zoffset, x, y, width, height)
}

///|
let d_glCoverFillPathInstancedNV : Dispatch = Dispatch::new(
  "glCoverFillPathInstancedNV",
)

///|
pub fn gl_cover_fill_path_instanced_nv(
  numPaths : Int,
  pathNameType : UInt,
  paths : Bytes,
  pathBase : UInt,
  coverMode : UInt,
  transformType : UInt,
  transformValues : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[
    (
      Int,
      UInt,
      @pointer.Pointer[Byte],
      UInt,
      UInt,
      UInt,
      @pointer.Pointer[Float],
    ) -> Unit,
  ] = d_glCoverFillPathInstancedNV.get().unsafe_into()
  @pointer.borrow_bytes(paths, fn(paths_p) {
    @pointer.borrow_array(transformValues, fn(transformValues_p) {
      fp(
        numPaths, pathNameType, paths_p, pathBase, coverMode, transformType, transformValues_p,
      )
    })
  })
}

///|
let d_glCoverFillPathNV : Dispatch = Dispatch::new("glCoverFillPathNV")

///|
pub fn gl_cover_fill_path_nv(path : UInt, coverMode : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glCoverFillPathNV
    .get()
    .unsafe_into()
  fp(path, coverMode)
}

///|
let d_glCoverStrokePathInstancedNV : Dispatch = Dispatch::new(
  "glCoverStrokePathInstancedNV",
)

///|
pub fn gl_cover_stroke_path_instanced_nv(
  numPaths : Int,
  pathNameType : UInt,
  paths : Bytes,
  pathBase : UInt,
  coverMode : UInt,
  transformType : UInt,
  transformValues : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[
    (
      Int,
      UInt,
      @pointer.Pointer[Byte],
      UInt,
      UInt,
      UInt,
      @pointer.Pointer[Float],
    ) -> Unit,
  ] = d_glCoverStrokePathInstancedNV.get().unsafe_into()
  @pointer.borrow_bytes(paths, fn(paths_p) {
    @pointer.borrow_array(transformValues, fn(transformValues_p) {
      fp(
        numPaths, pathNameType, paths_p, pathBase, coverMode, transformType, transformValues_p,
      )
    })
  })
}

///|
let d_glCoverStrokePathNV : Dispatch = Dispatch::new("glCoverStrokePathNV")

///|
pub fn gl_cover_stroke_path_nv(path : UInt, coverMode : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glCoverStrokePathNV
    .get()
    .unsafe_into()
  fp(path, coverMode)
}

///|
let d_glCoverageMaskNV : Dispatch = Dispatch::new("glCoverageMaskNV")

///|
pub fn gl_coverage_mask_nv(mask : Bool) -> Unit {
  let fp : FuncRef[(Bool) -> Unit] = d_glCoverageMaskNV.get().unsafe_into()
  fp(mask)
}

///|
let d_glCoverageModulationNV : Dispatch = Dispatch::new(
  "glCoverageModulationNV",
)

///|
pub fn gl_coverage_modulation_nv(components : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glCoverageModulationNV
    .get()
    .unsafe_into()
  fp(components)
}

///|
let d_glCoverageModulationTableNV : Dispatch = Dispatch::new(
  "glCoverageModulationTableNV",
)

///|
pub fn gl_coverage_modulation_table_nv(n : Int, v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[Float]) -> Unit] = d_glCoverageModulationTableNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(n, v_p) })
}

///|
let d_glCoverageOperationNV : Dispatch = Dispatch::new("glCoverageOperationNV")

///|
pub fn gl_coverage_operation_nv(operation : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glCoverageOperationNV.get().unsafe_into()
  fp(operation)
}

///|
let d_glCreateBuffers : Dispatch = Dispatch::new("glCreateBuffers")

///|
pub fn gl_create_buffers(n : Int, buffers : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glCreateBuffers
    .get()
    .unsafe_into()
  @pointer.borrow_array(buffers, fn(buffers_p) { fp(n, buffers_p) })
}

///|
let d_glCreateCommandListsNV : Dispatch = Dispatch::new(
  "glCreateCommandListsNV",
)

///|
pub fn gl_create_command_lists_nv(n : Int, lists : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glCreateCommandListsNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(lists, fn(lists_p) { fp(n, lists_p) })
}

///|
let d_glCreateFramebuffers : Dispatch = Dispatch::new("glCreateFramebuffers")

///|
pub fn gl_create_framebuffers(n : Int, framebuffers : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glCreateFramebuffers
    .get()
    .unsafe_into()
  @pointer.borrow_array(framebuffers, fn(framebuffers_p) {
    fp(n, framebuffers_p)
  })
}

///|
let d_glCreateMemoryObjectsEXT : Dispatch = Dispatch::new(
  "glCreateMemoryObjectsEXT",
)

///|
pub fn gl_create_memory_objects_ext(
  n : Int,
  memoryObjects : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glCreateMemoryObjectsEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(memoryObjects, fn(memoryObjects_p) {
    fp(n, memoryObjects_p)
  })
}

///|
let d_glCreatePerfQueryINTEL : Dispatch = Dispatch::new(
  "glCreatePerfQueryINTEL",
)

///|
pub fn gl_create_perf_query_intel(
  queryId : UInt,
  queryHandle : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt]) -> Unit] = d_glCreatePerfQueryINTEL
    .get()
    .unsafe_into()
  @pointer.borrow_array(queryHandle, fn(queryHandle_p) {
    fp(queryId, queryHandle_p)
  })
}

///|
let d_glCreateProgram : Dispatch = Dispatch::with_aliases("glCreateProgram", [
  "glCreateProgramObjectARB",
])

///|
pub fn gl_create_program() -> UInt {
  let fp : FuncRef[() -> UInt] = d_glCreateProgram.get().unsafe_into()
  fp()
}

///|
let d_glCreateProgramPipelines : Dispatch = Dispatch::new(
  "glCreateProgramPipelines",
)

///|
pub fn gl_create_program_pipelines(
  n : Int,
  pipelines : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glCreateProgramPipelines
    .get()
    .unsafe_into()
  @pointer.borrow_array(pipelines, fn(pipelines_p) { fp(n, pipelines_p) })
}

///|
let d_glCreateProgressFenceNVX : Dispatch = Dispatch::new(
  "glCreateProgressFenceNVX",
)

///|
pub fn gl_create_progress_fence_nvx() -> UInt {
  let fp : FuncRef[() -> UInt] = d_glCreateProgressFenceNVX.get().unsafe_into()
  fp()
}

///|
let d_glCreateQueries : Dispatch = Dispatch::new("glCreateQueries")

///|
pub fn gl_create_queries(
  target : UInt,
  n : Int,
  ids : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[UInt]) -> Unit] = d_glCreateQueries
    .get()
    .unsafe_into()
  @pointer.borrow_array(ids, fn(ids_p) { fp(target, n, ids_p) })
}

///|
let d_glCreateRenderbuffers : Dispatch = Dispatch::new("glCreateRenderbuffers")

///|
pub fn gl_create_renderbuffers(
  n : Int,
  renderbuffers : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glCreateRenderbuffers
    .get()
    .unsafe_into()
  @pointer.borrow_array(renderbuffers, fn(renderbuffers_p) {
    fp(n, renderbuffers_p)
  })
}

///|
let d_glCreateSamplers : Dispatch = Dispatch::new("glCreateSamplers")

///|
pub fn gl_create_samplers(n : Int, samplers : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glCreateSamplers
    .get()
    .unsafe_into()
  @pointer.borrow_array(samplers, fn(samplers_p) { fp(n, samplers_p) })
}

///|
let d_glCreateSemaphoresNV : Dispatch = Dispatch::new("glCreateSemaphoresNV")

///|
pub fn gl_create_semaphores_nv(n : Int, semaphores : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glCreateSemaphoresNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(semaphores, fn(semaphores_p) { fp(n, semaphores_p) })
}

///|
let d_glCreateShader : Dispatch = Dispatch::with_aliases("glCreateShader", [
  "glCreateShaderObjectARB",
])

///|
pub fn gl_create_shader(type_ : UInt) -> UInt {
  let fp : FuncRef[(UInt) -> UInt] = d_glCreateShader.get().unsafe_into()
  fp(type_)
}

///|
let d_glCreateShaderProgramEXT : Dispatch = Dispatch::new(
  "glCreateShaderProgramEXT",
)

///|
pub fn gl_create_shader_program_ext(type_ : UInt, string : Bytes) -> UInt {
  let fp : FuncRef[(UInt, @pointer.Pointer[Byte]) -> UInt] = d_glCreateShaderProgramEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(string, fn(string_p) { fp(type_, string_p) })
}

///|
let d_glCreateShaderProgramv : Dispatch = Dispatch::new(
  "glCreateShaderProgramv",
)

///|
pub fn gl_create_shader_programv(
  type_ : UInt,
  count : Int,
  strings : FixedArray[Bytes],
) -> UInt {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Bytes]) -> UInt] = d_glCreateShaderProgramv
    .get()
    .unsafe_into()
  @pointer.borrow_array(strings, fn(strings_p) { fp(type_, count, strings_p) })
}

///|
let d_glCreateShaderProgramvEXT : Dispatch = Dispatch::new(
  "glCreateShaderProgramvEXT",
)

///|
pub fn gl_create_shader_programv_ext(
  type_ : UInt,
  count : Int,
  strings : FixedArray[Bytes],
) -> UInt {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Bytes]) -> UInt] = d_glCreateShaderProgramvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(strings, fn(strings_p) { fp(type_, count, strings_p) })
}

///|
let d_glCreateStatesNV : Dispatch = Dispatch::new("glCreateStatesNV")

///|
pub fn gl_create_states_nv(n : Int, states : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glCreateStatesNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(states, fn(states_p) { fp(n, states_p) })
}

///|
let d_glCreateTextures : Dispatch = Dispatch::new("glCreateTextures")

///|
pub fn gl_create_textures(
  target : UInt,
  n : Int,
  textures : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[UInt]) -> Unit] = d_glCreateTextures
    .get()
    .unsafe_into()
  @pointer.borrow_array(textures, fn(textures_p) { fp(target, n, textures_p) })
}

///|
let d_glCreateTransformFeedbacks : Dispatch = Dispatch::new(
  "glCreateTransformFeedbacks",
)

///|
pub fn gl_create_transform_feedbacks(n : Int, ids : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glCreateTransformFeedbacks
    .get()
    .unsafe_into()
  @pointer.borrow_array(ids, fn(ids_p) { fp(n, ids_p) })
}

///|
let d_glCreateVertexArrays : Dispatch = Dispatch::new("glCreateVertexArrays")

///|
pub fn gl_create_vertex_arrays(n : Int, arrays : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glCreateVertexArrays
    .get()
    .unsafe_into()
  @pointer.borrow_array(arrays, fn(arrays_p) { fp(n, arrays_p) })
}

///|
let d_glCullFace : Dispatch = Dispatch::new("glCullFace")

///|
pub fn gl_cull_face(mode : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glCullFace.get().unsafe_into()
  fp(mode)
}

///|
let d_glCullParameterdvEXT : Dispatch = Dispatch::new("glCullParameterdvEXT")

///|
pub fn gl_cull_parameterdv_ext(
  pname : UInt,
  params : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Double]) -> Unit] = d_glCullParameterdvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(pname, params_p) })
}

///|
let d_glCullParameterfvEXT : Dispatch = Dispatch::new("glCullParameterfvEXT")

///|
pub fn gl_cull_parameterfv_ext(
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glCullParameterfvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(pname, params_p) })
}

///|
let d_glCurrentPaletteMatrixARB : Dispatch = Dispatch::new(
  "glCurrentPaletteMatrixARB",
)

///|
pub fn gl_current_palette_matrix_arb(index : Int) -> Unit {
  let fp : FuncRef[(Int) -> Unit] = d_glCurrentPaletteMatrixARB
    .get()
    .unsafe_into()
  fp(index)
}

///|
let d_glCurrentPaletteMatrixOES : Dispatch = Dispatch::new(
  "glCurrentPaletteMatrixOES",
)

///|
pub fn gl_current_palette_matrix_oes(matrixpaletteindex : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glCurrentPaletteMatrixOES
    .get()
    .unsafe_into()
  fp(matrixpaletteindex)
}

///|
let d_glDebugMessageControl : Dispatch = Dispatch::with_aliases(
  "glDebugMessageControl",
  ["glDebugMessageControlARB", "glDebugMessageControlKHR"],
)

///|
pub fn gl_debug_message_control(
  source : UInt,
  type_ : UInt,
  severity : UInt,
  count : Int,
  ids : FixedArray[UInt],
  enabled : Bool,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, UInt, Int, @pointer.Pointer[UInt], Bool) -> Unit,
  ] = d_glDebugMessageControl.get().unsafe_into()
  @pointer.borrow_array(ids, fn(ids_p) {
    fp(source, type_, severity, count, ids_p, enabled)
  })
}

///|
let d_glDebugMessageControlARB : Dispatch = Dispatch::with_aliases(
  "glDebugMessageControlARB",
  ["glDebugMessageControl", "glDebugMessageControlKHR"],
)

///|
pub fn gl_debug_message_control_arb(
  source : UInt,
  type_ : UInt,
  severity : UInt,
  count : Int,
  ids : FixedArray[UInt],
  enabled : Bool,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, UInt, Int, @pointer.Pointer[UInt], Bool) -> Unit,
  ] = d_glDebugMessageControlARB.get().unsafe_into()
  @pointer.borrow_array(ids, fn(ids_p) {
    fp(source, type_, severity, count, ids_p, enabled)
  })
}

///|
let d_glDebugMessageControlKHR : Dispatch = Dispatch::with_aliases(
  "glDebugMessageControlKHR",
  ["glDebugMessageControl", "glDebugMessageControlARB"],
)

///|
pub fn gl_debug_message_control_khr(
  source : UInt,
  type_ : UInt,
  severity : UInt,
  count : Int,
  ids : FixedArray[UInt],
  enabled : Bool,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, UInt, Int, @pointer.Pointer[UInt], Bool) -> Unit,
  ] = d_glDebugMessageControlKHR.get().unsafe_into()
  @pointer.borrow_array(ids, fn(ids_p) {
    fp(source, type_, severity, count, ids_p, enabled)
  })
}

///|
let d_glDebugMessageEnableAMD : Dispatch = Dispatch::new(
  "glDebugMessageEnableAMD",
)

///|
pub fn gl_debug_message_enable_amd(
  category : UInt,
  severity : UInt,
  count : Int,
  ids : FixedArray[UInt],
  enabled : Bool,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, @pointer.Pointer[UInt], Bool) -> Unit] = d_glDebugMessageEnableAMD
    .get()
    .unsafe_into()
  @pointer.borrow_array(ids, fn(ids_p) {
    fp(category, severity, count, ids_p, enabled)
  })
}

///|
let d_glDebugMessageInsert : Dispatch = Dispatch::with_aliases(
  "glDebugMessageInsert",
  ["glDebugMessageInsertARB", "glDebugMessageInsertKHR"],
)

///|
pub fn gl_debug_message_insert(
  source : UInt,
  type_ : UInt,
  id : UInt,
  severity : UInt,
  length : Int,
  buf : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, UInt, UInt, Int, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glDebugMessageInsert.get().unsafe_into()
  @pointer.borrow_bytes(buf, fn(buf_p) {
    fp(source, type_, id, severity, length, buf_p)
  })
}

///|
let d_glDebugMessageInsertAMD : Dispatch = Dispatch::new(
  "glDebugMessageInsertAMD",
)

///|
pub fn gl_debug_message_insert_amd(
  category : UInt,
  severity : UInt,
  id : UInt,
  length : Int,
  buf : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int, @pointer.Pointer[Byte]) -> Unit] = d_glDebugMessageInsertAMD
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(buf, fn(buf_p) {
    fp(category, severity, id, length, buf_p)
  })
}

///|
let d_glDebugMessageInsertARB : Dispatch = Dispatch::with_aliases(
  "glDebugMessageInsertARB",
  ["glDebugMessageInsert", "glDebugMessageInsertKHR"],
)

///|
pub fn gl_debug_message_insert_arb(
  source : UInt,
  type_ : UInt,
  id : UInt,
  severity : UInt,
  length : Int,
  buf : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, UInt, UInt, Int, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glDebugMessageInsertARB.get().unsafe_into()
  @pointer.borrow_bytes(buf, fn(buf_p) {
    fp(source, type_, id, severity, length, buf_p)
  })
}

///|
let d_glDebugMessageInsertKHR : Dispatch = Dispatch::with_aliases(
  "glDebugMessageInsertKHR",
  ["glDebugMessageInsert", "glDebugMessageInsertARB"],
)

///|
pub fn gl_debug_message_insert_khr(
  source : UInt,
  type_ : UInt,
  id : UInt,
  severity : UInt,
  length : Int,
  buf : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, UInt, UInt, Int, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glDebugMessageInsertKHR.get().unsafe_into()
  @pointer.borrow_bytes(buf, fn(buf_p) {
    fp(source, type_, id, severity, length, buf_p)
  })
}

///|
let d_glDeformSGIX : Dispatch = Dispatch::new("glDeformSGIX")

///|
pub fn gl_deform_sgix(mask : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glDeformSGIX.get().unsafe_into()
  fp(mask)
}

///|
let d_glDeformationMap3dSGIX : Dispatch = Dispatch::new(
  "glDeformationMap3dSGIX",
)

///|
pub fn gl_deformation_map3d_sgix(
  target : UInt,
  u1 : Double,
  u2 : Double,
  ustride : Int,
  uorder : Int,
  v1 : Double,
  v2 : Double,
  vstride : Int,
  vorder : Int,
  w1 : Double,
  w2 : Double,
  wstride : Int,
  worder : Int,
  points : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      Double,
      Double,
      Int,
      Int,
      Double,
      Double,
      Int,
      Int,
      Double,
      Double,
      Int,
      Int,
      @pointer.Pointer[Double],
    ) -> Unit,
  ] = d_glDeformationMap3dSGIX.get().unsafe_into()
  @pointer.borrow_array(points, fn(points_p) {
    fp(
      target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, w1, w2, wstride,
      worder, points_p,
    )
  })
}

///|
let d_glDeformationMap3fSGIX : Dispatch = Dispatch::new(
  "glDeformationMap3fSGIX",
)

///|
pub fn gl_deformation_map3f_sgix(
  target : UInt,
  u1 : Float,
  u2 : Float,
  ustride : Int,
  uorder : Int,
  v1 : Float,
  v2 : Float,
  vstride : Int,
  vorder : Int,
  w1 : Float,
  w2 : Float,
  wstride : Int,
  worder : Int,
  points : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      Float,
      Float,
      Int,
      Int,
      Float,
      Float,
      Int,
      Int,
      Float,
      Float,
      Int,
      Int,
      @pointer.Pointer[Float],
    ) -> Unit,
  ] = d_glDeformationMap3fSGIX.get().unsafe_into()
  @pointer.borrow_array(points, fn(points_p) {
    fp(
      target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, w1, w2, wstride,
      worder, points_p,
    )
  })
}

///|
let d_glDeleteAsyncMarkersSGIX : Dispatch = Dispatch::new(
  "glDeleteAsyncMarkersSGIX",
)

///|
pub fn gl_delete_async_markers_sgix(marker : UInt, range : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glDeleteAsyncMarkersSGIX
    .get()
    .unsafe_into()
  fp(marker, range)
}

///|
let d_glDeleteBuffers : Dispatch = Dispatch::with_aliases("glDeleteBuffers", [
  "glDeleteBuffersARB",
])

///|
pub fn gl_delete_buffers(n : Int, buffers : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glDeleteBuffers
    .get()
    .unsafe_into()
  @pointer.borrow_array(buffers, fn(buffers_p) { fp(n, buffers_p) })
}

///|
let d_glDeleteBuffersARB : Dispatch = Dispatch::with_aliases(
  "glDeleteBuffersARB",
  ["glDeleteBuffers"],
)

///|
pub fn gl_delete_buffers_arb(n : Int, buffers : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glDeleteBuffersARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(buffers, fn(buffers_p) { fp(n, buffers_p) })
}

///|
let d_glDeleteCommandListsNV : Dispatch = Dispatch::new(
  "glDeleteCommandListsNV",
)

///|
pub fn gl_delete_command_lists_nv(n : Int, lists : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glDeleteCommandListsNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(lists, fn(lists_p) { fp(n, lists_p) })
}

///|
let d_glDeleteFencesAPPLE : Dispatch = Dispatch::new("glDeleteFencesAPPLE")

///|
pub fn gl_delete_fences_apple(n : Int, fences : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glDeleteFencesAPPLE
    .get()
    .unsafe_into()
  @pointer.borrow_array(fences, fn(fences_p) { fp(n, fences_p) })
}

///|
let d_glDeleteFencesNV : Dispatch = Dispatch::new("glDeleteFencesNV")

///|
pub fn gl_delete_fences_nv(n : Int, fences : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glDeleteFencesNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(fences, fn(fences_p) { fp(n, fences_p) })
}

///|
let d_glDeleteFragmentShaderATI : Dispatch = Dispatch::new(
  "glDeleteFragmentShaderATI",
)

///|
pub fn gl_delete_fragment_shader_ati(id : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glDeleteFragmentShaderATI
    .get()
    .unsafe_into()
  fp(id)
}

///|
let d_glDeleteFramebuffers : Dispatch = Dispatch::with_aliases(
  "glDeleteFramebuffers",
  ["glDeleteFramebuffersEXT"],
)

///|
pub fn gl_delete_framebuffers(n : Int, framebuffers : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glDeleteFramebuffers
    .get()
    .unsafe_into()
  @pointer.borrow_array(framebuffers, fn(framebuffers_p) {
    fp(n, framebuffers_p)
  })
}

///|
let d_glDeleteFramebuffersEXT : Dispatch = Dispatch::with_aliases(
  "glDeleteFramebuffersEXT",
  ["glDeleteFramebuffers"],
)

///|
pub fn gl_delete_framebuffers_ext(
  n : Int,
  framebuffers : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glDeleteFramebuffersEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(framebuffers, fn(framebuffers_p) {
    fp(n, framebuffers_p)
  })
}

///|
let d_glDeleteFramebuffersOES : Dispatch = Dispatch::new(
  "glDeleteFramebuffersOES",
)

///|
pub fn gl_delete_framebuffers_oes(
  n : Int,
  framebuffers : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glDeleteFramebuffersOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(framebuffers, fn(framebuffers_p) {
    fp(n, framebuffers_p)
  })
}

///|
let d_glDeleteLists : Dispatch = Dispatch::new("glDeleteLists")

///|
pub fn gl_delete_lists(list : UInt, range : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glDeleteLists.get().unsafe_into()
  fp(list, range)
}

///|
let d_glDeleteMemoryObjectsEXT : Dispatch = Dispatch::new(
  "glDeleteMemoryObjectsEXT",
)

///|
pub fn gl_delete_memory_objects_ext(
  n : Int,
  memoryObjects : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glDeleteMemoryObjectsEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(memoryObjects, fn(memoryObjects_p) {
    fp(n, memoryObjects_p)
  })
}

///|
let d_glDeleteNamedStringARB : Dispatch = Dispatch::new(
  "glDeleteNamedStringARB",
)

///|
pub fn gl_delete_named_string_arb(namelen : Int, name : Bytes) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[Byte]) -> Unit] = d_glDeleteNamedStringARB
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(name, fn(name_p) { fp(namelen, name_p) })
}

///|
let d_glDeleteNamesAMD : Dispatch = Dispatch::new("glDeleteNamesAMD")

///|
pub fn gl_delete_names_amd(
  identifier : UInt,
  num : UInt,
  names : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[UInt]) -> Unit] = d_glDeleteNamesAMD
    .get()
    .unsafe_into()
  @pointer.borrow_array(names, fn(names_p) { fp(identifier, num, names_p) })
}

///|
let d_glDeleteOcclusionQueriesNV : Dispatch = Dispatch::new(
  "glDeleteOcclusionQueriesNV",
)

///|
pub fn gl_delete_occlusion_queries_nv(n : Int, ids : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glDeleteOcclusionQueriesNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(ids, fn(ids_p) { fp(n, ids_p) })
}

///|
let d_glDeletePathsNV : Dispatch = Dispatch::new("glDeletePathsNV")

///|
pub fn gl_delete_paths_nv(path : UInt, range : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glDeletePathsNV.get().unsafe_into()
  fp(path, range)
}

///|
let d_glDeletePerfMonitorsAMD : Dispatch = Dispatch::new(
  "glDeletePerfMonitorsAMD",
)

///|
pub fn gl_delete_perf_monitors_amd(
  n : Int,
  monitors : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glDeletePerfMonitorsAMD
    .get()
    .unsafe_into()
  @pointer.borrow_array(monitors, fn(monitors_p) { fp(n, monitors_p) })
}

///|
let d_glDeletePerfQueryINTEL : Dispatch = Dispatch::new(
  "glDeletePerfQueryINTEL",
)

///|
pub fn gl_delete_perf_query_intel(queryHandle : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glDeletePerfQueryINTEL
    .get()
    .unsafe_into()
  fp(queryHandle)
}

///|
let d_glDeleteProgram : Dispatch = Dispatch::new("glDeleteProgram")

///|
pub fn gl_delete_program(program : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glDeleteProgram.get().unsafe_into()
  fp(program)
}

///|
let d_glDeleteProgramPipelines : Dispatch = Dispatch::new(
  "glDeleteProgramPipelines",
)

///|
pub fn gl_delete_program_pipelines(
  n : Int,
  pipelines : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glDeleteProgramPipelines
    .get()
    .unsafe_into()
  @pointer.borrow_array(pipelines, fn(pipelines_p) { fp(n, pipelines_p) })
}

///|
let d_glDeleteProgramPipelinesEXT : Dispatch = Dispatch::new(
  "glDeleteProgramPipelinesEXT",
)

///|
pub fn gl_delete_program_pipelines_ext(
  n : Int,
  pipelines : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glDeleteProgramPipelinesEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(pipelines, fn(pipelines_p) { fp(n, pipelines_p) })
}

///|
let d_glDeleteProgramsARB : Dispatch = Dispatch::with_aliases(
  "glDeleteProgramsARB",
  ["glDeleteProgramsNV"],
)

///|
pub fn gl_delete_programs_arb(n : Int, programs : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glDeleteProgramsARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(programs, fn(programs_p) { fp(n, programs_p) })
}

///|
let d_glDeleteProgramsNV : Dispatch = Dispatch::with_aliases(
  "glDeleteProgramsNV",
  ["glDeleteProgramsARB"],
)

///|
pub fn gl_delete_programs_nv(n : Int, programs : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glDeleteProgramsNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(programs, fn(programs_p) { fp(n, programs_p) })
}

///|
let d_glDeleteQueries : Dispatch = Dispatch::with_aliases("glDeleteQueries", [
  "glDeleteQueriesARB",
])

///|
pub fn gl_delete_queries(n : Int, ids : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glDeleteQueries
    .get()
    .unsafe_into()
  @pointer.borrow_array(ids, fn(ids_p) { fp(n, ids_p) })
}

///|
let d_glDeleteQueriesARB : Dispatch = Dispatch::with_aliases(
  "glDeleteQueriesARB",
  ["glDeleteQueries"],
)

///|
pub fn gl_delete_queries_arb(n : Int, ids : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glDeleteQueriesARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(ids, fn(ids_p) { fp(n, ids_p) })
}

///|
let d_glDeleteQueriesEXT : Dispatch = Dispatch::new("glDeleteQueriesEXT")

///|
pub fn gl_delete_queries_ext(n : Int, ids : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glDeleteQueriesEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(ids, fn(ids_p) { fp(n, ids_p) })
}

///|
let d_glDeleteQueryResourceTagNV : Dispatch = Dispatch::new(
  "glDeleteQueryResourceTagNV",
)

///|
pub fn gl_delete_query_resource_tag_nv(
  n : Int,
  tagIds : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[Int]) -> Unit] = d_glDeleteQueryResourceTagNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(tagIds, fn(tagIds_p) { fp(n, tagIds_p) })
}

///|
let d_glDeleteRenderbuffers : Dispatch = Dispatch::with_aliases(
  "glDeleteRenderbuffers",
  ["glDeleteRenderbuffersEXT"],
)

///|
pub fn gl_delete_renderbuffers(
  n : Int,
  renderbuffers : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glDeleteRenderbuffers
    .get()
    .unsafe_into()
  @pointer.borrow_array(renderbuffers, fn(renderbuffers_p) {
    fp(n, renderbuffers_p)
  })
}

///|
let d_glDeleteRenderbuffersEXT : Dispatch = Dispatch::with_aliases(
  "glDeleteRenderbuffersEXT",
  ["glDeleteRenderbuffers"],
)

///|
pub fn gl_delete_renderbuffers_ext(
  n : Int,
  renderbuffers : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glDeleteRenderbuffersEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(renderbuffers, fn(renderbuffers_p) {
    fp(n, renderbuffers_p)
  })
}

///|
let d_glDeleteRenderbuffersOES : Dispatch = Dispatch::new(
  "glDeleteRenderbuffersOES",
)

///|
pub fn gl_delete_renderbuffers_oes(
  n : Int,
  renderbuffers : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glDeleteRenderbuffersOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(renderbuffers, fn(renderbuffers_p) {
    fp(n, renderbuffers_p)
  })
}

///|
let d_glDeleteSamplers : Dispatch = Dispatch::new("glDeleteSamplers")

///|
pub fn gl_delete_samplers(count : Int, samplers : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glDeleteSamplers
    .get()
    .unsafe_into()
  @pointer.borrow_array(samplers, fn(samplers_p) { fp(count, samplers_p) })
}

///|
let d_glDeleteSemaphoresEXT : Dispatch = Dispatch::new("glDeleteSemaphoresEXT")

///|
pub fn gl_delete_semaphores_ext(n : Int, semaphores : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glDeleteSemaphoresEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(semaphores, fn(semaphores_p) { fp(n, semaphores_p) })
}

///|
let d_glDeleteShader : Dispatch = Dispatch::new("glDeleteShader")

///|
pub fn gl_delete_shader(shader : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glDeleteShader.get().unsafe_into()
  fp(shader)
}

///|
let d_glDeleteStatesNV : Dispatch = Dispatch::new("glDeleteStatesNV")

///|
pub fn gl_delete_states_nv(n : Int, states : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glDeleteStatesNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(states, fn(states_p) { fp(n, states_p) })
}

///|
let d_glDeleteSync : Dispatch = Dispatch::with_aliases("glDeleteSync", [
  "glDeleteSyncAPPLE",
])

///|
pub fn gl_delete_sync(sync : GLsync) -> Unit {
  let fp : FuncRef[(GLsync) -> Unit] = d_glDeleteSync.get().unsafe_into()
  fp(sync)
}

///|
let d_glDeleteSyncAPPLE : Dispatch = Dispatch::with_aliases(
  "glDeleteSyncAPPLE",
  ["glDeleteSync"],
)

///|
pub fn gl_delete_sync_apple(sync : GLsync) -> Unit {
  let fp : FuncRef[(GLsync) -> Unit] = d_glDeleteSyncAPPLE.get().unsafe_into()
  fp(sync)
}

///|
let d_glDeleteTextures : Dispatch = Dispatch::new("glDeleteTextures")

///|
pub fn gl_delete_textures(n : Int, textures : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glDeleteTextures
    .get()
    .unsafe_into()
  @pointer.borrow_array(textures, fn(textures_p) { fp(n, textures_p) })
}

///|
let d_glDeleteTexturesEXT : Dispatch = Dispatch::new("glDeleteTexturesEXT")

///|
pub fn gl_delete_textures_ext(n : Int, textures : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glDeleteTexturesEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(textures, fn(textures_p) { fp(n, textures_p) })
}

///|
let d_glDeleteTransformFeedbacks : Dispatch = Dispatch::with_aliases(
  "glDeleteTransformFeedbacks",
  ["glDeleteTransformFeedbacksNV"],
)

///|
pub fn gl_delete_transform_feedbacks(n : Int, ids : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glDeleteTransformFeedbacks
    .get()
    .unsafe_into()
  @pointer.borrow_array(ids, fn(ids_p) { fp(n, ids_p) })
}

///|
let d_glDeleteTransformFeedbacksNV : Dispatch = Dispatch::with_aliases(
  "glDeleteTransformFeedbacksNV",
  ["glDeleteTransformFeedbacks"],
)

///|
pub fn gl_delete_transform_feedbacks_nv(
  n : Int,
  ids : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glDeleteTransformFeedbacksNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(ids, fn(ids_p) { fp(n, ids_p) })
}

///|
let d_glDeleteVertexArrays : Dispatch = Dispatch::with_aliases(
  "glDeleteVertexArrays",
  ["glDeleteVertexArraysAPPLE", "glDeleteVertexArraysOES"],
)

///|
pub fn gl_delete_vertex_arrays(n : Int, arrays : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glDeleteVertexArrays
    .get()
    .unsafe_into()
  @pointer.borrow_array(arrays, fn(arrays_p) { fp(n, arrays_p) })
}

///|
let d_glDeleteVertexArraysAPPLE : Dispatch = Dispatch::with_aliases(
  "glDeleteVertexArraysAPPLE",
  ["glDeleteVertexArrays", "glDeleteVertexArraysOES"],
)

///|
pub fn gl_delete_vertex_arrays_apple(
  n : Int,
  arrays : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glDeleteVertexArraysAPPLE
    .get()
    .unsafe_into()
  @pointer.borrow_array(arrays, fn(arrays_p) { fp(n, arrays_p) })
}

///|
let d_glDeleteVertexArraysOES : Dispatch = Dispatch::with_aliases(
  "glDeleteVertexArraysOES",
  ["glDeleteVertexArrays", "glDeleteVertexArraysAPPLE"],
)

///|
pub fn gl_delete_vertex_arrays_oes(n : Int, arrays : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glDeleteVertexArraysOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(arrays, fn(arrays_p) { fp(n, arrays_p) })
}

///|
let d_glDeleteVertexShaderEXT : Dispatch = Dispatch::new(
  "glDeleteVertexShaderEXT",
)

///|
pub fn gl_delete_vertex_shader_ext(id : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glDeleteVertexShaderEXT
    .get()
    .unsafe_into()
  fp(id)
}

///|
let d_glDepthBoundsEXT : Dispatch = Dispatch::new("glDepthBoundsEXT")

///|
pub fn gl_depth_bounds_ext(zmin : Double, zmax : Double) -> Unit {
  let fp : FuncRef[(Double, Double) -> Unit] = d_glDepthBoundsEXT
    .get()
    .unsafe_into()
  fp(zmin, zmax)
}

///|
let d_glDepthBoundsdNV : Dispatch = Dispatch::new("glDepthBoundsdNV")

///|
pub fn gl_depth_boundsd_nv(zmin : Double, zmax : Double) -> Unit {
  let fp : FuncRef[(Double, Double) -> Unit] = d_glDepthBoundsdNV
    .get()
    .unsafe_into()
  fp(zmin, zmax)
}

///|
let d_glDepthFunc : Dispatch = Dispatch::new("glDepthFunc")

///|
pub fn gl_depth_func(func : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glDepthFunc.get().unsafe_into()
  fp(func)
}

///|
let d_glDepthMask : Dispatch = Dispatch::new("glDepthMask")

///|
pub fn gl_depth_mask(flag : Bool) -> Unit {
  let fp : FuncRef[(Bool) -> Unit] = d_glDepthMask.get().unsafe_into()
  fp(flag)
}

///|
let d_glDepthRange : Dispatch = Dispatch::new("glDepthRange")

///|
pub fn gl_depth_range(n : Double, f : Double) -> Unit {
  let fp : FuncRef[(Double, Double) -> Unit] = d_glDepthRange
    .get()
    .unsafe_into()
  fp(n, f)
}

///|
let d_glDepthRangeArraydvNV : Dispatch = Dispatch::new("glDepthRangeArraydvNV")

///|
pub fn gl_depth_range_arraydv_nv(
  first : UInt,
  count : Int,
  v : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Double]) -> Unit] = d_glDepthRangeArraydvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(first, count, v_p) })
}

///|
let d_glDepthRangeArrayfvNV : Dispatch = Dispatch::new("glDepthRangeArrayfvNV")

///|
pub fn gl_depth_range_arrayfv_nv(
  first : UInt,
  count : Int,
  v : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Float]) -> Unit] = d_glDepthRangeArrayfvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(first, count, v_p) })
}

///|
let d_glDepthRangeArrayfvOES : Dispatch = Dispatch::new(
  "glDepthRangeArrayfvOES",
)

///|
pub fn gl_depth_range_arrayfv_oes(
  first : UInt,
  count : Int,
  v : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Float]) -> Unit] = d_glDepthRangeArrayfvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(first, count, v_p) })
}

///|
let d_glDepthRangeArrayv : Dispatch = Dispatch::new("glDepthRangeArrayv")

///|
pub fn gl_depth_range_arrayv(
  first : UInt,
  count : Int,
  v : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Double]) -> Unit] = d_glDepthRangeArrayv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(first, count, v_p) })
}

///|
let d_glDepthRangeIndexed : Dispatch = Dispatch::new("glDepthRangeIndexed")

///|
pub fn gl_depth_range_indexed(index : UInt, n : Double, f : Double) -> Unit {
  let fp : FuncRef[(UInt, Double, Double) -> Unit] = d_glDepthRangeIndexed
    .get()
    .unsafe_into()
  fp(index, n, f)
}

///|
let d_glDepthRangeIndexeddNV : Dispatch = Dispatch::new(
  "glDepthRangeIndexeddNV",
)

///|
pub fn gl_depth_range_indexedd_nv(index : UInt, n : Double, f : Double) -> Unit {
  let fp : FuncRef[(UInt, Double, Double) -> Unit] = d_glDepthRangeIndexeddNV
    .get()
    .unsafe_into()
  fp(index, n, f)
}

///|
let d_glDepthRangeIndexedfNV : Dispatch = Dispatch::new(
  "glDepthRangeIndexedfNV",
)

///|
pub fn gl_depth_range_indexedf_nv(index : UInt, n : Float, f : Float) -> Unit {
  let fp : FuncRef[(UInt, Float, Float) -> Unit] = d_glDepthRangeIndexedfNV
    .get()
    .unsafe_into()
  fp(index, n, f)
}

///|
let d_glDepthRangeIndexedfOES : Dispatch = Dispatch::new(
  "glDepthRangeIndexedfOES",
)

///|
pub fn gl_depth_range_indexedf_oes(index : UInt, n : Float, f : Float) -> Unit {
  let fp : FuncRef[(UInt, Float, Float) -> Unit] = d_glDepthRangeIndexedfOES
    .get()
    .unsafe_into()
  fp(index, n, f)
}

///|
let d_glDepthRangedNV : Dispatch = Dispatch::new("glDepthRangedNV")

///|
pub fn gl_depth_ranged_nv(zNear : Double, zFar : Double) -> Unit {
  let fp : FuncRef[(Double, Double) -> Unit] = d_glDepthRangedNV
    .get()
    .unsafe_into()
  fp(zNear, zFar)
}

///|
let d_glDepthRangef : Dispatch = Dispatch::with_aliases("glDepthRangef", [
  "glDepthRangefOES",
])

///|
pub fn gl_depth_rangef(n : Float, f : Float) -> Unit {
  let fp : FuncRef[(Float, Float) -> Unit] = d_glDepthRangef.get().unsafe_into()
  fp(n, f)
}

///|
let d_glDepthRangefOES : Dispatch = Dispatch::with_aliases("glDepthRangefOES", [
  "glDepthRangef",
])

///|
pub fn gl_depth_rangef_oes(n : Float, f : Float) -> Unit {
  let fp : FuncRef[(Float, Float) -> Unit] = d_glDepthRangefOES
    .get()
    .unsafe_into()
  fp(n, f)
}

///|
let d_glDepthRangex : Dispatch = Dispatch::new("glDepthRangex")

///|
pub fn gl_depth_rangex(n : Int, f : Int) -> Unit {
  let fp : FuncRef[(Int, Int) -> Unit] = d_glDepthRangex.get().unsafe_into()
  fp(n, f)
}

///|
let d_glDepthRangexOES : Dispatch = Dispatch::new("glDepthRangexOES")

///|
pub fn gl_depth_rangex_oes(n : Int, f : Int) -> Unit {
  let fp : FuncRef[(Int, Int) -> Unit] = d_glDepthRangexOES.get().unsafe_into()
  fp(n, f)
}

///|
let d_glDetachShader : Dispatch = Dispatch::with_aliases("glDetachShader", [
  "glDetachObjectARB",
])

///|
pub fn gl_detach_shader(program : UInt, shader : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glDetachShader.get().unsafe_into()
  fp(program, shader)
}

///|
let d_glDetailTexFuncSGIS : Dispatch = Dispatch::new("glDetailTexFuncSGIS")

///|
pub fn gl_detail_tex_func_sgis(
  target : UInt,
  n : Int,
  points : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Float]) -> Unit] = d_glDetailTexFuncSGIS
    .get()
    .unsafe_into()
  @pointer.borrow_array(points, fn(points_p) { fp(target, n, points_p) })
}

///|
let d_glDisable : Dispatch = Dispatch::new("glDisable")

///|
pub fn gl_disable(cap : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glDisable.get().unsafe_into()
  fp(cap)
}

///|
let d_glDisableClientState : Dispatch = Dispatch::new("glDisableClientState")

///|
pub fn gl_disable_client_state(array : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glDisableClientState.get().unsafe_into()
  fp(array)
}

///|
let d_glDisableClientStateIndexedEXT : Dispatch = Dispatch::new(
  "glDisableClientStateIndexedEXT",
)

///|
pub fn gl_disable_client_state_indexed_ext(array : UInt, index : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glDisableClientStateIndexedEXT
    .get()
    .unsafe_into()
  fp(array, index)
}

///|
let d_glDisableClientStateiEXT : Dispatch = Dispatch::new(
  "glDisableClientStateiEXT",
)

///|
pub fn gl_disable_client_statei_ext(array : UInt, index : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glDisableClientStateiEXT
    .get()
    .unsafe_into()
  fp(array, index)
}

///|
let d_glDisableDriverControlQCOM : Dispatch = Dispatch::new(
  "glDisableDriverControlQCOM",
)

///|
pub fn gl_disable_driver_control_qcom(driverControl : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glDisableDriverControlQCOM
    .get()
    .unsafe_into()
  fp(driverControl)
}

///|
let d_glDisableIndexedEXT : Dispatch = Dispatch::with_aliases(
  "glDisableIndexedEXT",
  ["glDisablei", "glDisableiEXT", "glDisableiNV", "glDisableiOES"],
)

///|
pub fn gl_disable_indexed_ext(target : UInt, index : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glDisableIndexedEXT
    .get()
    .unsafe_into()
  fp(target, index)
}

///|
let d_glDisableVariantClientStateEXT : Dispatch = Dispatch::new(
  "glDisableVariantClientStateEXT",
)

///|
pub fn gl_disable_variant_client_state_ext(id : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glDisableVariantClientStateEXT
    .get()
    .unsafe_into()
  fp(id)
}

///|
let d_glDisableVertexArrayAttrib : Dispatch = Dispatch::new(
  "glDisableVertexArrayAttrib",
)

///|
pub fn gl_disable_vertex_array_attrib(vaobj : UInt, index : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glDisableVertexArrayAttrib
    .get()
    .unsafe_into()
  fp(vaobj, index)
}

///|
let d_glDisableVertexArrayAttribEXT : Dispatch = Dispatch::new(
  "glDisableVertexArrayAttribEXT",
)

///|
pub fn gl_disable_vertex_array_attrib_ext(vaobj : UInt, index : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glDisableVertexArrayAttribEXT
    .get()
    .unsafe_into()
  fp(vaobj, index)
}

///|
let d_glDisableVertexArrayEXT : Dispatch = Dispatch::new(
  "glDisableVertexArrayEXT",
)

///|
pub fn gl_disable_vertex_array_ext(vaobj : UInt, array : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glDisableVertexArrayEXT
    .get()
    .unsafe_into()
  fp(vaobj, array)
}

///|
let d_glDisableVertexAttribAPPLE : Dispatch = Dispatch::new(
  "glDisableVertexAttribAPPLE",
)

///|
pub fn gl_disable_vertex_attrib_apple(index : UInt, pname : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glDisableVertexAttribAPPLE
    .get()
    .unsafe_into()
  fp(index, pname)
}

///|
let d_glDisableVertexAttribArray : Dispatch = Dispatch::with_aliases(
  "glDisableVertexAttribArray",
  ["glDisableVertexAttribArrayARB"],
)

///|
pub fn gl_disable_vertex_attrib_array(index : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glDisableVertexAttribArray
    .get()
    .unsafe_into()
  fp(index)
}

///|
let d_glDisableVertexAttribArrayARB : Dispatch = Dispatch::with_aliases(
  "glDisableVertexAttribArrayARB",
  ["glDisableVertexAttribArray"],
)

///|
pub fn gl_disable_vertex_attrib_array_arb(index : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glDisableVertexAttribArrayARB
    .get()
    .unsafe_into()
  fp(index)
}

///|
let d_glDisablei : Dispatch = Dispatch::with_aliases("glDisablei", [
  "glDisableIndexedEXT", "glDisableiEXT", "glDisableiNV", "glDisableiOES",
])

///|
pub fn gl_disablei(target : UInt, index : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glDisablei.get().unsafe_into()
  fp(target, index)
}

///|
let d_glDisableiEXT : Dispatch = Dispatch::with_aliases("glDisableiEXT", [
  "glDisableIndexedEXT", "glDisablei", "glDisableiNV", "glDisableiOES",
])

///|
pub fn gl_disablei_ext(target : UInt, index : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glDisableiEXT.get().unsafe_into()
  fp(target, index)
}

///|
let d_glDisableiNV : Dispatch = Dispatch::with_aliases("glDisableiNV", [
  "glDisableIndexedEXT", "glDisablei", "glDisableiEXT", "glDisableiOES",
])

///|
pub fn gl_disablei_nv(target : UInt, index : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glDisableiNV.get().unsafe_into()
  fp(target, index)
}

///|
let d_glDisableiOES : Dispatch = Dispatch::with_aliases("glDisableiOES", [
  "glDisableIndexedEXT", "glDisablei", "glDisableiEXT", "glDisableiNV",
])

///|
pub fn gl_disablei_oes(target : UInt, index : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glDisableiOES.get().unsafe_into()
  fp(target, index)
}

///|
let d_glDiscardFramebufferEXT : Dispatch = Dispatch::new(
  "glDiscardFramebufferEXT",
)

///|
pub fn gl_discard_framebuffer_ext(
  target : UInt,
  numAttachments : Int,
  attachments : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[UInt]) -> Unit] = d_glDiscardFramebufferEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(attachments, fn(attachments_p) {
    fp(target, numAttachments, attachments_p)
  })
}

///|
let d_glDispatchCompute : Dispatch = Dispatch::new("glDispatchCompute")

///|
pub fn gl_dispatch_compute(
  num_groups_x : UInt,
  num_groups_y : UInt,
  num_groups_z : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glDispatchCompute
    .get()
    .unsafe_into()
  fp(num_groups_x, num_groups_y, num_groups_z)
}

///|
let d_glDispatchComputeGroupSizeARB : Dispatch = Dispatch::new(
  "glDispatchComputeGroupSizeARB",
)

///|
pub fn gl_dispatch_compute_group_size_arb(
  num_groups_x : UInt,
  num_groups_y : UInt,
  num_groups_z : UInt,
  group_size_x : UInt,
  group_size_y : UInt,
  group_size_z : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, UInt, UInt) -> Unit] = d_glDispatchComputeGroupSizeARB
    .get()
    .unsafe_into()
  fp(
    num_groups_x, num_groups_y, num_groups_z, group_size_x, group_size_y, group_size_z,
  )
}

///|
let d_glDispatchComputeIndirect : Dispatch = Dispatch::new(
  "glDispatchComputeIndirect",
)

///|
pub fn gl_dispatch_compute_indirect(indirect : Int64) -> Unit {
  let fp : FuncRef[(Int64) -> Unit] = d_glDispatchComputeIndirect
    .get()
    .unsafe_into()
  fp(indirect)
}

///|
let d_glDrawArrays : Dispatch = Dispatch::with_aliases("glDrawArrays", [
  "glDrawArraysEXT",
])

///|
pub fn gl_draw_arrays(mode : UInt, first : Int, count : Int) -> Unit {
  let fp : FuncRef[(UInt, Int, Int) -> Unit] = d_glDrawArrays
    .get()
    .unsafe_into()
  fp(mode, first, count)
}

///|
let d_glDrawArraysEXT : Dispatch = Dispatch::with_aliases("glDrawArraysEXT", [
  "glDrawArrays",
])

///|
pub fn gl_draw_arrays_ext(mode : UInt, first : Int, count : Int) -> Unit {
  let fp : FuncRef[(UInt, Int, Int) -> Unit] = d_glDrawArraysEXT
    .get()
    .unsafe_into()
  fp(mode, first, count)
}

///|
let d_glDrawArraysIndirect : Dispatch = Dispatch::new("glDrawArraysIndirect")

///|
pub fn gl_draw_arrays_indirect(mode : UInt, indirect : Bytes) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Byte]) -> Unit] = d_glDrawArraysIndirect
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(indirect, fn(indirect_p) { fp(mode, indirect_p) })
}

///|
let d_glDrawArraysInstanced : Dispatch = Dispatch::with_aliases(
  "glDrawArraysInstanced",
  [
    "glDrawArraysInstancedANGLE", "glDrawArraysInstancedARB", "glDrawArraysInstancedEXT",
    "glDrawArraysInstancedNV",
  ],
)

///|
pub fn gl_draw_arrays_instanced(
  mode : UInt,
  first : Int,
  count : Int,
  instancecount : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int) -> Unit] = d_glDrawArraysInstanced
    .get()
    .unsafe_into()
  fp(mode, first, count, instancecount)
}

///|
let d_glDrawArraysInstancedANGLE : Dispatch = Dispatch::with_aliases(
  "glDrawArraysInstancedANGLE",
  [
    "glDrawArraysInstanced", "glDrawArraysInstancedARB", "glDrawArraysInstancedEXT",
    "glDrawArraysInstancedNV",
  ],
)

///|
pub fn gl_draw_arrays_instanced_angle(
  mode : UInt,
  first : Int,
  count : Int,
  primcount : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int) -> Unit] = d_glDrawArraysInstancedANGLE
    .get()
    .unsafe_into()
  fp(mode, first, count, primcount)
}

///|
let d_glDrawArraysInstancedARB : Dispatch = Dispatch::with_aliases(
  "glDrawArraysInstancedARB",
  [
    "glDrawArraysInstanced", "glDrawArraysInstancedANGLE", "glDrawArraysInstancedEXT",
    "glDrawArraysInstancedNV",
  ],
)

///|
pub fn gl_draw_arrays_instanced_arb(
  mode : UInt,
  first : Int,
  count : Int,
  primcount : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int) -> Unit] = d_glDrawArraysInstancedARB
    .get()
    .unsafe_into()
  fp(mode, first, count, primcount)
}

///|
let d_glDrawArraysInstancedBaseInstance : Dispatch = Dispatch::with_aliases(
  "glDrawArraysInstancedBaseInstance",
  ["glDrawArraysInstancedBaseInstanceEXT"],
)

///|
pub fn gl_draw_arrays_instanced_base_instance(
  mode : UInt,
  first : Int,
  count : Int,
  instancecount : Int,
  baseinstance : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, UInt) -> Unit] = d_glDrawArraysInstancedBaseInstance
    .get()
    .unsafe_into()
  fp(mode, first, count, instancecount, baseinstance)
}

///|
let d_glDrawArraysInstancedBaseInstanceEXT : Dispatch = Dispatch::with_aliases(
  "glDrawArraysInstancedBaseInstanceEXT",
  ["glDrawArraysInstancedBaseInstance"],
)

///|
pub fn gl_draw_arrays_instanced_base_instance_ext(
  mode : UInt,
  first : Int,
  count : Int,
  instancecount : Int,
  baseinstance : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, UInt) -> Unit] = d_glDrawArraysInstancedBaseInstanceEXT
    .get()
    .unsafe_into()
  fp(mode, first, count, instancecount, baseinstance)
}

///|
let d_glDrawArraysInstancedEXT : Dispatch = Dispatch::with_aliases(
  "glDrawArraysInstancedEXT",
  [
    "glDrawArraysInstanced", "glDrawArraysInstancedANGLE", "glDrawArraysInstancedARB",
    "glDrawArraysInstancedNV",
  ],
)

///|
pub fn gl_draw_arrays_instanced_ext(
  mode : UInt,
  start : Int,
  count : Int,
  primcount : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int) -> Unit] = d_glDrawArraysInstancedEXT
    .get()
    .unsafe_into()
  fp(mode, start, count, primcount)
}

///|
let d_glDrawArraysInstancedNV : Dispatch = Dispatch::with_aliases(
  "glDrawArraysInstancedNV",
  [
    "glDrawArraysInstanced", "glDrawArraysInstancedANGLE", "glDrawArraysInstancedARB",
    "glDrawArraysInstancedEXT",
  ],
)

///|
pub fn gl_draw_arrays_instanced_nv(
  mode : UInt,
  first : Int,
  count : Int,
  primcount : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int) -> Unit] = d_glDrawArraysInstancedNV
    .get()
    .unsafe_into()
  fp(mode, first, count, primcount)
}

///|
let d_glDrawBuffer : Dispatch = Dispatch::new("glDrawBuffer")

///|
pub fn gl_draw_buffer(buf : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glDrawBuffer.get().unsafe_into()
  fp(buf)
}

///|
let d_glDrawBuffers : Dispatch = Dispatch::with_aliases("glDrawBuffers", [
  "glDrawBuffersARB", "glDrawBuffersATI", "glDrawBuffersEXT",
])

///|
pub fn gl_draw_buffers(n : Int, bufs : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glDrawBuffers
    .get()
    .unsafe_into()
  @pointer.borrow_array(bufs, fn(bufs_p) { fp(n, bufs_p) })
}

///|
let d_glDrawBuffersARB : Dispatch = Dispatch::with_aliases("glDrawBuffersARB", [
  "glDrawBuffers", "glDrawBuffersATI", "glDrawBuffersEXT",
])

///|
pub fn gl_draw_buffers_arb(n : Int, bufs : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glDrawBuffersARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(bufs, fn(bufs_p) { fp(n, bufs_p) })
}

///|
let d_glDrawBuffersATI : Dispatch = Dispatch::with_aliases("glDrawBuffersATI", [
  "glDrawBuffers", "glDrawBuffersARB", "glDrawBuffersEXT",
])

///|
pub fn gl_draw_buffers_ati(n : Int, bufs : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glDrawBuffersATI
    .get()
    .unsafe_into()
  @pointer.borrow_array(bufs, fn(bufs_p) { fp(n, bufs_p) })
}

///|
let d_glDrawBuffersEXT : Dispatch = Dispatch::with_aliases("glDrawBuffersEXT", [
  "glDrawBuffers", "glDrawBuffersARB", "glDrawBuffersATI",
])

///|
pub fn gl_draw_buffers_ext(n : Int, bufs : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glDrawBuffersEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(bufs, fn(bufs_p) { fp(n, bufs_p) })
}

///|
let d_glDrawBuffersIndexedEXT : Dispatch = Dispatch::new(
  "glDrawBuffersIndexedEXT",
)

///|
pub fn gl_draw_buffers_indexed_ext(
  n : Int,
  location : FixedArray[UInt],
  indices : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt], @pointer.Pointer[Int]) -> Unit] = d_glDrawBuffersIndexedEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(location, fn(location_p) {
    @pointer.borrow_array(indices, fn(indices_p) {
      fp(n, location_p, indices_p)
    })
  })
}

///|
let d_glDrawBuffersNV : Dispatch = Dispatch::new("glDrawBuffersNV")

///|
pub fn gl_draw_buffers_nv(n : Int, bufs : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glDrawBuffersNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(bufs, fn(bufs_p) { fp(n, bufs_p) })
}

///|
let d_glDrawCommandsAddressNV : Dispatch = Dispatch::new(
  "glDrawCommandsAddressNV",
)

///|
pub fn gl_draw_commands_address_nv(
  primitiveMode : UInt,
  indirects : FixedArray[UInt64],
  sizes : FixedArray[Int],
  count : UInt,
) -> Unit {
  let fp : FuncRef[
    (UInt, @pointer.Pointer[UInt64], @pointer.Pointer[Int], UInt) -> Unit,
  ] = d_glDrawCommandsAddressNV.get().unsafe_into()
  @pointer.borrow_array(indirects, fn(indirects_p) {
    @pointer.borrow_array(sizes, fn(sizes_p) {
      fp(primitiveMode, indirects_p, sizes_p, count)
    })
  })
}

///|
let d_glDrawCommandsStatesAddressNV : Dispatch = Dispatch::new(
  "glDrawCommandsStatesAddressNV",
)

///|
pub fn gl_draw_commands_states_address_nv(
  indirects : FixedArray[UInt64],
  sizes : FixedArray[Int],
  states : FixedArray[UInt],
  fbos : FixedArray[UInt],
  count : UInt,
) -> Unit {
  let fp : FuncRef[
    (
      @pointer.Pointer[UInt64],
      @pointer.Pointer[Int],
      @pointer.Pointer[UInt],
      @pointer.Pointer[UInt],
      UInt,
    ) -> Unit,
  ] = d_glDrawCommandsStatesAddressNV.get().unsafe_into()
  @pointer.borrow_array(indirects, fn(indirects_p) {
    @pointer.borrow_array(sizes, fn(sizes_p) {
      @pointer.borrow_array(states, fn(states_p) {
        @pointer.borrow_array(fbos, fn(fbos_p) {
          fp(indirects_p, sizes_p, states_p, fbos_p, count)
        })
      })
    })
  })
}

///|
let d_glDrawElementArrayAPPLE : Dispatch = Dispatch::new(
  "glDrawElementArrayAPPLE",
)

///|
pub fn gl_draw_element_array_apple(
  mode : UInt,
  first : Int,
  count : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int) -> Unit] = d_glDrawElementArrayAPPLE
    .get()
    .unsafe_into()
  fp(mode, first, count)
}

///|
let d_glDrawElementArrayATI : Dispatch = Dispatch::new("glDrawElementArrayATI")

///|
pub fn gl_draw_element_array_ati(mode : UInt, count : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glDrawElementArrayATI
    .get()
    .unsafe_into()
  fp(mode, count)
}

///|
let d_glDrawElements : Dispatch = Dispatch::new("glDrawElements")

///|
pub fn gl_draw_elements(
  mode : UInt,
  count : Int,
  type_ : UInt,
  indices : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, @pointer.Pointer[Byte]) -> Unit] = d_glDrawElements
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(indices, fn(indices_p) {
    fp(mode, count, type_, indices_p)
  })
}

///|
let d_glDrawElementsBaseVertex : Dispatch = Dispatch::with_aliases(
  "glDrawElementsBaseVertex",
  ["glDrawElementsBaseVertexEXT", "glDrawElementsBaseVertexOES"],
)

///|
pub fn gl_draw_elements_base_vertex(
  mode : UInt,
  count : Int,
  type_ : UInt,
  indices : Bytes,
  basevertex : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, @pointer.Pointer[Byte], Int) -> Unit] = d_glDrawElementsBaseVertex
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(indices, fn(indices_p) {
    fp(mode, count, type_, indices_p, basevertex)
  })
}

///|
let d_glDrawElementsBaseVertexEXT : Dispatch = Dispatch::with_aliases(
  "glDrawElementsBaseVertexEXT",
  ["glDrawElementsBaseVertex", "glDrawElementsBaseVertexOES"],
)

///|
pub fn gl_draw_elements_base_vertex_ext(
  mode : UInt,
  count : Int,
  type_ : UInt,
  indices : Bytes,
  basevertex : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, @pointer.Pointer[Byte], Int) -> Unit] = d_glDrawElementsBaseVertexEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(indices, fn(indices_p) {
    fp(mode, count, type_, indices_p, basevertex)
  })
}

///|
let d_glDrawElementsBaseVertexOES : Dispatch = Dispatch::with_aliases(
  "glDrawElementsBaseVertexOES",
  ["glDrawElementsBaseVertex", "glDrawElementsBaseVertexEXT"],
)

///|
pub fn gl_draw_elements_base_vertex_oes(
  mode : UInt,
  count : Int,
  type_ : UInt,
  indices : Bytes,
  basevertex : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, @pointer.Pointer[Byte], Int) -> Unit] = d_glDrawElementsBaseVertexOES
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(indices, fn(indices_p) {
    fp(mode, count, type_, indices_p, basevertex)
  })
}

///|
let d_glDrawElementsIndirect : Dispatch = Dispatch::new(
  "glDrawElementsIndirect",
)

///|
pub fn gl_draw_elements_indirect(
  mode : UInt,
  type_ : UInt,
  indirect : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Byte]) -> Unit] = d_glDrawElementsIndirect
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(indirect, fn(indirect_p) { fp(mode, type_, indirect_p) })
}

///|
let d_glDrawElementsInstanced : Dispatch = Dispatch::with_aliases(
  "glDrawElementsInstanced",
  [
    "glDrawElementsInstancedANGLE", "glDrawElementsInstancedARB", "glDrawElementsInstancedEXT",
    "glDrawElementsInstancedNV",
  ],
)

///|
pub fn gl_draw_elements_instanced(
  mode : UInt,
  count : Int,
  type_ : UInt,
  indices : Bytes,
  instancecount : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, @pointer.Pointer[Byte], Int) -> Unit] = d_glDrawElementsInstanced
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(indices, fn(indices_p) {
    fp(mode, count, type_, indices_p, instancecount)
  })
}

///|
let d_glDrawElementsInstancedANGLE : Dispatch = Dispatch::with_aliases(
  "glDrawElementsInstancedANGLE",
  [
    "glDrawElementsInstanced", "glDrawElementsInstancedARB", "glDrawElementsInstancedEXT",
    "glDrawElementsInstancedNV",
  ],
)

///|
pub fn gl_draw_elements_instanced_angle(
  mode : UInt,
  count : Int,
  type_ : UInt,
  indices : Bytes,
  primcount : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, @pointer.Pointer[Byte], Int) -> Unit] = d_glDrawElementsInstancedANGLE
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(indices, fn(indices_p) {
    fp(mode, count, type_, indices_p, primcount)
  })
}

///|
let d_glDrawElementsInstancedARB : Dispatch = Dispatch::with_aliases(
  "glDrawElementsInstancedARB",
  [
    "glDrawElementsInstanced", "glDrawElementsInstancedANGLE", "glDrawElementsInstancedEXT",
    "glDrawElementsInstancedNV",
  ],
)

///|
pub fn gl_draw_elements_instanced_arb(
  mode : UInt,
  count : Int,
  type_ : UInt,
  indices : Bytes,
  primcount : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, @pointer.Pointer[Byte], Int) -> Unit] = d_glDrawElementsInstancedARB
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(indices, fn(indices_p) {
    fp(mode, count, type_, indices_p, primcount)
  })
}

///|
let d_glDrawElementsInstancedBaseInstance : Dispatch = Dispatch::with_aliases(
  "glDrawElementsInstancedBaseInstance",
  ["glDrawElementsInstancedBaseInstanceEXT"],
)

///|
pub fn gl_draw_elements_instanced_base_instance(
  mode : UInt,
  count : Int,
  type_ : UInt,
  indices : Bytes,
  instancecount : Int,
  baseinstance : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, @pointer.Pointer[Byte], Int, UInt) -> Unit] = d_glDrawElementsInstancedBaseInstance
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(indices, fn(indices_p) {
    fp(mode, count, type_, indices_p, instancecount, baseinstance)
  })
}

///|
let d_glDrawElementsInstancedBaseInstanceEXT : Dispatch = Dispatch::with_aliases(
  "glDrawElementsInstancedBaseInstanceEXT",
  ["glDrawElementsInstancedBaseInstance"],
)

///|
pub fn gl_draw_elements_instanced_base_instance_ext(
  mode : UInt,
  count : Int,
  type_ : UInt,
  indices : Bytes,
  instancecount : Int,
  baseinstance : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, @pointer.Pointer[Byte], Int, UInt) -> Unit] = d_glDrawElementsInstancedBaseInstanceEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(indices, fn(indices_p) {
    fp(mode, count, type_, indices_p, instancecount, baseinstance)
  })
}

///|
let d_glDrawElementsInstancedBaseVertex : Dispatch = Dispatch::with_aliases(
  "glDrawElementsInstancedBaseVertex",
  [
    "glDrawElementsInstancedBaseVertexEXT", "glDrawElementsInstancedBaseVertexOES",
  ],
)

///|
pub fn gl_draw_elements_instanced_base_vertex(
  mode : UInt,
  count : Int,
  type_ : UInt,
  indices : Bytes,
  instancecount : Int,
  basevertex : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, @pointer.Pointer[Byte], Int, Int) -> Unit] = d_glDrawElementsInstancedBaseVertex
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(indices, fn(indices_p) {
    fp(mode, count, type_, indices_p, instancecount, basevertex)
  })
}

///|
let d_glDrawElementsInstancedBaseVertexBaseInstance : Dispatch = Dispatch::with_aliases(
  "glDrawElementsInstancedBaseVertexBaseInstance",
  ["glDrawElementsInstancedBaseVertexBaseInstanceEXT"],
)

///|
pub fn gl_draw_elements_instanced_base_vertex_base_instance(
  mode : UInt,
  count : Int,
  type_ : UInt,
  indices : Bytes,
  instancecount : Int,
  basevertex : Int,
  baseinstance : UInt,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, UInt, @pointer.Pointer[Byte], Int, Int, UInt) -> Unit,
  ] = d_glDrawElementsInstancedBaseVertexBaseInstance.get().unsafe_into()
  @pointer.borrow_bytes(indices, fn(indices_p) {
    fp(mode, count, type_, indices_p, instancecount, basevertex, baseinstance)
  })
}

///|
let d_glDrawElementsInstancedBaseVertexBaseInstanceEXT : Dispatch = Dispatch::with_aliases(
  "glDrawElementsInstancedBaseVertexBaseInstanceEXT",
  ["glDrawElementsInstancedBaseVertexBaseInstance"],
)

///|
pub fn gl_draw_elements_instanced_base_vertex_base_instance_ext(
  mode : UInt,
  count : Int,
  type_ : UInt,
  indices : Bytes,
  instancecount : Int,
  basevertex : Int,
  baseinstance : UInt,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, UInt, @pointer.Pointer[Byte], Int, Int, UInt) -> Unit,
  ] = d_glDrawElementsInstancedBaseVertexBaseInstanceEXT.get().unsafe_into()
  @pointer.borrow_bytes(indices, fn(indices_p) {
    fp(mode, count, type_, indices_p, instancecount, basevertex, baseinstance)
  })
}

///|
let d_glDrawElementsInstancedBaseVertexEXT : Dispatch = Dispatch::with_aliases(
  "glDrawElementsInstancedBaseVertexEXT",
  ["glDrawElementsInstancedBaseVertex", "glDrawElementsInstancedBaseVertexOES"],
)

///|
pub fn gl_draw_elements_instanced_base_vertex_ext(
  mode : UInt,
  count : Int,
  type_ : UInt,
  indices : Bytes,
  instancecount : Int,
  basevertex : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, @pointer.Pointer[Byte], Int, Int) -> Unit] = d_glDrawElementsInstancedBaseVertexEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(indices, fn(indices_p) {
    fp(mode, count, type_, indices_p, instancecount, basevertex)
  })
}

///|
let d_glDrawElementsInstancedBaseVertexOES : Dispatch = Dispatch::with_aliases(
  "glDrawElementsInstancedBaseVertexOES",
  ["glDrawElementsInstancedBaseVertex", "glDrawElementsInstancedBaseVertexEXT"],
)

///|
pub fn gl_draw_elements_instanced_base_vertex_oes(
  mode : UInt,
  count : Int,
  type_ : UInt,
  indices : Bytes,
  instancecount : Int,
  basevertex : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, @pointer.Pointer[Byte], Int, Int) -> Unit] = d_glDrawElementsInstancedBaseVertexOES
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(indices, fn(indices_p) {
    fp(mode, count, type_, indices_p, instancecount, basevertex)
  })
}

///|
let d_glDrawElementsInstancedEXT : Dispatch = Dispatch::with_aliases(
  "glDrawElementsInstancedEXT",
  [
    "glDrawElementsInstanced", "glDrawElementsInstancedANGLE", "glDrawElementsInstancedARB",
    "glDrawElementsInstancedNV",
  ],
)

///|
pub fn gl_draw_elements_instanced_ext(
  mode : UInt,
  count : Int,
  type_ : UInt,
  indices : Bytes,
  primcount : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, @pointer.Pointer[Byte], Int) -> Unit] = d_glDrawElementsInstancedEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(indices, fn(indices_p) {
    fp(mode, count, type_, indices_p, primcount)
  })
}

///|
let d_glDrawElementsInstancedNV : Dispatch = Dispatch::with_aliases(
  "glDrawElementsInstancedNV",
  [
    "glDrawElementsInstanced", "glDrawElementsInstancedANGLE", "glDrawElementsInstancedARB",
    "glDrawElementsInstancedEXT",
  ],
)

///|
pub fn gl_draw_elements_instanced_nv(
  mode : UInt,
  count : Int,
  type_ : UInt,
  indices : Bytes,
  primcount : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, @pointer.Pointer[Byte], Int) -> Unit] = d_glDrawElementsInstancedNV
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(indices, fn(indices_p) {
    fp(mode, count, type_, indices_p, primcount)
  })
}

///|
let d_glDrawMeshArraysSUN : Dispatch = Dispatch::new("glDrawMeshArraysSUN")

///|
pub fn gl_draw_mesh_arrays_sun(
  mode : UInt,
  first : Int,
  count : Int,
  width : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int) -> Unit] = d_glDrawMeshArraysSUN
    .get()
    .unsafe_into()
  fp(mode, first, count, width)
}

///|
let d_glDrawMeshTasksEXT : Dispatch = Dispatch::new("glDrawMeshTasksEXT")

///|
pub fn gl_draw_mesh_tasks_ext(
  num_groups_x : UInt,
  num_groups_y : UInt,
  num_groups_z : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glDrawMeshTasksEXT
    .get()
    .unsafe_into()
  fp(num_groups_x, num_groups_y, num_groups_z)
}

///|
let d_glDrawMeshTasksNV : Dispatch = Dispatch::new("glDrawMeshTasksNV")

///|
pub fn gl_draw_mesh_tasks_nv(first : UInt, count : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glDrawMeshTasksNV
    .get()
    .unsafe_into()
  fp(first, count)
}

///|
let d_glDrawMeshTasksIndirectEXT : Dispatch = Dispatch::new(
  "glDrawMeshTasksIndirectEXT",
)

///|
pub fn gl_draw_mesh_tasks_indirect_ext(indirect : Int64) -> Unit {
  let fp : FuncRef[(Int64) -> Unit] = d_glDrawMeshTasksIndirectEXT
    .get()
    .unsafe_into()
  fp(indirect)
}

///|
let d_glDrawMeshTasksIndirectNV : Dispatch = Dispatch::new(
  "glDrawMeshTasksIndirectNV",
)

///|
pub fn gl_draw_mesh_tasks_indirect_nv(indirect : Int64) -> Unit {
  let fp : FuncRef[(Int64) -> Unit] = d_glDrawMeshTasksIndirectNV
    .get()
    .unsafe_into()
  fp(indirect)
}

///|
let d_glDrawPixels : Dispatch = Dispatch::new("glDrawPixels")

///|
pub fn gl_draw_pixels(
  width : Int,
  height : Int,
  format : UInt,
  type_ : UInt,
  pixels : Bytes,
) -> Unit {
  let fp : FuncRef[(Int, Int, UInt, UInt, @pointer.Pointer[Byte]) -> Unit] = d_glDrawPixels
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(pixels, fn(pixels_p) {
    fp(width, height, format, type_, pixels_p)
  })
}

///|
let d_glDrawRangeElementArrayAPPLE : Dispatch = Dispatch::new(
  "glDrawRangeElementArrayAPPLE",
)

///|
pub fn gl_draw_range_element_array_apple(
  mode : UInt,
  start : UInt,
  end : UInt,
  first : Int,
  count : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int, Int) -> Unit] = d_glDrawRangeElementArrayAPPLE
    .get()
    .unsafe_into()
  fp(mode, start, end, first, count)
}

///|
let d_glDrawRangeElementArrayATI : Dispatch = Dispatch::new(
  "glDrawRangeElementArrayATI",
)

///|
pub fn gl_draw_range_element_array_ati(
  mode : UInt,
  start : UInt,
  end : UInt,
  count : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int) -> Unit] = d_glDrawRangeElementArrayATI
    .get()
    .unsafe_into()
  fp(mode, start, end, count)
}

///|
let d_glDrawRangeElements : Dispatch = Dispatch::with_aliases(
  "glDrawRangeElements",
  ["glDrawRangeElementsEXT"],
)

///|
pub fn gl_draw_range_elements(
  mode : UInt,
  start : UInt,
  end : UInt,
  count : Int,
  type_ : UInt,
  indices : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, UInt, Int, UInt, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glDrawRangeElements.get().unsafe_into()
  @pointer.borrow_bytes(indices, fn(indices_p) {
    fp(mode, start, end, count, type_, indices_p)
  })
}

///|
let d_glDrawRangeElementsBaseVertex : Dispatch = Dispatch::with_aliases(
  "glDrawRangeElementsBaseVertex",
  ["glDrawRangeElementsBaseVertexEXT", "glDrawRangeElementsBaseVertexOES"],
)

///|
pub fn gl_draw_range_elements_base_vertex(
  mode : UInt,
  start : UInt,
  end : UInt,
  count : Int,
  type_ : UInt,
  indices : Bytes,
  basevertex : Int,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, UInt, Int, UInt, @pointer.Pointer[Byte], Int) -> Unit,
  ] = d_glDrawRangeElementsBaseVertex.get().unsafe_into()
  @pointer.borrow_bytes(indices, fn(indices_p) {
    fp(mode, start, end, count, type_, indices_p, basevertex)
  })
}

///|
let d_glDrawRangeElementsBaseVertexEXT : Dispatch = Dispatch::with_aliases(
  "glDrawRangeElementsBaseVertexEXT",
  ["glDrawRangeElementsBaseVertex", "glDrawRangeElementsBaseVertexOES"],
)

///|
pub fn gl_draw_range_elements_base_vertex_ext(
  mode : UInt,
  start : UInt,
  end : UInt,
  count : Int,
  type_ : UInt,
  indices : Bytes,
  basevertex : Int,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, UInt, Int, UInt, @pointer.Pointer[Byte], Int) -> Unit,
  ] = d_glDrawRangeElementsBaseVertexEXT.get().unsafe_into()
  @pointer.borrow_bytes(indices, fn(indices_p) {
    fp(mode, start, end, count, type_, indices_p, basevertex)
  })
}

///|
let d_glDrawRangeElementsBaseVertexOES : Dispatch = Dispatch::with_aliases(
  "glDrawRangeElementsBaseVertexOES",
  ["glDrawRangeElementsBaseVertex", "glDrawRangeElementsBaseVertexEXT"],
)

///|
pub fn gl_draw_range_elements_base_vertex_oes(
  mode : UInt,
  start : UInt,
  end : UInt,
  count : Int,
  type_ : UInt,
  indices : Bytes,
  basevertex : Int,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, UInt, Int, UInt, @pointer.Pointer[Byte], Int) -> Unit,
  ] = d_glDrawRangeElementsBaseVertexOES.get().unsafe_into()
  @pointer.borrow_bytes(indices, fn(indices_p) {
    fp(mode, start, end, count, type_, indices_p, basevertex)
  })
}

///|
let d_glDrawRangeElementsEXT : Dispatch = Dispatch::with_aliases(
  "glDrawRangeElementsEXT",
  ["glDrawRangeElements"],
)

///|
pub fn gl_draw_range_elements_ext(
  mode : UInt,
  start : UInt,
  end : UInt,
  count : Int,
  type_ : UInt,
  indices : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, UInt, Int, UInt, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glDrawRangeElementsEXT.get().unsafe_into()
  @pointer.borrow_bytes(indices, fn(indices_p) {
    fp(mode, start, end, count, type_, indices_p)
  })
}

///|
let d_glDrawTexfOES : Dispatch = Dispatch::new("glDrawTexfOES")

///|
pub fn gl_draw_texf_oes(
  x : Float,
  y : Float,
  z : Float,
  width : Float,
  height : Float,
) -> Unit {
  let fp : FuncRef[(Float, Float, Float, Float, Float) -> Unit] = d_glDrawTexfOES
    .get()
    .unsafe_into()
  fp(x, y, z, width, height)
}

///|
let d_glDrawTexfvOES : Dispatch = Dispatch::new("glDrawTexfvOES")

///|
pub fn gl_draw_texfv_oes(coords : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Float]) -> Unit] = d_glDrawTexfvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(coords_p) })
}

///|
let d_glDrawTexiOES : Dispatch = Dispatch::new("glDrawTexiOES")

///|
pub fn gl_draw_texi_oes(
  x : Int,
  y : Int,
  z : Int,
  width : Int,
  height : Int,
) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int, Int) -> Unit] = d_glDrawTexiOES
    .get()
    .unsafe_into()
  fp(x, y, z, width, height)
}

///|
let d_glDrawTexivOES : Dispatch = Dispatch::new("glDrawTexivOES")

///|
pub fn gl_draw_texiv_oes(coords : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glDrawTexivOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(coords_p) })
}

///|
let d_glDrawTexsOES : Dispatch = Dispatch::new("glDrawTexsOES")

///|
pub fn gl_draw_texs_oes(
  x : Int,
  y : Int,
  z : Int,
  width : Int,
  height : Int,
) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int, Int) -> Unit] = d_glDrawTexsOES
    .get()
    .unsafe_into()
  fp(x, y, z, width, height)
}

///|
let d_glDrawTexsvOES : Dispatch = Dispatch::new("glDrawTexsvOES")

///|
pub fn gl_draw_texsv_oes(coords : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int16]) -> Unit] = d_glDrawTexsvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(coords_p) })
}

///|
let d_glDrawTextureNV : Dispatch = Dispatch::new("glDrawTextureNV")

///|
pub fn gl_draw_texture_nv(
  texture : UInt,
  sampler : UInt,
  x0 : Float,
  y0 : Float,
  x1 : Float,
  y1 : Float,
  z : Float,
  s0 : Float,
  t0 : Float,
  s1 : Float,
  t1 : Float,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, Float, Float, Float, Float, Float, Float, Float, Float, Float) -> Unit,
  ] = d_glDrawTextureNV.get().unsafe_into()
  fp(texture, sampler, x0, y0, x1, y1, z, s0, t0, s1, t1)
}

///|
let d_glDrawTexxOES : Dispatch = Dispatch::new("glDrawTexxOES")

///|
pub fn gl_draw_texx_oes(
  x : Int,
  y : Int,
  z : Int,
  width : Int,
  height : Int,
) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int, Int) -> Unit] = d_glDrawTexxOES
    .get()
    .unsafe_into()
  fp(x, y, z, width, height)
}

///|
let d_glDrawTexxvOES : Dispatch = Dispatch::new("glDrawTexxvOES")

///|
pub fn gl_draw_texxv_oes(coords : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glDrawTexxvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(coords_p) })
}

///|
let d_glDrawTransformFeedback : Dispatch = Dispatch::with_aliases(
  "glDrawTransformFeedback",
  ["glDrawTransformFeedbackEXT", "glDrawTransformFeedbackNV"],
)

///|
pub fn gl_draw_transform_feedback(mode : UInt, id : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glDrawTransformFeedback
    .get()
    .unsafe_into()
  fp(mode, id)
}

///|
let d_glDrawTransformFeedbackEXT : Dispatch = Dispatch::with_aliases(
  "glDrawTransformFeedbackEXT",
  ["glDrawTransformFeedback", "glDrawTransformFeedbackNV"],
)

///|
pub fn gl_draw_transform_feedback_ext(mode : UInt, id : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glDrawTransformFeedbackEXT
    .get()
    .unsafe_into()
  fp(mode, id)
}

///|
let d_glDrawTransformFeedbackInstanced : Dispatch = Dispatch::with_aliases(
  "glDrawTransformFeedbackInstanced",
  ["glDrawTransformFeedbackInstancedEXT"],
)

///|
pub fn gl_draw_transform_feedback_instanced(
  mode : UInt,
  id : UInt,
  instancecount : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int) -> Unit] = d_glDrawTransformFeedbackInstanced
    .get()
    .unsafe_into()
  fp(mode, id, instancecount)
}

///|
let d_glDrawTransformFeedbackInstancedEXT : Dispatch = Dispatch::with_aliases(
  "glDrawTransformFeedbackInstancedEXT",
  ["glDrawTransformFeedbackInstanced"],
)

///|
pub fn gl_draw_transform_feedback_instanced_ext(
  mode : UInt,
  id : UInt,
  instancecount : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int) -> Unit] = d_glDrawTransformFeedbackInstancedEXT
    .get()
    .unsafe_into()
  fp(mode, id, instancecount)
}

///|
let d_glDrawTransformFeedbackNV : Dispatch = Dispatch::with_aliases(
  "glDrawTransformFeedbackNV",
  ["glDrawTransformFeedback", "glDrawTransformFeedbackEXT"],
)

///|
pub fn gl_draw_transform_feedback_nv(mode : UInt, id : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glDrawTransformFeedbackNV
    .get()
    .unsafe_into()
  fp(mode, id)
}

///|
let d_glDrawTransformFeedbackStream : Dispatch = Dispatch::new(
  "glDrawTransformFeedbackStream",
)

///|
pub fn gl_draw_transform_feedback_stream(
  mode : UInt,
  id : UInt,
  stream : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glDrawTransformFeedbackStream
    .get()
    .unsafe_into()
  fp(mode, id, stream)
}

///|
let d_glDrawTransformFeedbackStreamInstanced : Dispatch = Dispatch::new(
  "glDrawTransformFeedbackStreamInstanced",
)

///|
pub fn gl_draw_transform_feedback_stream_instanced(
  mode : UInt,
  id : UInt,
  stream : UInt,
  instancecount : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int) -> Unit] = d_glDrawTransformFeedbackStreamInstanced
    .get()
    .unsafe_into()
  fp(mode, id, stream, instancecount)
}

///|
let d_glEGLImageTargetRenderbufferStorageOES : Dispatch = Dispatch::new(
  "glEGLImageTargetRenderbufferStorageOES",
)

///|
pub fn gl_egl_image_target_renderbuffer_storage_oes(
  target : UInt,
  image : GLeglImageOES,
) -> Unit {
  let fp : FuncRef[(UInt, GLeglImageOES) -> Unit] = d_glEGLImageTargetRenderbufferStorageOES
    .get()
    .unsafe_into()
  fp(target, image)
}

///|
let d_glEGLImageTargetTexStorageEXT : Dispatch = Dispatch::new(
  "glEGLImageTargetTexStorageEXT",
)

///|
pub fn gl_egl_image_target_tex_storage_ext(
  target : UInt,
  image : GLeglImageOES,
  attrib_list : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, GLeglImageOES, @pointer.Pointer[Int]) -> Unit] = d_glEGLImageTargetTexStorageEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(attrib_list, fn(attrib_list_p) {
    fp(target, image, attrib_list_p)
  })
}

///|
let d_glEGLImageTargetTexture2DOES : Dispatch = Dispatch::new(
  "glEGLImageTargetTexture2DOES",
)

///|
pub fn gl_egl_image_target_texture2_does(
  target : UInt,
  image : GLeglImageOES,
) -> Unit {
  let fp : FuncRef[(UInt, GLeglImageOES) -> Unit] = d_glEGLImageTargetTexture2DOES
    .get()
    .unsafe_into()
  fp(target, image)
}

///|
let d_glEGLImageTargetTextureStorageEXT : Dispatch = Dispatch::new(
  "glEGLImageTargetTextureStorageEXT",
)

///|
pub fn gl_egl_image_target_texture_storage_ext(
  texture : UInt,
  image : GLeglImageOES,
  attrib_list : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, GLeglImageOES, @pointer.Pointer[Int]) -> Unit] = d_glEGLImageTargetTextureStorageEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(attrib_list, fn(attrib_list_p) {
    fp(texture, image, attrib_list_p)
  })
}

///|
let d_glEdgeFlag : Dispatch = Dispatch::new("glEdgeFlag")

///|
pub fn gl_edge_flag(flag : Bool) -> Unit {
  let fp : FuncRef[(Bool) -> Unit] = d_glEdgeFlag.get().unsafe_into()
  fp(flag)
}

///|
let d_glEdgeFlagFormatNV : Dispatch = Dispatch::new("glEdgeFlagFormatNV")

///|
pub fn gl_edge_flag_format_nv(stride : Int) -> Unit {
  let fp : FuncRef[(Int) -> Unit] = d_glEdgeFlagFormatNV.get().unsafe_into()
  fp(stride)
}

///|
let d_glEdgeFlagPointer : Dispatch = Dispatch::new("glEdgeFlagPointer")

///|
/// Configure a vertex array from the buffer currently bound to `GL_ARRAY_BUFFER`.
/// `offset` is a byte offset; client-side arrays are not accepted.
pub fn gl_edge_flag_pointer(stride : Int, offset : Int64) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[Unit]) -> Unit] = d_glEdgeFlagPointer
    .get()
    .unsafe_into()
  fp(stride, @pointer.Pointer::unsafe_from_int64(offset))
}

///|
let d_glEdgeFlagPointerEXT : Dispatch = Dispatch::new("glEdgeFlagPointerEXT")

///|
pub fn gl_edge_flag_pointer_ext(
  stride : Int,
  count : Int,
  pointer : Bytes,
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[Byte]) -> Unit] = d_glEdgeFlagPointerEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(pointer, fn(pointer_p) { fp(stride, count, pointer_p) })
}

///|
let d_glEdgeFlagPointerListIBM : Dispatch = Dispatch::new(
  "glEdgeFlagPointerListIBM",
)

///|
pub fn gl_edge_flag_pointer_list_ibm(
  stride : Int,
  pointer : FixedArray[Bytes],
  ptrstride : Int,
) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[Bytes], Int) -> Unit] = d_glEdgeFlagPointerListIBM
    .get()
    .unsafe_into()
  @pointer.borrow_array(pointer, fn(pointer_p) {
    fp(stride, pointer_p, ptrstride)
  })
}

///|
let d_glEdgeFlagv : Dispatch = Dispatch::new("glEdgeFlagv")

///|
pub fn gl_edge_flagv(flag : Bytes) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Byte]) -> Unit] = d_glEdgeFlagv
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(flag, fn(flag_p) { fp(flag_p) })
}

///|
let d_glElementPointerAPPLE : Dispatch = Dispatch::new("glElementPointerAPPLE")

///|
pub fn gl_element_pointer_apple(type_ : UInt, pointer : Bytes) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Byte]) -> Unit] = d_glElementPointerAPPLE
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(pointer, fn(pointer_p) { fp(type_, pointer_p) })
}

///|
let d_glElementPointerATI : Dispatch = Dispatch::new("glElementPointerATI")

///|
pub fn gl_element_pointer_ati(type_ : UInt, pointer : Bytes) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Byte]) -> Unit] = d_glElementPointerATI
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(pointer, fn(pointer_p) { fp(type_, pointer_p) })
}

///|
let d_glEnable : Dispatch = Dispatch::new("glEnable")

///|
pub fn gl_enable(cap : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glEnable.get().unsafe_into()
  fp(cap)
}

///|
let d_glEnableClientState : Dispatch = Dispatch::new("glEnableClientState")

///|
pub fn gl_enable_client_state(array : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glEnableClientState.get().unsafe_into()
  fp(array)
}

///|
let d_glEnableClientStateIndexedEXT : Dispatch = Dispatch::new(
  "glEnableClientStateIndexedEXT",
)

///|
pub fn gl_enable_client_state_indexed_ext(array : UInt, index : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glEnableClientStateIndexedEXT
    .get()
    .unsafe_into()
  fp(array, index)
}

///|
let d_glEnableClientStateiEXT : Dispatch = Dispatch::new(
  "glEnableClientStateiEXT",
)

///|
pub fn gl_enable_client_statei_ext(array : UInt, index : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glEnableClientStateiEXT
    .get()
    .unsafe_into()
  fp(array, index)
}

///|
let d_glEnableDriverControlQCOM : Dispatch = Dispatch::new(
  "glEnableDriverControlQCOM",
)

///|
pub fn gl_enable_driver_control_qcom(driverControl : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glEnableDriverControlQCOM
    .get()
    .unsafe_into()
  fp(driverControl)
}

///|
let d_glEnableIndexedEXT : Dispatch = Dispatch::with_aliases(
  "glEnableIndexedEXT",
  ["glEnablei", "glEnableiEXT", "glEnableiNV", "glEnableiOES"],
)

///|
pub fn gl_enable_indexed_ext(target : UInt, index : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glEnableIndexedEXT
    .get()
    .unsafe_into()
  fp(target, index)
}

///|
let d_glEnableVariantClientStateEXT : Dispatch = Dispatch::new(
  "glEnableVariantClientStateEXT",
)

///|
pub fn gl_enable_variant_client_state_ext(id : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glEnableVariantClientStateEXT
    .get()
    .unsafe_into()
  fp(id)
}

///|
let d_glEnableVertexArrayAttrib : Dispatch = Dispatch::new(
  "glEnableVertexArrayAttrib",
)

///|
pub fn gl_enable_vertex_array_attrib(vaobj : UInt, index : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glEnableVertexArrayAttrib
    .get()
    .unsafe_into()
  fp(vaobj, index)
}

///|
let d_glEnableVertexArrayAttribEXT : Dispatch = Dispatch::new(
  "glEnableVertexArrayAttribEXT",
)

///|
pub fn gl_enable_vertex_array_attrib_ext(vaobj : UInt, index : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glEnableVertexArrayAttribEXT
    .get()
    .unsafe_into()
  fp(vaobj, index)
}

///|
let d_glEnableVertexArrayEXT : Dispatch = Dispatch::new(
  "glEnableVertexArrayEXT",
)

///|
pub fn gl_enable_vertex_array_ext(vaobj : UInt, array : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glEnableVertexArrayEXT
    .get()
    .unsafe_into()
  fp(vaobj, array)
}

///|
let d_glEnableVertexAttribAPPLE : Dispatch = Dispatch::new(
  "glEnableVertexAttribAPPLE",
)

///|
pub fn gl_enable_vertex_attrib_apple(index : UInt, pname : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glEnableVertexAttribAPPLE
    .get()
    .unsafe_into()
  fp(index, pname)
}

///|
let d_glEnableVertexAttribArray : Dispatch = Dispatch::with_aliases(
  "glEnableVertexAttribArray",
  ["glEnableVertexAttribArrayARB"],
)

///|
pub fn gl_enable_vertex_attrib_array(index : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glEnableVertexAttribArray
    .get()
    .unsafe_into()
  fp(index)
}

///|
let d_glEnableVertexAttribArrayARB : Dispatch = Dispatch::with_aliases(
  "glEnableVertexAttribArrayARB",
  ["glEnableVertexAttribArray"],
)

///|
pub fn gl_enable_vertex_attrib_array_arb(index : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glEnableVertexAttribArrayARB
    .get()
    .unsafe_into()
  fp(index)
}

///|
let d_glEnablei : Dispatch = Dispatch::with_aliases("glEnablei", [
  "glEnableIndexedEXT", "glEnableiEXT", "glEnableiNV", "glEnableiOES",
])

///|
pub fn gl_enablei(target : UInt, index : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glEnablei.get().unsafe_into()
  fp(target, index)
}

///|
let d_glEnableiEXT : Dispatch = Dispatch::with_aliases("glEnableiEXT", [
  "glEnableIndexedEXT", "glEnablei", "glEnableiNV", "glEnableiOES",
])

///|
pub fn gl_enablei_ext(target : UInt, index : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glEnableiEXT.get().unsafe_into()
  fp(target, index)
}

///|
let d_glEnableiNV : Dispatch = Dispatch::with_aliases("glEnableiNV", [
  "glEnableIndexedEXT", "glEnablei", "glEnableiEXT", "glEnableiOES",
])

///|
pub fn gl_enablei_nv(target : UInt, index : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glEnableiNV.get().unsafe_into()
  fp(target, index)
}

///|
let d_glEnableiOES : Dispatch = Dispatch::with_aliases("glEnableiOES", [
  "glEnableIndexedEXT", "glEnablei", "glEnableiEXT", "glEnableiNV",
])

///|
pub fn gl_enablei_oes(target : UInt, index : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glEnableiOES.get().unsafe_into()
  fp(target, index)
}

///|
let d_glEnd : Dispatch = Dispatch::new("glEnd")

///|
pub fn gl_end() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glEnd.get().unsafe_into()
  fp()
}

///|
let d_glEndConditionalRender : Dispatch = Dispatch::with_aliases(
  "glEndConditionalRender",
  ["glEndConditionalRenderNV", "glEndConditionalRenderNVX"],
)

///|
pub fn gl_end_conditional_render() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glEndConditionalRender.get().unsafe_into()
  fp()
}

///|
let d_glEndConditionalRenderNV : Dispatch = Dispatch::with_aliases(
  "glEndConditionalRenderNV",
  ["glEndConditionalRender", "glEndConditionalRenderNVX"],
)

///|
pub fn gl_end_conditional_render_nv() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glEndConditionalRenderNV.get().unsafe_into()
  fp()
}

///|
let d_glEndConditionalRenderNVX : Dispatch = Dispatch::with_aliases(
  "glEndConditionalRenderNVX",
  ["glEndConditionalRender", "glEndConditionalRenderNV"],
)

///|
pub fn gl_end_conditional_render_nvx() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glEndConditionalRenderNVX.get().unsafe_into()
  fp()
}

///|
let d_glEndFragmentShaderATI : Dispatch = Dispatch::new(
  "glEndFragmentShaderATI",
)

///|
pub fn gl_end_fragment_shader_ati() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glEndFragmentShaderATI.get().unsafe_into()
  fp()
}

///|
let d_glEndList : Dispatch = Dispatch::new("glEndList")

///|
pub fn gl_end_list() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glEndList.get().unsafe_into()
  fp()
}

///|
let d_glEndOcclusionQueryNV : Dispatch = Dispatch::new("glEndOcclusionQueryNV")

///|
pub fn gl_end_occlusion_query_nv() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glEndOcclusionQueryNV.get().unsafe_into()
  fp()
}

///|
let d_glEndPerfMonitorAMD : Dispatch = Dispatch::new("glEndPerfMonitorAMD")

///|
pub fn gl_end_perf_monitor_amd(monitor : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glEndPerfMonitorAMD.get().unsafe_into()
  fp(monitor)
}

///|
let d_glEndPerfQueryINTEL : Dispatch = Dispatch::new("glEndPerfQueryINTEL")

///|
pub fn gl_end_perf_query_intel(queryHandle : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glEndPerfQueryINTEL.get().unsafe_into()
  fp(queryHandle)
}

///|
let d_glEndQuery : Dispatch = Dispatch::with_aliases("glEndQuery", [
  "glEndQueryARB",
])

///|
pub fn gl_end_query(target : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glEndQuery.get().unsafe_into()
  fp(target)
}

///|
let d_glEndQueryARB : Dispatch = Dispatch::with_aliases("glEndQueryARB", [
  "glEndQuery",
])

///|
pub fn gl_end_query_arb(target : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glEndQueryARB.get().unsafe_into()
  fp(target)
}

///|
let d_glEndQueryEXT : Dispatch = Dispatch::new("glEndQueryEXT")

///|
pub fn gl_end_query_ext(target : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glEndQueryEXT.get().unsafe_into()
  fp(target)
}

///|
let d_glEndQueryIndexed : Dispatch = Dispatch::new("glEndQueryIndexed")

///|
pub fn gl_end_query_indexed(target : UInt, index : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glEndQueryIndexed
    .get()
    .unsafe_into()
  fp(target, index)
}

///|
let d_glEndTilingQCOM : Dispatch = Dispatch::new("glEndTilingQCOM")

///|
pub fn gl_end_tiling_qcom(preserveMask : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glEndTilingQCOM.get().unsafe_into()
  fp(preserveMask)
}

///|
let d_glEndTransformFeedback : Dispatch = Dispatch::with_aliases(
  "glEndTransformFeedback",
  ["glEndTransformFeedbackEXT", "glEndTransformFeedbackNV"],
)

///|
pub fn gl_end_transform_feedback() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glEndTransformFeedback.get().unsafe_into()
  fp()
}

///|
let d_glEndTransformFeedbackEXT : Dispatch = Dispatch::with_aliases(
  "glEndTransformFeedbackEXT",
  ["glEndTransformFeedback", "glEndTransformFeedbackNV"],
)

///|
pub fn gl_end_transform_feedback_ext() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glEndTransformFeedbackEXT.get().unsafe_into()
  fp()
}

///|
let d_glEndTransformFeedbackNV : Dispatch = Dispatch::with_aliases(
  "glEndTransformFeedbackNV",
  ["glEndTransformFeedback", "glEndTransformFeedbackEXT"],
)

///|
pub fn gl_end_transform_feedback_nv() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glEndTransformFeedbackNV.get().unsafe_into()
  fp()
}

///|
let d_glEndVertexShaderEXT : Dispatch = Dispatch::new("glEndVertexShaderEXT")

///|
pub fn gl_end_vertex_shader_ext() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glEndVertexShaderEXT.get().unsafe_into()
  fp()
}

///|
let d_glEndVideoCaptureNV : Dispatch = Dispatch::new("glEndVideoCaptureNV")

///|
pub fn gl_end_video_capture_nv(video_capture_slot : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glEndVideoCaptureNV.get().unsafe_into()
  fp(video_capture_slot)
}

///|
let d_glEvalCoord1d : Dispatch = Dispatch::new("glEvalCoord1d")

///|
pub fn gl_eval_coord1d(u : Double) -> Unit {
  let fp : FuncRef[(Double) -> Unit] = d_glEvalCoord1d.get().unsafe_into()
  fp(u)
}

///|
let d_glEvalCoord1dv : Dispatch = Dispatch::new("glEvalCoord1dv")

///|
pub fn gl_eval_coord1dv(u : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Double]) -> Unit] = d_glEvalCoord1dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(u, fn(u_p) { fp(u_p) })
}

///|
let d_glEvalCoord1f : Dispatch = Dispatch::new("glEvalCoord1f")

///|
pub fn gl_eval_coord1f(u : Float) -> Unit {
  let fp : FuncRef[(Float) -> Unit] = d_glEvalCoord1f.get().unsafe_into()
  fp(u)
}

///|
let d_glEvalCoord1fv : Dispatch = Dispatch::new("glEvalCoord1fv")

///|
pub fn gl_eval_coord1fv(u : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Float]) -> Unit] = d_glEvalCoord1fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(u, fn(u_p) { fp(u_p) })
}

///|
let d_glEvalCoord1xOES : Dispatch = Dispatch::new("glEvalCoord1xOES")

///|
pub fn gl_eval_coord1x_oes(u : Int) -> Unit {
  let fp : FuncRef[(Int) -> Unit] = d_glEvalCoord1xOES.get().unsafe_into()
  fp(u)
}

///|
let d_glEvalCoord1xvOES : Dispatch = Dispatch::new("glEvalCoord1xvOES")

///|
pub fn gl_eval_coord1xv_oes(coords : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glEvalCoord1xvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(coords_p) })
}

///|
let d_glEvalCoord2d : Dispatch = Dispatch::new("glEvalCoord2d")

///|
pub fn gl_eval_coord2d(u : Double, v : Double) -> Unit {
  let fp : FuncRef[(Double, Double) -> Unit] = d_glEvalCoord2d
    .get()
    .unsafe_into()
  fp(u, v)
}

///|
let d_glEvalCoord2dv : Dispatch = Dispatch::new("glEvalCoord2dv")

///|
pub fn gl_eval_coord2dv(u : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Double]) -> Unit] = d_glEvalCoord2dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(u, fn(u_p) { fp(u_p) })
}

///|
let d_glEvalCoord2f : Dispatch = Dispatch::new("glEvalCoord2f")

///|
pub fn gl_eval_coord2f(u : Float, v : Float) -> Unit {
  let fp : FuncRef[(Float, Float) -> Unit] = d_glEvalCoord2f.get().unsafe_into()
  fp(u, v)
}

///|
let d_glEvalCoord2fv : Dispatch = Dispatch::new("glEvalCoord2fv")

///|
pub fn gl_eval_coord2fv(u : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Float]) -> Unit] = d_glEvalCoord2fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(u, fn(u_p) { fp(u_p) })
}

///|
let d_glEvalCoord2xOES : Dispatch = Dispatch::new("glEvalCoord2xOES")

///|
pub fn gl_eval_coord2x_oes(u : Int, v : Int) -> Unit {
  let fp : FuncRef[(Int, Int) -> Unit] = d_glEvalCoord2xOES.get().unsafe_into()
  fp(u, v)
}

///|
let d_glEvalCoord2xvOES : Dispatch = Dispatch::new("glEvalCoord2xvOES")

///|
pub fn gl_eval_coord2xv_oes(coords : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glEvalCoord2xvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(coords_p) })
}

///|
let d_glEvalMapsNV : Dispatch = Dispatch::new("glEvalMapsNV")

///|
pub fn gl_eval_maps_nv(target : UInt, mode : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glEvalMapsNV.get().unsafe_into()
  fp(target, mode)
}

///|
let d_glEvalMesh1 : Dispatch = Dispatch::new("glEvalMesh1")

///|
pub fn gl_eval_mesh1(mode : UInt, i1 : Int, i2 : Int) -> Unit {
  let fp : FuncRef[(UInt, Int, Int) -> Unit] = d_glEvalMesh1.get().unsafe_into()
  fp(mode, i1, i2)
}

///|
let d_glEvalMesh2 : Dispatch = Dispatch::new("glEvalMesh2")

///|
pub fn gl_eval_mesh2(
  mode : UInt,
  i1 : Int,
  i2 : Int,
  j1 : Int,
  j2 : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int) -> Unit] = d_glEvalMesh2
    .get()
    .unsafe_into()
  fp(mode, i1, i2, j1, j2)
}

///|
let d_glEvalPoint1 : Dispatch = Dispatch::new("glEvalPoint1")

///|
pub fn gl_eval_point1(i : Int) -> Unit {
  let fp : FuncRef[(Int) -> Unit] = d_glEvalPoint1.get().unsafe_into()
  fp(i)
}

///|
let d_glEvalPoint2 : Dispatch = Dispatch::new("glEvalPoint2")

///|
pub fn gl_eval_point2(i : Int, j : Int) -> Unit {
  let fp : FuncRef[(Int, Int) -> Unit] = d_glEvalPoint2.get().unsafe_into()
  fp(i, j)
}

///|
let d_glEvaluateDepthValuesARB : Dispatch = Dispatch::new(
  "glEvaluateDepthValuesARB",
)

///|
pub fn gl_evaluate_depth_values_arb() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glEvaluateDepthValuesARB.get().unsafe_into()
  fp()
}

///|
let d_glExecuteProgramNV : Dispatch = Dispatch::new("glExecuteProgramNV")

///|
pub fn gl_execute_program_nv(
  target : UInt,
  id : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glExecuteProgramNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, id, params_p) })
}

///|
let d_glExtGetBuffersQCOM : Dispatch = Dispatch::new("glExtGetBuffersQCOM")

///|
pub fn gl_ext_get_buffers_qcom(
  buffers : FixedArray[UInt],
  maxBuffers : Int,
  numBuffers : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[UInt], Int, @pointer.Pointer[Int]) -> Unit] = d_glExtGetBuffersQCOM
    .get()
    .unsafe_into()
  @pointer.borrow_array(buffers, fn(buffers_p) {
    @pointer.borrow_array(numBuffers, fn(numBuffers_p) {
      fp(buffers_p, maxBuffers, numBuffers_p)
    })
  })
}

///|
let d_glExtGetFramebuffersQCOM : Dispatch = Dispatch::new(
  "glExtGetFramebuffersQCOM",
)

///|
pub fn gl_ext_get_framebuffers_qcom(
  framebuffers : FixedArray[UInt],
  maxFramebuffers : Int,
  numFramebuffers : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[UInt], Int, @pointer.Pointer[Int]) -> Unit] = d_glExtGetFramebuffersQCOM
    .get()
    .unsafe_into()
  @pointer.borrow_array(framebuffers, fn(framebuffers_p) {
    @pointer.borrow_array(numFramebuffers, fn(numFramebuffers_p) {
      fp(framebuffers_p, maxFramebuffers, numFramebuffers_p)
    })
  })
}

///|
let d_glExtGetProgramBinarySourceQCOM : Dispatch = Dispatch::new(
  "glExtGetProgramBinarySourceQCOM",
)

///|
pub fn gl_ext_get_program_binary_source_qcom(
  program : UInt,
  shadertype : UInt,
  source : Bytes,
  length : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, @pointer.Pointer[Byte], @pointer.Pointer[Int]) -> Unit,
  ] = d_glExtGetProgramBinarySourceQCOM.get().unsafe_into()
  @pointer.borrow_bytes(source, fn(source_p) {
    @pointer.borrow_array(length, fn(length_p) {
      fp(program, shadertype, source_p, length_p)
    })
  })
}

///|
let d_glExtGetProgramsQCOM : Dispatch = Dispatch::new("glExtGetProgramsQCOM")

///|
pub fn gl_ext_get_programs_qcom(
  programs : FixedArray[UInt],
  maxPrograms : Int,
  numPrograms : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[UInt], Int, @pointer.Pointer[Int]) -> Unit] = d_glExtGetProgramsQCOM
    .get()
    .unsafe_into()
  @pointer.borrow_array(programs, fn(programs_p) {
    @pointer.borrow_array(numPrograms, fn(numPrograms_p) {
      fp(programs_p, maxPrograms, numPrograms_p)
    })
  })
}

///|
let d_glExtGetRenderbuffersQCOM : Dispatch = Dispatch::new(
  "glExtGetRenderbuffersQCOM",
)

///|
pub fn gl_ext_get_renderbuffers_qcom(
  renderbuffers : FixedArray[UInt],
  maxRenderbuffers : Int,
  numRenderbuffers : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[UInt], Int, @pointer.Pointer[Int]) -> Unit] = d_glExtGetRenderbuffersQCOM
    .get()
    .unsafe_into()
  @pointer.borrow_array(renderbuffers, fn(renderbuffers_p) {
    @pointer.borrow_array(numRenderbuffers, fn(numRenderbuffers_p) {
      fp(renderbuffers_p, maxRenderbuffers, numRenderbuffers_p)
    })
  })
}

///|
let d_glExtGetShadersQCOM : Dispatch = Dispatch::new("glExtGetShadersQCOM")

///|
pub fn gl_ext_get_shaders_qcom(
  shaders : FixedArray[UInt],
  maxShaders : Int,
  numShaders : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[UInt], Int, @pointer.Pointer[Int]) -> Unit] = d_glExtGetShadersQCOM
    .get()
    .unsafe_into()
  @pointer.borrow_array(shaders, fn(shaders_p) {
    @pointer.borrow_array(numShaders, fn(numShaders_p) {
      fp(shaders_p, maxShaders, numShaders_p)
    })
  })
}

///|
let d_glExtGetTexLevelParameterivQCOM : Dispatch = Dispatch::new(
  "glExtGetTexLevelParameterivQCOM",
)

///|
pub fn gl_ext_get_tex_level_parameteriv_qcom(
  texture : UInt,
  face : UInt,
  level : Int,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, UInt, @pointer.Pointer[Int]) -> Unit] = d_glExtGetTexLevelParameterivQCOM
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(texture, face, level, pname, params_p)
  })
}

///|
let d_glExtGetTexSubImageQCOM : Dispatch = Dispatch::new(
  "glExtGetTexSubImageQCOM",
)

///|
pub fn gl_ext_get_tex_sub_image_qcom(
  target : UInt,
  level : Int,
  xoffset : Int,
  yoffset : Int,
  zoffset : Int,
  width : Int,
  height : Int,
  depth : Int,
  format : UInt,
  type_ : UInt,
  texels : Bytes,
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      Int,
      Int,
      Int,
      Int,
      Int,
      Int,
      Int,
      UInt,
      UInt,
      @pointer.Pointer[Byte],
    ) -> Unit,
  ] = d_glExtGetTexSubImageQCOM.get().unsafe_into()
  @pointer.borrow_bytes(texels, fn(texels_p) {
    fp(
      target, level, xoffset, yoffset, zoffset, width, height, depth, format, type_,
      texels_p,
    )
  })
}

///|
let d_glExtGetTexturesQCOM : Dispatch = Dispatch::new("glExtGetTexturesQCOM")

///|
pub fn gl_ext_get_textures_qcom(
  textures : FixedArray[UInt],
  maxTextures : Int,
  numTextures : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[UInt], Int, @pointer.Pointer[Int]) -> Unit] = d_glExtGetTexturesQCOM
    .get()
    .unsafe_into()
  @pointer.borrow_array(textures, fn(textures_p) {
    @pointer.borrow_array(numTextures, fn(numTextures_p) {
      fp(textures_p, maxTextures, numTextures_p)
    })
  })
}

///|
let d_glExtIsProgramBinaryQCOM : Dispatch = Dispatch::new(
  "glExtIsProgramBinaryQCOM",
)

///|
pub fn gl_ext_is_program_binary_qcom(program : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glExtIsProgramBinaryQCOM
    .get()
    .unsafe_into()
  (fp(program) & 0xFF) != 0
}

///|
let d_glExtTexObjectStateOverrideiQCOM : Dispatch = Dispatch::new(
  "glExtTexObjectStateOverrideiQCOM",
)

///|
pub fn gl_ext_tex_object_state_overridei_qcom(
  target : UInt,
  pname : UInt,
  param : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int) -> Unit] = d_glExtTexObjectStateOverrideiQCOM
    .get()
    .unsafe_into()
  fp(target, pname, param)
}

///|
let d_glExtractComponentEXT : Dispatch = Dispatch::new("glExtractComponentEXT")

///|
pub fn gl_extract_component_ext(res : UInt, src : UInt, num : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glExtractComponentEXT
    .get()
    .unsafe_into()
  fp(res, src, num)
}

///|
let d_glFeedbackBuffer : Dispatch = Dispatch::new("glFeedbackBuffer")

///|
pub fn gl_feedback_buffer(
  size : Int,
  type_ : UInt,
  buffer : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(Int, UInt, @pointer.Pointer[Float]) -> Unit] = d_glFeedbackBuffer
    .get()
    .unsafe_into()
  @pointer.borrow_array(buffer, fn(buffer_p) { fp(size, type_, buffer_p) })
}

///|
let d_glFeedbackBufferxOES : Dispatch = Dispatch::new("glFeedbackBufferxOES")

///|
pub fn gl_feedback_bufferx_oes(
  n : Int,
  type_ : UInt,
  buffer : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(Int, UInt, @pointer.Pointer[Int]) -> Unit] = d_glFeedbackBufferxOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(buffer, fn(buffer_p) { fp(n, type_, buffer_p) })
}

///|
let d_glFenceSync : Dispatch = Dispatch::with_aliases("glFenceSync", [
  "glFenceSyncAPPLE",
])

///|
pub fn gl_fence_sync(condition : UInt, flags : UInt) -> GLsync {
  let fp : FuncRef[(UInt, UInt) -> GLsync] = d_glFenceSync.get().unsafe_into()
  fp(condition, flags)
}

///|
let d_glFenceSyncAPPLE : Dispatch = Dispatch::with_aliases("glFenceSyncAPPLE", [
  "glFenceSync",
])

///|
pub fn gl_fence_sync_apple(condition : UInt, flags : UInt) -> GLsync {
  let fp : FuncRef[(UInt, UInt) -> GLsync] = d_glFenceSyncAPPLE
    .get()
    .unsafe_into()
  fp(condition, flags)
}

///|
let d_glFinalCombinerInputNV : Dispatch = Dispatch::new(
  "glFinalCombinerInputNV",
)

///|
pub fn gl_final_combiner_input_nv(
  variable : UInt,
  input : UInt,
  mapping : UInt,
  componentUsage : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt) -> Unit] = d_glFinalCombinerInputNV
    .get()
    .unsafe_into()
  fp(variable, input, mapping, componentUsage)
}

///|
let d_glFinish : Dispatch = Dispatch::new("glFinish")

///|
pub fn gl_finish() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glFinish.get().unsafe_into()
  fp()
}

///|
let d_glFinishAsyncSGIX : Dispatch = Dispatch::new("glFinishAsyncSGIX")

///|
pub fn gl_finish_async_sgix(markerp : FixedArray[UInt]) -> Int {
  let fp : FuncRef[(@pointer.Pointer[UInt]) -> Int] = d_glFinishAsyncSGIX
    .get()
    .unsafe_into()
  @pointer.borrow_array(markerp, fn(markerp_p) { fp(markerp_p) })
}

///|
let d_glFinishFenceAPPLE : Dispatch = Dispatch::new("glFinishFenceAPPLE")

///|
pub fn gl_finish_fence_apple(fence : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glFinishFenceAPPLE.get().unsafe_into()
  fp(fence)
}

///|
let d_glFinishFenceNV : Dispatch = Dispatch::new("glFinishFenceNV")

///|
pub fn gl_finish_fence_nv(fence : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glFinishFenceNV.get().unsafe_into()
  fp(fence)
}

///|
let d_glFinishObjectAPPLE : Dispatch = Dispatch::new("glFinishObjectAPPLE")

///|
pub fn gl_finish_object_apple(object : UInt, name : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glFinishObjectAPPLE
    .get()
    .unsafe_into()
  fp(object, name)
}

///|
let d_glFinishTextureSUNX : Dispatch = Dispatch::new("glFinishTextureSUNX")

///|
pub fn gl_finish_texture_sunx() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glFinishTextureSUNX.get().unsafe_into()
  fp()
}

///|
let d_glFlush : Dispatch = Dispatch::new("glFlush")

///|
pub fn gl_flush() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glFlush.get().unsafe_into()
  fp()
}

///|
let d_glFlushMappedBufferRange : Dispatch = Dispatch::with_aliases(
  "glFlushMappedBufferRange",
  ["glFlushMappedBufferRangeAPPLE", "glFlushMappedBufferRangeEXT"],
)

///|
pub fn gl_flush_mapped_buffer_range(
  target : UInt,
  offset : Int64,
  length : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, Int64, Int64) -> Unit] = d_glFlushMappedBufferRange
    .get()
    .unsafe_into()
  fp(target, offset, length)
}

///|
let d_glFlushMappedBufferRangeAPPLE : Dispatch = Dispatch::with_aliases(
  "glFlushMappedBufferRangeAPPLE",
  ["glFlushMappedBufferRange", "glFlushMappedBufferRangeEXT"],
)

///|
pub fn gl_flush_mapped_buffer_range_apple(
  target : UInt,
  offset : Int64,
  size : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, Int64, Int64) -> Unit] = d_glFlushMappedBufferRangeAPPLE
    .get()
    .unsafe_into()
  fp(target, offset, size)
}

///|
let d_glFlushMappedBufferRangeEXT : Dispatch = Dispatch::with_aliases(
  "glFlushMappedBufferRangeEXT",
  ["glFlushMappedBufferRange", "glFlushMappedBufferRangeAPPLE"],
)

///|
pub fn gl_flush_mapped_buffer_range_ext(
  target : UInt,
  offset : Int64,
  length : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, Int64, Int64) -> Unit] = d_glFlushMappedBufferRangeEXT
    .get()
    .unsafe_into()
  fp(target, offset, length)
}

///|
let d_glFlushMappedNamedBufferRange : Dispatch = Dispatch::new(
  "glFlushMappedNamedBufferRange",
)

///|
pub fn gl_flush_mapped_named_buffer_range(
  buffer : UInt,
  offset : Int64,
  length : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, Int64, Int64) -> Unit] = d_glFlushMappedNamedBufferRange
    .get()
    .unsafe_into()
  fp(buffer, offset, length)
}

///|
let d_glFlushMappedNamedBufferRangeEXT : Dispatch = Dispatch::new(
  "glFlushMappedNamedBufferRangeEXT",
)

///|
pub fn gl_flush_mapped_named_buffer_range_ext(
  buffer : UInt,
  offset : Int64,
  length : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, Int64, Int64) -> Unit] = d_glFlushMappedNamedBufferRangeEXT
    .get()
    .unsafe_into()
  fp(buffer, offset, length)
}

///|
let d_glFlushPixelDataRangeNV : Dispatch = Dispatch::new(
  "glFlushPixelDataRangeNV",
)

///|
pub fn gl_flush_pixel_data_range_nv(target : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glFlushPixelDataRangeNV
    .get()
    .unsafe_into()
  fp(target)
}

///|
let d_glFlushRasterSGIX : Dispatch = Dispatch::new("glFlushRasterSGIX")

///|
pub fn gl_flush_raster_sgix() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glFlushRasterSGIX.get().unsafe_into()
  fp()
}

///|
let d_glFlushStaticDataIBM : Dispatch = Dispatch::new("glFlushStaticDataIBM")

///|
pub fn gl_flush_static_data_ibm(target : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glFlushStaticDataIBM.get().unsafe_into()
  fp(target)
}

///|
let d_glFlushVertexArrayRangeAPPLE : Dispatch = Dispatch::new(
  "glFlushVertexArrayRangeAPPLE",
)

///|
pub fn gl_flush_vertex_array_range_apple(length : Int, pointer : Bytes) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[Byte]) -> Unit] = d_glFlushVertexArrayRangeAPPLE
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(pointer, fn(pointer_p) { fp(length, pointer_p) })
}

///|
let d_glFlushVertexArrayRangeNV : Dispatch = Dispatch::new(
  "glFlushVertexArrayRangeNV",
)

///|
pub fn gl_flush_vertex_array_range_nv() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glFlushVertexArrayRangeNV.get().unsafe_into()
  fp()
}

///|
let d_glFogCoordFormatNV : Dispatch = Dispatch::new("glFogCoordFormatNV")

///|
pub fn gl_fog_coord_format_nv(type_ : UInt, stride : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glFogCoordFormatNV
    .get()
    .unsafe_into()
  fp(type_, stride)
}

///|
let d_glFogCoordPointer : Dispatch = Dispatch::with_aliases(
  "glFogCoordPointer",
  ["glFogCoordPointerEXT"],
)

///|
/// Configure a vertex array from the buffer currently bound to `GL_ARRAY_BUFFER`.
/// `offset` is a byte offset; client-side arrays are not accepted.
pub fn gl_fog_coord_pointer(type_ : UInt, stride : Int, offset : Int64) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Unit]) -> Unit] = d_glFogCoordPointer
    .get()
    .unsafe_into()
  fp(type_, stride, @pointer.Pointer::unsafe_from_int64(offset))
}

///|
let d_glFogCoordPointerEXT : Dispatch = Dispatch::with_aliases(
  "glFogCoordPointerEXT",
  ["glFogCoordPointer"],
)

///|
/// Configure a vertex array from the buffer currently bound to `GL_ARRAY_BUFFER`.
/// `offset` is a byte offset; client-side arrays are not accepted.
pub fn gl_fog_coord_pointer_ext(
  type_ : UInt,
  stride : Int,
  offset : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Unit]) -> Unit] = d_glFogCoordPointerEXT
    .get()
    .unsafe_into()
  fp(type_, stride, @pointer.Pointer::unsafe_from_int64(offset))
}

///|
let d_glFogCoordd : Dispatch = Dispatch::with_aliases("glFogCoordd", [
  "glFogCoorddEXT",
])

///|
pub fn gl_fog_coordd(coord : Double) -> Unit {
  let fp : FuncRef[(Double) -> Unit] = d_glFogCoordd.get().unsafe_into()
  fp(coord)
}

///|
let d_glFogCoorddEXT : Dispatch = Dispatch::with_aliases("glFogCoorddEXT", [
  "glFogCoordd",
])

///|
pub fn gl_fog_coordd_ext(coord : Double) -> Unit {
  let fp : FuncRef[(Double) -> Unit] = d_glFogCoorddEXT.get().unsafe_into()
  fp(coord)
}

///|
let d_glFogCoorddv : Dispatch = Dispatch::with_aliases("glFogCoorddv", [
  "glFogCoorddvEXT",
])

///|
pub fn gl_fog_coorddv(coord : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Double]) -> Unit] = d_glFogCoorddv
    .get()
    .unsafe_into()
  @pointer.borrow_array(coord, fn(coord_p) { fp(coord_p) })
}

///|
let d_glFogCoorddvEXT : Dispatch = Dispatch::with_aliases("glFogCoorddvEXT", [
  "glFogCoorddv",
])

///|
pub fn gl_fog_coorddv_ext(coord : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Double]) -> Unit] = d_glFogCoorddvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(coord, fn(coord_p) { fp(coord_p) })
}

///|
let d_glFogCoordf : Dispatch = Dispatch::with_aliases("glFogCoordf", [
  "glFogCoordfEXT",
])

///|
pub fn gl_fog_coordf(coord : Float) -> Unit {
  let fp : FuncRef[(Float) -> Unit] = d_glFogCoordf.get().unsafe_into()
  fp(coord)
}

///|
let d_glFogCoordfEXT : Dispatch = Dispatch::with_aliases("glFogCoordfEXT", [
  "glFogCoordf",
])

///|
pub fn gl_fog_coordf_ext(coord : Float) -> Unit {
  let fp : FuncRef[(Float) -> Unit] = d_glFogCoordfEXT.get().unsafe_into()
  fp(coord)
}

///|
let d_glFogCoordfv : Dispatch = Dispatch::with_aliases("glFogCoordfv", [
  "glFogCoordfvEXT",
])

///|
pub fn gl_fog_coordfv(coord : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Float]) -> Unit] = d_glFogCoordfv
    .get()
    .unsafe_into()
  @pointer.borrow_array(coord, fn(coord_p) { fp(coord_p) })
}

///|
let d_glFogCoordfvEXT : Dispatch = Dispatch::with_aliases("glFogCoordfvEXT", [
  "glFogCoordfv",
])

///|
pub fn gl_fog_coordfv_ext(coord : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Float]) -> Unit] = d_glFogCoordfvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(coord, fn(coord_p) { fp(coord_p) })
}

///|
let d_glFogCoordhNV : Dispatch = Dispatch::new("glFogCoordhNV")

///|
pub fn gl_fog_coordh_nv(fog : Int) -> Unit {
  let fp : FuncRef[(Int) -> Unit] = d_glFogCoordhNV.get().unsafe_into()
  fp(fog)
}

///|
let d_glFogCoordhvNV : Dispatch = Dispatch::new("glFogCoordhvNV")

///|
pub fn gl_fog_coordhv_nv(fog : FixedArray[UInt16]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[UInt16]) -> Unit] = d_glFogCoordhvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(fog, fn(fog_p) { fp(fog_p) })
}

///|
let d_glFogFuncSGIS : Dispatch = Dispatch::new("glFogFuncSGIS")

///|
pub fn gl_fog_func_sgis(n : Int, points : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[Float]) -> Unit] = d_glFogFuncSGIS
    .get()
    .unsafe_into()
  @pointer.borrow_array(points, fn(points_p) { fp(n, points_p) })
}

///|
let d_glFogf : Dispatch = Dispatch::new("glFogf")

///|
pub fn gl_fogf(pname : UInt, param : Float) -> Unit {
  let fp : FuncRef[(UInt, Float) -> Unit] = d_glFogf.get().unsafe_into()
  fp(pname, param)
}

///|
let d_glFogfv : Dispatch = Dispatch::new("glFogfv")

///|
pub fn gl_fogfv(pname : UInt, params : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glFogfv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(pname, params_p) })
}

///|
let d_glFogi : Dispatch = Dispatch::new("glFogi")

///|
pub fn gl_fogi(pname : UInt, param : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glFogi.get().unsafe_into()
  fp(pname, param)
}

///|
let d_glFogiv : Dispatch = Dispatch::new("glFogiv")

///|
pub fn gl_fogiv(pname : UInt, params : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glFogiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(pname, params_p) })
}

///|
let d_glFogx : Dispatch = Dispatch::new("glFogx")

///|
pub fn gl_fogx(pname : UInt, param : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glFogx.get().unsafe_into()
  fp(pname, param)
}

///|
let d_glFogxOES : Dispatch = Dispatch::new("glFogxOES")

///|
pub fn gl_fogx_oes(pname : UInt, param : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glFogxOES.get().unsafe_into()
  fp(pname, param)
}

///|
let d_glFogxv : Dispatch = Dispatch::new("glFogxv")

///|
pub fn gl_fogxv(pname : UInt, param : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glFogxv
    .get()
    .unsafe_into()
  @pointer.borrow_array(param, fn(param_p) { fp(pname, param_p) })
}

///|
let d_glFogxvOES : Dispatch = Dispatch::new("glFogxvOES")

///|
pub fn gl_fogxv_oes(pname : UInt, param : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glFogxvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(param, fn(param_p) { fp(pname, param_p) })
}

///|
let d_glFragmentColorMaterialSGIX : Dispatch = Dispatch::new(
  "glFragmentColorMaterialSGIX",
)

///|
pub fn gl_fragment_color_material_sgix(face : UInt, mode : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glFragmentColorMaterialSGIX
    .get()
    .unsafe_into()
  fp(face, mode)
}

///|
let d_glFragmentCoverageColorNV : Dispatch = Dispatch::new(
  "glFragmentCoverageColorNV",
)

///|
pub fn gl_fragment_coverage_color_nv(color : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glFragmentCoverageColorNV
    .get()
    .unsafe_into()
  fp(color)
}

///|
let d_glFragmentLightModelfSGIX : Dispatch = Dispatch::new(
  "glFragmentLightModelfSGIX",
)

///|
pub fn gl_fragment_light_modelf_sgix(pname : UInt, param : Float) -> Unit {
  let fp : FuncRef[(UInt, Float) -> Unit] = d_glFragmentLightModelfSGIX
    .get()
    .unsafe_into()
  fp(pname, param)
}

///|
let d_glFragmentLightModelfvSGIX : Dispatch = Dispatch::new(
  "glFragmentLightModelfvSGIX",
)

///|
pub fn gl_fragment_light_modelfv_sgix(
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glFragmentLightModelfvSGIX
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(pname, params_p) })
}

///|
let d_glFragmentLightModeliSGIX : Dispatch = Dispatch::new(
  "glFragmentLightModeliSGIX",
)

///|
pub fn gl_fragment_light_modeli_sgix(pname : UInt, param : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glFragmentLightModeliSGIX
    .get()
    .unsafe_into()
  fp(pname, param)
}

///|
let d_glFragmentLightModelivSGIX : Dispatch = Dispatch::new(
  "glFragmentLightModelivSGIX",
)

///|
pub fn gl_fragment_light_modeliv_sgix(
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glFragmentLightModelivSGIX
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(pname, params_p) })
}

///|
let d_glFragmentLightfSGIX : Dispatch = Dispatch::new("glFragmentLightfSGIX")

///|
pub fn gl_fragment_lightf_sgix(
  light : UInt,
  pname : UInt,
  param : Float,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Float) -> Unit] = d_glFragmentLightfSGIX
    .get()
    .unsafe_into()
  fp(light, pname, param)
}

///|
let d_glFragmentLightfvSGIX : Dispatch = Dispatch::new("glFragmentLightfvSGIX")

///|
pub fn gl_fragment_lightfv_sgix(
  light : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glFragmentLightfvSGIX
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(light, pname, params_p) })
}

///|
let d_glFragmentLightiSGIX : Dispatch = Dispatch::new("glFragmentLightiSGIX")

///|
pub fn gl_fragment_lighti_sgix(light : UInt, pname : UInt, param : Int) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int) -> Unit] = d_glFragmentLightiSGIX
    .get()
    .unsafe_into()
  fp(light, pname, param)
}

///|
let d_glFragmentLightivSGIX : Dispatch = Dispatch::new("glFragmentLightivSGIX")

///|
pub fn gl_fragment_lightiv_sgix(
  light : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glFragmentLightivSGIX
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(light, pname, params_p) })
}

///|
let d_glFragmentMaterialfSGIX : Dispatch = Dispatch::new(
  "glFragmentMaterialfSGIX",
)

///|
pub fn gl_fragment_materialf_sgix(
  face : UInt,
  pname : UInt,
  param : Float,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Float) -> Unit] = d_glFragmentMaterialfSGIX
    .get()
    .unsafe_into()
  fp(face, pname, param)
}

///|
let d_glFragmentMaterialfvSGIX : Dispatch = Dispatch::new(
  "glFragmentMaterialfvSGIX",
)

///|
pub fn gl_fragment_materialfv_sgix(
  face : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glFragmentMaterialfvSGIX
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(face, pname, params_p) })
}

///|
let d_glFragmentMaterialiSGIX : Dispatch = Dispatch::new(
  "glFragmentMaterialiSGIX",
)

///|
pub fn gl_fragment_materiali_sgix(
  face : UInt,
  pname : UInt,
  param : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int) -> Unit] = d_glFragmentMaterialiSGIX
    .get()
    .unsafe_into()
  fp(face, pname, param)
}

///|
let d_glFragmentMaterialivSGIX : Dispatch = Dispatch::new(
  "glFragmentMaterialivSGIX",
)

///|
pub fn gl_fragment_materialiv_sgix(
  face : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glFragmentMaterialivSGIX
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(face, pname, params_p) })
}

///|
let d_glFrameTerminatorGREMEDY : Dispatch = Dispatch::new(
  "glFrameTerminatorGREMEDY",
)

///|
pub fn gl_frame_terminator_gremedy() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glFrameTerminatorGREMEDY.get().unsafe_into()
  fp()
}

///|
let d_glFrameZoomSGIX : Dispatch = Dispatch::new("glFrameZoomSGIX")

///|
pub fn gl_frame_zoom_sgix(factor : Int) -> Unit {
  let fp : FuncRef[(Int) -> Unit] = d_glFrameZoomSGIX.get().unsafe_into()
  fp(factor)
}

///|
let d_glFramebufferDrawBufferEXT : Dispatch = Dispatch::new(
  "glFramebufferDrawBufferEXT",
)

///|
pub fn gl_framebuffer_draw_buffer_ext(framebuffer : UInt, mode : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glFramebufferDrawBufferEXT
    .get()
    .unsafe_into()
  fp(framebuffer, mode)
}

///|
let d_glFramebufferDrawBuffersEXT : Dispatch = Dispatch::new(
  "glFramebufferDrawBuffersEXT",
)

///|
pub fn gl_framebuffer_draw_buffers_ext(
  framebuffer : UInt,
  n : Int,
  bufs : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[UInt]) -> Unit] = d_glFramebufferDrawBuffersEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(bufs, fn(bufs_p) { fp(framebuffer, n, bufs_p) })
}

///|
let d_glFramebufferFetchBarrierEXT : Dispatch = Dispatch::new(
  "glFramebufferFetchBarrierEXT",
)

///|
pub fn gl_framebuffer_fetch_barrier_ext() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glFramebufferFetchBarrierEXT
    .get()
    .unsafe_into()
  fp()
}

///|
let d_glFramebufferFetchBarrierQCOM : Dispatch = Dispatch::new(
  "glFramebufferFetchBarrierQCOM",
)

///|
pub fn gl_framebuffer_fetch_barrier_qcom() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glFramebufferFetchBarrierQCOM
    .get()
    .unsafe_into()
  fp()
}

///|
let d_glFramebufferFoveationConfigQCOM : Dispatch = Dispatch::new(
  "glFramebufferFoveationConfigQCOM",
)

///|
pub fn gl_framebuffer_foveation_config_qcom(
  framebuffer : UInt,
  numLayers : UInt,
  focalPointsPerLayer : UInt,
  requestedFeatures : UInt,
  providedFeatures : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, @pointer.Pointer[UInt]) -> Unit] = d_glFramebufferFoveationConfigQCOM
    .get()
    .unsafe_into()
  @pointer.borrow_array(providedFeatures, fn(providedFeatures_p) {
    fp(
      framebuffer, numLayers, focalPointsPerLayer, requestedFeatures, providedFeatures_p,
    )
  })
}

///|
let d_glFramebufferFoveationParametersQCOM : Dispatch = Dispatch::new(
  "glFramebufferFoveationParametersQCOM",
)

///|
pub fn gl_framebuffer_foveation_parameters_qcom(
  framebuffer : UInt,
  layer : UInt,
  focalPoint : UInt,
  focalX : Float,
  focalY : Float,
  gainX : Float,
  gainY : Float,
  foveaArea : Float,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, UInt, Float, Float, Float, Float, Float) -> Unit,
  ] = d_glFramebufferFoveationParametersQCOM.get().unsafe_into()
  fp(framebuffer, layer, focalPoint, focalX, focalY, gainX, gainY, foveaArea)
}

///|
let d_glFramebufferParameteri : Dispatch = Dispatch::new(
  "glFramebufferParameteri",
)

///|
pub fn gl_framebuffer_parameteri(
  target : UInt,
  pname : UInt,
  param : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int) -> Unit] = d_glFramebufferParameteri
    .get()
    .unsafe_into()
  fp(target, pname, param)
}

///|
let d_glFramebufferPixelLocalStorageSizeEXT : Dispatch = Dispatch::new(
  "glFramebufferPixelLocalStorageSizeEXT",
)

///|
pub fn gl_framebuffer_pixel_local_storage_size_ext(
  target : UInt,
  size : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glFramebufferPixelLocalStorageSizeEXT
    .get()
    .unsafe_into()
  fp(target, size)
}

///|
let d_glFramebufferReadBufferEXT : Dispatch = Dispatch::new(
  "glFramebufferReadBufferEXT",
)

///|
pub fn gl_framebuffer_read_buffer_ext(framebuffer : UInt, mode : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glFramebufferReadBufferEXT
    .get()
    .unsafe_into()
  fp(framebuffer, mode)
}

///|
let d_glFramebufferRenderbuffer : Dispatch = Dispatch::with_aliases(
  "glFramebufferRenderbuffer",
  ["glFramebufferRenderbufferEXT"],
)

///|
pub fn gl_framebuffer_renderbuffer(
  target : UInt,
  attachment : UInt,
  renderbuffertarget : UInt,
  renderbuffer : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt) -> Unit] = d_glFramebufferRenderbuffer
    .get()
    .unsafe_into()
  fp(target, attachment, renderbuffertarget, renderbuffer)
}

///|
let d_glFramebufferRenderbufferEXT : Dispatch = Dispatch::with_aliases(
  "glFramebufferRenderbufferEXT",
  ["glFramebufferRenderbuffer"],
)

///|
pub fn gl_framebuffer_renderbuffer_ext(
  target : UInt,
  attachment : UInt,
  renderbuffertarget : UInt,
  renderbuffer : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt) -> Unit] = d_glFramebufferRenderbufferEXT
    .get()
    .unsafe_into()
  fp(target, attachment, renderbuffertarget, renderbuffer)
}

///|
let d_glFramebufferRenderbufferOES : Dispatch = Dispatch::new(
  "glFramebufferRenderbufferOES",
)

///|
pub fn gl_framebuffer_renderbuffer_oes(
  target : UInt,
  attachment : UInt,
  renderbuffertarget : UInt,
  renderbuffer : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt) -> Unit] = d_glFramebufferRenderbufferOES
    .get()
    .unsafe_into()
  fp(target, attachment, renderbuffertarget, renderbuffer)
}

///|
let d_glFramebufferSampleLocationsfvARB : Dispatch = Dispatch::new(
  "glFramebufferSampleLocationsfvARB",
)

///|
pub fn gl_framebuffer_sample_locationsfv_arb(
  target : UInt,
  start : UInt,
  count : Int,
  v : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, @pointer.Pointer[Float]) -> Unit] = d_glFramebufferSampleLocationsfvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, start, count, v_p) })
}

///|
let d_glFramebufferSampleLocationsfvNV : Dispatch = Dispatch::new(
  "glFramebufferSampleLocationsfvNV",
)

///|
pub fn gl_framebuffer_sample_locationsfv_nv(
  target : UInt,
  start : UInt,
  count : Int,
  v : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, @pointer.Pointer[Float]) -> Unit] = d_glFramebufferSampleLocationsfvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, start, count, v_p) })
}

///|
let d_glFramebufferSamplePositionsfvAMD : Dispatch = Dispatch::new(
  "glFramebufferSamplePositionsfvAMD",
)

///|
pub fn gl_framebuffer_sample_positionsfv_amd(
  target : UInt,
  numsamples : UInt,
  pixelindex : UInt,
  values : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glFramebufferSamplePositionsfvAMD
    .get()
    .unsafe_into()
  @pointer.borrow_array(values, fn(values_p) {
    fp(target, numsamples, pixelindex, values_p)
  })
}

///|
let d_glFramebufferShadingRateEXT : Dispatch = Dispatch::new(
  "glFramebufferShadingRateEXT",
)

///|
pub fn gl_framebuffer_shading_rate_ext(
  target : UInt,
  attachment : UInt,
  texture : UInt,
  baseLayer : Int,
  numLayers : Int,
  texelWidth : Int,
  texelHeight : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int, Int, Int, Int) -> Unit] = d_glFramebufferShadingRateEXT
    .get()
    .unsafe_into()
  fp(target, attachment, texture, baseLayer, numLayers, texelWidth, texelHeight)
}

///|
let d_glFramebufferTexture : Dispatch = Dispatch::with_aliases(
  "glFramebufferTexture",
  [
    "glFramebufferTextureARB", "glFramebufferTextureEXT", "glFramebufferTextureOES",
  ],
)

///|
pub fn gl_framebuffer_texture(
  target : UInt,
  attachment : UInt,
  texture : UInt,
  level : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int) -> Unit] = d_glFramebufferTexture
    .get()
    .unsafe_into()
  fp(target, attachment, texture, level)
}

///|
let d_glFramebufferTexture1D : Dispatch = Dispatch::with_aliases(
  "glFramebufferTexture1D",
  ["glFramebufferTexture1DEXT"],
)

///|
pub fn gl_framebuffer_texture1_d(
  target : UInt,
  attachment : UInt,
  textarget : UInt,
  texture : UInt,
  level : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, Int) -> Unit] = d_glFramebufferTexture1D
    .get()
    .unsafe_into()
  fp(target, attachment, textarget, texture, level)
}

///|
let d_glFramebufferTexture1DEXT : Dispatch = Dispatch::with_aliases(
  "glFramebufferTexture1DEXT",
  ["glFramebufferTexture1D"],
)

///|
pub fn gl_framebuffer_texture1_dext(
  target : UInt,
  attachment : UInt,
  textarget : UInt,
  texture : UInt,
  level : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, Int) -> Unit] = d_glFramebufferTexture1DEXT
    .get()
    .unsafe_into()
  fp(target, attachment, textarget, texture, level)
}

///|
let d_glFramebufferTexture2D : Dispatch = Dispatch::with_aliases(
  "glFramebufferTexture2D",
  ["glFramebufferTexture2DEXT"],
)

///|
pub fn gl_framebuffer_texture2_d(
  target : UInt,
  attachment : UInt,
  textarget : UInt,
  texture : UInt,
  level : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, Int) -> Unit] = d_glFramebufferTexture2D
    .get()
    .unsafe_into()
  fp(target, attachment, textarget, texture, level)
}

///|
let d_glFramebufferTexture2DEXT : Dispatch = Dispatch::with_aliases(
  "glFramebufferTexture2DEXT",
  ["glFramebufferTexture2D"],
)

///|
pub fn gl_framebuffer_texture2_dext(
  target : UInt,
  attachment : UInt,
  textarget : UInt,
  texture : UInt,
  level : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, Int) -> Unit] = d_glFramebufferTexture2DEXT
    .get()
    .unsafe_into()
  fp(target, attachment, textarget, texture, level)
}

///|
let d_glFramebufferTexture2DDownsampleIMG : Dispatch = Dispatch::new(
  "glFramebufferTexture2DDownsampleIMG",
)

///|
pub fn gl_framebuffer_texture2_d_downsample_img(
  target : UInt,
  attachment : UInt,
  textarget : UInt,
  texture : UInt,
  level : Int,
  xscale : Int,
  yscale : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, Int, Int, Int) -> Unit] = d_glFramebufferTexture2DDownsampleIMG
    .get()
    .unsafe_into()
  fp(target, attachment, textarget, texture, level, xscale, yscale)
}

///|
let d_glFramebufferTexture2DMultisampleEXT : Dispatch = Dispatch::new(
  "glFramebufferTexture2DMultisampleEXT",
)

///|
pub fn gl_framebuffer_texture2_d_multisample_ext(
  target : UInt,
  attachment : UInt,
  textarget : UInt,
  texture : UInt,
  level : Int,
  samples : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, Int, Int) -> Unit] = d_glFramebufferTexture2DMultisampleEXT
    .get()
    .unsafe_into()
  fp(target, attachment, textarget, texture, level, samples)
}

///|
let d_glFramebufferTexture2DMultisampleIMG : Dispatch = Dispatch::new(
  "glFramebufferTexture2DMultisampleIMG",
)

///|
pub fn gl_framebuffer_texture2_d_multisample_img(
  target : UInt,
  attachment : UInt,
  textarget : UInt,
  texture : UInt,
  level : Int,
  samples : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, Int, Int) -> Unit] = d_glFramebufferTexture2DMultisampleIMG
    .get()
    .unsafe_into()
  fp(target, attachment, textarget, texture, level, samples)
}

///|
let d_glFramebufferTexture2DOES : Dispatch = Dispatch::new(
  "glFramebufferTexture2DOES",
)

///|
pub fn gl_framebuffer_texture2_does(
  target : UInt,
  attachment : UInt,
  textarget : UInt,
  texture : UInt,
  level : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, Int) -> Unit] = d_glFramebufferTexture2DOES
    .get()
    .unsafe_into()
  fp(target, attachment, textarget, texture, level)
}

///|
let d_glFramebufferTexture3D : Dispatch = Dispatch::with_aliases(
  "glFramebufferTexture3D",
  ["glFramebufferTexture3DEXT"],
)

///|
pub fn gl_framebuffer_texture3_d(
  target : UInt,
  attachment : UInt,
  textarget : UInt,
  texture : UInt,
  level : Int,
  zoffset : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, Int, Int) -> Unit] = d_glFramebufferTexture3D
    .get()
    .unsafe_into()
  fp(target, attachment, textarget, texture, level, zoffset)
}

///|
let d_glFramebufferTexture3DEXT : Dispatch = Dispatch::with_aliases(
  "glFramebufferTexture3DEXT",
  ["glFramebufferTexture3D"],
)

///|
pub fn gl_framebuffer_texture3_dext(
  target : UInt,
  attachment : UInt,
  textarget : UInt,
  texture : UInt,
  level : Int,
  zoffset : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, Int, Int) -> Unit] = d_glFramebufferTexture3DEXT
    .get()
    .unsafe_into()
  fp(target, attachment, textarget, texture, level, zoffset)
}

///|
let d_glFramebufferTexture3DOES : Dispatch = Dispatch::new(
  "glFramebufferTexture3DOES",
)

///|
pub fn gl_framebuffer_texture3_does(
  target : UInt,
  attachment : UInt,
  textarget : UInt,
  texture : UInt,
  level : Int,
  zoffset : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, Int, Int) -> Unit] = d_glFramebufferTexture3DOES
    .get()
    .unsafe_into()
  fp(target, attachment, textarget, texture, level, zoffset)
}

///|
let d_glFramebufferTextureARB : Dispatch = Dispatch::with_aliases(
  "glFramebufferTextureARB",
  ["glFramebufferTexture", "glFramebufferTextureEXT", "glFramebufferTextureOES"],
)

///|
pub fn gl_framebuffer_texture_arb(
  target : UInt,
  attachment : UInt,
  texture : UInt,
  level : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int) -> Unit] = d_glFramebufferTextureARB
    .get()
    .unsafe_into()
  fp(target, attachment, texture, level)
}

///|
let d_glFramebufferTextureEXT : Dispatch = Dispatch::with_aliases(
  "glFramebufferTextureEXT",
  ["glFramebufferTexture", "glFramebufferTextureARB", "glFramebufferTextureOES"],
)

///|
pub fn gl_framebuffer_texture_ext(
  target : UInt,
  attachment : UInt,
  texture : UInt,
  level : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int) -> Unit] = d_glFramebufferTextureEXT
    .get()
    .unsafe_into()
  fp(target, attachment, texture, level)
}

///|
let d_glFramebufferTextureFaceARB : Dispatch = Dispatch::with_aliases(
  "glFramebufferTextureFaceARB",
  ["glFramebufferTextureFaceEXT"],
)

///|
pub fn gl_framebuffer_texture_face_arb(
  target : UInt,
  attachment : UInt,
  texture : UInt,
  level : Int,
  face : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int, UInt) -> Unit] = d_glFramebufferTextureFaceARB
    .get()
    .unsafe_into()
  fp(target, attachment, texture, level, face)
}

///|
let d_glFramebufferTextureFaceEXT : Dispatch = Dispatch::with_aliases(
  "glFramebufferTextureFaceEXT",
  ["glFramebufferTextureFaceARB"],
)

///|
pub fn gl_framebuffer_texture_face_ext(
  target : UInt,
  attachment : UInt,
  texture : UInt,
  level : Int,
  face : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int, UInt) -> Unit] = d_glFramebufferTextureFaceEXT
    .get()
    .unsafe_into()
  fp(target, attachment, texture, level, face)
}

///|
let d_glFramebufferTextureLayer : Dispatch = Dispatch::with_aliases(
  "glFramebufferTextureLayer",
  ["glFramebufferTextureLayerARB", "glFramebufferTextureLayerEXT"],
)

///|
pub fn gl_framebuffer_texture_layer(
  target : UInt,
  attachment : UInt,
  texture : UInt,
  level : Int,
  layer : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int, Int) -> Unit] = d_glFramebufferTextureLayer
    .get()
    .unsafe_into()
  fp(target, attachment, texture, level, layer)
}

///|
let d_glFramebufferTextureLayerARB : Dispatch = Dispatch::with_aliases(
  "glFramebufferTextureLayerARB",
  ["glFramebufferTextureLayer", "glFramebufferTextureLayerEXT"],
)

///|
pub fn gl_framebuffer_texture_layer_arb(
  target : UInt,
  attachment : UInt,
  texture : UInt,
  level : Int,
  layer : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int, Int) -> Unit] = d_glFramebufferTextureLayerARB
    .get()
    .unsafe_into()
  fp(target, attachment, texture, level, layer)
}

///|
let d_glFramebufferTextureLayerEXT : Dispatch = Dispatch::with_aliases(
  "glFramebufferTextureLayerEXT",
  ["glFramebufferTextureLayer", "glFramebufferTextureLayerARB"],
)

///|
pub fn gl_framebuffer_texture_layer_ext(
  target : UInt,
  attachment : UInt,
  texture : UInt,
  level : Int,
  layer : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int, Int) -> Unit] = d_glFramebufferTextureLayerEXT
    .get()
    .unsafe_into()
  fp(target, attachment, texture, level, layer)
}

///|
let d_glFramebufferTextureLayerDownsampleIMG : Dispatch = Dispatch::new(
  "glFramebufferTextureLayerDownsampleIMG",
)

///|
pub fn gl_framebuffer_texture_layer_downsample_img(
  target : UInt,
  attachment : UInt,
  texture : UInt,
  level : Int,
  layer : Int,
  xscale : Int,
  yscale : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int, Int, Int, Int) -> Unit] = d_glFramebufferTextureLayerDownsampleIMG
    .get()
    .unsafe_into()
  fp(target, attachment, texture, level, layer, xscale, yscale)
}

///|
let d_glFramebufferTextureMultisampleMultiviewOVR : Dispatch = Dispatch::new(
  "glFramebufferTextureMultisampleMultiviewOVR",
)

///|
pub fn gl_framebuffer_texture_multisample_multiview_ovr(
  target : UInt,
  attachment : UInt,
  texture : UInt,
  level : Int,
  samples : Int,
  baseViewIndex : Int,
  numViews : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int, Int, Int, Int) -> Unit] = d_glFramebufferTextureMultisampleMultiviewOVR
    .get()
    .unsafe_into()
  fp(target, attachment, texture, level, samples, baseViewIndex, numViews)
}

///|
let d_glFramebufferTextureMultiviewOVR : Dispatch = Dispatch::new(
  "glFramebufferTextureMultiviewOVR",
)

///|
pub fn gl_framebuffer_texture_multiview_ovr(
  target : UInt,
  attachment : UInt,
  texture : UInt,
  level : Int,
  baseViewIndex : Int,
  numViews : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int, Int, Int) -> Unit] = d_glFramebufferTextureMultiviewOVR
    .get()
    .unsafe_into()
  fp(target, attachment, texture, level, baseViewIndex, numViews)
}

///|
let d_glFramebufferTextureOES : Dispatch = Dispatch::with_aliases(
  "glFramebufferTextureOES",
  ["glFramebufferTexture", "glFramebufferTextureARB", "glFramebufferTextureEXT"],
)

///|
pub fn gl_framebuffer_texture_oes(
  target : UInt,
  attachment : UInt,
  texture : UInt,
  level : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int) -> Unit] = d_glFramebufferTextureOES
    .get()
    .unsafe_into()
  fp(target, attachment, texture, level)
}

///|
let d_glFreeObjectBufferATI : Dispatch = Dispatch::new("glFreeObjectBufferATI")

///|
pub fn gl_free_object_buffer_ati(buffer : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glFreeObjectBufferATI.get().unsafe_into()
  fp(buffer)
}

///|
let d_glFrontFace : Dispatch = Dispatch::new("glFrontFace")

///|
pub fn gl_front_face(mode : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glFrontFace.get().unsafe_into()
  fp(mode)
}

///|
let d_glFrustum : Dispatch = Dispatch::new("glFrustum")

///|
pub fn gl_frustum(
  left : Double,
  right : Double,
  bottom : Double,
  top : Double,
  zNear : Double,
  zFar : Double,
) -> Unit {
  let fp : FuncRef[(Double, Double, Double, Double, Double, Double) -> Unit] = d_glFrustum
    .get()
    .unsafe_into()
  fp(left, right, bottom, top, zNear, zFar)
}

///|
let d_glFrustumf : Dispatch = Dispatch::new("glFrustumf")

///|
pub fn gl_frustumf(
  l : Float,
  r : Float,
  b : Float,
  t : Float,
  n : Float,
  f : Float,
) -> Unit {
  let fp : FuncRef[(Float, Float, Float, Float, Float, Float) -> Unit] = d_glFrustumf
    .get()
    .unsafe_into()
  fp(l, r, b, t, n, f)
}

///|
let d_glFrustumfOES : Dispatch = Dispatch::new("glFrustumfOES")

///|
pub fn gl_frustumf_oes(
  l : Float,
  r : Float,
  b : Float,
  t : Float,
  n : Float,
  f : Float,
) -> Unit {
  let fp : FuncRef[(Float, Float, Float, Float, Float, Float) -> Unit] = d_glFrustumfOES
    .get()
    .unsafe_into()
  fp(l, r, b, t, n, f)
}

///|
let d_glFrustumx : Dispatch = Dispatch::new("glFrustumx")

///|
pub fn gl_frustumx(
  l : Int,
  r : Int,
  b : Int,
  t : Int,
  n : Int,
  f : Int,
) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int, Int, Int) -> Unit] = d_glFrustumx
    .get()
    .unsafe_into()
  fp(l, r, b, t, n, f)
}

///|
let d_glFrustumxOES : Dispatch = Dispatch::new("glFrustumxOES")

///|
pub fn gl_frustumx_oes(
  l : Int,
  r : Int,
  b : Int,
  t : Int,
  n : Int,
  f : Int,
) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int, Int, Int) -> Unit] = d_glFrustumxOES
    .get()
    .unsafe_into()
  fp(l, r, b, t, n, f)
}

///|
let d_glGenAsyncMarkersSGIX : Dispatch = Dispatch::new("glGenAsyncMarkersSGIX")

///|
pub fn gl_gen_async_markers_sgix(range : Int) -> UInt {
  let fp : FuncRef[(Int) -> UInt] = d_glGenAsyncMarkersSGIX.get().unsafe_into()
  fp(range)
}

///|
let d_glGenBuffers : Dispatch = Dispatch::with_aliases("glGenBuffers", [
  "glGenBuffersARB",
])

///|
pub fn gl_gen_buffers(n : Int, buffers : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glGenBuffers
    .get()
    .unsafe_into()
  @pointer.borrow_array(buffers, fn(buffers_p) { fp(n, buffers_p) })
}

///|
let d_glGenBuffersARB : Dispatch = Dispatch::with_aliases("glGenBuffersARB", [
  "glGenBuffers",
])

///|
pub fn gl_gen_buffers_arb(n : Int, buffers : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glGenBuffersARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(buffers, fn(buffers_p) { fp(n, buffers_p) })
}

///|
let d_glGenFencesAPPLE : Dispatch = Dispatch::new("glGenFencesAPPLE")

///|
pub fn gl_gen_fences_apple(n : Int, fences : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glGenFencesAPPLE
    .get()
    .unsafe_into()
  @pointer.borrow_array(fences, fn(fences_p) { fp(n, fences_p) })
}

///|
let d_glGenFencesNV : Dispatch = Dispatch::new("glGenFencesNV")

///|
pub fn gl_gen_fences_nv(n : Int, fences : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glGenFencesNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(fences, fn(fences_p) { fp(n, fences_p) })
}

///|
let d_glGenFragmentShadersATI : Dispatch = Dispatch::new(
  "glGenFragmentShadersATI",
)

///|
pub fn gl_gen_fragment_shaders_ati(range : UInt) -> UInt {
  let fp : FuncRef[(UInt) -> UInt] = d_glGenFragmentShadersATI
    .get()
    .unsafe_into()
  fp(range)
}

///|
let d_glGenFramebuffers : Dispatch = Dispatch::with_aliases(
  "glGenFramebuffers",
  ["glGenFramebuffersEXT"],
)

///|
pub fn gl_gen_framebuffers(n : Int, framebuffers : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glGenFramebuffers
    .get()
    .unsafe_into()
  @pointer.borrow_array(framebuffers, fn(framebuffers_p) {
    fp(n, framebuffers_p)
  })
}

///|
let d_glGenFramebuffersEXT : Dispatch = Dispatch::with_aliases(
  "glGenFramebuffersEXT",
  ["glGenFramebuffers"],
)

///|
pub fn gl_gen_framebuffers_ext(
  n : Int,
  framebuffers : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glGenFramebuffersEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(framebuffers, fn(framebuffers_p) {
    fp(n, framebuffers_p)
  })
}

///|
let d_glGenFramebuffersOES : Dispatch = Dispatch::new("glGenFramebuffersOES")

///|
pub fn gl_gen_framebuffers_oes(
  n : Int,
  framebuffers : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glGenFramebuffersOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(framebuffers, fn(framebuffers_p) {
    fp(n, framebuffers_p)
  })
}

///|
let d_glGenLists : Dispatch = Dispatch::new("glGenLists")

///|
pub fn gl_gen_lists(range : Int) -> UInt {
  let fp : FuncRef[(Int) -> UInt] = d_glGenLists.get().unsafe_into()
  fp(range)
}

///|
let d_glGenNamesAMD : Dispatch = Dispatch::new("glGenNamesAMD")

///|
pub fn gl_gen_names_amd(
  identifier : UInt,
  num : UInt,
  names : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[UInt]) -> Unit] = d_glGenNamesAMD
    .get()
    .unsafe_into()
  @pointer.borrow_array(names, fn(names_p) { fp(identifier, num, names_p) })
}

///|
let d_glGenOcclusionQueriesNV : Dispatch = Dispatch::new(
  "glGenOcclusionQueriesNV",
)

///|
pub fn gl_gen_occlusion_queries_nv(n : Int, ids : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glGenOcclusionQueriesNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(ids, fn(ids_p) { fp(n, ids_p) })
}

///|
let d_glGenPathsNV : Dispatch = Dispatch::new("glGenPathsNV")

///|
pub fn gl_gen_paths_nv(range : Int) -> UInt {
  let fp : FuncRef[(Int) -> UInt] = d_glGenPathsNV.get().unsafe_into()
  fp(range)
}

///|
let d_glGenPerfMonitorsAMD : Dispatch = Dispatch::new("glGenPerfMonitorsAMD")

///|
pub fn gl_gen_perf_monitors_amd(n : Int, monitors : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glGenPerfMonitorsAMD
    .get()
    .unsafe_into()
  @pointer.borrow_array(monitors, fn(monitors_p) { fp(n, monitors_p) })
}

///|
let d_glGenProgramPipelines : Dispatch = Dispatch::new("glGenProgramPipelines")

///|
pub fn gl_gen_program_pipelines(n : Int, pipelines : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glGenProgramPipelines
    .get()
    .unsafe_into()
  @pointer.borrow_array(pipelines, fn(pipelines_p) { fp(n, pipelines_p) })
}

///|
let d_glGenProgramPipelinesEXT : Dispatch = Dispatch::new(
  "glGenProgramPipelinesEXT",
)

///|
pub fn gl_gen_program_pipelines_ext(
  n : Int,
  pipelines : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glGenProgramPipelinesEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(pipelines, fn(pipelines_p) { fp(n, pipelines_p) })
}

///|
let d_glGenProgramsARB : Dispatch = Dispatch::with_aliases("glGenProgramsARB", [
  "glGenProgramsNV",
])

///|
pub fn gl_gen_programs_arb(n : Int, programs : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glGenProgramsARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(programs, fn(programs_p) { fp(n, programs_p) })
}

///|
let d_glGenProgramsNV : Dispatch = Dispatch::with_aliases("glGenProgramsNV", [
  "glGenProgramsARB",
])

///|
pub fn gl_gen_programs_nv(n : Int, programs : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glGenProgramsNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(programs, fn(programs_p) { fp(n, programs_p) })
}

///|
let d_glGenQueries : Dispatch = Dispatch::with_aliases("glGenQueries", [
  "glGenQueriesARB",
])

///|
pub fn gl_gen_queries(n : Int, ids : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glGenQueries
    .get()
    .unsafe_into()
  @pointer.borrow_array(ids, fn(ids_p) { fp(n, ids_p) })
}

///|
let d_glGenQueriesARB : Dispatch = Dispatch::with_aliases("glGenQueriesARB", [
  "glGenQueries",
])

///|
pub fn gl_gen_queries_arb(n : Int, ids : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glGenQueriesARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(ids, fn(ids_p) { fp(n, ids_p) })
}

///|
let d_glGenQueriesEXT : Dispatch = Dispatch::new("glGenQueriesEXT")

///|
pub fn gl_gen_queries_ext(n : Int, ids : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glGenQueriesEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(ids, fn(ids_p) { fp(n, ids_p) })
}

///|
let d_glGenQueryResourceTagNV : Dispatch = Dispatch::new(
  "glGenQueryResourceTagNV",
)

///|
pub fn gl_gen_query_resource_tag_nv(n : Int, tagIds : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[Int]) -> Unit] = d_glGenQueryResourceTagNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(tagIds, fn(tagIds_p) { fp(n, tagIds_p) })
}

///|
let d_glGenRenderbuffers : Dispatch = Dispatch::with_aliases(
  "glGenRenderbuffers",
  ["glGenRenderbuffersEXT"],
)

///|
pub fn gl_gen_renderbuffers(n : Int, renderbuffers : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glGenRenderbuffers
    .get()
    .unsafe_into()
  @pointer.borrow_array(renderbuffers, fn(renderbuffers_p) {
    fp(n, renderbuffers_p)
  })
}

///|
let d_glGenRenderbuffersEXT : Dispatch = Dispatch::with_aliases(
  "glGenRenderbuffersEXT",
  ["glGenRenderbuffers"],
)

///|
pub fn gl_gen_renderbuffers_ext(
  n : Int,
  renderbuffers : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glGenRenderbuffersEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(renderbuffers, fn(renderbuffers_p) {
    fp(n, renderbuffers_p)
  })
}

///|
let d_glGenRenderbuffersOES : Dispatch = Dispatch::new("glGenRenderbuffersOES")

///|
pub fn gl_gen_renderbuffers_oes(
  n : Int,
  renderbuffers : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glGenRenderbuffersOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(renderbuffers, fn(renderbuffers_p) {
    fp(n, renderbuffers_p)
  })
}

///|
let d_glGenSamplers : Dispatch = Dispatch::new("glGenSamplers")

///|
pub fn gl_gen_samplers(count : Int, samplers : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glGenSamplers
    .get()
    .unsafe_into()
  @pointer.borrow_array(samplers, fn(samplers_p) { fp(count, samplers_p) })
}

///|
let d_glGenSemaphoresEXT : Dispatch = Dispatch::new("glGenSemaphoresEXT")

///|
pub fn gl_gen_semaphores_ext(n : Int, semaphores : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glGenSemaphoresEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(semaphores, fn(semaphores_p) { fp(n, semaphores_p) })
}

///|
let d_glGenSymbolsEXT : Dispatch = Dispatch::new("glGenSymbolsEXT")

///|
pub fn gl_gen_symbols_ext(
  datatype : UInt,
  storagetype : UInt,
  range : UInt,
  components : UInt,
) -> UInt {
  let fp : FuncRef[(UInt, UInt, UInt, UInt) -> UInt] = d_glGenSymbolsEXT
    .get()
    .unsafe_into()
  fp(datatype, storagetype, range, components)
}

///|
let d_glGenTextures : Dispatch = Dispatch::new("glGenTextures")

///|
pub fn gl_gen_textures(n : Int, textures : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glGenTextures
    .get()
    .unsafe_into()
  @pointer.borrow_array(textures, fn(textures_p) { fp(n, textures_p) })
}

///|
let d_glGenTexturesEXT : Dispatch = Dispatch::new("glGenTexturesEXT")

///|
pub fn gl_gen_textures_ext(n : Int, textures : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glGenTexturesEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(textures, fn(textures_p) { fp(n, textures_p) })
}

///|
let d_glGenTransformFeedbacks : Dispatch = Dispatch::with_aliases(
  "glGenTransformFeedbacks",
  ["glGenTransformFeedbacksNV"],
)

///|
pub fn gl_gen_transform_feedbacks(n : Int, ids : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glGenTransformFeedbacks
    .get()
    .unsafe_into()
  @pointer.borrow_array(ids, fn(ids_p) { fp(n, ids_p) })
}

///|
let d_glGenTransformFeedbacksNV : Dispatch = Dispatch::with_aliases(
  "glGenTransformFeedbacksNV",
  ["glGenTransformFeedbacks"],
)

///|
pub fn gl_gen_transform_feedbacks_nv(n : Int, ids : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glGenTransformFeedbacksNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(ids, fn(ids_p) { fp(n, ids_p) })
}

///|
let d_glGenVertexArrays : Dispatch = Dispatch::with_aliases(
  "glGenVertexArrays",
  ["glGenVertexArraysAPPLE", "glGenVertexArraysOES"],
)

///|
pub fn gl_gen_vertex_arrays(n : Int, arrays : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glGenVertexArrays
    .get()
    .unsafe_into()
  @pointer.borrow_array(arrays, fn(arrays_p) { fp(n, arrays_p) })
}

///|
let d_glGenVertexArraysAPPLE : Dispatch = Dispatch::with_aliases(
  "glGenVertexArraysAPPLE",
  ["glGenVertexArrays", "glGenVertexArraysOES"],
)

///|
pub fn gl_gen_vertex_arrays_apple(n : Int, arrays : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glGenVertexArraysAPPLE
    .get()
    .unsafe_into()
  @pointer.borrow_array(arrays, fn(arrays_p) { fp(n, arrays_p) })
}

///|
let d_glGenVertexArraysOES : Dispatch = Dispatch::with_aliases(
  "glGenVertexArraysOES",
  ["glGenVertexArrays", "glGenVertexArraysAPPLE"],
)

///|
pub fn gl_gen_vertex_arrays_oes(n : Int, arrays : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glGenVertexArraysOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(arrays, fn(arrays_p) { fp(n, arrays_p) })
}

///|
let d_glGenVertexShadersEXT : Dispatch = Dispatch::new("glGenVertexShadersEXT")

///|
pub fn gl_gen_vertex_shaders_ext(range : UInt) -> UInt {
  let fp : FuncRef[(UInt) -> UInt] = d_glGenVertexShadersEXT.get().unsafe_into()
  fp(range)
}

///|
let d_glGenerateMipmap : Dispatch = Dispatch::with_aliases("glGenerateMipmap", [
  "glGenerateMipmapEXT",
])

///|
pub fn gl_generate_mipmap(target : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glGenerateMipmap.get().unsafe_into()
  fp(target)
}

///|
let d_glGenerateMipmapEXT : Dispatch = Dispatch::with_aliases(
  "glGenerateMipmapEXT",
  ["glGenerateMipmap"],
)

///|
pub fn gl_generate_mipmap_ext(target : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glGenerateMipmapEXT.get().unsafe_into()
  fp(target)
}

///|
let d_glGenerateMipmapOES : Dispatch = Dispatch::new("glGenerateMipmapOES")

///|
pub fn gl_generate_mipmap_oes(target : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glGenerateMipmapOES.get().unsafe_into()
  fp(target)
}

///|
let d_glGenerateMultiTexMipmapEXT : Dispatch = Dispatch::new(
  "glGenerateMultiTexMipmapEXT",
)

///|
pub fn gl_generate_multi_tex_mipmap_ext(texunit : UInt, target : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glGenerateMultiTexMipmapEXT
    .get()
    .unsafe_into()
  fp(texunit, target)
}

///|
let d_glGenerateTextureMipmap : Dispatch = Dispatch::new(
  "glGenerateTextureMipmap",
)

///|
pub fn gl_generate_texture_mipmap(texture : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glGenerateTextureMipmap
    .get()
    .unsafe_into()
  fp(texture)
}

///|
let d_glGenerateTextureMipmapEXT : Dispatch = Dispatch::new(
  "glGenerateTextureMipmapEXT",
)

///|
pub fn gl_generate_texture_mipmap_ext(texture : UInt, target : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glGenerateTextureMipmapEXT
    .get()
    .unsafe_into()
  fp(texture, target)
}

///|
let d_glGetActiveAtomicCounterBufferiv : Dispatch = Dispatch::new(
  "glGetActiveAtomicCounterBufferiv",
)

///|
pub fn gl_get_active_atomic_counter_bufferiv(
  program : UInt,
  bufferIndex : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetActiveAtomicCounterBufferiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(program, bufferIndex, pname, params_p)
  })
}

///|
let d_glGetActiveAttrib : Dispatch = Dispatch::with_aliases(
  "glGetActiveAttrib",
  ["glGetActiveAttribARB"],
)

///|
pub fn gl_get_active_attrib(
  program : UInt,
  index : UInt,
  bufSize : Int,
  length : FixedArray[Int],
  size : FixedArray[Int],
  type_ : FixedArray[UInt],
  name : Bytes,
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      UInt,
      Int,
      @pointer.Pointer[Int],
      @pointer.Pointer[Int],
      @pointer.Pointer[UInt],
      @pointer.Pointer[Byte],
    ) -> Unit,
  ] = d_glGetActiveAttrib.get().unsafe_into()
  @pointer.borrow_array(length, fn(length_p) {
    @pointer.borrow_array(size, fn(size_p) {
      @pointer.borrow_array(type_, fn(type__p) {
        @pointer.borrow_bytes(name, fn(name_p) {
          fp(program, index, bufSize, length_p, size_p, type__p, name_p)
        })
      })
    })
  })
}

///|
let d_glGetActiveSubroutineName : Dispatch = Dispatch::new(
  "glGetActiveSubroutineName",
)

///|
pub fn gl_get_active_subroutine_name(
  program : UInt,
  shadertype : UInt,
  index : UInt,
  bufSize : Int,
  length : FixedArray[Int],
  name : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, UInt, Int, @pointer.Pointer[Int], @pointer.Pointer[Byte]) -> Unit,
  ] = d_glGetActiveSubroutineName.get().unsafe_into()
  @pointer.borrow_array(length, fn(length_p) {
    @pointer.borrow_bytes(name, fn(name_p) {
      fp(program, shadertype, index, bufSize, length_p, name_p)
    })
  })
}

///|
let d_glGetActiveSubroutineUniformName : Dispatch = Dispatch::new(
  "glGetActiveSubroutineUniformName",
)

///|
pub fn gl_get_active_subroutine_uniform_name(
  program : UInt,
  shadertype : UInt,
  index : UInt,
  bufSize : Int,
  length : FixedArray[Int],
  name : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, UInt, Int, @pointer.Pointer[Int], @pointer.Pointer[Byte]) -> Unit,
  ] = d_glGetActiveSubroutineUniformName.get().unsafe_into()
  @pointer.borrow_array(length, fn(length_p) {
    @pointer.borrow_bytes(name, fn(name_p) {
      fp(program, shadertype, index, bufSize, length_p, name_p)
    })
  })
}

///|
let d_glGetActiveSubroutineUniformiv : Dispatch = Dispatch::new(
  "glGetActiveSubroutineUniformiv",
)

///|
pub fn gl_get_active_subroutine_uniformiv(
  program : UInt,
  shadertype : UInt,
  index : UInt,
  pname : UInt,
  values : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetActiveSubroutineUniformiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(values, fn(values_p) {
    fp(program, shadertype, index, pname, values_p)
  })
}

///|
let d_glGetActiveUniform : Dispatch = Dispatch::with_aliases(
  "glGetActiveUniform",
  ["glGetActiveUniformARB"],
)

///|
pub fn gl_get_active_uniform(
  program : UInt,
  index : UInt,
  bufSize : Int,
  length : FixedArray[Int],
  size : FixedArray[Int],
  type_ : FixedArray[UInt],
  name : Bytes,
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      UInt,
      Int,
      @pointer.Pointer[Int],
      @pointer.Pointer[Int],
      @pointer.Pointer[UInt],
      @pointer.Pointer[Byte],
    ) -> Unit,
  ] = d_glGetActiveUniform.get().unsafe_into()
  @pointer.borrow_array(length, fn(length_p) {
    @pointer.borrow_array(size, fn(size_p) {
      @pointer.borrow_array(type_, fn(type__p) {
        @pointer.borrow_bytes(name, fn(name_p) {
          fp(program, index, bufSize, length_p, size_p, type__p, name_p)
        })
      })
    })
  })
}

///|
let d_glGetActiveUniformBlockName : Dispatch = Dispatch::new(
  "glGetActiveUniformBlockName",
)

///|
pub fn gl_get_active_uniform_block_name(
  program : UInt,
  uniformBlockIndex : UInt,
  bufSize : Int,
  length : FixedArray[Int],
  uniformBlockName : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, Int, @pointer.Pointer[Int], @pointer.Pointer[Byte]) -> Unit,
  ] = d_glGetActiveUniformBlockName.get().unsafe_into()
  @pointer.borrow_array(length, fn(length_p) {
    @pointer.borrow_bytes(uniformBlockName, fn(uniformBlockName_p) {
      fp(program, uniformBlockIndex, bufSize, length_p, uniformBlockName_p)
    })
  })
}

///|
let d_glGetActiveUniformBlockiv : Dispatch = Dispatch::new(
  "glGetActiveUniformBlockiv",
)

///|
pub fn gl_get_active_uniform_blockiv(
  program : UInt,
  uniformBlockIndex : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetActiveUniformBlockiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(program, uniformBlockIndex, pname, params_p)
  })
}

///|
let d_glGetActiveUniformName : Dispatch = Dispatch::new(
  "glGetActiveUniformName",
)

///|
pub fn gl_get_active_uniform_name(
  program : UInt,
  uniformIndex : UInt,
  bufSize : Int,
  length : FixedArray[Int],
  uniformName : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, Int, @pointer.Pointer[Int], @pointer.Pointer[Byte]) -> Unit,
  ] = d_glGetActiveUniformName.get().unsafe_into()
  @pointer.borrow_array(length, fn(length_p) {
    @pointer.borrow_bytes(uniformName, fn(uniformName_p) {
      fp(program, uniformIndex, bufSize, length_p, uniformName_p)
    })
  })
}

///|
let d_glGetActiveUniformsiv : Dispatch = Dispatch::new("glGetActiveUniformsiv")

///|
pub fn gl_get_active_uniformsiv(
  program : UInt,
  uniformCount : Int,
  uniformIndices : FixedArray[UInt],
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, @pointer.Pointer[UInt], UInt, @pointer.Pointer[Int]) -> Unit,
  ] = d_glGetActiveUniformsiv.get().unsafe_into()
  @pointer.borrow_array(uniformIndices, fn(uniformIndices_p) {
    @pointer.borrow_array(params, fn(params_p) {
      fp(program, uniformCount, uniformIndices_p, pname, params_p)
    })
  })
}

///|
let d_glGetActiveVaryingNV : Dispatch = Dispatch::new("glGetActiveVaryingNV")

///|
pub fn gl_get_active_varying_nv(
  program : UInt,
  index : UInt,
  bufSize : Int,
  length : FixedArray[Int],
  size : FixedArray[Int],
  type_ : FixedArray[UInt],
  name : Bytes,
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      UInt,
      Int,
      @pointer.Pointer[Int],
      @pointer.Pointer[Int],
      @pointer.Pointer[UInt],
      @pointer.Pointer[Byte],
    ) -> Unit,
  ] = d_glGetActiveVaryingNV.get().unsafe_into()
  @pointer.borrow_array(length, fn(length_p) {
    @pointer.borrow_array(size, fn(size_p) {
      @pointer.borrow_array(type_, fn(type__p) {
        @pointer.borrow_bytes(name, fn(name_p) {
          fp(program, index, bufSize, length_p, size_p, type__p, name_p)
        })
      })
    })
  })
}

///|
let d_glGetArrayObjectfvATI : Dispatch = Dispatch::new("glGetArrayObjectfvATI")

///|
pub fn gl_get_array_objectfv_ati(
  array : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetArrayObjectfvATI
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(array, pname, params_p) })
}

///|
let d_glGetArrayObjectivATI : Dispatch = Dispatch::new("glGetArrayObjectivATI")

///|
pub fn gl_get_array_objectiv_ati(
  array : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetArrayObjectivATI
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(array, pname, params_p) })
}

///|
let d_glGetAttachedShaders : Dispatch = Dispatch::new("glGetAttachedShaders")

///|
pub fn gl_get_attached_shaders(
  program : UInt,
  maxCount : Int,
  count : FixedArray[Int],
  shaders : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, @pointer.Pointer[Int], @pointer.Pointer[UInt]) -> Unit,
  ] = d_glGetAttachedShaders.get().unsafe_into()
  @pointer.borrow_array(count, fn(count_p) {
    @pointer.borrow_array(shaders, fn(shaders_p) {
      fp(program, maxCount, count_p, shaders_p)
    })
  })
}

///|
let d_glGetAttribLocation : Dispatch = Dispatch::with_aliases(
  "glGetAttribLocation",
  ["glGetAttribLocationARB"],
)

///|
pub fn gl_get_attrib_location(program : UInt, name : Bytes) -> Int {
  let fp : FuncRef[(UInt, @pointer.Pointer[Byte]) -> Int] = d_glGetAttribLocation
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(name, fn(name_p) { fp(program, name_p) })
}

///|
let d_glGetBooleanIndexedvEXT : Dispatch = Dispatch::with_aliases(
  "glGetBooleanIndexedvEXT",
  ["glGetBooleani_v"],
)

///|
pub fn gl_get_boolean_indexedv_ext(
  target : UInt,
  index : UInt,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Byte]) -> Unit] = d_glGetBooleanIndexedvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) { fp(target, index, data_p) })
}

///|
let d_glGetBooleani_v : Dispatch = Dispatch::with_aliases("glGetBooleani_v", [
  "glGetBooleanIndexedvEXT",
])

///|
pub fn gl_get_booleani_v(target : UInt, index : UInt, data : Bytes) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Byte]) -> Unit] = d_glGetBooleani_v
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) { fp(target, index, data_p) })
}

///|
let d_glGetBooleanv : Dispatch = Dispatch::new("glGetBooleanv")

///|
pub fn gl_get_booleanv(pname : UInt, data : Bytes) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Byte]) -> Unit] = d_glGetBooleanv
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) { fp(pname, data_p) })
}

///|
let d_glGetBufferParameteri64v : Dispatch = Dispatch::new(
  "glGetBufferParameteri64v",
)

///|
pub fn gl_get_buffer_parameteri64v(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int64],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int64]) -> Unit] = d_glGetBufferParameteri64v
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetBufferParameteriv : Dispatch = Dispatch::with_aliases(
  "glGetBufferParameteriv",
  ["glGetBufferParameterivARB"],
)

///|
pub fn gl_get_buffer_parameteriv(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetBufferParameteriv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetBufferParameterivARB : Dispatch = Dispatch::with_aliases(
  "glGetBufferParameterivARB",
  ["glGetBufferParameteriv"],
)

///|
pub fn gl_get_buffer_parameteriv_arb(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetBufferParameterivARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetBufferParameterui64vNV : Dispatch = Dispatch::new(
  "glGetBufferParameterui64vNV",
)

///|
pub fn gl_get_buffer_parameterui64v_nv(
  target : UInt,
  pname : UInt,
  params : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[UInt64]) -> Unit] = d_glGetBufferParameterui64vNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetBufferSubData : Dispatch = Dispatch::with_aliases(
  "glGetBufferSubData",
  ["glGetBufferSubDataARB"],
)

///|
pub fn gl_get_buffer_sub_data(
  target : UInt,
  offset : Int64,
  size : Int64,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, Int64, Int64, @pointer.Pointer[Byte]) -> Unit] = d_glGetBufferSubData
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) { fp(target, offset, size, data_p) })
}

///|
let d_glGetBufferSubDataARB : Dispatch = Dispatch::with_aliases(
  "glGetBufferSubDataARB",
  ["glGetBufferSubData"],
)

///|
pub fn gl_get_buffer_sub_data_arb(
  target : UInt,
  offset : Int64,
  size : Int64,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, Int64, Int64, @pointer.Pointer[Byte]) -> Unit] = d_glGetBufferSubDataARB
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) { fp(target, offset, size, data_p) })
}

///|
let d_glGetClipPlane : Dispatch = Dispatch::new("glGetClipPlane")

///|
pub fn gl_get_clip_plane(plane : UInt, equation : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Double]) -> Unit] = d_glGetClipPlane
    .get()
    .unsafe_into()
  @pointer.borrow_array(equation, fn(equation_p) { fp(plane, equation_p) })
}

///|
let d_glGetClipPlanef : Dispatch = Dispatch::new("glGetClipPlanef")

///|
pub fn gl_get_clip_planef(plane : UInt, equation : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetClipPlanef
    .get()
    .unsafe_into()
  @pointer.borrow_array(equation, fn(equation_p) { fp(plane, equation_p) })
}

///|
let d_glGetClipPlanefOES : Dispatch = Dispatch::new("glGetClipPlanefOES")

///|
pub fn gl_get_clip_planef_oes(
  plane : UInt,
  equation : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetClipPlanefOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(equation, fn(equation_p) { fp(plane, equation_p) })
}

///|
let d_glGetClipPlanex : Dispatch = Dispatch::new("glGetClipPlanex")

///|
pub fn gl_get_clip_planex(plane : UInt, equation : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetClipPlanex
    .get()
    .unsafe_into()
  @pointer.borrow_array(equation, fn(equation_p) { fp(plane, equation_p) })
}

///|
let d_glGetClipPlanexOES : Dispatch = Dispatch::new("glGetClipPlanexOES")

///|
pub fn gl_get_clip_planex_oes(plane : UInt, equation : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetClipPlanexOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(equation, fn(equation_p) { fp(plane, equation_p) })
}

///|
let d_glGetColorTable : Dispatch = Dispatch::with_aliases("glGetColorTable", [
  "glGetColorTableEXT",
])

///|
pub fn gl_get_color_table(
  target : UInt,
  format : UInt,
  type_ : UInt,
  table : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Byte]) -> Unit] = d_glGetColorTable
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(table, fn(table_p) {
    fp(target, format, type_, table_p)
  })
}

///|
let d_glGetColorTableEXT : Dispatch = Dispatch::with_aliases(
  "glGetColorTableEXT",
  ["glGetColorTable"],
)

///|
pub fn gl_get_color_table_ext(
  target : UInt,
  format : UInt,
  type_ : UInt,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Byte]) -> Unit] = d_glGetColorTableEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) { fp(target, format, type_, data_p) })
}

///|
let d_glGetColorTableParameterfv : Dispatch = Dispatch::with_aliases(
  "glGetColorTableParameterfv",
  ["glGetColorTableParameterfvEXT"],
)

///|
pub fn gl_get_color_table_parameterfv(
  target : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetColorTableParameterfv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetColorTableParameterfvEXT : Dispatch = Dispatch::with_aliases(
  "glGetColorTableParameterfvEXT",
  ["glGetColorTableParameterfv"],
)

///|
pub fn gl_get_color_table_parameterfv_ext(
  target : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetColorTableParameterfvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetColorTableParameterfvSGI : Dispatch = Dispatch::new(
  "glGetColorTableParameterfvSGI",
)

///|
pub fn gl_get_color_table_parameterfv_sgi(
  target : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetColorTableParameterfvSGI
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetColorTableParameteriv : Dispatch = Dispatch::with_aliases(
  "glGetColorTableParameteriv",
  ["glGetColorTableParameterivEXT"],
)

///|
pub fn gl_get_color_table_parameteriv(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetColorTableParameteriv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetColorTableParameterivEXT : Dispatch = Dispatch::with_aliases(
  "glGetColorTableParameterivEXT",
  ["glGetColorTableParameteriv"],
)

///|
pub fn gl_get_color_table_parameteriv_ext(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetColorTableParameterivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetColorTableParameterivSGI : Dispatch = Dispatch::new(
  "glGetColorTableParameterivSGI",
)

///|
pub fn gl_get_color_table_parameteriv_sgi(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetColorTableParameterivSGI
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetColorTableSGI : Dispatch = Dispatch::new("glGetColorTableSGI")

///|
pub fn gl_get_color_table_sgi(
  target : UInt,
  format : UInt,
  type_ : UInt,
  table : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Byte]) -> Unit] = d_glGetColorTableSGI
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(table, fn(table_p) {
    fp(target, format, type_, table_p)
  })
}

///|
let d_glGetCombinerInputParameterfvNV : Dispatch = Dispatch::new(
  "glGetCombinerInputParameterfvNV",
)

///|
pub fn gl_get_combiner_input_parameterfv_nv(
  stage : UInt,
  portion : UInt,
  variable : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetCombinerInputParameterfvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(stage, portion, variable, pname, params_p)
  })
}

///|
let d_glGetCombinerInputParameterivNV : Dispatch = Dispatch::new(
  "glGetCombinerInputParameterivNV",
)

///|
pub fn gl_get_combiner_input_parameteriv_nv(
  stage : UInt,
  portion : UInt,
  variable : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetCombinerInputParameterivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(stage, portion, variable, pname, params_p)
  })
}

///|
let d_glGetCombinerOutputParameterfvNV : Dispatch = Dispatch::new(
  "glGetCombinerOutputParameterfvNV",
)

///|
pub fn gl_get_combiner_output_parameterfv_nv(
  stage : UInt,
  portion : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetCombinerOutputParameterfvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(stage, portion, pname, params_p)
  })
}

///|
let d_glGetCombinerOutputParameterivNV : Dispatch = Dispatch::new(
  "glGetCombinerOutputParameterivNV",
)

///|
pub fn gl_get_combiner_output_parameteriv_nv(
  stage : UInt,
  portion : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetCombinerOutputParameterivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(stage, portion, pname, params_p)
  })
}

///|
let d_glGetCombinerStageParameterfvNV : Dispatch = Dispatch::new(
  "glGetCombinerStageParameterfvNV",
)

///|
pub fn gl_get_combiner_stage_parameterfv_nv(
  stage : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetCombinerStageParameterfvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(stage, pname, params_p) })
}

///|
let d_glGetCommandHeaderNV : Dispatch = Dispatch::new("glGetCommandHeaderNV")

///|
pub fn gl_get_command_header_nv(tokenID : UInt, size : UInt) -> UInt {
  let fp : FuncRef[(UInt, UInt) -> UInt] = d_glGetCommandHeaderNV
    .get()
    .unsafe_into()
  fp(tokenID, size)
}

///|
let d_glGetCompressedMultiTexImageEXT : Dispatch = Dispatch::new(
  "glGetCompressedMultiTexImageEXT",
)

///|
pub fn gl_get_compressed_multi_tex_image_ext(
  texunit : UInt,
  target : UInt,
  lod : Int,
  img : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, @pointer.Pointer[Byte]) -> Unit] = d_glGetCompressedMultiTexImageEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(img, fn(img_p) { fp(texunit, target, lod, img_p) })
}

///|
let d_glGetCompressedTexImage : Dispatch = Dispatch::with_aliases(
  "glGetCompressedTexImage",
  ["glGetCompressedTexImageARB"],
)

///|
pub fn gl_get_compressed_tex_image(
  target : UInt,
  level : Int,
  img : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Byte]) -> Unit] = d_glGetCompressedTexImage
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(img, fn(img_p) { fp(target, level, img_p) })
}

///|
let d_glGetCompressedTexImageARB : Dispatch = Dispatch::with_aliases(
  "glGetCompressedTexImageARB",
  ["glGetCompressedTexImage"],
)

///|
pub fn gl_get_compressed_tex_image_arb(
  target : UInt,
  level : Int,
  img : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Byte]) -> Unit] = d_glGetCompressedTexImageARB
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(img, fn(img_p) { fp(target, level, img_p) })
}

///|
let d_glGetCompressedTextureImage : Dispatch = Dispatch::new(
  "glGetCompressedTextureImage",
)

///|
pub fn gl_get_compressed_texture_image(
  texture : UInt,
  level : Int,
  bufSize : Int,
  pixels : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Byte]) -> Unit] = d_glGetCompressedTextureImage
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(pixels, fn(pixels_p) {
    fp(texture, level, bufSize, pixels_p)
  })
}

///|
let d_glGetCompressedTextureImageEXT : Dispatch = Dispatch::new(
  "glGetCompressedTextureImageEXT",
)

///|
pub fn gl_get_compressed_texture_image_ext(
  texture : UInt,
  target : UInt,
  lod : Int,
  img : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, @pointer.Pointer[Byte]) -> Unit] = d_glGetCompressedTextureImageEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(img, fn(img_p) { fp(texture, target, lod, img_p) })
}

///|
let d_glGetCompressedTextureSubImage : Dispatch = Dispatch::new(
  "glGetCompressedTextureSubImage",
)

///|
pub fn gl_get_compressed_texture_sub_image(
  texture : UInt,
  level : Int,
  xoffset : Int,
  yoffset : Int,
  zoffset : Int,
  width : Int,
  height : Int,
  depth : Int,
  bufSize : Int,
  pixels : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, Int, Int, Int, Int, Int, Int, Int, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glGetCompressedTextureSubImage.get().unsafe_into()
  @pointer.borrow_bytes(pixels, fn(pixels_p) {
    fp(
      texture, level, xoffset, yoffset, zoffset, width, height, depth, bufSize, pixels_p,
    )
  })
}

///|
let d_glGetConvolutionFilter : Dispatch = Dispatch::new(
  "glGetConvolutionFilter",
)

///|
pub fn gl_get_convolution_filter(
  target : UInt,
  format : UInt,
  type_ : UInt,
  image : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Byte]) -> Unit] = d_glGetConvolutionFilter
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(image, fn(image_p) {
    fp(target, format, type_, image_p)
  })
}

///|
let d_glGetConvolutionFilterEXT : Dispatch = Dispatch::new(
  "glGetConvolutionFilterEXT",
)

///|
pub fn gl_get_convolution_filter_ext(
  target : UInt,
  format : UInt,
  type_ : UInt,
  image : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Byte]) -> Unit] = d_glGetConvolutionFilterEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(image, fn(image_p) {
    fp(target, format, type_, image_p)
  })
}

///|
let d_glGetConvolutionParameterfv : Dispatch = Dispatch::new(
  "glGetConvolutionParameterfv",
)

///|
pub fn gl_get_convolution_parameterfv(
  target : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetConvolutionParameterfv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetConvolutionParameterfvEXT : Dispatch = Dispatch::new(
  "glGetConvolutionParameterfvEXT",
)

///|
pub fn gl_get_convolution_parameterfv_ext(
  target : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetConvolutionParameterfvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetConvolutionParameteriv : Dispatch = Dispatch::new(
  "glGetConvolutionParameteriv",
)

///|
pub fn gl_get_convolution_parameteriv(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetConvolutionParameteriv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetConvolutionParameterivEXT : Dispatch = Dispatch::new(
  "glGetConvolutionParameterivEXT",
)

///|
pub fn gl_get_convolution_parameteriv_ext(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetConvolutionParameterivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetConvolutionParameterxvOES : Dispatch = Dispatch::new(
  "glGetConvolutionParameterxvOES",
)

///|
pub fn gl_get_convolution_parameterxv_oes(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetConvolutionParameterxvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetCoverageModulationTableNV : Dispatch = Dispatch::new(
  "glGetCoverageModulationTableNV",
)

///|
pub fn gl_get_coverage_modulation_table_nv(
  bufSize : Int,
  v : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[Float]) -> Unit] = d_glGetCoverageModulationTableNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(bufSize, v_p) })
}

///|
let d_glGetDebugMessageLog : Dispatch = Dispatch::with_aliases(
  "glGetDebugMessageLog",
  ["glGetDebugMessageLogARB", "glGetDebugMessageLogKHR"],
)

///|
pub fn gl_get_debug_message_log(
  count : UInt,
  bufSize : Int,
  sources : FixedArray[UInt],
  types : FixedArray[UInt],
  ids : FixedArray[UInt],
  severities : FixedArray[UInt],
  lengths : FixedArray[Int],
  messageLog : Bytes,
) -> UInt {
  let fp : FuncRef[
    (
      UInt,
      Int,
      @pointer.Pointer[UInt],
      @pointer.Pointer[UInt],
      @pointer.Pointer[UInt],
      @pointer.Pointer[UInt],
      @pointer.Pointer[Int],
      @pointer.Pointer[Byte],
    ) -> UInt,
  ] = d_glGetDebugMessageLog.get().unsafe_into()
  @pointer.borrow_array(sources, fn(sources_p) {
    @pointer.borrow_array(types, fn(types_p) {
      @pointer.borrow_array(ids, fn(ids_p) {
        @pointer.borrow_array(severities, fn(severities_p) {
          @pointer.borrow_array(lengths, fn(lengths_p) {
            @pointer.borrow_bytes(messageLog, fn(messageLog_p) {
              fp(
                count, bufSize, sources_p, types_p, ids_p, severities_p, lengths_p,
                messageLog_p,
              )
            })
          })
        })
      })
    })
  })
}

///|
let d_glGetDebugMessageLogAMD : Dispatch = Dispatch::new(
  "glGetDebugMessageLogAMD",
)

///|
pub fn gl_get_debug_message_log_amd(
  count : UInt,
  bufSize : Int,
  categories : FixedArray[UInt],
  severities : FixedArray[UInt],
  ids : FixedArray[UInt],
  lengths : FixedArray[Int],
  message : Bytes,
) -> UInt {
  let fp : FuncRef[
    (
      UInt,
      Int,
      @pointer.Pointer[UInt],
      @pointer.Pointer[UInt],
      @pointer.Pointer[UInt],
      @pointer.Pointer[Int],
      @pointer.Pointer[Byte],
    ) -> UInt,
  ] = d_glGetDebugMessageLogAMD.get().unsafe_into()
  @pointer.borrow_array(categories, fn(categories_p) {
    @pointer.borrow_array(severities, fn(severities_p) {
      @pointer.borrow_array(ids, fn(ids_p) {
        @pointer.borrow_array(lengths, fn(lengths_p) {
          @pointer.borrow_bytes(message, fn(message_p) {
            fp(
              count, bufSize, categories_p, severities_p, ids_p, lengths_p, message_p,
            )
          })
        })
      })
    })
  })
}

///|
let d_glGetDebugMessageLogARB : Dispatch = Dispatch::with_aliases(
  "glGetDebugMessageLogARB",
  ["glGetDebugMessageLog", "glGetDebugMessageLogKHR"],
)

///|
pub fn gl_get_debug_message_log_arb(
  count : UInt,
  bufSize : Int,
  sources : FixedArray[UInt],
  types : FixedArray[UInt],
  ids : FixedArray[UInt],
  severities : FixedArray[UInt],
  lengths : FixedArray[Int],
  messageLog : Bytes,
) -> UInt {
  let fp : FuncRef[
    (
      UInt,
      Int,
      @pointer.Pointer[UInt],
      @pointer.Pointer[UInt],
      @pointer.Pointer[UInt],
      @pointer.Pointer[UInt],
      @pointer.Pointer[Int],
      @pointer.Pointer[Byte],
    ) -> UInt,
  ] = d_glGetDebugMessageLogARB.get().unsafe_into()
  @pointer.borrow_array(sources, fn(sources_p) {
    @pointer.borrow_array(types, fn(types_p) {
      @pointer.borrow_array(ids, fn(ids_p) {
        @pointer.borrow_array(severities, fn(severities_p) {
          @pointer.borrow_array(lengths, fn(lengths_p) {
            @pointer.borrow_bytes(messageLog, fn(messageLog_p) {
              fp(
                count, bufSize, sources_p, types_p, ids_p, severities_p, lengths_p,
                messageLog_p,
              )
            })
          })
        })
      })
    })
  })
}

///|
let d_glGetDebugMessageLogKHR : Dispatch = Dispatch::with_aliases(
  "glGetDebugMessageLogKHR",
  ["glGetDebugMessageLog", "glGetDebugMessageLogARB"],
)

///|
pub fn gl_get_debug_message_log_khr(
  count : UInt,
  bufSize : Int,
  sources : FixedArray[UInt],
  types : FixedArray[UInt],
  ids : FixedArray[UInt],
  severities : FixedArray[UInt],
  lengths : FixedArray[Int],
  messageLog : Bytes,
) -> UInt {
  let fp : FuncRef[
    (
      UInt,
      Int,
      @pointer.Pointer[UInt],
      @pointer.Pointer[UInt],
      @pointer.Pointer[UInt],
      @pointer.Pointer[UInt],
      @pointer.Pointer[Int],
      @pointer.Pointer[Byte],
    ) -> UInt,
  ] = d_glGetDebugMessageLogKHR.get().unsafe_into()
  @pointer.borrow_array(sources, fn(sources_p) {
    @pointer.borrow_array(types, fn(types_p) {
      @pointer.borrow_array(ids, fn(ids_p) {
        @pointer.borrow_array(severities, fn(severities_p) {
          @pointer.borrow_array(lengths, fn(lengths_p) {
            @pointer.borrow_bytes(messageLog, fn(messageLog_p) {
              fp(
                count, bufSize, sources_p, types_p, ids_p, severities_p, lengths_p,
                messageLog_p,
              )
            })
          })
        })
      })
    })
  })
}

///|
let d_glGetDetailTexFuncSGIS : Dispatch = Dispatch::new(
  "glGetDetailTexFuncSGIS",
)

///|
pub fn gl_get_detail_tex_func_sgis(
  target : UInt,
  points : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetDetailTexFuncSGIS
    .get()
    .unsafe_into()
  @pointer.borrow_array(points, fn(points_p) { fp(target, points_p) })
}

///|
let d_glGetDoubleIndexedvEXT : Dispatch = Dispatch::with_aliases(
  "glGetDoubleIndexedvEXT",
  ["glGetDoublei_v", "glGetDoublei_vEXT"],
)

///|
pub fn gl_get_double_indexedv_ext(
  target : UInt,
  index : UInt,
  data : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Double]) -> Unit] = d_glGetDoubleIndexedvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(data, fn(data_p) { fp(target, index, data_p) })
}

///|
let d_glGetDoublei_v : Dispatch = Dispatch::with_aliases("glGetDoublei_v", [
  "glGetDoubleIndexedvEXT", "glGetDoublei_vEXT",
])

///|
pub fn gl_get_doublei_v(
  target : UInt,
  index : UInt,
  data : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Double]) -> Unit] = d_glGetDoublei_v
    .get()
    .unsafe_into()
  @pointer.borrow_array(data, fn(data_p) { fp(target, index, data_p) })
}

///|
let d_glGetDoublei_vEXT : Dispatch = Dispatch::with_aliases(
  "glGetDoublei_vEXT",
  ["glGetDoubleIndexedvEXT", "glGetDoublei_v"],
)

///|
pub fn gl_get_doublei_v_ext(
  pname : UInt,
  index : UInt,
  params : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Double]) -> Unit] = d_glGetDoublei_vEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(pname, index, params_p) })
}

///|
let d_glGetDoublev : Dispatch = Dispatch::new("glGetDoublev")

///|
pub fn gl_get_doublev(pname : UInt, data : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Double]) -> Unit] = d_glGetDoublev
    .get()
    .unsafe_into()
  @pointer.borrow_array(data, fn(data_p) { fp(pname, data_p) })
}

///|
let d_glGetDriverControlStringQCOM : Dispatch = Dispatch::new(
  "glGetDriverControlStringQCOM",
)

///|
pub fn gl_get_driver_control_string_qcom(
  driverControl : UInt,
  bufSize : Int,
  length : FixedArray[Int],
  driverControlString : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, @pointer.Pointer[Int], @pointer.Pointer[Byte]) -> Unit,
  ] = d_glGetDriverControlStringQCOM.get().unsafe_into()
  @pointer.borrow_array(length, fn(length_p) {
    @pointer.borrow_bytes(driverControlString, fn(driverControlString_p) {
      fp(driverControl, bufSize, length_p, driverControlString_p)
    })
  })
}

///|
let d_glGetDriverControlsQCOM : Dispatch = Dispatch::new(
  "glGetDriverControlsQCOM",
)

///|
pub fn gl_get_driver_controls_qcom(
  num : FixedArray[Int],
  size : Int,
  driverControls : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int], Int, @pointer.Pointer[UInt]) -> Unit] = d_glGetDriverControlsQCOM
    .get()
    .unsafe_into()
  @pointer.borrow_array(num, fn(num_p) {
    @pointer.borrow_array(driverControls, fn(driverControls_p) {
      fp(num_p, size, driverControls_p)
    })
  })
}

///|
let d_glGetError : Dispatch = Dispatch::new("glGetError")

///|
pub fn gl_get_error() -> UInt {
  let fp : FuncRef[() -> UInt] = d_glGetError.get().unsafe_into()
  fp()
}

///|
let d_glGetFenceivNV : Dispatch = Dispatch::new("glGetFenceivNV")

///|
pub fn gl_get_fenceiv_nv(
  fence : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetFenceivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(fence, pname, params_p) })
}

///|
let d_glGetFinalCombinerInputParameterfvNV : Dispatch = Dispatch::new(
  "glGetFinalCombinerInputParameterfvNV",
)

///|
pub fn gl_get_final_combiner_input_parameterfv_nv(
  variable : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetFinalCombinerInputParameterfvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(variable, pname, params_p) })
}

///|
let d_glGetFinalCombinerInputParameterivNV : Dispatch = Dispatch::new(
  "glGetFinalCombinerInputParameterivNV",
)

///|
pub fn gl_get_final_combiner_input_parameteriv_nv(
  variable : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetFinalCombinerInputParameterivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(variable, pname, params_p) })
}

///|
let d_glGetFirstPerfQueryIdINTEL : Dispatch = Dispatch::new(
  "glGetFirstPerfQueryIdINTEL",
)

///|
pub fn gl_get_first_perf_query_id_intel(queryId : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[UInt]) -> Unit] = d_glGetFirstPerfQueryIdINTEL
    .get()
    .unsafe_into()
  @pointer.borrow_array(queryId, fn(queryId_p) { fp(queryId_p) })
}

///|
let d_glGetFixedv : Dispatch = Dispatch::new("glGetFixedv")

///|
pub fn gl_get_fixedv(pname : UInt, params : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetFixedv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(pname, params_p) })
}

///|
let d_glGetFixedvOES : Dispatch = Dispatch::new("glGetFixedvOES")

///|
pub fn gl_get_fixedv_oes(pname : UInt, params : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetFixedvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(pname, params_p) })
}

///|
let d_glGetFloatIndexedvEXT : Dispatch = Dispatch::with_aliases(
  "glGetFloatIndexedvEXT",
  ["glGetFloati_v", "glGetFloati_vEXT", "glGetFloati_vNV", "glGetFloati_vOES"],
)

///|
pub fn gl_get_float_indexedv_ext(
  target : UInt,
  index : UInt,
  data : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetFloatIndexedvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(data, fn(data_p) { fp(target, index, data_p) })
}

///|
let d_glGetFloati_v : Dispatch = Dispatch::with_aliases("glGetFloati_v", [
  "glGetFloatIndexedvEXT", "glGetFloati_vEXT", "glGetFloati_vNV", "glGetFloati_vOES",
])

///|
pub fn gl_get_floati_v(
  target : UInt,
  index : UInt,
  data : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetFloati_v
    .get()
    .unsafe_into()
  @pointer.borrow_array(data, fn(data_p) { fp(target, index, data_p) })
}

///|
let d_glGetFloati_vEXT : Dispatch = Dispatch::with_aliases("glGetFloati_vEXT", [
  "glGetFloatIndexedvEXT", "glGetFloati_v", "glGetFloati_vNV", "glGetFloati_vOES",
])

///|
pub fn gl_get_floati_v_ext(
  pname : UInt,
  index : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetFloati_vEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(pname, index, params_p) })
}

///|
let d_glGetFloati_vNV : Dispatch = Dispatch::with_aliases("glGetFloati_vNV", [
  "glGetFloatIndexedvEXT", "glGetFloati_v", "glGetFloati_vEXT", "glGetFloati_vOES",
])

///|
pub fn gl_get_floati_v_nv(
  target : UInt,
  index : UInt,
  data : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetFloati_vNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(data, fn(data_p) { fp(target, index, data_p) })
}

///|
let d_glGetFloati_vOES : Dispatch = Dispatch::with_aliases("glGetFloati_vOES", [
  "glGetFloatIndexedvEXT", "glGetFloati_v", "glGetFloati_vEXT", "glGetFloati_vNV",
])

///|
pub fn gl_get_floati_v_oes(
  target : UInt,
  index : UInt,
  data : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetFloati_vOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(data, fn(data_p) { fp(target, index, data_p) })
}

///|
let d_glGetFloatv : Dispatch = Dispatch::new("glGetFloatv")

///|
pub fn gl_get_floatv(pname : UInt, data : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetFloatv
    .get()
    .unsafe_into()
  @pointer.borrow_array(data, fn(data_p) { fp(pname, data_p) })
}

///|
let d_glGetFogFuncSGIS : Dispatch = Dispatch::new("glGetFogFuncSGIS")

///|
pub fn gl_get_fog_func_sgis(points : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Float]) -> Unit] = d_glGetFogFuncSGIS
    .get()
    .unsafe_into()
  @pointer.borrow_array(points, fn(points_p) { fp(points_p) })
}

///|
let d_glGetFragDataIndex : Dispatch = Dispatch::with_aliases(
  "glGetFragDataIndex",
  ["glGetFragDataIndexEXT"],
)

///|
pub fn gl_get_frag_data_index(program : UInt, name : Bytes) -> Int {
  let fp : FuncRef[(UInt, @pointer.Pointer[Byte]) -> Int] = d_glGetFragDataIndex
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(name, fn(name_p) { fp(program, name_p) })
}

///|
let d_glGetFragDataIndexEXT : Dispatch = Dispatch::with_aliases(
  "glGetFragDataIndexEXT",
  ["glGetFragDataIndex"],
)

///|
pub fn gl_get_frag_data_index_ext(program : UInt, name : Bytes) -> Int {
  let fp : FuncRef[(UInt, @pointer.Pointer[Byte]) -> Int] = d_glGetFragDataIndexEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(name, fn(name_p) { fp(program, name_p) })
}

///|
let d_glGetFragDataLocation : Dispatch = Dispatch::with_aliases(
  "glGetFragDataLocation",
  ["glGetFragDataLocationEXT"],
)

///|
pub fn gl_get_frag_data_location(program : UInt, name : Bytes) -> Int {
  let fp : FuncRef[(UInt, @pointer.Pointer[Byte]) -> Int] = d_glGetFragDataLocation
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(name, fn(name_p) { fp(program, name_p) })
}

///|
let d_glGetFragDataLocationEXT : Dispatch = Dispatch::with_aliases(
  "glGetFragDataLocationEXT",
  ["glGetFragDataLocation"],
)

///|
pub fn gl_get_frag_data_location_ext(program : UInt, name : Bytes) -> Int {
  let fp : FuncRef[(UInt, @pointer.Pointer[Byte]) -> Int] = d_glGetFragDataLocationEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(name, fn(name_p) { fp(program, name_p) })
}

///|
let d_glGetFragmentLightfvSGIX : Dispatch = Dispatch::new(
  "glGetFragmentLightfvSGIX",
)

///|
pub fn gl_get_fragment_lightfv_sgix(
  light : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetFragmentLightfvSGIX
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(light, pname, params_p) })
}

///|
let d_glGetFragmentLightivSGIX : Dispatch = Dispatch::new(
  "glGetFragmentLightivSGIX",
)

///|
pub fn gl_get_fragment_lightiv_sgix(
  light : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetFragmentLightivSGIX
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(light, pname, params_p) })
}

///|
let d_glGetFragmentMaterialfvSGIX : Dispatch = Dispatch::new(
  "glGetFragmentMaterialfvSGIX",
)

///|
pub fn gl_get_fragment_materialfv_sgix(
  face : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetFragmentMaterialfvSGIX
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(face, pname, params_p) })
}

///|
let d_glGetFragmentMaterialivSGIX : Dispatch = Dispatch::new(
  "glGetFragmentMaterialivSGIX",
)

///|
pub fn gl_get_fragment_materialiv_sgix(
  face : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetFragmentMaterialivSGIX
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(face, pname, params_p) })
}

///|
let d_glGetFragmentShadingRatesEXT : Dispatch = Dispatch::new(
  "glGetFragmentShadingRatesEXT",
)

///|
pub fn gl_get_fragment_shading_rates_ext(
  samples : Int,
  maxCount : Int,
  count : FixedArray[Int],
  shadingRates : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[
    (Int, Int, @pointer.Pointer[Int], @pointer.Pointer[UInt]) -> Unit,
  ] = d_glGetFragmentShadingRatesEXT.get().unsafe_into()
  @pointer.borrow_array(count, fn(count_p) {
    @pointer.borrow_array(shadingRates, fn(shadingRates_p) {
      fp(samples, maxCount, count_p, shadingRates_p)
    })
  })
}

///|
let d_glGetFramebufferAttachmentParameteriv : Dispatch = Dispatch::with_aliases(
  "glGetFramebufferAttachmentParameteriv",
  ["glGetFramebufferAttachmentParameterivEXT"],
)

///|
pub fn gl_get_framebuffer_attachment_parameteriv(
  target : UInt,
  attachment : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetFramebufferAttachmentParameteriv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(target, attachment, pname, params_p)
  })
}

///|
let d_glGetFramebufferAttachmentParameterivEXT : Dispatch = Dispatch::with_aliases(
  "glGetFramebufferAttachmentParameterivEXT",
  ["glGetFramebufferAttachmentParameteriv"],
)

///|
pub fn gl_get_framebuffer_attachment_parameteriv_ext(
  target : UInt,
  attachment : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetFramebufferAttachmentParameterivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(target, attachment, pname, params_p)
  })
}

///|
let d_glGetFramebufferAttachmentParameterivOES : Dispatch = Dispatch::new(
  "glGetFramebufferAttachmentParameterivOES",
)

///|
pub fn gl_get_framebuffer_attachment_parameteriv_oes(
  target : UInt,
  attachment : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetFramebufferAttachmentParameterivOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(target, attachment, pname, params_p)
  })
}

///|
let d_glGetFramebufferParameterfvAMD : Dispatch = Dispatch::new(
  "glGetFramebufferParameterfvAMD",
)

///|
pub fn gl_get_framebuffer_parameterfv_amd(
  target : UInt,
  pname : UInt,
  numsamples : UInt,
  pixelindex : UInt,
  size : Int,
  values : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, UInt, UInt, Int, @pointer.Pointer[Float]) -> Unit,
  ] = d_glGetFramebufferParameterfvAMD.get().unsafe_into()
  @pointer.borrow_array(values, fn(values_p) {
    fp(target, pname, numsamples, pixelindex, size, values_p)
  })
}

///|
let d_glGetFramebufferParameteriv : Dispatch = Dispatch::new(
  "glGetFramebufferParameteriv",
)

///|
pub fn gl_get_framebuffer_parameteriv(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetFramebufferParameteriv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetFramebufferParameterivEXT : Dispatch = Dispatch::new(
  "glGetFramebufferParameterivEXT",
)

///|
pub fn gl_get_framebuffer_parameteriv_ext(
  framebuffer : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetFramebufferParameterivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(framebuffer, pname, params_p)
  })
}

///|
let d_glGetFramebufferPixelLocalStorageSizeEXT : Dispatch = Dispatch::new(
  "glGetFramebufferPixelLocalStorageSizeEXT",
)

///|
pub fn gl_get_framebuffer_pixel_local_storage_size_ext(target : UInt) -> Int {
  let fp : FuncRef[(UInt) -> Int] = d_glGetFramebufferPixelLocalStorageSizeEXT
    .get()
    .unsafe_into()
  fp(target)
}

///|
let d_glGetGraphicsResetStatus : Dispatch = Dispatch::with_aliases(
  "glGetGraphicsResetStatus",
  ["glGetGraphicsResetStatusEXT", "glGetGraphicsResetStatusKHR"],
)

///|
pub fn gl_get_graphics_reset_status() -> UInt {
  let fp : FuncRef[() -> UInt] = d_glGetGraphicsResetStatus.get().unsafe_into()
  fp()
}

///|
let d_glGetGraphicsResetStatusARB : Dispatch = Dispatch::new(
  "glGetGraphicsResetStatusARB",
)

///|
pub fn gl_get_graphics_reset_status_arb() -> UInt {
  let fp : FuncRef[() -> UInt] = d_glGetGraphicsResetStatusARB
    .get()
    .unsafe_into()
  fp()
}

///|
let d_glGetGraphicsResetStatusEXT : Dispatch = Dispatch::with_aliases(
  "glGetGraphicsResetStatusEXT",
  ["glGetGraphicsResetStatus", "glGetGraphicsResetStatusKHR"],
)

///|
pub fn gl_get_graphics_reset_status_ext() -> UInt {
  let fp : FuncRef[() -> UInt] = d_glGetGraphicsResetStatusEXT
    .get()
    .unsafe_into()
  fp()
}

///|
let d_glGetGraphicsResetStatusKHR : Dispatch = Dispatch::with_aliases(
  "glGetGraphicsResetStatusKHR",
  ["glGetGraphicsResetStatus", "glGetGraphicsResetStatusEXT"],
)

///|
pub fn gl_get_graphics_reset_status_khr() -> UInt {
  let fp : FuncRef[() -> UInt] = d_glGetGraphicsResetStatusKHR
    .get()
    .unsafe_into()
  fp()
}

///|
let d_glGetHistogram : Dispatch = Dispatch::new("glGetHistogram")

///|
pub fn gl_get_histogram(
  target : UInt,
  reset : Bool,
  format : UInt,
  type_ : UInt,
  values : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, Bool, UInt, UInt, @pointer.Pointer[Byte]) -> Unit] = d_glGetHistogram
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(values, fn(values_p) {
    fp(target, reset, format, type_, values_p)
  })
}

///|
let d_glGetHistogramEXT : Dispatch = Dispatch::new("glGetHistogramEXT")

///|
pub fn gl_get_histogram_ext(
  target : UInt,
  reset : Bool,
  format : UInt,
  type_ : UInt,
  values : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, Bool, UInt, UInt, @pointer.Pointer[Byte]) -> Unit] = d_glGetHistogramEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(values, fn(values_p) {
    fp(target, reset, format, type_, values_p)
  })
}

///|
let d_glGetHistogramParameterfv : Dispatch = Dispatch::new(
  "glGetHistogramParameterfv",
)

///|
pub fn gl_get_histogram_parameterfv(
  target : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetHistogramParameterfv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetHistogramParameterfvEXT : Dispatch = Dispatch::new(
  "glGetHistogramParameterfvEXT",
)

///|
pub fn gl_get_histogram_parameterfv_ext(
  target : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetHistogramParameterfvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetHistogramParameteriv : Dispatch = Dispatch::new(
  "glGetHistogramParameteriv",
)

///|
pub fn gl_get_histogram_parameteriv(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetHistogramParameteriv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetHistogramParameterivEXT : Dispatch = Dispatch::new(
  "glGetHistogramParameterivEXT",
)

///|
pub fn gl_get_histogram_parameteriv_ext(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetHistogramParameterivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetHistogramParameterxvOES : Dispatch = Dispatch::new(
  "glGetHistogramParameterxvOES",
)

///|
pub fn gl_get_histogram_parameterxv_oes(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetHistogramParameterxvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetImageHandleARB : Dispatch = Dispatch::new("glGetImageHandleARB")

///|
pub fn gl_get_image_handle_arb(
  texture : UInt,
  level : Int,
  layered : Bool,
  layer : Int,
  format : UInt,
) -> UInt64 {
  let fp : FuncRef[(UInt, Int, Bool, Int, UInt) -> UInt64] = d_glGetImageHandleARB
    .get()
    .unsafe_into()
  fp(texture, level, layered, layer, format)
}

///|
let d_glGetImageHandleNV : Dispatch = Dispatch::new("glGetImageHandleNV")

///|
pub fn gl_get_image_handle_nv(
  texture : UInt,
  level : Int,
  layered : Bool,
  layer : Int,
  format : UInt,
) -> UInt64 {
  let fp : FuncRef[(UInt, Int, Bool, Int, UInt) -> UInt64] = d_glGetImageHandleNV
    .get()
    .unsafe_into()
  fp(texture, level, layered, layer, format)
}

///|
let d_glGetImageTransformParameterfvHP : Dispatch = Dispatch::new(
  "glGetImageTransformParameterfvHP",
)

///|
pub fn gl_get_image_transform_parameterfv_hp(
  target : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetImageTransformParameterfvHP
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetImageTransformParameterivHP : Dispatch = Dispatch::new(
  "glGetImageTransformParameterivHP",
)

///|
pub fn gl_get_image_transform_parameteriv_hp(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetImageTransformParameterivHP
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetInstrumentsSGIX : Dispatch = Dispatch::new("glGetInstrumentsSGIX")

///|
pub fn gl_get_instruments_sgix() -> Int {
  let fp : FuncRef[() -> Int] = d_glGetInstrumentsSGIX.get().unsafe_into()
  fp()
}

///|
let d_glGetInteger64i_v : Dispatch = Dispatch::new("glGetInteger64i_v")

///|
pub fn gl_get_integer64i_v(
  target : UInt,
  index : UInt,
  data : FixedArray[Int64],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int64]) -> Unit] = d_glGetInteger64i_v
    .get()
    .unsafe_into()
  @pointer.borrow_array(data, fn(data_p) { fp(target, index, data_p) })
}

///|
let d_glGetInteger64v : Dispatch = Dispatch::with_aliases("glGetInteger64v", [
  "glGetInteger64vAPPLE", "glGetInteger64vEXT",
])

///|
pub fn gl_get_integer64v(pname : UInt, data : FixedArray[Int64]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int64]) -> Unit] = d_glGetInteger64v
    .get()
    .unsafe_into()
  @pointer.borrow_array(data, fn(data_p) { fp(pname, data_p) })
}

///|
let d_glGetInteger64vAPPLE : Dispatch = Dispatch::with_aliases(
  "glGetInteger64vAPPLE",
  ["glGetInteger64v", "glGetInteger64vEXT"],
)

///|
pub fn gl_get_integer64v_apple(
  pname : UInt,
  params : FixedArray[Int64],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int64]) -> Unit] = d_glGetInteger64vAPPLE
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(pname, params_p) })
}

///|
let d_glGetInteger64vEXT : Dispatch = Dispatch::with_aliases(
  "glGetInteger64vEXT",
  ["glGetInteger64v", "glGetInteger64vAPPLE"],
)

///|
pub fn gl_get_integer64v_ext(pname : UInt, data : FixedArray[Int64]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int64]) -> Unit] = d_glGetInteger64vEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(data, fn(data_p) { fp(pname, data_p) })
}

///|
let d_glGetIntegerIndexedvEXT : Dispatch = Dispatch::with_aliases(
  "glGetIntegerIndexedvEXT",
  ["glGetIntegeri_v"],
)

///|
pub fn gl_get_integer_indexedv_ext(
  target : UInt,
  index : UInt,
  data : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetIntegerIndexedvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(data, fn(data_p) { fp(target, index, data_p) })
}

///|
let d_glGetIntegeri_v : Dispatch = Dispatch::with_aliases("glGetIntegeri_v", [
  "glGetIntegerIndexedvEXT",
])

///|
pub fn gl_get_integeri_v(
  target : UInt,
  index : UInt,
  data : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetIntegeri_v
    .get()
    .unsafe_into()
  @pointer.borrow_array(data, fn(data_p) { fp(target, index, data_p) })
}

///|
let d_glGetIntegeri_vEXT : Dispatch = Dispatch::new("glGetIntegeri_vEXT")

///|
pub fn gl_get_integeri_v_ext(
  target : UInt,
  index : UInt,
  data : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetIntegeri_vEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(data, fn(data_p) { fp(target, index, data_p) })
}

///|
let d_glGetIntegerui64i_vNV : Dispatch = Dispatch::new("glGetIntegerui64i_vNV")

///|
pub fn gl_get_integerui64i_v_nv(
  value : UInt,
  index : UInt,
  result : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[UInt64]) -> Unit] = d_glGetIntegerui64i_vNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(result, fn(result_p) { fp(value, index, result_p) })
}

///|
let d_glGetIntegerui64vNV : Dispatch = Dispatch::new("glGetIntegerui64vNV")

///|
pub fn gl_get_integerui64v_nv(
  value : UInt,
  result : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt64]) -> Unit] = d_glGetIntegerui64vNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(result, fn(result_p) { fp(value, result_p) })
}

///|
let d_glGetIntegerv : Dispatch = Dispatch::new("glGetIntegerv")

///|
pub fn gl_get_integerv(pname : UInt, data : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetIntegerv
    .get()
    .unsafe_into()
  @pointer.borrow_array(data, fn(data_p) { fp(pname, data_p) })
}

///|
let d_glGetInternalformatSampleivNV : Dispatch = Dispatch::new(
  "glGetInternalformatSampleivNV",
)

///|
pub fn gl_get_internalformat_sampleiv_nv(
  target : UInt,
  internalformat : UInt,
  samples : Int,
  pname : UInt,
  count : Int,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, UInt, Int, @pointer.Pointer[Int]) -> Unit] = d_glGetInternalformatSampleivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(target, internalformat, samples, pname, count, params_p)
  })
}

///|
let d_glGetInternalformati64v : Dispatch = Dispatch::new(
  "glGetInternalformati64v",
)

///|
pub fn gl_get_internalformati64v(
  target : UInt,
  internalformat : UInt,
  pname : UInt,
  count : Int,
  params : FixedArray[Int64],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int, @pointer.Pointer[Int64]) -> Unit] = d_glGetInternalformati64v
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(target, internalformat, pname, count, params_p)
  })
}

///|
let d_glGetInternalformativ : Dispatch = Dispatch::new("glGetInternalformativ")

///|
pub fn gl_get_internalformativ(
  target : UInt,
  internalformat : UInt,
  pname : UInt,
  count : Int,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int, @pointer.Pointer[Int]) -> Unit] = d_glGetInternalformativ
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(target, internalformat, pname, count, params_p)
  })
}

///|
let d_glGetInvariantBooleanvEXT : Dispatch = Dispatch::new(
  "glGetInvariantBooleanvEXT",
)

///|
pub fn gl_get_invariant_booleanv_ext(
  id : UInt,
  value : UInt,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Byte]) -> Unit] = d_glGetInvariantBooleanvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) { fp(id, value, data_p) })
}

///|
let d_glGetInvariantFloatvEXT : Dispatch = Dispatch::new(
  "glGetInvariantFloatvEXT",
)

///|
pub fn gl_get_invariant_floatv_ext(
  id : UInt,
  value : UInt,
  data : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetInvariantFloatvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(data, fn(data_p) { fp(id, value, data_p) })
}

///|
let d_glGetInvariantIntegervEXT : Dispatch = Dispatch::new(
  "glGetInvariantIntegervEXT",
)

///|
pub fn gl_get_invariant_integerv_ext(
  id : UInt,
  value : UInt,
  data : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetInvariantIntegervEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(data, fn(data_p) { fp(id, value, data_p) })
}

///|
let d_glGetLightfv : Dispatch = Dispatch::new("glGetLightfv")

///|
pub fn gl_get_lightfv(
  light : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetLightfv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(light, pname, params_p) })
}

///|
let d_glGetLightiv : Dispatch = Dispatch::new("glGetLightiv")

///|
pub fn gl_get_lightiv(
  light : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetLightiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(light, pname, params_p) })
}

///|
let d_glGetLightxOES : Dispatch = Dispatch::new("glGetLightxOES")

///|
pub fn gl_get_lightx_oes(
  light : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetLightxOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(light, pname, params_p) })
}

///|
let d_glGetLightxv : Dispatch = Dispatch::new("glGetLightxv")

///|
pub fn gl_get_lightxv(
  light : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetLightxv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(light, pname, params_p) })
}

///|
let d_glGetLightxvOES : Dispatch = Dispatch::new("glGetLightxvOES")

///|
pub fn gl_get_lightxv_oes(
  light : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetLightxvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(light, pname, params_p) })
}

///|
let d_glGetListParameterfvSGIX : Dispatch = Dispatch::new(
  "glGetListParameterfvSGIX",
)

///|
pub fn gl_get_list_parameterfv_sgix(
  list : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetListParameterfvSGIX
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(list, pname, params_p) })
}

///|
let d_glGetListParameterivSGIX : Dispatch = Dispatch::new(
  "glGetListParameterivSGIX",
)

///|
pub fn gl_get_list_parameteriv_sgix(
  list : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetListParameterivSGIX
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(list, pname, params_p) })
}

///|
let d_glGetLocalConstantBooleanvEXT : Dispatch = Dispatch::new(
  "glGetLocalConstantBooleanvEXT",
)

///|
pub fn gl_get_local_constant_booleanv_ext(
  id : UInt,
  value : UInt,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Byte]) -> Unit] = d_glGetLocalConstantBooleanvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) { fp(id, value, data_p) })
}

///|
let d_glGetLocalConstantFloatvEXT : Dispatch = Dispatch::new(
  "glGetLocalConstantFloatvEXT",
)

///|
pub fn gl_get_local_constant_floatv_ext(
  id : UInt,
  value : UInt,
  data : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetLocalConstantFloatvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(data, fn(data_p) { fp(id, value, data_p) })
}

///|
let d_glGetLocalConstantIntegervEXT : Dispatch = Dispatch::new(
  "glGetLocalConstantIntegervEXT",
)

///|
pub fn gl_get_local_constant_integerv_ext(
  id : UInt,
  value : UInt,
  data : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetLocalConstantIntegervEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(data, fn(data_p) { fp(id, value, data_p) })
}

///|
let d_glGetMapAttribParameterfvNV : Dispatch = Dispatch::new(
  "glGetMapAttribParameterfvNV",
)

///|
pub fn gl_get_map_attrib_parameterfv_nv(
  target : UInt,
  index : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetMapAttribParameterfvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(target, index, pname, params_p)
  })
}

///|
let d_glGetMapAttribParameterivNV : Dispatch = Dispatch::new(
  "glGetMapAttribParameterivNV",
)

///|
pub fn gl_get_map_attrib_parameteriv_nv(
  target : UInt,
  index : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetMapAttribParameterivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(target, index, pname, params_p)
  })
}

///|
let d_glGetMapControlPointsNV : Dispatch = Dispatch::new(
  "glGetMapControlPointsNV",
)

///|
pub fn gl_get_map_control_points_nv(
  target : UInt,
  index : UInt,
  type_ : UInt,
  ustride : Int,
  vstride : Int,
  packed : Bool,
  points : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, UInt, Int, Int, Bool, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glGetMapControlPointsNV.get().unsafe_into()
  @pointer.borrow_bytes(points, fn(points_p) {
    fp(target, index, type_, ustride, vstride, packed, points_p)
  })
}

///|
let d_glGetMapParameterfvNV : Dispatch = Dispatch::new("glGetMapParameterfvNV")

///|
pub fn gl_get_map_parameterfv_nv(
  target : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetMapParameterfvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetMapParameterivNV : Dispatch = Dispatch::new("glGetMapParameterivNV")

///|
pub fn gl_get_map_parameteriv_nv(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetMapParameterivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetMapdv : Dispatch = Dispatch::new("glGetMapdv")

///|
pub fn gl_get_mapdv(
  target : UInt,
  query : UInt,
  v : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Double]) -> Unit] = d_glGetMapdv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, query, v_p) })
}

///|
let d_glGetMapfv : Dispatch = Dispatch::new("glGetMapfv")

///|
pub fn gl_get_mapfv(target : UInt, query : UInt, v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetMapfv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, query, v_p) })
}

///|
let d_glGetMapiv : Dispatch = Dispatch::new("glGetMapiv")

///|
pub fn gl_get_mapiv(target : UInt, query : UInt, v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetMapiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, query, v_p) })
}

///|
let d_glGetMapxvOES : Dispatch = Dispatch::new("glGetMapxvOES")

///|
pub fn gl_get_mapxv_oes(
  target : UInt,
  query : UInt,
  v : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetMapxvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, query, v_p) })
}

///|
let d_glGetMaterialfv : Dispatch = Dispatch::new("glGetMaterialfv")

///|
pub fn gl_get_materialfv(
  face : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetMaterialfv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(face, pname, params_p) })
}

///|
let d_glGetMaterialiv : Dispatch = Dispatch::new("glGetMaterialiv")

///|
pub fn gl_get_materialiv(
  face : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetMaterialiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(face, pname, params_p) })
}

///|
let d_glGetMaterialxOES : Dispatch = Dispatch::new("glGetMaterialxOES")

///|
pub fn gl_get_materialx_oes(face : UInt, pname : UInt, param : Int) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int) -> Unit] = d_glGetMaterialxOES
    .get()
    .unsafe_into()
  fp(face, pname, param)
}

///|
let d_glGetMaterialxv : Dispatch = Dispatch::new("glGetMaterialxv")

///|
pub fn gl_get_materialxv(
  face : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetMaterialxv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(face, pname, params_p) })
}

///|
let d_glGetMaterialxvOES : Dispatch = Dispatch::new("glGetMaterialxvOES")

///|
pub fn gl_get_materialxv_oes(
  face : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetMaterialxvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(face, pname, params_p) })
}

///|
let d_glGetMemoryObjectDetachedResourcesuivNV : Dispatch = Dispatch::new(
  "glGetMemoryObjectDetachedResourcesuivNV",
)

///|
pub fn gl_get_memory_object_detached_resourcesuiv_nv(
  memory : UInt,
  pname : UInt,
  first : Int,
  count : Int,
  params : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, Int, @pointer.Pointer[UInt]) -> Unit] = d_glGetMemoryObjectDetachedResourcesuivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(memory, pname, first, count, params_p)
  })
}

///|
let d_glGetMemoryObjectParameterivEXT : Dispatch = Dispatch::new(
  "glGetMemoryObjectParameterivEXT",
)

///|
pub fn gl_get_memory_object_parameteriv_ext(
  memoryObject : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetMemoryObjectParameterivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(memoryObject, pname, params_p)
  })
}

///|
let d_glGetMinmax : Dispatch = Dispatch::new("glGetMinmax")

///|
pub fn gl_get_minmax(
  target : UInt,
  reset : Bool,
  format : UInt,
  type_ : UInt,
  values : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, Bool, UInt, UInt, @pointer.Pointer[Byte]) -> Unit] = d_glGetMinmax
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(values, fn(values_p) {
    fp(target, reset, format, type_, values_p)
  })
}

///|
let d_glGetMinmaxEXT : Dispatch = Dispatch::new("glGetMinmaxEXT")

///|
pub fn gl_get_minmax_ext(
  target : UInt,
  reset : Bool,
  format : UInt,
  type_ : UInt,
  values : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, Bool, UInt, UInt, @pointer.Pointer[Byte]) -> Unit] = d_glGetMinmaxEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(values, fn(values_p) {
    fp(target, reset, format, type_, values_p)
  })
}

///|
let d_glGetMinmaxParameterfv : Dispatch = Dispatch::new(
  "glGetMinmaxParameterfv",
)

///|
pub fn gl_get_minmax_parameterfv(
  target : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetMinmaxParameterfv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetMinmaxParameterfvEXT : Dispatch = Dispatch::new(
  "glGetMinmaxParameterfvEXT",
)

///|
pub fn gl_get_minmax_parameterfv_ext(
  target : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetMinmaxParameterfvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetMinmaxParameteriv : Dispatch = Dispatch::new(
  "glGetMinmaxParameteriv",
)

///|
pub fn gl_get_minmax_parameteriv(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetMinmaxParameteriv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetMinmaxParameterivEXT : Dispatch = Dispatch::new(
  "glGetMinmaxParameterivEXT",
)

///|
pub fn gl_get_minmax_parameteriv_ext(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetMinmaxParameterivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetMultiTexEnvfvEXT : Dispatch = Dispatch::new("glGetMultiTexEnvfvEXT")

///|
pub fn gl_get_multi_tex_envfv_ext(
  texunit : UInt,
  target : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetMultiTexEnvfvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(texunit, target, pname, params_p)
  })
}

///|
let d_glGetMultiTexEnvivEXT : Dispatch = Dispatch::new("glGetMultiTexEnvivEXT")

///|
pub fn gl_get_multi_tex_enviv_ext(
  texunit : UInt,
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetMultiTexEnvivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(texunit, target, pname, params_p)
  })
}

///|
let d_glGetMultiTexGendvEXT : Dispatch = Dispatch::new("glGetMultiTexGendvEXT")

///|
pub fn gl_get_multi_tex_gendv_ext(
  texunit : UInt,
  coord : UInt,
  pname : UInt,
  params : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Double]) -> Unit] = d_glGetMultiTexGendvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(texunit, coord, pname, params_p)
  })
}

///|
let d_glGetMultiTexGenfvEXT : Dispatch = Dispatch::new("glGetMultiTexGenfvEXT")

///|
pub fn gl_get_multi_tex_genfv_ext(
  texunit : UInt,
  coord : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetMultiTexGenfvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(texunit, coord, pname, params_p)
  })
}

///|
let d_glGetMultiTexGenivEXT : Dispatch = Dispatch::new("glGetMultiTexGenivEXT")

///|
pub fn gl_get_multi_tex_geniv_ext(
  texunit : UInt,
  coord : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetMultiTexGenivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(texunit, coord, pname, params_p)
  })
}

///|
let d_glGetMultiTexImageEXT : Dispatch = Dispatch::new("glGetMultiTexImageEXT")

///|
pub fn gl_get_multi_tex_image_ext(
  texunit : UInt,
  target : UInt,
  level : Int,
  format : UInt,
  type_ : UInt,
  pixels : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, Int, UInt, UInt, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glGetMultiTexImageEXT.get().unsafe_into()
  @pointer.borrow_bytes(pixels, fn(pixels_p) {
    fp(texunit, target, level, format, type_, pixels_p)
  })
}

///|
let d_glGetMultiTexLevelParameterfvEXT : Dispatch = Dispatch::new(
  "glGetMultiTexLevelParameterfvEXT",
)

///|
pub fn gl_get_multi_tex_level_parameterfv_ext(
  texunit : UInt,
  target : UInt,
  level : Int,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetMultiTexLevelParameterfvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(texunit, target, level, pname, params_p)
  })
}

///|
let d_glGetMultiTexLevelParameterivEXT : Dispatch = Dispatch::new(
  "glGetMultiTexLevelParameterivEXT",
)

///|
pub fn gl_get_multi_tex_level_parameteriv_ext(
  texunit : UInt,
  target : UInt,
  level : Int,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetMultiTexLevelParameterivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(texunit, target, level, pname, params_p)
  })
}

///|
let d_glGetMultiTexParameterIivEXT : Dispatch = Dispatch::new(
  "glGetMultiTexParameterIivEXT",
)

///|
pub fn gl_get_multi_tex_parameter_iiv_ext(
  texunit : UInt,
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetMultiTexParameterIivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(texunit, target, pname, params_p)
  })
}

///|
let d_glGetMultiTexParameterIuivEXT : Dispatch = Dispatch::new(
  "glGetMultiTexParameterIuivEXT",
)

///|
pub fn gl_get_multi_tex_parameter_iuiv_ext(
  texunit : UInt,
  target : UInt,
  pname : UInt,
  params : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[UInt]) -> Unit] = d_glGetMultiTexParameterIuivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(texunit, target, pname, params_p)
  })
}

///|
let d_glGetMultiTexParameterfvEXT : Dispatch = Dispatch::new(
  "glGetMultiTexParameterfvEXT",
)

///|
pub fn gl_get_multi_tex_parameterfv_ext(
  texunit : UInt,
  target : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetMultiTexParameterfvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(texunit, target, pname, params_p)
  })
}

///|
let d_glGetMultiTexParameterivEXT : Dispatch = Dispatch::new(
  "glGetMultiTexParameterivEXT",
)

///|
pub fn gl_get_multi_tex_parameteriv_ext(
  texunit : UInt,
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetMultiTexParameterivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(texunit, target, pname, params_p)
  })
}

///|
let d_glGetMultisamplefv : Dispatch = Dispatch::with_aliases(
  "glGetMultisamplefv",
  ["glGetMultisamplefvNV"],
)

///|
pub fn gl_get_multisamplefv(
  pname : UInt,
  index : UInt,
  val : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetMultisamplefv
    .get()
    .unsafe_into()
  @pointer.borrow_array(val, fn(val_p) { fp(pname, index, val_p) })
}

///|
let d_glGetMultisamplefvNV : Dispatch = Dispatch::with_aliases(
  "glGetMultisamplefvNV",
  ["glGetMultisamplefv"],
)

///|
pub fn gl_get_multisamplefv_nv(
  pname : UInt,
  index : UInt,
  val : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetMultisamplefvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(val, fn(val_p) { fp(pname, index, val_p) })
}

///|
let d_glGetNamedBufferParameteri64v : Dispatch = Dispatch::new(
  "glGetNamedBufferParameteri64v",
)

///|
pub fn gl_get_named_buffer_parameteri64v(
  buffer : UInt,
  pname : UInt,
  params : FixedArray[Int64],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int64]) -> Unit] = d_glGetNamedBufferParameteri64v
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(buffer, pname, params_p) })
}

///|
let d_glGetNamedBufferParameteriv : Dispatch = Dispatch::new(
  "glGetNamedBufferParameteriv",
)

///|
pub fn gl_get_named_buffer_parameteriv(
  buffer : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetNamedBufferParameteriv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(buffer, pname, params_p) })
}

///|
let d_glGetNamedBufferParameterivEXT : Dispatch = Dispatch::new(
  "glGetNamedBufferParameterivEXT",
)

///|
pub fn gl_get_named_buffer_parameteriv_ext(
  buffer : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetNamedBufferParameterivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(buffer, pname, params_p) })
}

///|
let d_glGetNamedBufferParameterui64vNV : Dispatch = Dispatch::new(
  "glGetNamedBufferParameterui64vNV",
)

///|
pub fn gl_get_named_buffer_parameterui64v_nv(
  buffer : UInt,
  pname : UInt,
  params : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[UInt64]) -> Unit] = d_glGetNamedBufferParameterui64vNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(buffer, pname, params_p) })
}

///|
let d_glGetNamedBufferSubData : Dispatch = Dispatch::new(
  "glGetNamedBufferSubData",
)

///|
pub fn gl_get_named_buffer_sub_data(
  buffer : UInt,
  offset : Int64,
  size : Int64,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, Int64, Int64, @pointer.Pointer[Byte]) -> Unit] = d_glGetNamedBufferSubData
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) { fp(buffer, offset, size, data_p) })
}

///|
let d_glGetNamedBufferSubDataEXT : Dispatch = Dispatch::new(
  "glGetNamedBufferSubDataEXT",
)

///|
pub fn gl_get_named_buffer_sub_data_ext(
  buffer : UInt,
  offset : Int64,
  size : Int64,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, Int64, Int64, @pointer.Pointer[Byte]) -> Unit] = d_glGetNamedBufferSubDataEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) { fp(buffer, offset, size, data_p) })
}

///|
let d_glGetNamedFramebufferParameterfvAMD : Dispatch = Dispatch::new(
  "glGetNamedFramebufferParameterfvAMD",
)

///|
pub fn gl_get_named_framebuffer_parameterfv_amd(
  framebuffer : UInt,
  pname : UInt,
  numsamples : UInt,
  pixelindex : UInt,
  size : Int,
  values : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, UInt, UInt, Int, @pointer.Pointer[Float]) -> Unit,
  ] = d_glGetNamedFramebufferParameterfvAMD.get().unsafe_into()
  @pointer.borrow_array(values, fn(values_p) {
    fp(framebuffer, pname, numsamples, pixelindex, size, values_p)
  })
}

///|
let d_glGetNamedFramebufferAttachmentParameteriv : Dispatch = Dispatch::new(
  "glGetNamedFramebufferAttachmentParameteriv",
)

///|
pub fn gl_get_named_framebuffer_attachment_parameteriv(
  framebuffer : UInt,
  attachment : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetNamedFramebufferAttachmentParameteriv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(framebuffer, attachment, pname, params_p)
  })
}

///|
let d_glGetNamedFramebufferAttachmentParameterivEXT : Dispatch = Dispatch::new(
  "glGetNamedFramebufferAttachmentParameterivEXT",
)

///|
pub fn gl_get_named_framebuffer_attachment_parameteriv_ext(
  framebuffer : UInt,
  attachment : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetNamedFramebufferAttachmentParameterivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(framebuffer, attachment, pname, params_p)
  })
}

///|
let d_glGetNamedFramebufferParameteriv : Dispatch = Dispatch::new(
  "glGetNamedFramebufferParameteriv",
)

///|
pub fn gl_get_named_framebuffer_parameteriv(
  framebuffer : UInt,
  pname : UInt,
  param : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetNamedFramebufferParameteriv
    .get()
    .unsafe_into()
  @pointer.borrow_array(param, fn(param_p) { fp(framebuffer, pname, param_p) })
}

///|
let d_glGetNamedFramebufferParameterivEXT : Dispatch = Dispatch::new(
  "glGetNamedFramebufferParameterivEXT",
)

///|
pub fn gl_get_named_framebuffer_parameteriv_ext(
  framebuffer : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetNamedFramebufferParameterivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(framebuffer, pname, params_p)
  })
}

///|
let d_glGetNamedProgramLocalParameterIivEXT : Dispatch = Dispatch::new(
  "glGetNamedProgramLocalParameterIivEXT",
)

///|
pub fn gl_get_named_program_local_parameter_iiv_ext(
  program : UInt,
  target : UInt,
  index : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetNamedProgramLocalParameterIivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(program, target, index, params_p)
  })
}

///|
let d_glGetNamedProgramLocalParameterIuivEXT : Dispatch = Dispatch::new(
  "glGetNamedProgramLocalParameterIuivEXT",
)

///|
pub fn gl_get_named_program_local_parameter_iuiv_ext(
  program : UInt,
  target : UInt,
  index : UInt,
  params : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[UInt]) -> Unit] = d_glGetNamedProgramLocalParameterIuivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(program, target, index, params_p)
  })
}

///|
let d_glGetNamedProgramLocalParameterdvEXT : Dispatch = Dispatch::new(
  "glGetNamedProgramLocalParameterdvEXT",
)

///|
pub fn gl_get_named_program_local_parameterdv_ext(
  program : UInt,
  target : UInt,
  index : UInt,
  params : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Double]) -> Unit] = d_glGetNamedProgramLocalParameterdvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(program, target, index, params_p)
  })
}

///|
let d_glGetNamedProgramLocalParameterfvEXT : Dispatch = Dispatch::new(
  "glGetNamedProgramLocalParameterfvEXT",
)

///|
pub fn gl_get_named_program_local_parameterfv_ext(
  program : UInt,
  target : UInt,
  index : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetNamedProgramLocalParameterfvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(program, target, index, params_p)
  })
}

///|
let d_glGetNamedProgramStringEXT : Dispatch = Dispatch::new(
  "glGetNamedProgramStringEXT",
)

///|
pub fn gl_get_named_program_string_ext(
  program : UInt,
  target : UInt,
  pname : UInt,
  string : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Byte]) -> Unit] = d_glGetNamedProgramStringEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(string, fn(string_p) {
    fp(program, target, pname, string_p)
  })
}

///|
let d_glGetNamedProgramivEXT : Dispatch = Dispatch::new(
  "glGetNamedProgramivEXT",
)

///|
pub fn gl_get_named_programiv_ext(
  program : UInt,
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetNamedProgramivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(program, target, pname, params_p)
  })
}

///|
let d_glGetNamedRenderbufferParameteriv : Dispatch = Dispatch::new(
  "glGetNamedRenderbufferParameteriv",
)

///|
pub fn gl_get_named_renderbuffer_parameteriv(
  renderbuffer : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetNamedRenderbufferParameteriv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(renderbuffer, pname, params_p)
  })
}

///|
let d_glGetNamedRenderbufferParameterivEXT : Dispatch = Dispatch::new(
  "glGetNamedRenderbufferParameterivEXT",
)

///|
pub fn gl_get_named_renderbuffer_parameteriv_ext(
  renderbuffer : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetNamedRenderbufferParameterivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(renderbuffer, pname, params_p)
  })
}

///|
let d_glGetNamedStringARB : Dispatch = Dispatch::new("glGetNamedStringARB")

///|
pub fn gl_get_named_string_arb(
  namelen : Int,
  name : Bytes,
  bufSize : Int,
  stringlen : FixedArray[Int],
  string : Bytes,
) -> Unit {
  let fp : FuncRef[
    (
      Int,
      @pointer.Pointer[Byte],
      Int,
      @pointer.Pointer[Int],
      @pointer.Pointer[Byte],
    ) -> Unit,
  ] = d_glGetNamedStringARB.get().unsafe_into()
  @pointer.borrow_bytes(name, fn(name_p) {
    @pointer.borrow_array(stringlen, fn(stringlen_p) {
      @pointer.borrow_bytes(string, fn(string_p) {
        fp(namelen, name_p, bufSize, stringlen_p, string_p)
      })
    })
  })
}

///|
let d_glGetNamedStringivARB : Dispatch = Dispatch::new("glGetNamedStringivARB")

///|
pub fn gl_get_named_stringiv_arb(
  namelen : Int,
  name : Bytes,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[
    (Int, @pointer.Pointer[Byte], UInt, @pointer.Pointer[Int]) -> Unit,
  ] = d_glGetNamedStringivARB.get().unsafe_into()
  @pointer.borrow_bytes(name, fn(name_p) {
    @pointer.borrow_array(params, fn(params_p) {
      fp(namelen, name_p, pname, params_p)
    })
  })
}

///|
let d_glGetNextPerfQueryIdINTEL : Dispatch = Dispatch::new(
  "glGetNextPerfQueryIdINTEL",
)

///|
pub fn gl_get_next_perf_query_id_intel(
  queryId : UInt,
  nextQueryId : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt]) -> Unit] = d_glGetNextPerfQueryIdINTEL
    .get()
    .unsafe_into()
  @pointer.borrow_array(nextQueryId, fn(nextQueryId_p) {
    fp(queryId, nextQueryId_p)
  })
}

///|
let d_glGetObjectBufferfvATI : Dispatch = Dispatch::new(
  "glGetObjectBufferfvATI",
)

///|
pub fn gl_get_object_bufferfv_ati(
  buffer : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetObjectBufferfvATI
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(buffer, pname, params_p) })
}

///|
let d_glGetObjectBufferivATI : Dispatch = Dispatch::new(
  "glGetObjectBufferivATI",
)

///|
pub fn gl_get_object_bufferiv_ati(
  buffer : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetObjectBufferivATI
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(buffer, pname, params_p) })
}

///|
let d_glGetObjectLabel : Dispatch = Dispatch::with_aliases("glGetObjectLabel", [
  "glGetObjectLabelKHR",
])

///|
pub fn gl_get_object_label(
  identifier : UInt,
  name : UInt,
  bufSize : Int,
  length : FixedArray[Int],
  label : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, Int, @pointer.Pointer[Int], @pointer.Pointer[Byte]) -> Unit,
  ] = d_glGetObjectLabel.get().unsafe_into()
  @pointer.borrow_array(length, fn(length_p) {
    @pointer.borrow_bytes(label, fn(label_p) {
      fp(identifier, name, bufSize, length_p, label_p)
    })
  })
}

///|
let d_glGetObjectLabelEXT : Dispatch = Dispatch::new("glGetObjectLabelEXT")

///|
pub fn gl_get_object_label_ext(
  type_ : UInt,
  object : UInt,
  bufSize : Int,
  length : FixedArray[Int],
  label : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, Int, @pointer.Pointer[Int], @pointer.Pointer[Byte]) -> Unit,
  ] = d_glGetObjectLabelEXT.get().unsafe_into()
  @pointer.borrow_array(length, fn(length_p) {
    @pointer.borrow_bytes(label, fn(label_p) {
      fp(type_, object, bufSize, length_p, label_p)
    })
  })
}

///|
let d_glGetObjectLabelKHR : Dispatch = Dispatch::with_aliases(
  "glGetObjectLabelKHR",
  ["glGetObjectLabel"],
)

///|
pub fn gl_get_object_label_khr(
  identifier : UInt,
  name : UInt,
  bufSize : Int,
  length : FixedArray[Int],
  label : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, Int, @pointer.Pointer[Int], @pointer.Pointer[Byte]) -> Unit,
  ] = d_glGetObjectLabelKHR.get().unsafe_into()
  @pointer.borrow_array(length, fn(length_p) {
    @pointer.borrow_bytes(label, fn(label_p) {
      fp(identifier, name, bufSize, length_p, label_p)
    })
  })
}

///|
let d_glGetObjectParameterivAPPLE : Dispatch = Dispatch::new(
  "glGetObjectParameterivAPPLE",
)

///|
pub fn gl_get_object_parameteriv_apple(
  objectType : UInt,
  name : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetObjectParameterivAPPLE
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(objectType, name, pname, params_p)
  })
}

///|
let d_glGetObjectPtrLabel : Dispatch = Dispatch::with_aliases(
  "glGetObjectPtrLabel",
  ["glGetObjectPtrLabelKHR"],
)

///|
pub fn gl_get_object_ptr_label(
  ptr : Bytes,
  bufSize : Int,
  length : FixedArray[Int],
  label : Bytes,
) -> Unit {
  let fp : FuncRef[
    (@pointer.Pointer[Byte], Int, @pointer.Pointer[Int], @pointer.Pointer[Byte]) -> Unit,
  ] = d_glGetObjectPtrLabel.get().unsafe_into()
  @pointer.borrow_bytes(ptr, fn(ptr_p) {
    @pointer.borrow_array(length, fn(length_p) {
      @pointer.borrow_bytes(label, fn(label_p) {
        fp(ptr_p, bufSize, length_p, label_p)
      })
    })
  })
}

///|
let d_glGetObjectPtrLabelKHR : Dispatch = Dispatch::with_aliases(
  "glGetObjectPtrLabelKHR",
  ["glGetObjectPtrLabel"],
)

///|
pub fn gl_get_object_ptr_label_khr(
  ptr : Bytes,
  bufSize : Int,
  length : FixedArray[Int],
  label : Bytes,
) -> Unit {
  let fp : FuncRef[
    (@pointer.Pointer[Byte], Int, @pointer.Pointer[Int], @pointer.Pointer[Byte]) -> Unit,
  ] = d_glGetObjectPtrLabelKHR.get().unsafe_into()
  @pointer.borrow_bytes(ptr, fn(ptr_p) {
    @pointer.borrow_array(length, fn(length_p) {
      @pointer.borrow_bytes(label, fn(label_p) {
        fp(ptr_p, bufSize, length_p, label_p)
      })
    })
  })
}

///|
let d_glGetOcclusionQueryivNV : Dispatch = Dispatch::new(
  "glGetOcclusionQueryivNV",
)

///|
pub fn gl_get_occlusion_queryiv_nv(
  id : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetOcclusionQueryivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(id, pname, params_p) })
}

///|
let d_glGetOcclusionQueryuivNV : Dispatch = Dispatch::new(
  "glGetOcclusionQueryuivNV",
)

///|
pub fn gl_get_occlusion_queryuiv_nv(
  id : UInt,
  pname : UInt,
  params : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[UInt]) -> Unit] = d_glGetOcclusionQueryuivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(id, pname, params_p) })
}

///|
let d_glGetPathColorGenfvNV : Dispatch = Dispatch::new("glGetPathColorGenfvNV")

///|
pub fn gl_get_path_color_genfv_nv(
  color : UInt,
  pname : UInt,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetPathColorGenfvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(color, pname, value_p) })
}

///|
let d_glGetPathColorGenivNV : Dispatch = Dispatch::new("glGetPathColorGenivNV")

///|
pub fn gl_get_path_color_geniv_nv(
  color : UInt,
  pname : UInt,
  value : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetPathColorGenivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(color, pname, value_p) })
}

///|
let d_glGetPathCommandsNV : Dispatch = Dispatch::new("glGetPathCommandsNV")

///|
pub fn gl_get_path_commands_nv(path : UInt, commands : Bytes) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Byte]) -> Unit] = d_glGetPathCommandsNV
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(commands, fn(commands_p) { fp(path, commands_p) })
}

///|
let d_glGetPathCoordsNV : Dispatch = Dispatch::new("glGetPathCoordsNV")

///|
pub fn gl_get_path_coords_nv(path : UInt, coords : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetPathCoordsNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(path, coords_p) })
}

///|
let d_glGetPathDashArrayNV : Dispatch = Dispatch::new("glGetPathDashArrayNV")

///|
pub fn gl_get_path_dash_array_nv(
  path : UInt,
  dashArray : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetPathDashArrayNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(dashArray, fn(dashArray_p) { fp(path, dashArray_p) })
}

///|
let d_glGetPathLengthNV : Dispatch = Dispatch::new("glGetPathLengthNV")

///|
pub fn gl_get_path_length_nv(
  path : UInt,
  startSegment : Int,
  numSegments : Int,
) -> Float {
  let fp : FuncRef[(UInt, Int, Int) -> Float] = d_glGetPathLengthNV
    .get()
    .unsafe_into()
  fp(path, startSegment, numSegments)
}

///|
let d_glGetPathMetricRangeNV : Dispatch = Dispatch::new(
  "glGetPathMetricRangeNV",
)

///|
pub fn gl_get_path_metric_range_nv(
  metricQueryMask : UInt,
  firstPathName : UInt,
  numPaths : Int,
  stride : Int,
  metrics : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, Int, @pointer.Pointer[Float]) -> Unit] = d_glGetPathMetricRangeNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(metrics, fn(metrics_p) {
    fp(metricQueryMask, firstPathName, numPaths, stride, metrics_p)
  })
}

///|
let d_glGetPathMetricsNV : Dispatch = Dispatch::new("glGetPathMetricsNV")

///|
pub fn gl_get_path_metrics_nv(
  metricQueryMask : UInt,
  numPaths : Int,
  pathNameType : UInt,
  paths : Bytes,
  pathBase : UInt,
  stride : Int,
  metrics : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      Int,
      UInt,
      @pointer.Pointer[Byte],
      UInt,
      Int,
      @pointer.Pointer[Float],
    ) -> Unit,
  ] = d_glGetPathMetricsNV.get().unsafe_into()
  @pointer.borrow_bytes(paths, fn(paths_p) {
    @pointer.borrow_array(metrics, fn(metrics_p) {
      fp(
        metricQueryMask, numPaths, pathNameType, paths_p, pathBase, stride, metrics_p,
      )
    })
  })
}

///|
let d_glGetPathParameterfvNV : Dispatch = Dispatch::new(
  "glGetPathParameterfvNV",
)

///|
pub fn gl_get_path_parameterfv_nv(
  path : UInt,
  pname : UInt,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetPathParameterfvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(path, pname, value_p) })
}

///|
let d_glGetPathParameterivNV : Dispatch = Dispatch::new(
  "glGetPathParameterivNV",
)

///|
pub fn gl_get_path_parameteriv_nv(
  path : UInt,
  pname : UInt,
  value : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetPathParameterivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(path, pname, value_p) })
}

///|
let d_glGetPathSpacingNV : Dispatch = Dispatch::new("glGetPathSpacingNV")

///|
pub fn gl_get_path_spacing_nv(
  pathListMode : UInt,
  numPaths : Int,
  pathNameType : UInt,
  paths : Bytes,
  pathBase : UInt,
  advanceScale : Float,
  kerningScale : Float,
  transformType : UInt,
  returnedSpacing : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      Int,
      UInt,
      @pointer.Pointer[Byte],
      UInt,
      Float,
      Float,
      UInt,
      @pointer.Pointer[Float],
    ) -> Unit,
  ] = d_glGetPathSpacingNV.get().unsafe_into()
  @pointer.borrow_bytes(paths, fn(paths_p) {
    @pointer.borrow_array(returnedSpacing, fn(returnedSpacing_p) {
      fp(
        pathListMode, numPaths, pathNameType, paths_p, pathBase, advanceScale, kerningScale,
        transformType, returnedSpacing_p,
      )
    })
  })
}

///|
let d_glGetPathTexGenfvNV : Dispatch = Dispatch::new("glGetPathTexGenfvNV")

///|
pub fn gl_get_path_tex_genfv_nv(
  texCoordSet : UInt,
  pname : UInt,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetPathTexGenfvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(texCoordSet, pname, value_p) })
}

///|
let d_glGetPathTexGenivNV : Dispatch = Dispatch::new("glGetPathTexGenivNV")

///|
pub fn gl_get_path_tex_geniv_nv(
  texCoordSet : UInt,
  pname : UInt,
  value : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetPathTexGenivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(texCoordSet, pname, value_p) })
}

///|
let d_glGetPerfCounterInfoINTEL : Dispatch = Dispatch::new(
  "glGetPerfCounterInfoINTEL",
)

///|
pub fn gl_get_perf_counter_info_intel(
  queryId : UInt,
  counterId : UInt,
  counterNameLength : UInt,
  counterName : Bytes,
  counterDescLength : UInt,
  counterDesc : Bytes,
  counterOffset : FixedArray[UInt],
  counterDataSize : FixedArray[UInt],
  counterTypeEnum : FixedArray[UInt],
  counterDataTypeEnum : FixedArray[UInt],
  rawCounterMaxValue : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      UInt,
      UInt,
      @pointer.Pointer[Byte],
      UInt,
      @pointer.Pointer[Byte],
      @pointer.Pointer[UInt],
      @pointer.Pointer[UInt],
      @pointer.Pointer[UInt],
      @pointer.Pointer[UInt],
      @pointer.Pointer[UInt64],
    ) -> Unit,
  ] = d_glGetPerfCounterInfoINTEL.get().unsafe_into()
  @pointer.borrow_bytes(counterName, fn(counterName_p) {
    @pointer.borrow_bytes(counterDesc, fn(counterDesc_p) {
      @pointer.borrow_array(counterOffset, fn(counterOffset_p) {
        @pointer.borrow_array(counterDataSize, fn(counterDataSize_p) {
          @pointer.borrow_array(counterTypeEnum, fn(counterTypeEnum_p) {
            @pointer.borrow_array(counterDataTypeEnum, fn(
              counterDataTypeEnum_p,
            ) {
              @pointer.borrow_array(rawCounterMaxValue, fn(
                rawCounterMaxValue_p,
              ) {
                fp(
                  queryId, counterId, counterNameLength, counterName_p, counterDescLength,
                  counterDesc_p, counterOffset_p, counterDataSize_p, counterTypeEnum_p,
                  counterDataTypeEnum_p, rawCounterMaxValue_p,
                )
              })
            })
          })
        })
      })
    })
  })
}

///|
let d_glGetPerfMonitorCounterDataAMD : Dispatch = Dispatch::new(
  "glGetPerfMonitorCounterDataAMD",
)

///|
pub fn gl_get_perf_monitor_counter_data_amd(
  monitor : UInt,
  pname : UInt,
  dataSize : Int,
  data : FixedArray[UInt],
  bytesWritten : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, Int, @pointer.Pointer[UInt], @pointer.Pointer[Int]) -> Unit,
  ] = d_glGetPerfMonitorCounterDataAMD.get().unsafe_into()
  @pointer.borrow_array(data, fn(data_p) {
    @pointer.borrow_array(bytesWritten, fn(bytesWritten_p) {
      fp(monitor, pname, dataSize, data_p, bytesWritten_p)
    })
  })
}

///|
let d_glGetPerfMonitorCounterInfoAMD : Dispatch = Dispatch::new(
  "glGetPerfMonitorCounterInfoAMD",
)

///|
pub fn gl_get_perf_monitor_counter_info_amd(
  group : UInt,
  counter : UInt,
  pname : UInt,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Byte]) -> Unit] = d_glGetPerfMonitorCounterInfoAMD
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) { fp(group, counter, pname, data_p) })
}

///|
let d_glGetPerfMonitorCounterStringAMD : Dispatch = Dispatch::new(
  "glGetPerfMonitorCounterStringAMD",
)

///|
pub fn gl_get_perf_monitor_counter_string_amd(
  group : UInt,
  counter : UInt,
  bufSize : Int,
  length : FixedArray[Int],
  counterString : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, Int, @pointer.Pointer[Int], @pointer.Pointer[Byte]) -> Unit,
  ] = d_glGetPerfMonitorCounterStringAMD.get().unsafe_into()
  @pointer.borrow_array(length, fn(length_p) {
    @pointer.borrow_bytes(counterString, fn(counterString_p) {
      fp(group, counter, bufSize, length_p, counterString_p)
    })
  })
}

///|
let d_glGetPerfMonitorCountersAMD : Dispatch = Dispatch::new(
  "glGetPerfMonitorCountersAMD",
)

///|
pub fn gl_get_perf_monitor_counters_amd(
  group : UInt,
  numCounters : FixedArray[Int],
  maxActiveCounters : FixedArray[Int],
  counterSize : Int,
  counters : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      @pointer.Pointer[Int],
      @pointer.Pointer[Int],
      Int,
      @pointer.Pointer[UInt],
    ) -> Unit,
  ] = d_glGetPerfMonitorCountersAMD.get().unsafe_into()
  @pointer.borrow_array(numCounters, fn(numCounters_p) {
    @pointer.borrow_array(maxActiveCounters, fn(maxActiveCounters_p) {
      @pointer.borrow_array(counters, fn(counters_p) {
        fp(group, numCounters_p, maxActiveCounters_p, counterSize, counters_p)
      })
    })
  })
}

///|
let d_glGetPerfMonitorGroupStringAMD : Dispatch = Dispatch::new(
  "glGetPerfMonitorGroupStringAMD",
)

///|
pub fn gl_get_perf_monitor_group_string_amd(
  group : UInt,
  bufSize : Int,
  length : FixedArray[Int],
  groupString : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, @pointer.Pointer[Int], @pointer.Pointer[Byte]) -> Unit,
  ] = d_glGetPerfMonitorGroupStringAMD.get().unsafe_into()
  @pointer.borrow_array(length, fn(length_p) {
    @pointer.borrow_bytes(groupString, fn(groupString_p) {
      fp(group, bufSize, length_p, groupString_p)
    })
  })
}

///|
let d_glGetPerfMonitorGroupsAMD : Dispatch = Dispatch::new(
  "glGetPerfMonitorGroupsAMD",
)

///|
pub fn gl_get_perf_monitor_groups_amd(
  numGroups : FixedArray[Int],
  groupsSize : Int,
  groups : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int], Int, @pointer.Pointer[UInt]) -> Unit] = d_glGetPerfMonitorGroupsAMD
    .get()
    .unsafe_into()
  @pointer.borrow_array(numGroups, fn(numGroups_p) {
    @pointer.borrow_array(groups, fn(groups_p) {
      fp(numGroups_p, groupsSize, groups_p)
    })
  })
}

///|
let d_glGetPerfQueryDataINTEL : Dispatch = Dispatch::new(
  "glGetPerfQueryDataINTEL",
)

///|
pub fn gl_get_perf_query_data_intel(
  queryHandle : UInt,
  flags : UInt,
  dataSize : Int,
  data : Bytes,
  bytesWritten : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, Int, @pointer.Pointer[Byte], @pointer.Pointer[UInt]) -> Unit,
  ] = d_glGetPerfQueryDataINTEL.get().unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) {
    @pointer.borrow_array(bytesWritten, fn(bytesWritten_p) {
      fp(queryHandle, flags, dataSize, data_p, bytesWritten_p)
    })
  })
}

///|
let d_glGetPerfQueryIdByNameINTEL : Dispatch = Dispatch::new(
  "glGetPerfQueryIdByNameINTEL",
)

///|
pub fn gl_get_perf_query_id_by_name_intel(
  queryName : Bytes,
  queryId : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Byte], @pointer.Pointer[UInt]) -> Unit] = d_glGetPerfQueryIdByNameINTEL
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(queryName, fn(queryName_p) {
    @pointer.borrow_array(queryId, fn(queryId_p) { fp(queryName_p, queryId_p) })
  })
}

///|
let d_glGetPerfQueryInfoINTEL : Dispatch = Dispatch::new(
  "glGetPerfQueryInfoINTEL",
)

///|
pub fn gl_get_perf_query_info_intel(
  queryId : UInt,
  queryNameLength : UInt,
  queryName : Bytes,
  dataSize : FixedArray[UInt],
  noCounters : FixedArray[UInt],
  noInstances : FixedArray[UInt],
  capsMask : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      UInt,
      @pointer.Pointer[Byte],
      @pointer.Pointer[UInt],
      @pointer.Pointer[UInt],
      @pointer.Pointer[UInt],
      @pointer.Pointer[UInt],
    ) -> Unit,
  ] = d_glGetPerfQueryInfoINTEL.get().unsafe_into()
  @pointer.borrow_bytes(queryName, fn(queryName_p) {
    @pointer.borrow_array(dataSize, fn(dataSize_p) {
      @pointer.borrow_array(noCounters, fn(noCounters_p) {
        @pointer.borrow_array(noInstances, fn(noInstances_p) {
          @pointer.borrow_array(capsMask, fn(capsMask_p) {
            fp(
              queryId, queryNameLength, queryName_p, dataSize_p, noCounters_p, noInstances_p,
              capsMask_p,
            )
          })
        })
      })
    })
  })
}

///|
let d_glGetPixelMapfv : Dispatch = Dispatch::new("glGetPixelMapfv")

///|
pub fn gl_get_pixel_mapfv(map : UInt, values : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetPixelMapfv
    .get()
    .unsafe_into()
  @pointer.borrow_array(values, fn(values_p) { fp(map, values_p) })
}

///|
let d_glGetPixelMapuiv : Dispatch = Dispatch::new("glGetPixelMapuiv")

///|
pub fn gl_get_pixel_mapuiv(map : UInt, values : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt]) -> Unit] = d_glGetPixelMapuiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(values, fn(values_p) { fp(map, values_p) })
}

///|
let d_glGetPixelMapusv : Dispatch = Dispatch::new("glGetPixelMapusv")

///|
pub fn gl_get_pixel_mapusv(map : UInt, values : FixedArray[UInt16]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt16]) -> Unit] = d_glGetPixelMapusv
    .get()
    .unsafe_into()
  @pointer.borrow_array(values, fn(values_p) { fp(map, values_p) })
}

///|
let d_glGetPixelMapxv : Dispatch = Dispatch::new("glGetPixelMapxv")

///|
pub fn gl_get_pixel_mapxv(
  map : UInt,
  size : Int,
  values : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Int]) -> Unit] = d_glGetPixelMapxv
    .get()
    .unsafe_into()
  @pointer.borrow_array(values, fn(values_p) { fp(map, size, values_p) })
}

///|
let d_glGetPixelTexGenParameterfvSGIS : Dispatch = Dispatch::new(
  "glGetPixelTexGenParameterfvSGIS",
)

///|
pub fn gl_get_pixel_tex_gen_parameterfv_sgis(
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetPixelTexGenParameterfvSGIS
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(pname, params_p) })
}

///|
let d_glGetPixelTexGenParameterivSGIS : Dispatch = Dispatch::new(
  "glGetPixelTexGenParameterivSGIS",
)

///|
pub fn gl_get_pixel_tex_gen_parameteriv_sgis(
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetPixelTexGenParameterivSGIS
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(pname, params_p) })
}

///|
let d_glGetPixelTransformParameterfvEXT : Dispatch = Dispatch::new(
  "glGetPixelTransformParameterfvEXT",
)

///|
pub fn gl_get_pixel_transform_parameterfv_ext(
  target : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetPixelTransformParameterfvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetPixelTransformParameterivEXT : Dispatch = Dispatch::new(
  "glGetPixelTransformParameterivEXT",
)

///|
pub fn gl_get_pixel_transform_parameteriv_ext(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetPixelTransformParameterivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetPolygonStipple : Dispatch = Dispatch::new("glGetPolygonStipple")

///|
pub fn gl_get_polygon_stipple(mask : Bytes) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Byte]) -> Unit] = d_glGetPolygonStipple
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(mask, fn(mask_p) { fp(mask_p) })
}

///|
let d_glGetProgramBinary : Dispatch = Dispatch::with_aliases(
  "glGetProgramBinary",
  ["glGetProgramBinaryOES"],
)

///|
pub fn gl_get_program_binary(
  program : UInt,
  bufSize : Int,
  length : FixedArray[Int],
  binaryFormat : FixedArray[UInt],
  binary : Bytes,
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      Int,
      @pointer.Pointer[Int],
      @pointer.Pointer[UInt],
      @pointer.Pointer[Byte],
    ) -> Unit,
  ] = d_glGetProgramBinary.get().unsafe_into()
  @pointer.borrow_array(length, fn(length_p) {
    @pointer.borrow_array(binaryFormat, fn(binaryFormat_p) {
      @pointer.borrow_bytes(binary, fn(binary_p) {
        fp(program, bufSize, length_p, binaryFormat_p, binary_p)
      })
    })
  })
}

///|
let d_glGetProgramBinaryOES : Dispatch = Dispatch::with_aliases(
  "glGetProgramBinaryOES",
  ["glGetProgramBinary"],
)

///|
pub fn gl_get_program_binary_oes(
  program : UInt,
  bufSize : Int,
  length : FixedArray[Int],
  binaryFormat : FixedArray[UInt],
  binary : Bytes,
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      Int,
      @pointer.Pointer[Int],
      @pointer.Pointer[UInt],
      @pointer.Pointer[Byte],
    ) -> Unit,
  ] = d_glGetProgramBinaryOES.get().unsafe_into()
  @pointer.borrow_array(length, fn(length_p) {
    @pointer.borrow_array(binaryFormat, fn(binaryFormat_p) {
      @pointer.borrow_bytes(binary, fn(binary_p) {
        fp(program, bufSize, length_p, binaryFormat_p, binary_p)
      })
    })
  })
}

///|
let d_glGetProgramEnvParameterIivNV : Dispatch = Dispatch::new(
  "glGetProgramEnvParameterIivNV",
)

///|
pub fn gl_get_program_env_parameter_iiv_nv(
  target : UInt,
  index : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetProgramEnvParameterIivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, index, params_p) })
}

///|
let d_glGetProgramEnvParameterIuivNV : Dispatch = Dispatch::new(
  "glGetProgramEnvParameterIuivNV",
)

///|
pub fn gl_get_program_env_parameter_iuiv_nv(
  target : UInt,
  index : UInt,
  params : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[UInt]) -> Unit] = d_glGetProgramEnvParameterIuivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, index, params_p) })
}

///|
let d_glGetProgramEnvParameterdvARB : Dispatch = Dispatch::new(
  "glGetProgramEnvParameterdvARB",
)

///|
pub fn gl_get_program_env_parameterdv_arb(
  target : UInt,
  index : UInt,
  params : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Double]) -> Unit] = d_glGetProgramEnvParameterdvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, index, params_p) })
}

///|
let d_glGetProgramEnvParameterfvARB : Dispatch = Dispatch::new(
  "glGetProgramEnvParameterfvARB",
)

///|
pub fn gl_get_program_env_parameterfv_arb(
  target : UInt,
  index : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetProgramEnvParameterfvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, index, params_p) })
}

///|
let d_glGetProgramInfoLog : Dispatch = Dispatch::new("glGetProgramInfoLog")

///|
pub fn gl_get_program_info_log(
  program : UInt,
  bufSize : Int,
  length : FixedArray[Int],
  infoLog : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, @pointer.Pointer[Int], @pointer.Pointer[Byte]) -> Unit,
  ] = d_glGetProgramInfoLog.get().unsafe_into()
  @pointer.borrow_array(length, fn(length_p) {
    @pointer.borrow_bytes(infoLog, fn(infoLog_p) {
      fp(program, bufSize, length_p, infoLog_p)
    })
  })
}

///|
let d_glGetProgramInterfaceiv : Dispatch = Dispatch::new(
  "glGetProgramInterfaceiv",
)

///|
pub fn gl_get_program_interfaceiv(
  program : UInt,
  programInterface : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetProgramInterfaceiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(program, programInterface, pname, params_p)
  })
}

///|
let d_glGetProgramLocalParameterIivNV : Dispatch = Dispatch::new(
  "glGetProgramLocalParameterIivNV",
)

///|
pub fn gl_get_program_local_parameter_iiv_nv(
  target : UInt,
  index : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetProgramLocalParameterIivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, index, params_p) })
}

///|
let d_glGetProgramLocalParameterIuivNV : Dispatch = Dispatch::new(
  "glGetProgramLocalParameterIuivNV",
)

///|
pub fn gl_get_program_local_parameter_iuiv_nv(
  target : UInt,
  index : UInt,
  params : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[UInt]) -> Unit] = d_glGetProgramLocalParameterIuivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, index, params_p) })
}

///|
let d_glGetProgramLocalParameterdvARB : Dispatch = Dispatch::new(
  "glGetProgramLocalParameterdvARB",
)

///|
pub fn gl_get_program_local_parameterdv_arb(
  target : UInt,
  index : UInt,
  params : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Double]) -> Unit] = d_glGetProgramLocalParameterdvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, index, params_p) })
}

///|
let d_glGetProgramLocalParameterfvARB : Dispatch = Dispatch::new(
  "glGetProgramLocalParameterfvARB",
)

///|
pub fn gl_get_program_local_parameterfv_arb(
  target : UInt,
  index : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetProgramLocalParameterfvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, index, params_p) })
}

///|
let d_glGetProgramNamedParameterdvNV : Dispatch = Dispatch::new(
  "glGetProgramNamedParameterdvNV",
)

///|
pub fn gl_get_program_named_parameterdv_nv(
  id : UInt,
  len : Int,
  name : Bytes,
  params : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, @pointer.Pointer[Byte], @pointer.Pointer[Double]) -> Unit,
  ] = d_glGetProgramNamedParameterdvNV.get().unsafe_into()
  @pointer.borrow_bytes(name, fn(name_p) {
    @pointer.borrow_array(params, fn(params_p) { fp(id, len, name_p, params_p) })
  })
}

///|
let d_glGetProgramNamedParameterfvNV : Dispatch = Dispatch::new(
  "glGetProgramNamedParameterfvNV",
)

///|
pub fn gl_get_program_named_parameterfv_nv(
  id : UInt,
  len : Int,
  name : Bytes,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, @pointer.Pointer[Byte], @pointer.Pointer[Float]) -> Unit,
  ] = d_glGetProgramNamedParameterfvNV.get().unsafe_into()
  @pointer.borrow_bytes(name, fn(name_p) {
    @pointer.borrow_array(params, fn(params_p) { fp(id, len, name_p, params_p) })
  })
}

///|
let d_glGetProgramParameterdvNV : Dispatch = Dispatch::new(
  "glGetProgramParameterdvNV",
)

///|
pub fn gl_get_program_parameterdv_nv(
  target : UInt,
  index : UInt,
  pname : UInt,
  params : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Double]) -> Unit] = d_glGetProgramParameterdvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(target, index, pname, params_p)
  })
}

///|
let d_glGetProgramParameterfvNV : Dispatch = Dispatch::new(
  "glGetProgramParameterfvNV",
)

///|
pub fn gl_get_program_parameterfv_nv(
  target : UInt,
  index : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetProgramParameterfvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(target, index, pname, params_p)
  })
}

///|
let d_glGetProgramPipelineInfoLog : Dispatch = Dispatch::new(
  "glGetProgramPipelineInfoLog",
)

///|
pub fn gl_get_program_pipeline_info_log(
  pipeline : UInt,
  bufSize : Int,
  length : FixedArray[Int],
  infoLog : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, @pointer.Pointer[Int], @pointer.Pointer[Byte]) -> Unit,
  ] = d_glGetProgramPipelineInfoLog.get().unsafe_into()
  @pointer.borrow_array(length, fn(length_p) {
    @pointer.borrow_bytes(infoLog, fn(infoLog_p) {
      fp(pipeline, bufSize, length_p, infoLog_p)
    })
  })
}

///|
let d_glGetProgramPipelineInfoLogEXT : Dispatch = Dispatch::new(
  "glGetProgramPipelineInfoLogEXT",
)

///|
pub fn gl_get_program_pipeline_info_log_ext(
  pipeline : UInt,
  bufSize : Int,
  length : FixedArray[Int],
  infoLog : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, @pointer.Pointer[Int], @pointer.Pointer[Byte]) -> Unit,
  ] = d_glGetProgramPipelineInfoLogEXT.get().unsafe_into()
  @pointer.borrow_array(length, fn(length_p) {
    @pointer.borrow_bytes(infoLog, fn(infoLog_p) {
      fp(pipeline, bufSize, length_p, infoLog_p)
    })
  })
}

///|
let d_glGetProgramPipelineiv : Dispatch = Dispatch::new(
  "glGetProgramPipelineiv",
)

///|
pub fn gl_get_program_pipelineiv(
  pipeline : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetProgramPipelineiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(pipeline, pname, params_p) })
}

///|
let d_glGetProgramPipelineivEXT : Dispatch = Dispatch::new(
  "glGetProgramPipelineivEXT",
)

///|
pub fn gl_get_program_pipelineiv_ext(
  pipeline : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetProgramPipelineivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(pipeline, pname, params_p) })
}

///|
let d_glGetProgramResourceIndex : Dispatch = Dispatch::new(
  "glGetProgramResourceIndex",
)

///|
pub fn gl_get_program_resource_index(
  program : UInt,
  programInterface : UInt,
  name : Bytes,
) -> UInt {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Byte]) -> UInt] = d_glGetProgramResourceIndex
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(name, fn(name_p) {
    fp(program, programInterface, name_p)
  })
}

///|
let d_glGetProgramResourceLocation : Dispatch = Dispatch::new(
  "glGetProgramResourceLocation",
)

///|
pub fn gl_get_program_resource_location(
  program : UInt,
  programInterface : UInt,
  name : Bytes,
) -> Int {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Byte]) -> Int] = d_glGetProgramResourceLocation
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(name, fn(name_p) {
    fp(program, programInterface, name_p)
  })
}

///|
let d_glGetProgramResourceLocationIndex : Dispatch = Dispatch::new(
  "glGetProgramResourceLocationIndex",
)

///|
pub fn gl_get_program_resource_location_index(
  program : UInt,
  programInterface : UInt,
  name : Bytes,
) -> Int {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Byte]) -> Int] = d_glGetProgramResourceLocationIndex
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(name, fn(name_p) {
    fp(program, programInterface, name_p)
  })
}

///|
let d_glGetProgramResourceLocationIndexEXT : Dispatch = Dispatch::new(
  "glGetProgramResourceLocationIndexEXT",
)

///|
pub fn gl_get_program_resource_location_index_ext(
  program : UInt,
  programInterface : UInt,
  name : Bytes,
) -> Int {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Byte]) -> Int] = d_glGetProgramResourceLocationIndexEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(name, fn(name_p) {
    fp(program, programInterface, name_p)
  })
}

///|
let d_glGetProgramResourceName : Dispatch = Dispatch::new(
  "glGetProgramResourceName",
)

///|
pub fn gl_get_program_resource_name(
  program : UInt,
  programInterface : UInt,
  index : UInt,
  bufSize : Int,
  length : FixedArray[Int],
  name : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, UInt, Int, @pointer.Pointer[Int], @pointer.Pointer[Byte]) -> Unit,
  ] = d_glGetProgramResourceName.get().unsafe_into()
  @pointer.borrow_array(length, fn(length_p) {
    @pointer.borrow_bytes(name, fn(name_p) {
      fp(program, programInterface, index, bufSize, length_p, name_p)
    })
  })
}

///|
let d_glGetProgramResourcefvNV : Dispatch = Dispatch::new(
  "glGetProgramResourcefvNV",
)

///|
pub fn gl_get_program_resourcefv_nv(
  program : UInt,
  programInterface : UInt,
  index : UInt,
  propCount : Int,
  props : FixedArray[UInt],
  count : Int,
  length : FixedArray[Int],
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      UInt,
      UInt,
      Int,
      @pointer.Pointer[UInt],
      Int,
      @pointer.Pointer[Int],
      @pointer.Pointer[Float],
    ) -> Unit,
  ] = d_glGetProgramResourcefvNV.get().unsafe_into()
  @pointer.borrow_array(props, fn(props_p) {
    @pointer.borrow_array(length, fn(length_p) {
      @pointer.borrow_array(params, fn(params_p) {
        fp(
          program, programInterface, index, propCount, props_p, count, length_p,
          params_p,
        )
      })
    })
  })
}

///|
let d_glGetProgramResourceiv : Dispatch = Dispatch::new(
  "glGetProgramResourceiv",
)

///|
pub fn gl_get_program_resourceiv(
  program : UInt,
  programInterface : UInt,
  index : UInt,
  propCount : Int,
  props : FixedArray[UInt],
  count : Int,
  length : FixedArray[Int],
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      UInt,
      UInt,
      Int,
      @pointer.Pointer[UInt],
      Int,
      @pointer.Pointer[Int],
      @pointer.Pointer[Int],
    ) -> Unit,
  ] = d_glGetProgramResourceiv.get().unsafe_into()
  @pointer.borrow_array(props, fn(props_p) {
    @pointer.borrow_array(length, fn(length_p) {
      @pointer.borrow_array(params, fn(params_p) {
        fp(
          program, programInterface, index, propCount, props_p, count, length_p,
          params_p,
        )
      })
    })
  })
}

///|
let d_glGetProgramStageiv : Dispatch = Dispatch::new("glGetProgramStageiv")

///|
pub fn gl_get_program_stageiv(
  program : UInt,
  shadertype : UInt,
  pname : UInt,
  values : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetProgramStageiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(values, fn(values_p) {
    fp(program, shadertype, pname, values_p)
  })
}

///|
let d_glGetProgramStringARB : Dispatch = Dispatch::new("glGetProgramStringARB")

///|
pub fn gl_get_program_string_arb(
  target : UInt,
  pname : UInt,
  string : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Byte]) -> Unit] = d_glGetProgramStringARB
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(string, fn(string_p) { fp(target, pname, string_p) })
}

///|
let d_glGetProgramStringNV : Dispatch = Dispatch::new("glGetProgramStringNV")

///|
pub fn gl_get_program_string_nv(
  id : UInt,
  pname : UInt,
  program : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Byte]) -> Unit] = d_glGetProgramStringNV
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(program, fn(program_p) { fp(id, pname, program_p) })
}

///|
let d_glGetProgramSubroutineParameteruivNV : Dispatch = Dispatch::new(
  "glGetProgramSubroutineParameteruivNV",
)

///|
pub fn gl_get_program_subroutine_parameteruiv_nv(
  target : UInt,
  index : UInt,
  param : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[UInt]) -> Unit] = d_glGetProgramSubroutineParameteruivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(param, fn(param_p) { fp(target, index, param_p) })
}

///|
let d_glGetProgramiv : Dispatch = Dispatch::new("glGetProgramiv")

///|
pub fn gl_get_programiv(
  program : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetProgramiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(program, pname, params_p) })
}

///|
let d_glGetProgramivARB : Dispatch = Dispatch::new("glGetProgramivARB")

///|
pub fn gl_get_programiv_arb(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetProgramivARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetProgramivNV : Dispatch = Dispatch::new("glGetProgramivNV")

///|
pub fn gl_get_programiv_nv(
  id : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetProgramivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(id, pname, params_p) })
}

///|
let d_glGetQueryBufferObjecti64v : Dispatch = Dispatch::new(
  "glGetQueryBufferObjecti64v",
)

///|
pub fn gl_get_query_buffer_objecti64v(
  id : UInt,
  buffer : UInt,
  pname : UInt,
  offset : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int64) -> Unit] = d_glGetQueryBufferObjecti64v
    .get()
    .unsafe_into()
  fp(id, buffer, pname, offset)
}

///|
let d_glGetQueryBufferObjectiv : Dispatch = Dispatch::new(
  "glGetQueryBufferObjectiv",
)

///|
pub fn gl_get_query_buffer_objectiv(
  id : UInt,
  buffer : UInt,
  pname : UInt,
  offset : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int64) -> Unit] = d_glGetQueryBufferObjectiv
    .get()
    .unsafe_into()
  fp(id, buffer, pname, offset)
}

///|
let d_glGetQueryBufferObjectui64v : Dispatch = Dispatch::new(
  "glGetQueryBufferObjectui64v",
)

///|
pub fn gl_get_query_buffer_objectui64v(
  id : UInt,
  buffer : UInt,
  pname : UInt,
  offset : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int64) -> Unit] = d_glGetQueryBufferObjectui64v
    .get()
    .unsafe_into()
  fp(id, buffer, pname, offset)
}

///|
let d_glGetQueryBufferObjectuiv : Dispatch = Dispatch::new(
  "glGetQueryBufferObjectuiv",
)

///|
pub fn gl_get_query_buffer_objectuiv(
  id : UInt,
  buffer : UInt,
  pname : UInt,
  offset : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int64) -> Unit] = d_glGetQueryBufferObjectuiv
    .get()
    .unsafe_into()
  fp(id, buffer, pname, offset)
}

///|
let d_glGetQueryIndexediv : Dispatch = Dispatch::new("glGetQueryIndexediv")

///|
pub fn gl_get_query_indexediv(
  target : UInt,
  index : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetQueryIndexediv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(target, index, pname, params_p)
  })
}

///|
let d_glGetQueryObjecti64v : Dispatch = Dispatch::with_aliases(
  "glGetQueryObjecti64v",
  ["glGetQueryObjecti64vEXT"],
)

///|
pub fn gl_get_query_objecti64v(
  id : UInt,
  pname : UInt,
  params : FixedArray[Int64],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int64]) -> Unit] = d_glGetQueryObjecti64v
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(id, pname, params_p) })
}

///|
let d_glGetQueryObjecti64vEXT : Dispatch = Dispatch::with_aliases(
  "glGetQueryObjecti64vEXT",
  ["glGetQueryObjecti64v"],
)

///|
pub fn gl_get_query_objecti64v_ext(
  id : UInt,
  pname : UInt,
  params : FixedArray[Int64],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int64]) -> Unit] = d_glGetQueryObjecti64vEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(id, pname, params_p) })
}

///|
let d_glGetQueryObjectiv : Dispatch = Dispatch::with_aliases(
  "glGetQueryObjectiv",
  ["glGetQueryObjectivARB", "glGetQueryObjectivEXT"],
)

///|
pub fn gl_get_query_objectiv(
  id : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetQueryObjectiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(id, pname, params_p) })
}

///|
let d_glGetQueryObjectivARB : Dispatch = Dispatch::with_aliases(
  "glGetQueryObjectivARB",
  ["glGetQueryObjectiv", "glGetQueryObjectivEXT"],
)

///|
pub fn gl_get_query_objectiv_arb(
  id : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetQueryObjectivARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(id, pname, params_p) })
}

///|
let d_glGetQueryObjectivEXT : Dispatch = Dispatch::with_aliases(
  "glGetQueryObjectivEXT",
  ["glGetQueryObjectiv", "glGetQueryObjectivARB"],
)

///|
pub fn gl_get_query_objectiv_ext(
  id : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetQueryObjectivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(id, pname, params_p) })
}

///|
let d_glGetQueryObjectui64v : Dispatch = Dispatch::with_aliases(
  "glGetQueryObjectui64v",
  ["glGetQueryObjectui64vEXT"],
)

///|
pub fn gl_get_query_objectui64v(
  id : UInt,
  pname : UInt,
  params : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[UInt64]) -> Unit] = d_glGetQueryObjectui64v
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(id, pname, params_p) })
}

///|
let d_glGetQueryObjectui64vEXT : Dispatch = Dispatch::with_aliases(
  "glGetQueryObjectui64vEXT",
  ["glGetQueryObjectui64v"],
)

///|
pub fn gl_get_query_objectui64v_ext(
  id : UInt,
  pname : UInt,
  params : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[UInt64]) -> Unit] = d_glGetQueryObjectui64vEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(id, pname, params_p) })
}

///|
let d_glGetQueryObjectuiv : Dispatch = Dispatch::with_aliases(
  "glGetQueryObjectuiv",
  ["glGetQueryObjectuivARB"],
)

///|
pub fn gl_get_query_objectuiv(
  id : UInt,
  pname : UInt,
  params : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[UInt]) -> Unit] = d_glGetQueryObjectuiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(id, pname, params_p) })
}

///|
let d_glGetQueryObjectuivARB : Dispatch = Dispatch::with_aliases(
  "glGetQueryObjectuivARB",
  ["glGetQueryObjectuiv"],
)

///|
pub fn gl_get_query_objectuiv_arb(
  id : UInt,
  pname : UInt,
  params : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[UInt]) -> Unit] = d_glGetQueryObjectuivARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(id, pname, params_p) })
}

///|
let d_glGetQueryObjectuivEXT : Dispatch = Dispatch::new(
  "glGetQueryObjectuivEXT",
)

///|
pub fn gl_get_query_objectuiv_ext(
  id : UInt,
  pname : UInt,
  params : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[UInt]) -> Unit] = d_glGetQueryObjectuivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(id, pname, params_p) })
}

///|
let d_glGetQueryiv : Dispatch = Dispatch::with_aliases("glGetQueryiv", [
  "glGetQueryivARB",
])

///|
pub fn gl_get_queryiv(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetQueryiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetQueryivARB : Dispatch = Dispatch::with_aliases("glGetQueryivARB", [
  "glGetQueryiv",
])

///|
pub fn gl_get_queryiv_arb(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetQueryivARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetQueryivEXT : Dispatch = Dispatch::new("glGetQueryivEXT")

///|
pub fn gl_get_queryiv_ext(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetQueryivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetRenderbufferParameteriv : Dispatch = Dispatch::with_aliases(
  "glGetRenderbufferParameteriv",
  ["glGetRenderbufferParameterivEXT"],
)

///|
pub fn gl_get_renderbuffer_parameteriv(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetRenderbufferParameteriv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetRenderbufferParameterivEXT : Dispatch = Dispatch::with_aliases(
  "glGetRenderbufferParameterivEXT",
  ["glGetRenderbufferParameteriv"],
)

///|
pub fn gl_get_renderbuffer_parameteriv_ext(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetRenderbufferParameterivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetRenderbufferParameterivOES : Dispatch = Dispatch::new(
  "glGetRenderbufferParameterivOES",
)

///|
pub fn gl_get_renderbuffer_parameteriv_oes(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetRenderbufferParameterivOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetSamplerParameterIiv : Dispatch = Dispatch::with_aliases(
  "glGetSamplerParameterIiv",
  ["glGetSamplerParameterIivEXT", "glGetSamplerParameterIivOES"],
)

///|
pub fn gl_get_sampler_parameter_iiv(
  sampler : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetSamplerParameterIiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(sampler, pname, params_p) })
}

///|
let d_glGetSamplerParameterIivEXT : Dispatch = Dispatch::with_aliases(
  "glGetSamplerParameterIivEXT",
  ["glGetSamplerParameterIiv", "glGetSamplerParameterIivOES"],
)

///|
pub fn gl_get_sampler_parameter_iiv_ext(
  sampler : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetSamplerParameterIivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(sampler, pname, params_p) })
}

///|
let d_glGetSamplerParameterIivOES : Dispatch = Dispatch::with_aliases(
  "glGetSamplerParameterIivOES",
  ["glGetSamplerParameterIiv", "glGetSamplerParameterIivEXT"],
)

///|
pub fn gl_get_sampler_parameter_iiv_oes(
  sampler : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetSamplerParameterIivOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(sampler, pname, params_p) })
}

///|
let d_glGetSamplerParameterIuiv : Dispatch = Dispatch::with_aliases(
  "glGetSamplerParameterIuiv",
  ["glGetSamplerParameterIuivEXT", "glGetSamplerParameterIuivOES"],
)

///|
pub fn gl_get_sampler_parameter_iuiv(
  sampler : UInt,
  pname : UInt,
  params : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[UInt]) -> Unit] = d_glGetSamplerParameterIuiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(sampler, pname, params_p) })
}

///|
let d_glGetSamplerParameterIuivEXT : Dispatch = Dispatch::with_aliases(
  "glGetSamplerParameterIuivEXT",
  ["glGetSamplerParameterIuiv", "glGetSamplerParameterIuivOES"],
)

///|
pub fn gl_get_sampler_parameter_iuiv_ext(
  sampler : UInt,
  pname : UInt,
  params : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[UInt]) -> Unit] = d_glGetSamplerParameterIuivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(sampler, pname, params_p) })
}

///|
let d_glGetSamplerParameterIuivOES : Dispatch = Dispatch::with_aliases(
  "glGetSamplerParameterIuivOES",
  ["glGetSamplerParameterIuiv", "glGetSamplerParameterIuivEXT"],
)

///|
pub fn gl_get_sampler_parameter_iuiv_oes(
  sampler : UInt,
  pname : UInt,
  params : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[UInt]) -> Unit] = d_glGetSamplerParameterIuivOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(sampler, pname, params_p) })
}

///|
let d_glGetSamplerParameterfv : Dispatch = Dispatch::new(
  "glGetSamplerParameterfv",
)

///|
pub fn gl_get_sampler_parameterfv(
  sampler : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetSamplerParameterfv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(sampler, pname, params_p) })
}

///|
let d_glGetSamplerParameteriv : Dispatch = Dispatch::new(
  "glGetSamplerParameteriv",
)

///|
pub fn gl_get_sampler_parameteriv(
  sampler : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetSamplerParameteriv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(sampler, pname, params_p) })
}

///|
let d_glGetSemaphoreParameterivNV : Dispatch = Dispatch::new(
  "glGetSemaphoreParameterivNV",
)

///|
pub fn gl_get_semaphore_parameteriv_nv(
  semaphore : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetSemaphoreParameterivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(semaphore, pname, params_p) })
}

///|
let d_glGetSemaphoreParameterui64vEXT : Dispatch = Dispatch::new(
  "glGetSemaphoreParameterui64vEXT",
)

///|
pub fn gl_get_semaphore_parameterui64v_ext(
  semaphore : UInt,
  pname : UInt,
  params : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[UInt64]) -> Unit] = d_glGetSemaphoreParameterui64vEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(semaphore, pname, params_p) })
}

///|
let d_glGetSeparableFilter : Dispatch = Dispatch::new("glGetSeparableFilter")

///|
pub fn gl_get_separable_filter(
  target : UInt,
  format : UInt,
  type_ : UInt,
  row : Bytes,
  column : Bytes,
  span : Bytes,
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      UInt,
      UInt,
      @pointer.Pointer[Byte],
      @pointer.Pointer[Byte],
      @pointer.Pointer[Byte],
    ) -> Unit,
  ] = d_glGetSeparableFilter.get().unsafe_into()
  @pointer.borrow_bytes(row, fn(row_p) {
    @pointer.borrow_bytes(column, fn(column_p) {
      @pointer.borrow_bytes(span, fn(span_p) {
        fp(target, format, type_, row_p, column_p, span_p)
      })
    })
  })
}

///|
let d_glGetSeparableFilterEXT : Dispatch = Dispatch::new(
  "glGetSeparableFilterEXT",
)

///|
pub fn gl_get_separable_filter_ext(
  target : UInt,
  format : UInt,
  type_ : UInt,
  row : Bytes,
  column : Bytes,
  span : Bytes,
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      UInt,
      UInt,
      @pointer.Pointer[Byte],
      @pointer.Pointer[Byte],
      @pointer.Pointer[Byte],
    ) -> Unit,
  ] = d_glGetSeparableFilterEXT.get().unsafe_into()
  @pointer.borrow_bytes(row, fn(row_p) {
    @pointer.borrow_bytes(column, fn(column_p) {
      @pointer.borrow_bytes(span, fn(span_p) {
        fp(target, format, type_, row_p, column_p, span_p)
      })
    })
  })
}

///|
let d_glGetShaderInfoLog : Dispatch = Dispatch::new("glGetShaderInfoLog")

///|
pub fn gl_get_shader_info_log(
  shader : UInt,
  bufSize : Int,
  length : FixedArray[Int],
  infoLog : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, @pointer.Pointer[Int], @pointer.Pointer[Byte]) -> Unit,
  ] = d_glGetShaderInfoLog.get().unsafe_into()
  @pointer.borrow_array(length, fn(length_p) {
    @pointer.borrow_bytes(infoLog, fn(infoLog_p) {
      fp(shader, bufSize, length_p, infoLog_p)
    })
  })
}

///|
let d_glGetShaderPrecisionFormat : Dispatch = Dispatch::new(
  "glGetShaderPrecisionFormat",
)

///|
pub fn gl_get_shader_precision_format(
  shadertype : UInt,
  precisiontype : UInt,
  range : FixedArray[Int],
  precision : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, @pointer.Pointer[Int], @pointer.Pointer[Int]) -> Unit,
  ] = d_glGetShaderPrecisionFormat.get().unsafe_into()
  @pointer.borrow_array(range, fn(range_p) {
    @pointer.borrow_array(precision, fn(precision_p) {
      fp(shadertype, precisiontype, range_p, precision_p)
    })
  })
}

///|
let d_glGetShaderSource : Dispatch = Dispatch::with_aliases(
  "glGetShaderSource",
  ["glGetShaderSourceARB"],
)

///|
pub fn gl_get_shader_source(
  shader : UInt,
  bufSize : Int,
  length : FixedArray[Int],
  source : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, @pointer.Pointer[Int], @pointer.Pointer[Byte]) -> Unit,
  ] = d_glGetShaderSource.get().unsafe_into()
  @pointer.borrow_array(length, fn(length_p) {
    @pointer.borrow_bytes(source, fn(source_p) {
      fp(shader, bufSize, length_p, source_p)
    })
  })
}

///|
let d_glGetShaderiv : Dispatch = Dispatch::new("glGetShaderiv")

///|
pub fn gl_get_shaderiv(
  shader : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetShaderiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(shader, pname, params_p) })
}

///|
let d_glGetShadingRateImagePaletteNV : Dispatch = Dispatch::new(
  "glGetShadingRateImagePaletteNV",
)

///|
pub fn gl_get_shading_rate_image_palette_nv(
  viewport : UInt,
  entry : UInt,
  rate : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[UInt]) -> Unit] = d_glGetShadingRateImagePaletteNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(rate, fn(rate_p) { fp(viewport, entry, rate_p) })
}

///|
let d_glGetShadingRateSampleLocationivNV : Dispatch = Dispatch::new(
  "glGetShadingRateSampleLocationivNV",
)

///|
pub fn gl_get_shading_rate_sample_locationiv_nv(
  rate : UInt,
  samples : UInt,
  index : UInt,
  location : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetShadingRateSampleLocationivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(location, fn(location_p) {
    fp(rate, samples, index, location_p)
  })
}

///|
let d_glGetSharpenTexFuncSGIS : Dispatch = Dispatch::new(
  "glGetSharpenTexFuncSGIS",
)

///|
pub fn gl_get_sharpen_tex_func_sgis(
  target : UInt,
  points : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetSharpenTexFuncSGIS
    .get()
    .unsafe_into()
  @pointer.borrow_array(points, fn(points_p) { fp(target, points_p) })
}

///|
let d_glGetStageIndexNV : Dispatch = Dispatch::new("glGetStageIndexNV")

///|
pub fn gl_get_stage_index_nv(shadertype : UInt) -> Int {
  let fp : FuncRef[(UInt) -> Int] = d_glGetStageIndexNV.get().unsafe_into()
  fp(shadertype) & 0xFFFF
}

///|
let d_glGetString : Dispatch = Dispatch::new("glGetString")

///|
pub fn gl_get_string(name : UInt) -> String {
  let fp : FuncRef[(UInt) -> @pointer.Pointer[Byte]] = d_glGetString
    .get()
    .unsafe_into()
  @utf8.decode_lossy(epoxy_cstr_to_bytes(fp(name))[:])
}

///|
let d_glGetStringi : Dispatch = Dispatch::new("glGetStringi")

///|
pub fn gl_get_stringi(name : UInt, index : UInt) -> String {
  let fp : FuncRef[(UInt, UInt) -> @pointer.Pointer[Byte]] = d_glGetStringi
    .get()
    .unsafe_into()
  @utf8.decode_lossy(epoxy_cstr_to_bytes(fp(name, index))[:])
}

///|
let d_glGetSubroutineIndex : Dispatch = Dispatch::new("glGetSubroutineIndex")

///|
pub fn gl_get_subroutine_index(
  program : UInt,
  shadertype : UInt,
  name : Bytes,
) -> UInt {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Byte]) -> UInt] = d_glGetSubroutineIndex
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(name, fn(name_p) { fp(program, shadertype, name_p) })
}

///|
let d_glGetSubroutineUniformLocation : Dispatch = Dispatch::new(
  "glGetSubroutineUniformLocation",
)

///|
pub fn gl_get_subroutine_uniform_location(
  program : UInt,
  shadertype : UInt,
  name : Bytes,
) -> Int {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Byte]) -> Int] = d_glGetSubroutineUniformLocation
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(name, fn(name_p) { fp(program, shadertype, name_p) })
}

///|
let d_glGetSynciv : Dispatch = Dispatch::with_aliases("glGetSynciv", [
  "glGetSyncivAPPLE",
])

///|
pub fn gl_get_synciv(
  sync : GLsync,
  pname : UInt,
  count : Int,
  length : FixedArray[Int],
  values : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[
    (GLsync, UInt, Int, @pointer.Pointer[Int], @pointer.Pointer[Int]) -> Unit,
  ] = d_glGetSynciv.get().unsafe_into()
  @pointer.borrow_array(length, fn(length_p) {
    @pointer.borrow_array(values, fn(values_p) {
      fp(sync, pname, count, length_p, values_p)
    })
  })
}

///|
let d_glGetSyncivAPPLE : Dispatch = Dispatch::with_aliases("glGetSyncivAPPLE", [
  "glGetSynciv",
])

///|
pub fn gl_get_synciv_apple(
  sync : GLsync,
  pname : UInt,
  count : Int,
  length : FixedArray[Int],
  values : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[
    (GLsync, UInt, Int, @pointer.Pointer[Int], @pointer.Pointer[Int]) -> Unit,
  ] = d_glGetSyncivAPPLE.get().unsafe_into()
  @pointer.borrow_array(length, fn(length_p) {
    @pointer.borrow_array(values, fn(values_p) {
      fp(sync, pname, count, length_p, values_p)
    })
  })
}

///|
let d_glGetTexBumpParameterfvATI : Dispatch = Dispatch::new(
  "glGetTexBumpParameterfvATI",
)

///|
pub fn gl_get_tex_bump_parameterfv_ati(
  pname : UInt,
  param : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetTexBumpParameterfvATI
    .get()
    .unsafe_into()
  @pointer.borrow_array(param, fn(param_p) { fp(pname, param_p) })
}

///|
let d_glGetTexBumpParameterivATI : Dispatch = Dispatch::new(
  "glGetTexBumpParameterivATI",
)

///|
pub fn gl_get_tex_bump_parameteriv_ati(
  pname : UInt,
  param : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetTexBumpParameterivATI
    .get()
    .unsafe_into()
  @pointer.borrow_array(param, fn(param_p) { fp(pname, param_p) })
}

///|
let d_glGetTexEnvfv : Dispatch = Dispatch::new("glGetTexEnvfv")

///|
pub fn gl_get_tex_envfv(
  target : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetTexEnvfv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetTexEnviv : Dispatch = Dispatch::new("glGetTexEnviv")

///|
pub fn gl_get_tex_enviv(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetTexEnviv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetTexEnvxv : Dispatch = Dispatch::new("glGetTexEnvxv")

///|
pub fn gl_get_tex_envxv(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetTexEnvxv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetTexEnvxvOES : Dispatch = Dispatch::new("glGetTexEnvxvOES")

///|
pub fn gl_get_tex_envxv_oes(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetTexEnvxvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetTexFilterFuncSGIS : Dispatch = Dispatch::new(
  "glGetTexFilterFuncSGIS",
)

///|
pub fn gl_get_tex_filter_func_sgis(
  target : UInt,
  filter : UInt,
  weights : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetTexFilterFuncSGIS
    .get()
    .unsafe_into()
  @pointer.borrow_array(weights, fn(weights_p) { fp(target, filter, weights_p) })
}

///|
let d_glGetTexGendv : Dispatch = Dispatch::new("glGetTexGendv")

///|
pub fn gl_get_tex_gendv(
  coord : UInt,
  pname : UInt,
  params : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Double]) -> Unit] = d_glGetTexGendv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(coord, pname, params_p) })
}

///|
let d_glGetTexGenfv : Dispatch = Dispatch::new("glGetTexGenfv")

///|
pub fn gl_get_tex_genfv(
  coord : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetTexGenfv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(coord, pname, params_p) })
}

///|
let d_glGetTexGenfvOES : Dispatch = Dispatch::new("glGetTexGenfvOES")

///|
pub fn gl_get_tex_genfv_oes(
  coord : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetTexGenfvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(coord, pname, params_p) })
}

///|
let d_glGetTexGeniv : Dispatch = Dispatch::new("glGetTexGeniv")

///|
pub fn gl_get_tex_geniv(
  coord : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetTexGeniv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(coord, pname, params_p) })
}

///|
let d_glGetTexGenivOES : Dispatch = Dispatch::new("glGetTexGenivOES")

///|
pub fn gl_get_tex_geniv_oes(
  coord : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetTexGenivOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(coord, pname, params_p) })
}

///|
let d_glGetTexGenxvOES : Dispatch = Dispatch::new("glGetTexGenxvOES")

///|
pub fn gl_get_tex_genxv_oes(
  coord : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetTexGenxvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(coord, pname, params_p) })
}

///|
let d_glGetTexImage : Dispatch = Dispatch::new("glGetTexImage")

///|
pub fn gl_get_tex_image(
  target : UInt,
  level : Int,
  format : UInt,
  type_ : UInt,
  pixels : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, UInt, @pointer.Pointer[Byte]) -> Unit] = d_glGetTexImage
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(pixels, fn(pixels_p) {
    fp(target, level, format, type_, pixels_p)
  })
}

///|
let d_glGetTexLevelParameterfv : Dispatch = Dispatch::new(
  "glGetTexLevelParameterfv",
)

///|
pub fn gl_get_tex_level_parameterfv(
  target : UInt,
  level : Int,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetTexLevelParameterfv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(target, level, pname, params_p)
  })
}

///|
let d_glGetTexLevelParameteriv : Dispatch = Dispatch::new(
  "glGetTexLevelParameteriv",
)

///|
pub fn gl_get_tex_level_parameteriv(
  target : UInt,
  level : Int,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetTexLevelParameteriv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(target, level, pname, params_p)
  })
}

///|
let d_glGetTexLevelParameterxvOES : Dispatch = Dispatch::new(
  "glGetTexLevelParameterxvOES",
)

///|
pub fn gl_get_tex_level_parameterxv_oes(
  target : UInt,
  level : Int,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetTexLevelParameterxvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(target, level, pname, params_p)
  })
}

///|
let d_glGetTexParameterIiv : Dispatch = Dispatch::with_aliases(
  "glGetTexParameterIiv",
  ["glGetTexParameterIivEXT", "glGetTexParameterIivOES"],
)

///|
pub fn gl_get_tex_parameter_iiv(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetTexParameterIiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetTexParameterIivEXT : Dispatch = Dispatch::with_aliases(
  "glGetTexParameterIivEXT",
  ["glGetTexParameterIiv", "glGetTexParameterIivOES"],
)

///|
pub fn gl_get_tex_parameter_iiv_ext(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetTexParameterIivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetTexParameterIivOES : Dispatch = Dispatch::with_aliases(
  "glGetTexParameterIivOES",
  ["glGetTexParameterIiv", "glGetTexParameterIivEXT"],
)

///|
pub fn gl_get_tex_parameter_iiv_oes(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetTexParameterIivOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetTexParameterIuiv : Dispatch = Dispatch::with_aliases(
  "glGetTexParameterIuiv",
  ["glGetTexParameterIuivEXT", "glGetTexParameterIuivOES"],
)

///|
pub fn gl_get_tex_parameter_iuiv(
  target : UInt,
  pname : UInt,
  params : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[UInt]) -> Unit] = d_glGetTexParameterIuiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetTexParameterIuivEXT : Dispatch = Dispatch::with_aliases(
  "glGetTexParameterIuivEXT",
  ["glGetTexParameterIuiv", "glGetTexParameterIuivOES"],
)

///|
pub fn gl_get_tex_parameter_iuiv_ext(
  target : UInt,
  pname : UInt,
  params : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[UInt]) -> Unit] = d_glGetTexParameterIuivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetTexParameterIuivOES : Dispatch = Dispatch::with_aliases(
  "glGetTexParameterIuivOES",
  ["glGetTexParameterIuiv", "glGetTexParameterIuivEXT"],
)

///|
pub fn gl_get_tex_parameter_iuiv_oes(
  target : UInt,
  pname : UInt,
  params : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[UInt]) -> Unit] = d_glGetTexParameterIuivOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetTexParameterfv : Dispatch = Dispatch::new("glGetTexParameterfv")

///|
pub fn gl_get_tex_parameterfv(
  target : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetTexParameterfv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetTexParameteriv : Dispatch = Dispatch::new("glGetTexParameteriv")

///|
pub fn gl_get_tex_parameteriv(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetTexParameteriv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetTexParameterxv : Dispatch = Dispatch::new("glGetTexParameterxv")

///|
pub fn gl_get_tex_parameterxv(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetTexParameterxv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetTexParameterxvOES : Dispatch = Dispatch::new(
  "glGetTexParameterxvOES",
)

///|
pub fn gl_get_tex_parameterxv_oes(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetTexParameterxvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glGetTextureHandleARB : Dispatch = Dispatch::with_aliases(
  "glGetTextureHandleARB",
  ["glGetTextureHandleIMG"],
)

///|
pub fn gl_get_texture_handle_arb(texture : UInt) -> UInt64 {
  let fp : FuncRef[(UInt) -> UInt64] = d_glGetTextureHandleARB
    .get()
    .unsafe_into()
  fp(texture)
}

///|
let d_glGetTextureHandleIMG : Dispatch = Dispatch::with_aliases(
  "glGetTextureHandleIMG",
  ["glGetTextureHandleARB"],
)

///|
pub fn gl_get_texture_handle_img(texture : UInt) -> UInt64 {
  let fp : FuncRef[(UInt) -> UInt64] = d_glGetTextureHandleIMG
    .get()
    .unsafe_into()
  fp(texture)
}

///|
let d_glGetTextureHandleNV : Dispatch = Dispatch::new("glGetTextureHandleNV")

///|
pub fn gl_get_texture_handle_nv(texture : UInt) -> UInt64 {
  let fp : FuncRef[(UInt) -> UInt64] = d_glGetTextureHandleNV
    .get()
    .unsafe_into()
  fp(texture)
}

///|
let d_glGetTextureImage : Dispatch = Dispatch::new("glGetTextureImage")

///|
pub fn gl_get_texture_image(
  texture : UInt,
  level : Int,
  format : UInt,
  type_ : UInt,
  bufSize : Int,
  pixels : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, UInt, Int, @pointer.Pointer[Byte]) -> Unit] = d_glGetTextureImage
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(pixels, fn(pixels_p) {
    fp(texture, level, format, type_, bufSize, pixels_p)
  })
}

///|
let d_glGetTextureImageEXT : Dispatch = Dispatch::new("glGetTextureImageEXT")

///|
pub fn gl_get_texture_image_ext(
  texture : UInt,
  target : UInt,
  level : Int,
  format : UInt,
  type_ : UInt,
  pixels : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, Int, UInt, UInt, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glGetTextureImageEXT.get().unsafe_into()
  @pointer.borrow_bytes(pixels, fn(pixels_p) {
    fp(texture, target, level, format, type_, pixels_p)
  })
}

///|
let d_glGetTextureLevelParameterfv : Dispatch = Dispatch::new(
  "glGetTextureLevelParameterfv",
)

///|
pub fn gl_get_texture_level_parameterfv(
  texture : UInt,
  level : Int,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetTextureLevelParameterfv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(texture, level, pname, params_p)
  })
}

///|
let d_glGetTextureLevelParameterfvEXT : Dispatch = Dispatch::new(
  "glGetTextureLevelParameterfvEXT",
)

///|
pub fn gl_get_texture_level_parameterfv_ext(
  texture : UInt,
  target : UInt,
  level : Int,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetTextureLevelParameterfvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(texture, target, level, pname, params_p)
  })
}

///|
let d_glGetTextureLevelParameteriv : Dispatch = Dispatch::new(
  "glGetTextureLevelParameteriv",
)

///|
pub fn gl_get_texture_level_parameteriv(
  texture : UInt,
  level : Int,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetTextureLevelParameteriv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(texture, level, pname, params_p)
  })
}

///|
let d_glGetTextureLevelParameterivEXT : Dispatch = Dispatch::new(
  "glGetTextureLevelParameterivEXT",
)

///|
pub fn gl_get_texture_level_parameteriv_ext(
  texture : UInt,
  target : UInt,
  level : Int,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetTextureLevelParameterivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(texture, target, level, pname, params_p)
  })
}

///|
let d_glGetTextureParameterIiv : Dispatch = Dispatch::new(
  "glGetTextureParameterIiv",
)

///|
pub fn gl_get_texture_parameter_iiv(
  texture : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetTextureParameterIiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(texture, pname, params_p) })
}

///|
let d_glGetTextureParameterIivEXT : Dispatch = Dispatch::new(
  "glGetTextureParameterIivEXT",
)

///|
pub fn gl_get_texture_parameter_iiv_ext(
  texture : UInt,
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetTextureParameterIivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(texture, target, pname, params_p)
  })
}

///|
let d_glGetTextureParameterIuiv : Dispatch = Dispatch::new(
  "glGetTextureParameterIuiv",
)

///|
pub fn gl_get_texture_parameter_iuiv(
  texture : UInt,
  pname : UInt,
  params : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[UInt]) -> Unit] = d_glGetTextureParameterIuiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(texture, pname, params_p) })
}

///|
let d_glGetTextureParameterIuivEXT : Dispatch = Dispatch::new(
  "glGetTextureParameterIuivEXT",
)

///|
pub fn gl_get_texture_parameter_iuiv_ext(
  texture : UInt,
  target : UInt,
  pname : UInt,
  params : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[UInt]) -> Unit] = d_glGetTextureParameterIuivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(texture, target, pname, params_p)
  })
}

///|
let d_glGetTextureParameterfv : Dispatch = Dispatch::new(
  "glGetTextureParameterfv",
)

///|
pub fn gl_get_texture_parameterfv(
  texture : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetTextureParameterfv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(texture, pname, params_p) })
}

///|
let d_glGetTextureParameterfvEXT : Dispatch = Dispatch::new(
  "glGetTextureParameterfvEXT",
)

///|
pub fn gl_get_texture_parameterfv_ext(
  texture : UInt,
  target : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetTextureParameterfvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(texture, target, pname, params_p)
  })
}

///|
let d_glGetTextureParameteriv : Dispatch = Dispatch::new(
  "glGetTextureParameteriv",
)

///|
pub fn gl_get_texture_parameteriv(
  texture : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetTextureParameteriv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(texture, pname, params_p) })
}

///|
let d_glGetTextureParameterivEXT : Dispatch = Dispatch::new(
  "glGetTextureParameterivEXT",
)

///|
pub fn gl_get_texture_parameteriv_ext(
  texture : UInt,
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetTextureParameterivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(texture, target, pname, params_p)
  })
}

///|
let d_glGetTextureSamplerHandleARB : Dispatch = Dispatch::with_aliases(
  "glGetTextureSamplerHandleARB",
  ["glGetTextureSamplerHandleIMG"],
)

///|
pub fn gl_get_texture_sampler_handle_arb(
  texture : UInt,
  sampler : UInt,
) -> UInt64 {
  let fp : FuncRef[(UInt, UInt) -> UInt64] = d_glGetTextureSamplerHandleARB
    .get()
    .unsafe_into()
  fp(texture, sampler)
}

///|
let d_glGetTextureSamplerHandleIMG : Dispatch = Dispatch::with_aliases(
  "glGetTextureSamplerHandleIMG",
  ["glGetTextureSamplerHandleARB"],
)

///|
pub fn gl_get_texture_sampler_handle_img(
  texture : UInt,
  sampler : UInt,
) -> UInt64 {
  let fp : FuncRef[(UInt, UInt) -> UInt64] = d_glGetTextureSamplerHandleIMG
    .get()
    .unsafe_into()
  fp(texture, sampler)
}

///|
let d_glGetTextureSamplerHandleNV : Dispatch = Dispatch::new(
  "glGetTextureSamplerHandleNV",
)

///|
pub fn gl_get_texture_sampler_handle_nv(
  texture : UInt,
  sampler : UInt,
) -> UInt64 {
  let fp : FuncRef[(UInt, UInt) -> UInt64] = d_glGetTextureSamplerHandleNV
    .get()
    .unsafe_into()
  fp(texture, sampler)
}

///|
let d_glGetTextureSubImage : Dispatch = Dispatch::new("glGetTextureSubImage")

///|
pub fn gl_get_texture_sub_image(
  texture : UInt,
  level : Int,
  xoffset : Int,
  yoffset : Int,
  zoffset : Int,
  width : Int,
  height : Int,
  depth : Int,
  format : UInt,
  type_ : UInt,
  bufSize : Int,
  pixels : Bytes,
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      Int,
      Int,
      Int,
      Int,
      Int,
      Int,
      Int,
      UInt,
      UInt,
      Int,
      @pointer.Pointer[Byte],
    ) -> Unit,
  ] = d_glGetTextureSubImage.get().unsafe_into()
  @pointer.borrow_bytes(pixels, fn(pixels_p) {
    fp(
      texture, level, xoffset, yoffset, zoffset, width, height, depth, format, type_,
      bufSize, pixels_p,
    )
  })
}

///|
let d_glGetTrackMatrixivNV : Dispatch = Dispatch::new("glGetTrackMatrixivNV")

///|
pub fn gl_get_track_matrixiv_nv(
  target : UInt,
  address : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetTrackMatrixivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(target, address, pname, params_p)
  })
}

///|
let d_glGetTransformFeedbackVarying : Dispatch = Dispatch::with_aliases(
  "glGetTransformFeedbackVarying",
  ["glGetTransformFeedbackVaryingEXT"],
)

///|
pub fn gl_get_transform_feedback_varying(
  program : UInt,
  index : UInt,
  bufSize : Int,
  length : FixedArray[Int],
  size : FixedArray[Int],
  type_ : FixedArray[UInt],
  name : Bytes,
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      UInt,
      Int,
      @pointer.Pointer[Int],
      @pointer.Pointer[Int],
      @pointer.Pointer[UInt],
      @pointer.Pointer[Byte],
    ) -> Unit,
  ] = d_glGetTransformFeedbackVarying.get().unsafe_into()
  @pointer.borrow_array(length, fn(length_p) {
    @pointer.borrow_array(size, fn(size_p) {
      @pointer.borrow_array(type_, fn(type__p) {
        @pointer.borrow_bytes(name, fn(name_p) {
          fp(program, index, bufSize, length_p, size_p, type__p, name_p)
        })
      })
    })
  })
}

///|
let d_glGetTransformFeedbackVaryingEXT : Dispatch = Dispatch::with_aliases(
  "glGetTransformFeedbackVaryingEXT",
  ["glGetTransformFeedbackVarying"],
)

///|
pub fn gl_get_transform_feedback_varying_ext(
  program : UInt,
  index : UInt,
  bufSize : Int,
  length : FixedArray[Int],
  size : FixedArray[Int],
  type_ : FixedArray[UInt],
  name : Bytes,
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      UInt,
      Int,
      @pointer.Pointer[Int],
      @pointer.Pointer[Int],
      @pointer.Pointer[UInt],
      @pointer.Pointer[Byte],
    ) -> Unit,
  ] = d_glGetTransformFeedbackVaryingEXT.get().unsafe_into()
  @pointer.borrow_array(length, fn(length_p) {
    @pointer.borrow_array(size, fn(size_p) {
      @pointer.borrow_array(type_, fn(type__p) {
        @pointer.borrow_bytes(name, fn(name_p) {
          fp(program, index, bufSize, length_p, size_p, type__p, name_p)
        })
      })
    })
  })
}

///|
let d_glGetTransformFeedbackVaryingNV : Dispatch = Dispatch::new(
  "glGetTransformFeedbackVaryingNV",
)

///|
pub fn gl_get_transform_feedback_varying_nv(
  program : UInt,
  index : UInt,
  location : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetTransformFeedbackVaryingNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(location, fn(location_p) {
    fp(program, index, location_p)
  })
}

///|
let d_glGetTransformFeedbacki64_v : Dispatch = Dispatch::new(
  "glGetTransformFeedbacki64_v",
)

///|
pub fn gl_get_transform_feedbacki64_v(
  xfb : UInt,
  pname : UInt,
  index : UInt,
  param : FixedArray[Int64],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Int64]) -> Unit] = d_glGetTransformFeedbacki64_v
    .get()
    .unsafe_into()
  @pointer.borrow_array(param, fn(param_p) { fp(xfb, pname, index, param_p) })
}

///|
let d_glGetTransformFeedbacki_v : Dispatch = Dispatch::new(
  "glGetTransformFeedbacki_v",
)

///|
pub fn gl_get_transform_feedbacki_v(
  xfb : UInt,
  pname : UInt,
  index : UInt,
  param : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetTransformFeedbacki_v
    .get()
    .unsafe_into()
  @pointer.borrow_array(param, fn(param_p) { fp(xfb, pname, index, param_p) })
}

///|
let d_glGetTransformFeedbackiv : Dispatch = Dispatch::new(
  "glGetTransformFeedbackiv",
)

///|
pub fn gl_get_transform_feedbackiv(
  xfb : UInt,
  pname : UInt,
  param : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetTransformFeedbackiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(param, fn(param_p) { fp(xfb, pname, param_p) })
}

///|
let d_glGetTranslatedShaderSourceANGLE : Dispatch = Dispatch::new(
  "glGetTranslatedShaderSourceANGLE",
)

///|
pub fn gl_get_translated_shader_source_angle(
  shader : UInt,
  bufSize : Int,
  length : FixedArray[Int],
  source : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, @pointer.Pointer[Int], @pointer.Pointer[Byte]) -> Unit,
  ] = d_glGetTranslatedShaderSourceANGLE.get().unsafe_into()
  @pointer.borrow_array(length, fn(length_p) {
    @pointer.borrow_bytes(source, fn(source_p) {
      fp(shader, bufSize, length_p, source_p)
    })
  })
}

///|
let d_glGetUniformBlockIndex : Dispatch = Dispatch::new(
  "glGetUniformBlockIndex",
)

///|
pub fn gl_get_uniform_block_index(
  program : UInt,
  uniformBlockName : Bytes,
) -> UInt {
  let fp : FuncRef[(UInt, @pointer.Pointer[Byte]) -> UInt] = d_glGetUniformBlockIndex
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(uniformBlockName, fn(uniformBlockName_p) {
    fp(program, uniformBlockName_p)
  })
}

///|
let d_glGetUniformBufferSizeEXT : Dispatch = Dispatch::new(
  "glGetUniformBufferSizeEXT",
)

///|
pub fn gl_get_uniform_buffer_size_ext(program : UInt, location : Int) -> Int {
  let fp : FuncRef[(UInt, Int) -> Int] = d_glGetUniformBufferSizeEXT
    .get()
    .unsafe_into()
  fp(program, location)
}

///|
let d_glGetUniformIndices : Dispatch = Dispatch::new("glGetUniformIndices")

///|
pub fn gl_get_uniform_indices(
  program : UInt,
  uniformCount : Int,
  uniformNames : FixedArray[Bytes],
  uniformIndices : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, @pointer.Pointer[Bytes], @pointer.Pointer[UInt]) -> Unit,
  ] = d_glGetUniformIndices.get().unsafe_into()
  @pointer.borrow_array(uniformNames, fn(uniformNames_p) {
    @pointer.borrow_array(uniformIndices, fn(uniformIndices_p) {
      fp(program, uniformCount, uniformNames_p, uniformIndices_p)
    })
  })
}

///|
let d_glGetUniformLocation : Dispatch = Dispatch::with_aliases(
  "glGetUniformLocation",
  ["glGetUniformLocationARB"],
)

///|
pub fn gl_get_uniform_location(program : UInt, name : Bytes) -> Int {
  let fp : FuncRef[(UInt, @pointer.Pointer[Byte]) -> Int] = d_glGetUniformLocation
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(name, fn(name_p) { fp(program, name_p) })
}

///|
let d_glGetUniformOffsetEXT : Dispatch = Dispatch::new("glGetUniformOffsetEXT")

///|
pub fn gl_get_uniform_offset_ext(program : UInt, location : Int) -> Int64 {
  let fp : FuncRef[(UInt, Int) -> Int64] = d_glGetUniformOffsetEXT
    .get()
    .unsafe_into()
  fp(program, location)
}

///|
let d_glGetUniformSubroutineuiv : Dispatch = Dispatch::new(
  "glGetUniformSubroutineuiv",
)

///|
pub fn gl_get_uniform_subroutineuiv(
  shadertype : UInt,
  location : Int,
  params : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[UInt]) -> Unit] = d_glGetUniformSubroutineuiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(shadertype, location, params_p)
  })
}

///|
let d_glGetUniformdv : Dispatch = Dispatch::new("glGetUniformdv")

///|
pub fn gl_get_uniformdv(
  program : UInt,
  location : Int,
  params : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Double]) -> Unit] = d_glGetUniformdv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(program, location, params_p) })
}

///|
let d_glGetUniformfv : Dispatch = Dispatch::with_aliases("glGetUniformfv", [
  "glGetUniformfvARB",
])

///|
pub fn gl_get_uniformfv(
  program : UInt,
  location : Int,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Float]) -> Unit] = d_glGetUniformfv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(program, location, params_p) })
}

///|
let d_glGetUniformi64vARB : Dispatch = Dispatch::new("glGetUniformi64vARB")

///|
pub fn gl_get_uniformi64v_arb(
  program : UInt,
  location : Int,
  params : FixedArray[Int64],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Int64]) -> Unit] = d_glGetUniformi64vARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(program, location, params_p) })
}

///|
let d_glGetUniformi64vNV : Dispatch = Dispatch::new("glGetUniformi64vNV")

///|
pub fn gl_get_uniformi64v_nv(
  program : UInt,
  location : Int,
  params : FixedArray[Int64],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Int64]) -> Unit] = d_glGetUniformi64vNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(program, location, params_p) })
}

///|
let d_glGetUniformiv : Dispatch = Dispatch::with_aliases("glGetUniformiv", [
  "glGetUniformivARB",
])

///|
pub fn gl_get_uniformiv(
  program : UInt,
  location : Int,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Int]) -> Unit] = d_glGetUniformiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(program, location, params_p) })
}

///|
let d_glGetUniformui64vARB : Dispatch = Dispatch::new("glGetUniformui64vARB")

///|
pub fn gl_get_uniformui64v_arb(
  program : UInt,
  location : Int,
  params : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[UInt64]) -> Unit] = d_glGetUniformui64vARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(program, location, params_p) })
}

///|
let d_glGetUniformui64vNV : Dispatch = Dispatch::new("glGetUniformui64vNV")

///|
pub fn gl_get_uniformui64v_nv(
  program : UInt,
  location : Int,
  params : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[UInt64]) -> Unit] = d_glGetUniformui64vNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(program, location, params_p) })
}

///|
let d_glGetUniformuiv : Dispatch = Dispatch::with_aliases("glGetUniformuiv", [
  "glGetUniformuivEXT",
])

///|
pub fn gl_get_uniformuiv(
  program : UInt,
  location : Int,
  params : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[UInt]) -> Unit] = d_glGetUniformuiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(program, location, params_p) })
}

///|
let d_glGetUniformuivEXT : Dispatch = Dispatch::with_aliases(
  "glGetUniformuivEXT",
  ["glGetUniformuiv"],
)

///|
pub fn gl_get_uniformuiv_ext(
  program : UInt,
  location : Int,
  params : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[UInt]) -> Unit] = d_glGetUniformuivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(program, location, params_p) })
}

///|
let d_glGetUnsignedBytevEXT : Dispatch = Dispatch::new("glGetUnsignedBytevEXT")

///|
pub fn gl_get_unsigned_bytev_ext(pname : UInt, data : Bytes) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Byte]) -> Unit] = d_glGetUnsignedBytevEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) { fp(pname, data_p) })
}

///|
let d_glGetUnsignedBytei_vEXT : Dispatch = Dispatch::new(
  "glGetUnsignedBytei_vEXT",
)

///|
pub fn gl_get_unsigned_bytei_v_ext(
  target : UInt,
  index : UInt,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Byte]) -> Unit] = d_glGetUnsignedBytei_vEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) { fp(target, index, data_p) })
}

///|
let d_glGetVariantArrayObjectfvATI : Dispatch = Dispatch::new(
  "glGetVariantArrayObjectfvATI",
)

///|
pub fn gl_get_variant_array_objectfv_ati(
  id : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetVariantArrayObjectfvATI
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(id, pname, params_p) })
}

///|
let d_glGetVariantArrayObjectivATI : Dispatch = Dispatch::new(
  "glGetVariantArrayObjectivATI",
)

///|
pub fn gl_get_variant_array_objectiv_ati(
  id : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetVariantArrayObjectivATI
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(id, pname, params_p) })
}

///|
let d_glGetVariantBooleanvEXT : Dispatch = Dispatch::new(
  "glGetVariantBooleanvEXT",
)

///|
pub fn gl_get_variant_booleanv_ext(
  id : UInt,
  value : UInt,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Byte]) -> Unit] = d_glGetVariantBooleanvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) { fp(id, value, data_p) })
}

///|
let d_glGetVariantFloatvEXT : Dispatch = Dispatch::new("glGetVariantFloatvEXT")

///|
pub fn gl_get_variant_floatv_ext(
  id : UInt,
  value : UInt,
  data : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetVariantFloatvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(data, fn(data_p) { fp(id, value, data_p) })
}

///|
let d_glGetVariantIntegervEXT : Dispatch = Dispatch::new(
  "glGetVariantIntegervEXT",
)

///|
pub fn gl_get_variant_integerv_ext(
  id : UInt,
  value : UInt,
  data : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetVariantIntegervEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(data, fn(data_p) { fp(id, value, data_p) })
}

///|
let d_glGetVaryingLocationNV : Dispatch = Dispatch::new(
  "glGetVaryingLocationNV",
)

///|
pub fn gl_get_varying_location_nv(program : UInt, name : Bytes) -> Int {
  let fp : FuncRef[(UInt, @pointer.Pointer[Byte]) -> Int] = d_glGetVaryingLocationNV
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(name, fn(name_p) { fp(program, name_p) })
}

///|
let d_glGetVertexArrayIndexed64iv : Dispatch = Dispatch::new(
  "glGetVertexArrayIndexed64iv",
)

///|
pub fn gl_get_vertex_array_indexed64iv(
  vaobj : UInt,
  index : UInt,
  pname : UInt,
  param : FixedArray[Int64],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Int64]) -> Unit] = d_glGetVertexArrayIndexed64iv
    .get()
    .unsafe_into()
  @pointer.borrow_array(param, fn(param_p) { fp(vaobj, index, pname, param_p) })
}

///|
let d_glGetVertexArrayIndexediv : Dispatch = Dispatch::new(
  "glGetVertexArrayIndexediv",
)

///|
pub fn gl_get_vertex_array_indexediv(
  vaobj : UInt,
  index : UInt,
  pname : UInt,
  param : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetVertexArrayIndexediv
    .get()
    .unsafe_into()
  @pointer.borrow_array(param, fn(param_p) { fp(vaobj, index, pname, param_p) })
}

///|
let d_glGetVertexArrayIntegeri_vEXT : Dispatch = Dispatch::new(
  "glGetVertexArrayIntegeri_vEXT",
)

///|
pub fn gl_get_vertex_array_integeri_v_ext(
  vaobj : UInt,
  index : UInt,
  pname : UInt,
  param : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetVertexArrayIntegeri_vEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(param, fn(param_p) { fp(vaobj, index, pname, param_p) })
}

///|
let d_glGetVertexArrayIntegervEXT : Dispatch = Dispatch::new(
  "glGetVertexArrayIntegervEXT",
)

///|
pub fn gl_get_vertex_array_integerv_ext(
  vaobj : UInt,
  pname : UInt,
  param : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetVertexArrayIntegervEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(param, fn(param_p) { fp(vaobj, pname, param_p) })
}

///|
let d_glGetVertexArrayiv : Dispatch = Dispatch::new("glGetVertexArrayiv")

///|
pub fn gl_get_vertex_arrayiv(
  vaobj : UInt,
  pname : UInt,
  param : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetVertexArrayiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(param, fn(param_p) { fp(vaobj, pname, param_p) })
}

///|
let d_glGetVertexAttribArrayObjectfvATI : Dispatch = Dispatch::new(
  "glGetVertexAttribArrayObjectfvATI",
)

///|
pub fn gl_get_vertex_attrib_array_objectfv_ati(
  index : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetVertexAttribArrayObjectfvATI
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(index, pname, params_p) })
}

///|
let d_glGetVertexAttribArrayObjectivATI : Dispatch = Dispatch::new(
  "glGetVertexAttribArrayObjectivATI",
)

///|
pub fn gl_get_vertex_attrib_array_objectiv_ati(
  index : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetVertexAttribArrayObjectivATI
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(index, pname, params_p) })
}

///|
let d_glGetVertexAttribIiv : Dispatch = Dispatch::with_aliases(
  "glGetVertexAttribIiv",
  ["glGetVertexAttribIivEXT"],
)

///|
pub fn gl_get_vertex_attrib_iiv(
  index : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetVertexAttribIiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(index, pname, params_p) })
}

///|
let d_glGetVertexAttribIivEXT : Dispatch = Dispatch::with_aliases(
  "glGetVertexAttribIivEXT",
  ["glGetVertexAttribIiv"],
)

///|
pub fn gl_get_vertex_attrib_iiv_ext(
  index : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetVertexAttribIivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(index, pname, params_p) })
}

///|
let d_glGetVertexAttribIuiv : Dispatch = Dispatch::with_aliases(
  "glGetVertexAttribIuiv",
  ["glGetVertexAttribIuivEXT"],
)

///|
pub fn gl_get_vertex_attrib_iuiv(
  index : UInt,
  pname : UInt,
  params : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[UInt]) -> Unit] = d_glGetVertexAttribIuiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(index, pname, params_p) })
}

///|
let d_glGetVertexAttribIuivEXT : Dispatch = Dispatch::with_aliases(
  "glGetVertexAttribIuivEXT",
  ["glGetVertexAttribIuiv"],
)

///|
pub fn gl_get_vertex_attrib_iuiv_ext(
  index : UInt,
  pname : UInt,
  params : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[UInt]) -> Unit] = d_glGetVertexAttribIuivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(index, pname, params_p) })
}

///|
let d_glGetVertexAttribLdv : Dispatch = Dispatch::with_aliases(
  "glGetVertexAttribLdv",
  ["glGetVertexAttribLdvEXT"],
)

///|
pub fn gl_get_vertex_attrib_ldv(
  index : UInt,
  pname : UInt,
  params : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Double]) -> Unit] = d_glGetVertexAttribLdv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(index, pname, params_p) })
}

///|
let d_glGetVertexAttribLdvEXT : Dispatch = Dispatch::with_aliases(
  "glGetVertexAttribLdvEXT",
  ["glGetVertexAttribLdv"],
)

///|
pub fn gl_get_vertex_attrib_ldv_ext(
  index : UInt,
  pname : UInt,
  params : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Double]) -> Unit] = d_glGetVertexAttribLdvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(index, pname, params_p) })
}

///|
let d_glGetVertexAttribLi64vNV : Dispatch = Dispatch::new(
  "glGetVertexAttribLi64vNV",
)

///|
pub fn gl_get_vertex_attrib_li64v_nv(
  index : UInt,
  pname : UInt,
  params : FixedArray[Int64],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int64]) -> Unit] = d_glGetVertexAttribLi64vNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(index, pname, params_p) })
}

///|
let d_glGetVertexAttribLui64vARB : Dispatch = Dispatch::new(
  "glGetVertexAttribLui64vARB",
)

///|
pub fn gl_get_vertex_attrib_lui64v_arb(
  index : UInt,
  pname : UInt,
  params : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[UInt64]) -> Unit] = d_glGetVertexAttribLui64vARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(index, pname, params_p) })
}

///|
let d_glGetVertexAttribLui64vNV : Dispatch = Dispatch::new(
  "glGetVertexAttribLui64vNV",
)

///|
pub fn gl_get_vertex_attrib_lui64v_nv(
  index : UInt,
  pname : UInt,
  params : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[UInt64]) -> Unit] = d_glGetVertexAttribLui64vNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(index, pname, params_p) })
}

///|
let d_glGetVertexAttribdv : Dispatch = Dispatch::with_aliases(
  "glGetVertexAttribdv",
  ["glGetVertexAttribdvARB", "glGetVertexAttribdvNV"],
)

///|
pub fn gl_get_vertex_attribdv(
  index : UInt,
  pname : UInt,
  params : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Double]) -> Unit] = d_glGetVertexAttribdv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(index, pname, params_p) })
}

///|
let d_glGetVertexAttribdvARB : Dispatch = Dispatch::with_aliases(
  "glGetVertexAttribdvARB",
  ["glGetVertexAttribdv", "glGetVertexAttribdvNV"],
)

///|
pub fn gl_get_vertex_attribdv_arb(
  index : UInt,
  pname : UInt,
  params : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Double]) -> Unit] = d_glGetVertexAttribdvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(index, pname, params_p) })
}

///|
let d_glGetVertexAttribdvNV : Dispatch = Dispatch::with_aliases(
  "glGetVertexAttribdvNV",
  ["glGetVertexAttribdv", "glGetVertexAttribdvARB"],
)

///|
pub fn gl_get_vertex_attribdv_nv(
  index : UInt,
  pname : UInt,
  params : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Double]) -> Unit] = d_glGetVertexAttribdvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(index, pname, params_p) })
}

///|
let d_glGetVertexAttribfv : Dispatch = Dispatch::with_aliases(
  "glGetVertexAttribfv",
  ["glGetVertexAttribfvARB", "glGetVertexAttribfvNV"],
)

///|
pub fn gl_get_vertex_attribfv(
  index : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetVertexAttribfv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(index, pname, params_p) })
}

///|
let d_glGetVertexAttribfvARB : Dispatch = Dispatch::with_aliases(
  "glGetVertexAttribfvARB",
  ["glGetVertexAttribfv", "glGetVertexAttribfvNV"],
)

///|
pub fn gl_get_vertex_attribfv_arb(
  index : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetVertexAttribfvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(index, pname, params_p) })
}

///|
let d_glGetVertexAttribfvNV : Dispatch = Dispatch::with_aliases(
  "glGetVertexAttribfvNV",
  ["glGetVertexAttribfv", "glGetVertexAttribfvARB"],
)

///|
pub fn gl_get_vertex_attribfv_nv(
  index : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetVertexAttribfvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(index, pname, params_p) })
}

///|
let d_glGetVertexAttribiv : Dispatch = Dispatch::with_aliases(
  "glGetVertexAttribiv",
  ["glGetVertexAttribivARB", "glGetVertexAttribivNV"],
)

///|
pub fn gl_get_vertex_attribiv(
  index : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetVertexAttribiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(index, pname, params_p) })
}

///|
let d_glGetVertexAttribivARB : Dispatch = Dispatch::with_aliases(
  "glGetVertexAttribivARB",
  ["glGetVertexAttribiv", "glGetVertexAttribivNV"],
)

///|
pub fn gl_get_vertex_attribiv_arb(
  index : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetVertexAttribivARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(index, pname, params_p) })
}

///|
let d_glGetVertexAttribivNV : Dispatch = Dispatch::with_aliases(
  "glGetVertexAttribivNV",
  ["glGetVertexAttribiv", "glGetVertexAttribivARB"],
)

///|
pub fn gl_get_vertex_attribiv_nv(
  index : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetVertexAttribivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(index, pname, params_p) })
}

///|
let d_glGetVideoCaptureStreamdvNV : Dispatch = Dispatch::new(
  "glGetVideoCaptureStreamdvNV",
)

///|
pub fn gl_get_video_capture_streamdv_nv(
  video_capture_slot : UInt,
  stream : UInt,
  pname : UInt,
  params : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Double]) -> Unit] = d_glGetVideoCaptureStreamdvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(video_capture_slot, stream, pname, params_p)
  })
}

///|
let d_glGetVideoCaptureStreamfvNV : Dispatch = Dispatch::new(
  "glGetVideoCaptureStreamfvNV",
)

///|
pub fn gl_get_video_capture_streamfv_nv(
  video_capture_slot : UInt,
  stream : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glGetVideoCaptureStreamfvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(video_capture_slot, stream, pname, params_p)
  })
}

///|
let d_glGetVideoCaptureStreamivNV : Dispatch = Dispatch::new(
  "glGetVideoCaptureStreamivNV",
)

///|
pub fn gl_get_video_capture_streamiv_nv(
  video_capture_slot : UInt,
  stream : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetVideoCaptureStreamivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(video_capture_slot, stream, pname, params_p)
  })
}

///|
let d_glGetVideoCaptureivNV : Dispatch = Dispatch::new("glGetVideoCaptureivNV")

///|
pub fn gl_get_video_captureiv_nv(
  video_capture_slot : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetVideoCaptureivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(video_capture_slot, pname, params_p)
  })
}

///|
let d_glGetVideoi64vNV : Dispatch = Dispatch::new("glGetVideoi64vNV")

///|
pub fn gl_get_videoi64v_nv(
  video_slot : UInt,
  pname : UInt,
  params : FixedArray[Int64],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int64]) -> Unit] = d_glGetVideoi64vNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(video_slot, pname, params_p) })
}

///|
let d_glGetVideoivNV : Dispatch = Dispatch::new("glGetVideoivNV")

///|
pub fn gl_get_videoiv_nv(
  video_slot : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetVideoivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(video_slot, pname, params_p) })
}

///|
let d_glGetVideoui64vNV : Dispatch = Dispatch::new("glGetVideoui64vNV")

///|
pub fn gl_get_videoui64v_nv(
  video_slot : UInt,
  pname : UInt,
  params : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[UInt64]) -> Unit] = d_glGetVideoui64vNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(video_slot, pname, params_p) })
}

///|
let d_glGetVideouivNV : Dispatch = Dispatch::new("glGetVideouivNV")

///|
pub fn gl_get_videouiv_nv(
  video_slot : UInt,
  pname : UInt,
  params : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[UInt]) -> Unit] = d_glGetVideouivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(video_slot, pname, params_p) })
}

///|
let d_glGetnColorTable : Dispatch = Dispatch::new("glGetnColorTable")

///|
pub fn gl_getn_color_table(
  target : UInt,
  format : UInt,
  type_ : UInt,
  bufSize : Int,
  table : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int, @pointer.Pointer[Byte]) -> Unit] = d_glGetnColorTable
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(table, fn(table_p) {
    fp(target, format, type_, bufSize, table_p)
  })
}

///|
let d_glGetnColorTableARB : Dispatch = Dispatch::new("glGetnColorTableARB")

///|
pub fn gl_getn_color_table_arb(
  target : UInt,
  format : UInt,
  type_ : UInt,
  bufSize : Int,
  table : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int, @pointer.Pointer[Byte]) -> Unit] = d_glGetnColorTableARB
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(table, fn(table_p) {
    fp(target, format, type_, bufSize, table_p)
  })
}

///|
let d_glGetnCompressedTexImage : Dispatch = Dispatch::new(
  "glGetnCompressedTexImage",
)

///|
pub fn gl_getn_compressed_tex_image(
  target : UInt,
  lod : Int,
  bufSize : Int,
  pixels : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Byte]) -> Unit] = d_glGetnCompressedTexImage
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(pixels, fn(pixels_p) {
    fp(target, lod, bufSize, pixels_p)
  })
}

///|
let d_glGetnCompressedTexImageARB : Dispatch = Dispatch::new(
  "glGetnCompressedTexImageARB",
)

///|
pub fn gl_getn_compressed_tex_image_arb(
  target : UInt,
  lod : Int,
  bufSize : Int,
  img : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Byte]) -> Unit] = d_glGetnCompressedTexImageARB
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(img, fn(img_p) { fp(target, lod, bufSize, img_p) })
}

///|
let d_glGetnConvolutionFilter : Dispatch = Dispatch::new(
  "glGetnConvolutionFilter",
)

///|
pub fn gl_getn_convolution_filter(
  target : UInt,
  format : UInt,
  type_ : UInt,
  bufSize : Int,
  image : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int, @pointer.Pointer[Byte]) -> Unit] = d_glGetnConvolutionFilter
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(image, fn(image_p) {
    fp(target, format, type_, bufSize, image_p)
  })
}

///|
let d_glGetnConvolutionFilterARB : Dispatch = Dispatch::new(
  "glGetnConvolutionFilterARB",
)

///|
pub fn gl_getn_convolution_filter_arb(
  target : UInt,
  format : UInt,
  type_ : UInt,
  bufSize : Int,
  image : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int, @pointer.Pointer[Byte]) -> Unit] = d_glGetnConvolutionFilterARB
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(image, fn(image_p) {
    fp(target, format, type_, bufSize, image_p)
  })
}

///|
let d_glGetnHistogram : Dispatch = Dispatch::new("glGetnHistogram")

///|
pub fn gl_getn_histogram(
  target : UInt,
  reset : Bool,
  format : UInt,
  type_ : UInt,
  bufSize : Int,
  values : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, Bool, UInt, UInt, Int, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glGetnHistogram.get().unsafe_into()
  @pointer.borrow_bytes(values, fn(values_p) {
    fp(target, reset, format, type_, bufSize, values_p)
  })
}

///|
let d_glGetnHistogramARB : Dispatch = Dispatch::new("glGetnHistogramARB")

///|
pub fn gl_getn_histogram_arb(
  target : UInt,
  reset : Bool,
  format : UInt,
  type_ : UInt,
  bufSize : Int,
  values : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, Bool, UInt, UInt, Int, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glGetnHistogramARB.get().unsafe_into()
  @pointer.borrow_bytes(values, fn(values_p) {
    fp(target, reset, format, type_, bufSize, values_p)
  })
}

///|
let d_glGetnMapdv : Dispatch = Dispatch::new("glGetnMapdv")

///|
pub fn gl_getn_mapdv(
  target : UInt,
  query : UInt,
  bufSize : Int,
  v : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, @pointer.Pointer[Double]) -> Unit] = d_glGetnMapdv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, query, bufSize, v_p) })
}

///|
let d_glGetnMapdvARB : Dispatch = Dispatch::new("glGetnMapdvARB")

///|
pub fn gl_getn_mapdv_arb(
  target : UInt,
  query : UInt,
  bufSize : Int,
  v : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, @pointer.Pointer[Double]) -> Unit] = d_glGetnMapdvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, query, bufSize, v_p) })
}

///|
let d_glGetnMapfv : Dispatch = Dispatch::new("glGetnMapfv")

///|
pub fn gl_getn_mapfv(
  target : UInt,
  query : UInt,
  bufSize : Int,
  v : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, @pointer.Pointer[Float]) -> Unit] = d_glGetnMapfv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, query, bufSize, v_p) })
}

///|
let d_glGetnMapfvARB : Dispatch = Dispatch::new("glGetnMapfvARB")

///|
pub fn gl_getn_mapfv_arb(
  target : UInt,
  query : UInt,
  bufSize : Int,
  v : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, @pointer.Pointer[Float]) -> Unit] = d_glGetnMapfvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, query, bufSize, v_p) })
}

///|
let d_glGetnMapiv : Dispatch = Dispatch::new("glGetnMapiv")

///|
pub fn gl_getn_mapiv(
  target : UInt,
  query : UInt,
  bufSize : Int,
  v : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, @pointer.Pointer[Int]) -> Unit] = d_glGetnMapiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, query, bufSize, v_p) })
}

///|
let d_glGetnMapivARB : Dispatch = Dispatch::new("glGetnMapivARB")

///|
pub fn gl_getn_mapiv_arb(
  target : UInt,
  query : UInt,
  bufSize : Int,
  v : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, @pointer.Pointer[Int]) -> Unit] = d_glGetnMapivARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, query, bufSize, v_p) })
}

///|
let d_glGetnMinmax : Dispatch = Dispatch::new("glGetnMinmax")

///|
pub fn gl_getn_minmax(
  target : UInt,
  reset : Bool,
  format : UInt,
  type_ : UInt,
  bufSize : Int,
  values : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, Bool, UInt, UInt, Int, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glGetnMinmax.get().unsafe_into()
  @pointer.borrow_bytes(values, fn(values_p) {
    fp(target, reset, format, type_, bufSize, values_p)
  })
}

///|
let d_glGetnMinmaxARB : Dispatch = Dispatch::new("glGetnMinmaxARB")

///|
pub fn gl_getn_minmax_arb(
  target : UInt,
  reset : Bool,
  format : UInt,
  type_ : UInt,
  bufSize : Int,
  values : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, Bool, UInt, UInt, Int, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glGetnMinmaxARB.get().unsafe_into()
  @pointer.borrow_bytes(values, fn(values_p) {
    fp(target, reset, format, type_, bufSize, values_p)
  })
}

///|
let d_glGetnPixelMapfv : Dispatch = Dispatch::new("glGetnPixelMapfv")

///|
pub fn gl_getn_pixel_mapfv(
  map : UInt,
  bufSize : Int,
  values : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Float]) -> Unit] = d_glGetnPixelMapfv
    .get()
    .unsafe_into()
  @pointer.borrow_array(values, fn(values_p) { fp(map, bufSize, values_p) })
}

///|
let d_glGetnPixelMapfvARB : Dispatch = Dispatch::new("glGetnPixelMapfvARB")

///|
pub fn gl_getn_pixel_mapfv_arb(
  map : UInt,
  bufSize : Int,
  values : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Float]) -> Unit] = d_glGetnPixelMapfvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(values, fn(values_p) { fp(map, bufSize, values_p) })
}

///|
let d_glGetnPixelMapuiv : Dispatch = Dispatch::new("glGetnPixelMapuiv")

///|
pub fn gl_getn_pixel_mapuiv(
  map : UInt,
  bufSize : Int,
  values : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[UInt]) -> Unit] = d_glGetnPixelMapuiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(values, fn(values_p) { fp(map, bufSize, values_p) })
}

///|
let d_glGetnPixelMapuivARB : Dispatch = Dispatch::new("glGetnPixelMapuivARB")

///|
pub fn gl_getn_pixel_mapuiv_arb(
  map : UInt,
  bufSize : Int,
  values : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[UInt]) -> Unit] = d_glGetnPixelMapuivARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(values, fn(values_p) { fp(map, bufSize, values_p) })
}

///|
let d_glGetnPixelMapusv : Dispatch = Dispatch::new("glGetnPixelMapusv")

///|
pub fn gl_getn_pixel_mapusv(
  map : UInt,
  bufSize : Int,
  values : FixedArray[UInt16],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[UInt16]) -> Unit] = d_glGetnPixelMapusv
    .get()
    .unsafe_into()
  @pointer.borrow_array(values, fn(values_p) { fp(map, bufSize, values_p) })
}

///|
let d_glGetnPixelMapusvARB : Dispatch = Dispatch::new("glGetnPixelMapusvARB")

///|
pub fn gl_getn_pixel_mapusv_arb(
  map : UInt,
  bufSize : Int,
  values : FixedArray[UInt16],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[UInt16]) -> Unit] = d_glGetnPixelMapusvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(values, fn(values_p) { fp(map, bufSize, values_p) })
}

///|
let d_glGetnPolygonStipple : Dispatch = Dispatch::new("glGetnPolygonStipple")

///|
pub fn gl_getn_polygon_stipple(bufSize : Int, pattern : Bytes) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[Byte]) -> Unit] = d_glGetnPolygonStipple
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(pattern, fn(pattern_p) { fp(bufSize, pattern_p) })
}

///|
let d_glGetnPolygonStippleARB : Dispatch = Dispatch::new(
  "glGetnPolygonStippleARB",
)

///|
pub fn gl_getn_polygon_stipple_arb(bufSize : Int, pattern : Bytes) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[Byte]) -> Unit] = d_glGetnPolygonStippleARB
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(pattern, fn(pattern_p) { fp(bufSize, pattern_p) })
}

///|
let d_glGetnSeparableFilter : Dispatch = Dispatch::new("glGetnSeparableFilter")

///|
pub fn gl_getn_separable_filter(
  target : UInt,
  format : UInt,
  type_ : UInt,
  rowBufSize : Int,
  row : Bytes,
  columnBufSize : Int,
  column : Bytes,
  span : Bytes,
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      UInt,
      UInt,
      Int,
      @pointer.Pointer[Byte],
      Int,
      @pointer.Pointer[Byte],
      @pointer.Pointer[Byte],
    ) -> Unit,
  ] = d_glGetnSeparableFilter.get().unsafe_into()
  @pointer.borrow_bytes(row, fn(row_p) {
    @pointer.borrow_bytes(column, fn(column_p) {
      @pointer.borrow_bytes(span, fn(span_p) {
        fp(
          target, format, type_, rowBufSize, row_p, columnBufSize, column_p, span_p,
        )
      })
    })
  })
}

///|
let d_glGetnSeparableFilterARB : Dispatch = Dispatch::new(
  "glGetnSeparableFilterARB",
)

///|
pub fn gl_getn_separable_filter_arb(
  target : UInt,
  format : UInt,
  type_ : UInt,
  rowBufSize : Int,
  row : Bytes,
  columnBufSize : Int,
  column : Bytes,
  span : Bytes,
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      UInt,
      UInt,
      Int,
      @pointer.Pointer[Byte],
      Int,
      @pointer.Pointer[Byte],
      @pointer.Pointer[Byte],
    ) -> Unit,
  ] = d_glGetnSeparableFilterARB.get().unsafe_into()
  @pointer.borrow_bytes(row, fn(row_p) {
    @pointer.borrow_bytes(column, fn(column_p) {
      @pointer.borrow_bytes(span, fn(span_p) {
        fp(
          target, format, type_, rowBufSize, row_p, columnBufSize, column_p, span_p,
        )
      })
    })
  })
}

///|
let d_glGetnTexImage : Dispatch = Dispatch::new("glGetnTexImage")

///|
pub fn gl_getn_tex_image(
  target : UInt,
  level : Int,
  format : UInt,
  type_ : UInt,
  bufSize : Int,
  pixels : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, UInt, Int, @pointer.Pointer[Byte]) -> Unit] = d_glGetnTexImage
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(pixels, fn(pixels_p) {
    fp(target, level, format, type_, bufSize, pixels_p)
  })
}

///|
let d_glGetnTexImageARB : Dispatch = Dispatch::new("glGetnTexImageARB")

///|
pub fn gl_getn_tex_image_arb(
  target : UInt,
  level : Int,
  format : UInt,
  type_ : UInt,
  bufSize : Int,
  img : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, UInt, Int, @pointer.Pointer[Byte]) -> Unit] = d_glGetnTexImageARB
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(img, fn(img_p) {
    fp(target, level, format, type_, bufSize, img_p)
  })
}

///|
let d_glGetnUniformdv : Dispatch = Dispatch::new("glGetnUniformdv")

///|
pub fn gl_getn_uniformdv(
  program : UInt,
  location : Int,
  bufSize : Int,
  params : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Double]) -> Unit] = d_glGetnUniformdv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(program, location, bufSize, params_p)
  })
}

///|
let d_glGetnUniformdvARB : Dispatch = Dispatch::new("glGetnUniformdvARB")

///|
pub fn gl_getn_uniformdv_arb(
  program : UInt,
  location : Int,
  bufSize : Int,
  params : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Double]) -> Unit] = d_glGetnUniformdvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(program, location, bufSize, params_p)
  })
}

///|
let d_glGetnUniformfv : Dispatch = Dispatch::with_aliases("glGetnUniformfv", [
  "glGetnUniformfvEXT", "glGetnUniformfvKHR",
])

///|
pub fn gl_getn_uniformfv(
  program : UInt,
  location : Int,
  bufSize : Int,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Float]) -> Unit] = d_glGetnUniformfv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(program, location, bufSize, params_p)
  })
}

///|
let d_glGetnUniformfvARB : Dispatch = Dispatch::new("glGetnUniformfvARB")

///|
pub fn gl_getn_uniformfv_arb(
  program : UInt,
  location : Int,
  bufSize : Int,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Float]) -> Unit] = d_glGetnUniformfvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(program, location, bufSize, params_p)
  })
}

///|
let d_glGetnUniformfvEXT : Dispatch = Dispatch::with_aliases(
  "glGetnUniformfvEXT",
  ["glGetnUniformfv", "glGetnUniformfvKHR"],
)

///|
pub fn gl_getn_uniformfv_ext(
  program : UInt,
  location : Int,
  bufSize : Int,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Float]) -> Unit] = d_glGetnUniformfvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(program, location, bufSize, params_p)
  })
}

///|
let d_glGetnUniformfvKHR : Dispatch = Dispatch::with_aliases(
  "glGetnUniformfvKHR",
  ["glGetnUniformfv", "glGetnUniformfvEXT"],
)

///|
pub fn gl_getn_uniformfv_khr(
  program : UInt,
  location : Int,
  bufSize : Int,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Float]) -> Unit] = d_glGetnUniformfvKHR
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(program, location, bufSize, params_p)
  })
}

///|
let d_glGetnUniformi64vARB : Dispatch = Dispatch::new("glGetnUniformi64vARB")

///|
pub fn gl_getn_uniformi64v_arb(
  program : UInt,
  location : Int,
  bufSize : Int,
  params : FixedArray[Int64],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Int64]) -> Unit] = d_glGetnUniformi64vARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(program, location, bufSize, params_p)
  })
}

///|
let d_glGetnUniformiv : Dispatch = Dispatch::with_aliases("glGetnUniformiv", [
  "glGetnUniformivEXT", "glGetnUniformivKHR",
])

///|
pub fn gl_getn_uniformiv(
  program : UInt,
  location : Int,
  bufSize : Int,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Int]) -> Unit] = d_glGetnUniformiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(program, location, bufSize, params_p)
  })
}

///|
let d_glGetnUniformivARB : Dispatch = Dispatch::new("glGetnUniformivARB")

///|
pub fn gl_getn_uniformiv_arb(
  program : UInt,
  location : Int,
  bufSize : Int,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Int]) -> Unit] = d_glGetnUniformivARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(program, location, bufSize, params_p)
  })
}

///|
let d_glGetnUniformivEXT : Dispatch = Dispatch::with_aliases(
  "glGetnUniformivEXT",
  ["glGetnUniformiv", "glGetnUniformivKHR"],
)

///|
pub fn gl_getn_uniformiv_ext(
  program : UInt,
  location : Int,
  bufSize : Int,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Int]) -> Unit] = d_glGetnUniformivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(program, location, bufSize, params_p)
  })
}

///|
let d_glGetnUniformivKHR : Dispatch = Dispatch::with_aliases(
  "glGetnUniformivKHR",
  ["glGetnUniformiv", "glGetnUniformivEXT"],
)

///|
pub fn gl_getn_uniformiv_khr(
  program : UInt,
  location : Int,
  bufSize : Int,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Int]) -> Unit] = d_glGetnUniformivKHR
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(program, location, bufSize, params_p)
  })
}

///|
let d_glGetnUniformui64vARB : Dispatch = Dispatch::new("glGetnUniformui64vARB")

///|
pub fn gl_getn_uniformui64v_arb(
  program : UInt,
  location : Int,
  bufSize : Int,
  params : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[UInt64]) -> Unit] = d_glGetnUniformui64vARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(program, location, bufSize, params_p)
  })
}

///|
let d_glGetnUniformuiv : Dispatch = Dispatch::with_aliases("glGetnUniformuiv", [
  "glGetnUniformuivKHR",
])

///|
pub fn gl_getn_uniformuiv(
  program : UInt,
  location : Int,
  bufSize : Int,
  params : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[UInt]) -> Unit] = d_glGetnUniformuiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(program, location, bufSize, params_p)
  })
}

///|
let d_glGetnUniformuivARB : Dispatch = Dispatch::new("glGetnUniformuivARB")

///|
pub fn gl_getn_uniformuiv_arb(
  program : UInt,
  location : Int,
  bufSize : Int,
  params : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[UInt]) -> Unit] = d_glGetnUniformuivARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(program, location, bufSize, params_p)
  })
}

///|
let d_glGetnUniformuivKHR : Dispatch = Dispatch::with_aliases(
  "glGetnUniformuivKHR",
  ["glGetnUniformuiv"],
)

///|
pub fn gl_getn_uniformuiv_khr(
  program : UInt,
  location : Int,
  bufSize : Int,
  params : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[UInt]) -> Unit] = d_glGetnUniformuivKHR
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(program, location, bufSize, params_p)
  })
}

///|
let d_glGlobalAlphaFactorbSUN : Dispatch = Dispatch::new(
  "glGlobalAlphaFactorbSUN",
)

///|
pub fn gl_global_alpha_factorb_sun(factor : Int) -> Unit {
  let fp : FuncRef[(Int) -> Unit] = d_glGlobalAlphaFactorbSUN
    .get()
    .unsafe_into()
  fp(factor)
}

///|
let d_glGlobalAlphaFactordSUN : Dispatch = Dispatch::new(
  "glGlobalAlphaFactordSUN",
)

///|
pub fn gl_global_alpha_factord_sun(factor : Double) -> Unit {
  let fp : FuncRef[(Double) -> Unit] = d_glGlobalAlphaFactordSUN
    .get()
    .unsafe_into()
  fp(factor)
}

///|
let d_glGlobalAlphaFactorfSUN : Dispatch = Dispatch::new(
  "glGlobalAlphaFactorfSUN",
)

///|
pub fn gl_global_alpha_factorf_sun(factor : Float) -> Unit {
  let fp : FuncRef[(Float) -> Unit] = d_glGlobalAlphaFactorfSUN
    .get()
    .unsafe_into()
  fp(factor)
}

///|
let d_glGlobalAlphaFactoriSUN : Dispatch = Dispatch::new(
  "glGlobalAlphaFactoriSUN",
)

///|
pub fn gl_global_alpha_factori_sun(factor : Int) -> Unit {
  let fp : FuncRef[(Int) -> Unit] = d_glGlobalAlphaFactoriSUN
    .get()
    .unsafe_into()
  fp(factor)
}

///|
let d_glGlobalAlphaFactorsSUN : Dispatch = Dispatch::new(
  "glGlobalAlphaFactorsSUN",
)

///|
pub fn gl_global_alpha_factors_sun(factor : Int) -> Unit {
  let fp : FuncRef[(Int) -> Unit] = d_glGlobalAlphaFactorsSUN
    .get()
    .unsafe_into()
  fp(factor)
}

///|
let d_glGlobalAlphaFactorubSUN : Dispatch = Dispatch::new(
  "glGlobalAlphaFactorubSUN",
)

///|
pub fn gl_global_alpha_factorub_sun(factor : Int) -> Unit {
  let fp : FuncRef[(Int) -> Unit] = d_glGlobalAlphaFactorubSUN
    .get()
    .unsafe_into()
  fp(factor)
}

///|
let d_glGlobalAlphaFactoruiSUN : Dispatch = Dispatch::new(
  "glGlobalAlphaFactoruiSUN",
)

///|
pub fn gl_global_alpha_factorui_sun(factor : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glGlobalAlphaFactoruiSUN
    .get()
    .unsafe_into()
  fp(factor)
}

///|
let d_glGlobalAlphaFactorusSUN : Dispatch = Dispatch::new(
  "glGlobalAlphaFactorusSUN",
)

///|
pub fn gl_global_alpha_factorus_sun(factor : Int) -> Unit {
  let fp : FuncRef[(Int) -> Unit] = d_glGlobalAlphaFactorusSUN
    .get()
    .unsafe_into()
  fp(factor)
}

///|
let d_glHint : Dispatch = Dispatch::new("glHint")

///|
pub fn gl_hint(target : UInt, mode : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glHint.get().unsafe_into()
  fp(target, mode)
}

///|
let d_glHintPGI : Dispatch = Dispatch::new("glHintPGI")

///|
pub fn gl_hint_pgi(target : UInt, mode : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glHintPGI.get().unsafe_into()
  fp(target, mode)
}

///|
let d_glHistogram : Dispatch = Dispatch::with_aliases("glHistogram", [
  "glHistogramEXT",
])

///|
pub fn gl_histogram(
  target : UInt,
  width : Int,
  internalformat : UInt,
  sink : Bool,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Bool) -> Unit] = d_glHistogram
    .get()
    .unsafe_into()
  fp(target, width, internalformat, sink)
}

///|
let d_glHistogramEXT : Dispatch = Dispatch::with_aliases("glHistogramEXT", [
  "glHistogram",
])

///|
pub fn gl_histogram_ext(
  target : UInt,
  width : Int,
  internalformat : UInt,
  sink : Bool,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Bool) -> Unit] = d_glHistogramEXT
    .get()
    .unsafe_into()
  fp(target, width, internalformat, sink)
}

///|
let d_glIglooInterfaceSGIX : Dispatch = Dispatch::new("glIglooInterfaceSGIX")

///|
pub fn gl_igloo_interface_sgix(pname : UInt, params : Bytes) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Byte]) -> Unit] = d_glIglooInterfaceSGIX
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(params, fn(params_p) { fp(pname, params_p) })
}

///|
let d_glImageTransformParameterfHP : Dispatch = Dispatch::new(
  "glImageTransformParameterfHP",
)

///|
pub fn gl_image_transform_parameterf_hp(
  target : UInt,
  pname : UInt,
  param : Float,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Float) -> Unit] = d_glImageTransformParameterfHP
    .get()
    .unsafe_into()
  fp(target, pname, param)
}

///|
let d_glImageTransformParameterfvHP : Dispatch = Dispatch::new(
  "glImageTransformParameterfvHP",
)

///|
pub fn gl_image_transform_parameterfv_hp(
  target : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glImageTransformParameterfvHP
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glImageTransformParameteriHP : Dispatch = Dispatch::new(
  "glImageTransformParameteriHP",
)

///|
pub fn gl_image_transform_parameteri_hp(
  target : UInt,
  pname : UInt,
  param : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int) -> Unit] = d_glImageTransformParameteriHP
    .get()
    .unsafe_into()
  fp(target, pname, param)
}

///|
let d_glImageTransformParameterivHP : Dispatch = Dispatch::new(
  "glImageTransformParameterivHP",
)

///|
pub fn gl_image_transform_parameteriv_hp(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glImageTransformParameterivHP
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glImportMemoryFdEXT : Dispatch = Dispatch::new("glImportMemoryFdEXT")

///|
pub fn gl_import_memory_fd_ext(
  memory : UInt,
  size : UInt64,
  handleType : UInt,
  fd : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt64, UInt, Int) -> Unit] = d_glImportMemoryFdEXT
    .get()
    .unsafe_into()
  fp(memory, size, handleType, fd)
}

///|
let d_glImportMemoryWin32HandleEXT : Dispatch = Dispatch::new(
  "glImportMemoryWin32HandleEXT",
)

///|
pub fn gl_import_memory_win32_handle_ext(
  memory : UInt,
  size : UInt64,
  handleType : UInt,
  handle : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, UInt64, UInt, @pointer.Pointer[Byte]) -> Unit] = d_glImportMemoryWin32HandleEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(handle, fn(handle_p) {
    fp(memory, size, handleType, handle_p)
  })
}

///|
let d_glImportMemoryWin32NameEXT : Dispatch = Dispatch::new(
  "glImportMemoryWin32NameEXT",
)

///|
pub fn gl_import_memory_win32_name_ext(
  memory : UInt,
  size : UInt64,
  handleType : UInt,
  name : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, UInt64, UInt, @pointer.Pointer[Byte]) -> Unit] = d_glImportMemoryWin32NameEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(name, fn(name_p) {
    fp(memory, size, handleType, name_p)
  })
}

///|
let d_glImportSemaphoreFdEXT : Dispatch = Dispatch::new(
  "glImportSemaphoreFdEXT",
)

///|
pub fn gl_import_semaphore_fd_ext(
  semaphore : UInt,
  handleType : UInt,
  fd : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int) -> Unit] = d_glImportSemaphoreFdEXT
    .get()
    .unsafe_into()
  fp(semaphore, handleType, fd)
}

///|
let d_glImportSemaphoreWin32HandleEXT : Dispatch = Dispatch::new(
  "glImportSemaphoreWin32HandleEXT",
)

///|
pub fn gl_import_semaphore_win32_handle_ext(
  semaphore : UInt,
  handleType : UInt,
  handle : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Byte]) -> Unit] = d_glImportSemaphoreWin32HandleEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(handle, fn(handle_p) {
    fp(semaphore, handleType, handle_p)
  })
}

///|
let d_glImportSemaphoreWin32NameEXT : Dispatch = Dispatch::new(
  "glImportSemaphoreWin32NameEXT",
)

///|
pub fn gl_import_semaphore_win32_name_ext(
  semaphore : UInt,
  handleType : UInt,
  name : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Byte]) -> Unit] = d_glImportSemaphoreWin32NameEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(name, fn(name_p) { fp(semaphore, handleType, name_p) })
}

///|
let d_glImportSyncEXT : Dispatch = Dispatch::new("glImportSyncEXT")

///|
pub fn gl_import_sync_ext(
  external_sync_type : UInt,
  external_sync : Int64,
  flags : UInt,
) -> GLsync {
  let fp : FuncRef[(UInt, Int64, UInt) -> GLsync] = d_glImportSyncEXT
    .get()
    .unsafe_into()
  fp(external_sync_type, external_sync, flags)
}

///|
let d_glIndexFormatNV : Dispatch = Dispatch::new("glIndexFormatNV")

///|
pub fn gl_index_format_nv(type_ : UInt, stride : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glIndexFormatNV.get().unsafe_into()
  fp(type_, stride)
}

///|
let d_glIndexFuncEXT : Dispatch = Dispatch::new("glIndexFuncEXT")

///|
pub fn gl_index_func_ext(func : UInt, ref_ : Float) -> Unit {
  let fp : FuncRef[(UInt, Float) -> Unit] = d_glIndexFuncEXT.get().unsafe_into()
  fp(func, ref_)
}

///|
let d_glIndexMask : Dispatch = Dispatch::new("glIndexMask")

///|
pub fn gl_index_mask(mask : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glIndexMask.get().unsafe_into()
  fp(mask)
}

///|
let d_glIndexMaterialEXT : Dispatch = Dispatch::new("glIndexMaterialEXT")

///|
pub fn gl_index_material_ext(face : UInt, mode : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glIndexMaterialEXT
    .get()
    .unsafe_into()
  fp(face, mode)
}

///|
let d_glIndexPointer : Dispatch = Dispatch::new("glIndexPointer")

///|
/// Configure a vertex array from the buffer currently bound to `GL_ARRAY_BUFFER`.
/// `offset` is a byte offset; client-side arrays are not accepted.
pub fn gl_index_pointer(type_ : UInt, stride : Int, offset : Int64) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Unit]) -> Unit] = d_glIndexPointer
    .get()
    .unsafe_into()
  fp(type_, stride, @pointer.Pointer::unsafe_from_int64(offset))
}

///|
let d_glIndexPointerEXT : Dispatch = Dispatch::new("glIndexPointerEXT")

///|
pub fn gl_index_pointer_ext(
  type_ : UInt,
  stride : Int,
  count : Int,
  pointer : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Byte]) -> Unit] = d_glIndexPointerEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(pointer, fn(pointer_p) {
    fp(type_, stride, count, pointer_p)
  })
}

///|
let d_glIndexd : Dispatch = Dispatch::new("glIndexd")

///|
pub fn gl_indexd(c : Double) -> Unit {
  let fp : FuncRef[(Double) -> Unit] = d_glIndexd.get().unsafe_into()
  fp(c)
}

///|
let d_glIndexdv : Dispatch = Dispatch::new("glIndexdv")

///|
pub fn gl_indexdv(c : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Double]) -> Unit] = d_glIndexdv
    .get()
    .unsafe_into()
  @pointer.borrow_array(c, fn(c_p) { fp(c_p) })
}

///|
let d_glIndexf : Dispatch = Dispatch::new("glIndexf")

///|
pub fn gl_indexf(c : Float) -> Unit {
  let fp : FuncRef[(Float) -> Unit] = d_glIndexf.get().unsafe_into()
  fp(c)
}

///|
let d_glIndexfv : Dispatch = Dispatch::new("glIndexfv")

///|
pub fn gl_indexfv(c : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Float]) -> Unit] = d_glIndexfv
    .get()
    .unsafe_into()
  @pointer.borrow_array(c, fn(c_p) { fp(c_p) })
}

///|
let d_glIndexi : Dispatch = Dispatch::new("glIndexi")

///|
pub fn gl_indexi(c : Int) -> Unit {
  let fp : FuncRef[(Int) -> Unit] = d_glIndexi.get().unsafe_into()
  fp(c)
}

///|
let d_glIndexiv : Dispatch = Dispatch::new("glIndexiv")

///|
pub fn gl_indexiv(c : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glIndexiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(c, fn(c_p) { fp(c_p) })
}

///|
let d_glIndexs : Dispatch = Dispatch::new("glIndexs")

///|
pub fn gl_indexs(c : Int) -> Unit {
  let fp : FuncRef[(Int) -> Unit] = d_glIndexs.get().unsafe_into()
  fp(c)
}

///|
let d_glIndexsv : Dispatch = Dispatch::new("glIndexsv")

///|
pub fn gl_indexsv(c : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int16]) -> Unit] = d_glIndexsv
    .get()
    .unsafe_into()
  @pointer.borrow_array(c, fn(c_p) { fp(c_p) })
}

///|
let d_glIndexub : Dispatch = Dispatch::new("glIndexub")

///|
pub fn gl_indexub(c : Int) -> Unit {
  let fp : FuncRef[(Int) -> Unit] = d_glIndexub.get().unsafe_into()
  fp(c)
}

///|
let d_glIndexubv : Dispatch = Dispatch::new("glIndexubv")

///|
pub fn gl_indexubv(c : Bytes) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Byte]) -> Unit] = d_glIndexubv
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(c, fn(c_p) { fp(c_p) })
}

///|
let d_glIndexxOES : Dispatch = Dispatch::new("glIndexxOES")

///|
pub fn gl_indexx_oes(component : Int) -> Unit {
  let fp : FuncRef[(Int) -> Unit] = d_glIndexxOES.get().unsafe_into()
  fp(component)
}

///|
let d_glIndexxvOES : Dispatch = Dispatch::new("glIndexxvOES")

///|
pub fn gl_indexxv_oes(component : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glIndexxvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(component, fn(component_p) { fp(component_p) })
}

///|
let d_glInitNames : Dispatch = Dispatch::new("glInitNames")

///|
pub fn gl_init_names() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glInitNames.get().unsafe_into()
  fp()
}

///|
let d_glInsertComponentEXT : Dispatch = Dispatch::new("glInsertComponentEXT")

///|
pub fn gl_insert_component_ext(res : UInt, src : UInt, num : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glInsertComponentEXT
    .get()
    .unsafe_into()
  fp(res, src, num)
}

///|
let d_glInsertEventMarkerEXT : Dispatch = Dispatch::new(
  "glInsertEventMarkerEXT",
)

///|
pub fn gl_insert_event_marker_ext(length : Int, marker : Bytes) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[Byte]) -> Unit] = d_glInsertEventMarkerEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(marker, fn(marker_p) { fp(length, marker_p) })
}

///|
let d_glInstrumentsBufferSGIX : Dispatch = Dispatch::new(
  "glInstrumentsBufferSGIX",
)

///|
pub fn gl_instruments_buffer_sgix(size : Int, buffer : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[Int]) -> Unit] = d_glInstrumentsBufferSGIX
    .get()
    .unsafe_into()
  @pointer.borrow_array(buffer, fn(buffer_p) { fp(size, buffer_p) })
}

///|
let d_glInterleavedArrays : Dispatch = Dispatch::new("glInterleavedArrays")

///|
/// Configure a vertex array from the buffer currently bound to `GL_ARRAY_BUFFER`.
/// `offset` is a byte offset; client-side arrays are not accepted.
pub fn gl_interleaved_arrays(
  format : UInt,
  stride : Int,
  offset : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Unit]) -> Unit] = d_glInterleavedArrays
    .get()
    .unsafe_into()
  fp(format, stride, @pointer.Pointer::unsafe_from_int64(offset))
}

///|
let d_glInterpolatePathsNV : Dispatch = Dispatch::new("glInterpolatePathsNV")

///|
pub fn gl_interpolate_paths_nv(
  resultPath : UInt,
  pathA : UInt,
  pathB : UInt,
  weight : Float,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Float) -> Unit] = d_glInterpolatePathsNV
    .get()
    .unsafe_into()
  fp(resultPath, pathA, pathB, weight)
}

///|
let d_glInvalidateBufferData : Dispatch = Dispatch::new(
  "glInvalidateBufferData",
)

///|
pub fn gl_invalidate_buffer_data(buffer : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glInvalidateBufferData
    .get()
    .unsafe_into()
  fp(buffer)
}

///|
let d_glInvalidateBufferSubData : Dispatch = Dispatch::new(
  "glInvalidateBufferSubData",
)

///|
pub fn gl_invalidate_buffer_sub_data(
  buffer : UInt,
  offset : Int64,
  length : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, Int64, Int64) -> Unit] = d_glInvalidateBufferSubData
    .get()
    .unsafe_into()
  fp(buffer, offset, length)
}

///|
let d_glInvalidateFramebuffer : Dispatch = Dispatch::new(
  "glInvalidateFramebuffer",
)

///|
pub fn gl_invalidate_framebuffer(
  target : UInt,
  numAttachments : Int,
  attachments : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[UInt]) -> Unit] = d_glInvalidateFramebuffer
    .get()
    .unsafe_into()
  @pointer.borrow_array(attachments, fn(attachments_p) {
    fp(target, numAttachments, attachments_p)
  })
}

///|
let d_glInvalidateNamedFramebufferData : Dispatch = Dispatch::new(
  "glInvalidateNamedFramebufferData",
)

///|
pub fn gl_invalidate_named_framebuffer_data(
  framebuffer : UInt,
  numAttachments : Int,
  attachments : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[UInt]) -> Unit] = d_glInvalidateNamedFramebufferData
    .get()
    .unsafe_into()
  @pointer.borrow_array(attachments, fn(attachments_p) {
    fp(framebuffer, numAttachments, attachments_p)
  })
}

///|
let d_glInvalidateNamedFramebufferSubData : Dispatch = Dispatch::new(
  "glInvalidateNamedFramebufferSubData",
)

///|
pub fn gl_invalidate_named_framebuffer_sub_data(
  framebuffer : UInt,
  numAttachments : Int,
  attachments : FixedArray[UInt],
  x : Int,
  y : Int,
  width : Int,
  height : Int,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, @pointer.Pointer[UInt], Int, Int, Int, Int) -> Unit,
  ] = d_glInvalidateNamedFramebufferSubData.get().unsafe_into()
  @pointer.borrow_array(attachments, fn(attachments_p) {
    fp(framebuffer, numAttachments, attachments_p, x, y, width, height)
  })
}

///|
let d_glInvalidateSubFramebuffer : Dispatch = Dispatch::new(
  "glInvalidateSubFramebuffer",
)

///|
pub fn gl_invalidate_sub_framebuffer(
  target : UInt,
  numAttachments : Int,
  attachments : FixedArray[UInt],
  x : Int,
  y : Int,
  width : Int,
  height : Int,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, @pointer.Pointer[UInt], Int, Int, Int, Int) -> Unit,
  ] = d_glInvalidateSubFramebuffer.get().unsafe_into()
  @pointer.borrow_array(attachments, fn(attachments_p) {
    fp(target, numAttachments, attachments_p, x, y, width, height)
  })
}

///|
let d_glInvalidateTexImage : Dispatch = Dispatch::new("glInvalidateTexImage")

///|
pub fn gl_invalidate_tex_image(texture : UInt, level : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glInvalidateTexImage
    .get()
    .unsafe_into()
  fp(texture, level)
}

///|
let d_glInvalidateTexSubImage : Dispatch = Dispatch::new(
  "glInvalidateTexSubImage",
)

///|
pub fn gl_invalidate_tex_sub_image(
  texture : UInt,
  level : Int,
  xoffset : Int,
  yoffset : Int,
  zoffset : Int,
  width : Int,
  height : Int,
  depth : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int, Int, Int, Int) -> Unit] = d_glInvalidateTexSubImage
    .get()
    .unsafe_into()
  fp(texture, level, xoffset, yoffset, zoffset, width, height, depth)
}

///|
let d_glIsAsyncMarkerSGIX : Dispatch = Dispatch::new("glIsAsyncMarkerSGIX")

///|
pub fn gl_is_async_marker_sgix(marker : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glIsAsyncMarkerSGIX.get().unsafe_into()
  (fp(marker) & 0xFF) != 0
}

///|
let d_glIsBuffer : Dispatch = Dispatch::with_aliases("glIsBuffer", [
  "glIsBufferARB",
])

///|
pub fn gl_is_buffer(buffer : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glIsBuffer.get().unsafe_into()
  (fp(buffer) & 0xFF) != 0
}

///|
let d_glIsBufferARB : Dispatch = Dispatch::with_aliases("glIsBufferARB", [
  "glIsBuffer",
])

///|
pub fn gl_is_buffer_arb(buffer : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glIsBufferARB.get().unsafe_into()
  (fp(buffer) & 0xFF) != 0
}

///|
let d_glIsBufferResidentNV : Dispatch = Dispatch::new("glIsBufferResidentNV")

///|
pub fn gl_is_buffer_resident_nv(target : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glIsBufferResidentNV.get().unsafe_into()
  (fp(target) & 0xFF) != 0
}

///|
let d_glIsCommandListNV : Dispatch = Dispatch::new("glIsCommandListNV")

///|
pub fn gl_is_command_list_nv(list : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glIsCommandListNV.get().unsafe_into()
  (fp(list) & 0xFF) != 0
}

///|
let d_glIsEnabled : Dispatch = Dispatch::new("glIsEnabled")

///|
pub fn gl_is_enabled(cap : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glIsEnabled.get().unsafe_into()
  (fp(cap) & 0xFF) != 0
}

///|
let d_glIsEnabledIndexedEXT : Dispatch = Dispatch::with_aliases(
  "glIsEnabledIndexedEXT",
  ["glIsEnabledi", "glIsEnablediEXT", "glIsEnablediNV", "glIsEnablediOES"],
)

///|
pub fn gl_is_enabled_indexed_ext(target : UInt, index : UInt) -> Bool {
  let fp : FuncRef[(UInt, UInt) -> Int] = d_glIsEnabledIndexedEXT
    .get()
    .unsafe_into()
  (fp(target, index) & 0xFF) != 0
}

///|
let d_glIsEnabledi : Dispatch = Dispatch::with_aliases("glIsEnabledi", [
  "glIsEnabledIndexedEXT", "glIsEnablediEXT", "glIsEnablediNV", "glIsEnablediOES",
])

///|
pub fn gl_is_enabledi(target : UInt, index : UInt) -> Bool {
  let fp : FuncRef[(UInt, UInt) -> Int] = d_glIsEnabledi.get().unsafe_into()
  (fp(target, index) & 0xFF) != 0
}

///|
let d_glIsEnablediEXT : Dispatch = Dispatch::with_aliases("glIsEnablediEXT", [
  "glIsEnabledIndexedEXT", "glIsEnabledi", "glIsEnablediNV", "glIsEnablediOES",
])

///|
pub fn gl_is_enabledi_ext(target : UInt, index : UInt) -> Bool {
  let fp : FuncRef[(UInt, UInt) -> Int] = d_glIsEnablediEXT.get().unsafe_into()
  (fp(target, index) & 0xFF) != 0
}

///|
let d_glIsEnablediNV : Dispatch = Dispatch::with_aliases("glIsEnablediNV", [
  "glIsEnabledIndexedEXT", "glIsEnabledi", "glIsEnablediEXT", "glIsEnablediOES",
])

///|
pub fn gl_is_enabledi_nv(target : UInt, index : UInt) -> Bool {
  let fp : FuncRef[(UInt, UInt) -> Int] = d_glIsEnablediNV.get().unsafe_into()
  (fp(target, index) & 0xFF) != 0
}

///|
let d_glIsEnablediOES : Dispatch = Dispatch::with_aliases("glIsEnablediOES", [
  "glIsEnabledIndexedEXT", "glIsEnabledi", "glIsEnablediEXT", "glIsEnablediNV",
])

///|
pub fn gl_is_enabledi_oes(target : UInt, index : UInt) -> Bool {
  let fp : FuncRef[(UInt, UInt) -> Int] = d_glIsEnablediOES.get().unsafe_into()
  (fp(target, index) & 0xFF) != 0
}

///|
let d_glIsFenceAPPLE : Dispatch = Dispatch::new("glIsFenceAPPLE")

///|
pub fn gl_is_fence_apple(fence : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glIsFenceAPPLE.get().unsafe_into()
  (fp(fence) & 0xFF) != 0
}

///|
let d_glIsFenceNV : Dispatch = Dispatch::new("glIsFenceNV")

///|
pub fn gl_is_fence_nv(fence : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glIsFenceNV.get().unsafe_into()
  (fp(fence) & 0xFF) != 0
}

///|
let d_glIsFramebuffer : Dispatch = Dispatch::with_aliases("glIsFramebuffer", [
  "glIsFramebufferEXT",
])

///|
pub fn gl_is_framebuffer(framebuffer : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glIsFramebuffer.get().unsafe_into()
  (fp(framebuffer) & 0xFF) != 0
}

///|
let d_glIsFramebufferEXT : Dispatch = Dispatch::with_aliases(
  "glIsFramebufferEXT",
  ["glIsFramebuffer"],
)

///|
pub fn gl_is_framebuffer_ext(framebuffer : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glIsFramebufferEXT.get().unsafe_into()
  (fp(framebuffer) & 0xFF) != 0
}

///|
let d_glIsFramebufferOES : Dispatch = Dispatch::new("glIsFramebufferOES")

///|
pub fn gl_is_framebuffer_oes(framebuffer : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glIsFramebufferOES.get().unsafe_into()
  (fp(framebuffer) & 0xFF) != 0
}

///|
let d_glIsImageHandleResidentARB : Dispatch = Dispatch::new(
  "glIsImageHandleResidentARB",
)

///|
pub fn gl_is_image_handle_resident_arb(handle : UInt64) -> Bool {
  let fp : FuncRef[(UInt64) -> Int] = d_glIsImageHandleResidentARB
    .get()
    .unsafe_into()
  (fp(handle) & 0xFF) != 0
}

///|
let d_glIsImageHandleResidentNV : Dispatch = Dispatch::new(
  "glIsImageHandleResidentNV",
)

///|
pub fn gl_is_image_handle_resident_nv(handle : UInt64) -> Bool {
  let fp : FuncRef[(UInt64) -> Int] = d_glIsImageHandleResidentNV
    .get()
    .unsafe_into()
  (fp(handle) & 0xFF) != 0
}

///|
let d_glIsList : Dispatch = Dispatch::new("glIsList")

///|
pub fn gl_is_list(list : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glIsList.get().unsafe_into()
  (fp(list) & 0xFF) != 0
}

///|
let d_glIsMemoryObjectEXT : Dispatch = Dispatch::new("glIsMemoryObjectEXT")

///|
pub fn gl_is_memory_object_ext(memoryObject : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glIsMemoryObjectEXT.get().unsafe_into()
  (fp(memoryObject) & 0xFF) != 0
}

///|
let d_glIsNameAMD : Dispatch = Dispatch::new("glIsNameAMD")

///|
pub fn gl_is_name_amd(identifier : UInt, name : UInt) -> Bool {
  let fp : FuncRef[(UInt, UInt) -> Int] = d_glIsNameAMD.get().unsafe_into()
  (fp(identifier, name) & 0xFF) != 0
}

///|
let d_glIsNamedBufferResidentNV : Dispatch = Dispatch::new(
  "glIsNamedBufferResidentNV",
)

///|
pub fn gl_is_named_buffer_resident_nv(buffer : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glIsNamedBufferResidentNV
    .get()
    .unsafe_into()
  (fp(buffer) & 0xFF) != 0
}

///|
let d_glIsNamedStringARB : Dispatch = Dispatch::new("glIsNamedStringARB")

///|
pub fn gl_is_named_string_arb(namelen : Int, name : Bytes) -> Bool {
  let fp : FuncRef[(Int, @pointer.Pointer[Byte]) -> Int] = d_glIsNamedStringARB
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(name, fn(name_p) { (fp(namelen, name_p) & 0xFF) != 0 })
}

///|
let d_glIsObjectBufferATI : Dispatch = Dispatch::new("glIsObjectBufferATI")

///|
pub fn gl_is_object_buffer_ati(buffer : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glIsObjectBufferATI.get().unsafe_into()
  (fp(buffer) & 0xFF) != 0
}

///|
let d_glIsOcclusionQueryNV : Dispatch = Dispatch::new("glIsOcclusionQueryNV")

///|
pub fn gl_is_occlusion_query_nv(id : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glIsOcclusionQueryNV.get().unsafe_into()
  (fp(id) & 0xFF) != 0
}

///|
let d_glIsPathNV : Dispatch = Dispatch::new("glIsPathNV")

///|
pub fn gl_is_path_nv(path : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glIsPathNV.get().unsafe_into()
  (fp(path) & 0xFF) != 0
}

///|
let d_glIsPointInFillPathNV : Dispatch = Dispatch::new("glIsPointInFillPathNV")

///|
pub fn gl_is_point_in_fill_path_nv(
  path : UInt,
  mask : UInt,
  x : Float,
  y : Float,
) -> Bool {
  let fp : FuncRef[(UInt, UInt, Float, Float) -> Int] = d_glIsPointInFillPathNV
    .get()
    .unsafe_into()
  (fp(path, mask, x, y) & 0xFF) != 0
}

///|
let d_glIsPointInStrokePathNV : Dispatch = Dispatch::new(
  "glIsPointInStrokePathNV",
)

///|
pub fn gl_is_point_in_stroke_path_nv(path : UInt, x : Float, y : Float) -> Bool {
  let fp : FuncRef[(UInt, Float, Float) -> Int] = d_glIsPointInStrokePathNV
    .get()
    .unsafe_into()
  (fp(path, x, y) & 0xFF) != 0
}

///|
let d_glIsProgram : Dispatch = Dispatch::new("glIsProgram")

///|
pub fn gl_is_program(program : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glIsProgram.get().unsafe_into()
  (fp(program) & 0xFF) != 0
}

///|
let d_glIsProgramARB : Dispatch = Dispatch::with_aliases("glIsProgramARB", [
  "glIsProgramNV",
])

///|
pub fn gl_is_program_arb(program : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glIsProgramARB.get().unsafe_into()
  (fp(program) & 0xFF) != 0
}

///|
let d_glIsProgramNV : Dispatch = Dispatch::with_aliases("glIsProgramNV", [
  "glIsProgramARB",
])

///|
pub fn gl_is_program_nv(id : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glIsProgramNV.get().unsafe_into()
  (fp(id) & 0xFF) != 0
}

///|
let d_glIsProgramPipeline : Dispatch = Dispatch::new("glIsProgramPipeline")

///|
pub fn gl_is_program_pipeline(pipeline : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glIsProgramPipeline.get().unsafe_into()
  (fp(pipeline) & 0xFF) != 0
}

///|
let d_glIsProgramPipelineEXT : Dispatch = Dispatch::new(
  "glIsProgramPipelineEXT",
)

///|
pub fn gl_is_program_pipeline_ext(pipeline : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glIsProgramPipelineEXT.get().unsafe_into()
  (fp(pipeline) & 0xFF) != 0
}

///|
let d_glIsQuery : Dispatch = Dispatch::with_aliases("glIsQuery", [
  "glIsQueryARB",
])

///|
pub fn gl_is_query(id : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glIsQuery.get().unsafe_into()
  (fp(id) & 0xFF) != 0
}

///|
let d_glIsQueryARB : Dispatch = Dispatch::with_aliases("glIsQueryARB", [
  "glIsQuery",
])

///|
pub fn gl_is_query_arb(id : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glIsQueryARB.get().unsafe_into()
  (fp(id) & 0xFF) != 0
}

///|
let d_glIsQueryEXT : Dispatch = Dispatch::new("glIsQueryEXT")

///|
pub fn gl_is_query_ext(id : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glIsQueryEXT.get().unsafe_into()
  (fp(id) & 0xFF) != 0
}

///|
let d_glIsRenderbuffer : Dispatch = Dispatch::with_aliases("glIsRenderbuffer", [
  "glIsRenderbufferEXT",
])

///|
pub fn gl_is_renderbuffer(renderbuffer : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glIsRenderbuffer.get().unsafe_into()
  (fp(renderbuffer) & 0xFF) != 0
}

///|
let d_glIsRenderbufferEXT : Dispatch = Dispatch::with_aliases(
  "glIsRenderbufferEXT",
  ["glIsRenderbuffer"],
)

///|
pub fn gl_is_renderbuffer_ext(renderbuffer : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glIsRenderbufferEXT.get().unsafe_into()
  (fp(renderbuffer) & 0xFF) != 0
}

///|
let d_glIsRenderbufferOES : Dispatch = Dispatch::new("glIsRenderbufferOES")

///|
pub fn gl_is_renderbuffer_oes(renderbuffer : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glIsRenderbufferOES.get().unsafe_into()
  (fp(renderbuffer) & 0xFF) != 0
}

///|
let d_glIsSemaphoreEXT : Dispatch = Dispatch::new("glIsSemaphoreEXT")

///|
pub fn gl_is_semaphore_ext(semaphore : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glIsSemaphoreEXT.get().unsafe_into()
  (fp(semaphore) & 0xFF) != 0
}

///|
let d_glIsSampler : Dispatch = Dispatch::new("glIsSampler")

///|
pub fn gl_is_sampler(sampler : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glIsSampler.get().unsafe_into()
  (fp(sampler) & 0xFF) != 0
}

///|
let d_glIsShader : Dispatch = Dispatch::new("glIsShader")

///|
pub fn gl_is_shader(shader : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glIsShader.get().unsafe_into()
  (fp(shader) & 0xFF) != 0
}

///|
let d_glIsStateNV : Dispatch = Dispatch::new("glIsStateNV")

///|
pub fn gl_is_state_nv(state : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glIsStateNV.get().unsafe_into()
  (fp(state) & 0xFF) != 0
}

///|
let d_glIsSync : Dispatch = Dispatch::with_aliases("glIsSync", ["glIsSyncAPPLE"])

///|
pub fn gl_is_sync(sync : GLsync) -> Bool {
  let fp : FuncRef[(GLsync) -> Int] = d_glIsSync.get().unsafe_into()
  (fp(sync) & 0xFF) != 0
}

///|
let d_glIsSyncAPPLE : Dispatch = Dispatch::with_aliases("glIsSyncAPPLE", [
  "glIsSync",
])

///|
pub fn gl_is_sync_apple(sync : GLsync) -> Bool {
  let fp : FuncRef[(GLsync) -> Int] = d_glIsSyncAPPLE.get().unsafe_into()
  (fp(sync) & 0xFF) != 0
}

///|
let d_glIsTexture : Dispatch = Dispatch::new("glIsTexture")

///|
pub fn gl_is_texture(texture : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glIsTexture.get().unsafe_into()
  (fp(texture) & 0xFF) != 0
}

///|
let d_glIsTextureEXT : Dispatch = Dispatch::new("glIsTextureEXT")

///|
pub fn gl_is_texture_ext(texture : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glIsTextureEXT.get().unsafe_into()
  (fp(texture) & 0xFF) != 0
}

///|
let d_glIsTextureHandleResidentARB : Dispatch = Dispatch::new(
  "glIsTextureHandleResidentARB",
)

///|
pub fn gl_is_texture_handle_resident_arb(handle : UInt64) -> Bool {
  let fp : FuncRef[(UInt64) -> Int] = d_glIsTextureHandleResidentARB
    .get()
    .unsafe_into()
  (fp(handle) & 0xFF) != 0
}

///|
let d_glIsTextureHandleResidentNV : Dispatch = Dispatch::new(
  "glIsTextureHandleResidentNV",
)

///|
pub fn gl_is_texture_handle_resident_nv(handle : UInt64) -> Bool {
  let fp : FuncRef[(UInt64) -> Int] = d_glIsTextureHandleResidentNV
    .get()
    .unsafe_into()
  (fp(handle) & 0xFF) != 0
}

///|
let d_glIsTransformFeedback : Dispatch = Dispatch::with_aliases(
  "glIsTransformFeedback",
  ["glIsTransformFeedbackNV"],
)

///|
pub fn gl_is_transform_feedback(id : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glIsTransformFeedback.get().unsafe_into()
  (fp(id) & 0xFF) != 0
}

///|
let d_glIsTransformFeedbackNV : Dispatch = Dispatch::with_aliases(
  "glIsTransformFeedbackNV",
  ["glIsTransformFeedback"],
)

///|
pub fn gl_is_transform_feedback_nv(id : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glIsTransformFeedbackNV
    .get()
    .unsafe_into()
  (fp(id) & 0xFF) != 0
}

///|
let d_glIsVariantEnabledEXT : Dispatch = Dispatch::new("glIsVariantEnabledEXT")

///|
pub fn gl_is_variant_enabled_ext(id : UInt, cap : UInt) -> Bool {
  let fp : FuncRef[(UInt, UInt) -> Int] = d_glIsVariantEnabledEXT
    .get()
    .unsafe_into()
  (fp(id, cap) & 0xFF) != 0
}

///|
let d_glIsVertexArray : Dispatch = Dispatch::with_aliases("glIsVertexArray", [
  "glIsVertexArrayAPPLE", "glIsVertexArrayOES",
])

///|
pub fn gl_is_vertex_array(array : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glIsVertexArray.get().unsafe_into()
  (fp(array) & 0xFF) != 0
}

///|
let d_glIsVertexArrayAPPLE : Dispatch = Dispatch::with_aliases(
  "glIsVertexArrayAPPLE",
  ["glIsVertexArray", "glIsVertexArrayOES"],
)

///|
pub fn gl_is_vertex_array_apple(array : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glIsVertexArrayAPPLE.get().unsafe_into()
  (fp(array) & 0xFF) != 0
}

///|
let d_glIsVertexArrayOES : Dispatch = Dispatch::with_aliases(
  "glIsVertexArrayOES",
  ["glIsVertexArray", "glIsVertexArrayAPPLE"],
)

///|
pub fn gl_is_vertex_array_oes(array : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glIsVertexArrayOES.get().unsafe_into()
  (fp(array) & 0xFF) != 0
}

///|
let d_glIsVertexAttribEnabledAPPLE : Dispatch = Dispatch::new(
  "glIsVertexAttribEnabledAPPLE",
)

///|
pub fn gl_is_vertex_attrib_enabled_apple(index : UInt, pname : UInt) -> Bool {
  let fp : FuncRef[(UInt, UInt) -> Int] = d_glIsVertexAttribEnabledAPPLE
    .get()
    .unsafe_into()
  (fp(index, pname) & 0xFF) != 0
}

///|
let d_glLGPUCopyImageSubDataNVX : Dispatch = Dispatch::new(
  "glLGPUCopyImageSubDataNVX",
)

///|
pub fn gl_lgpu_copy_image_sub_data_nvx(
  sourceGpu : UInt,
  destinationGpuMask : UInt,
  srcName : UInt,
  srcTarget : UInt,
  srcLevel : Int,
  srcX : Int,
  srxY : Int,
  srcZ : Int,
  dstName : UInt,
  dstTarget : UInt,
  dstLevel : Int,
  dstX : Int,
  dstY : Int,
  dstZ : Int,
  width : Int,
  height : Int,
  depth : Int,
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      UInt,
      UInt,
      UInt,
      Int,
      Int,
      Int,
      Int,
      UInt,
      UInt,
      Int,
      Int,
      Int,
      Int,
      Int,
      Int,
      Int,
    ) -> Unit,
  ] = d_glLGPUCopyImageSubDataNVX.get().unsafe_into()
  fp(
    sourceGpu, destinationGpuMask, srcName, srcTarget, srcLevel, srcX, srxY, srcZ,
    dstName, dstTarget, dstLevel, dstX, dstY, dstZ, width, height, depth,
  )
}

///|
let d_glLGPUInterlockNVX : Dispatch = Dispatch::new("glLGPUInterlockNVX")

///|
pub fn gl_lgpu_interlock_nvx() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glLGPUInterlockNVX.get().unsafe_into()
  fp()
}

///|
let d_glLGPUNamedBufferSubDataNVX : Dispatch = Dispatch::new(
  "glLGPUNamedBufferSubDataNVX",
)

///|
pub fn gl_lgpu_named_buffer_sub_data_nvx(
  gpuMask : UInt,
  buffer : UInt,
  offset : Int64,
  size : Int64,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int64, Int64, @pointer.Pointer[Byte]) -> Unit] = d_glLGPUNamedBufferSubDataNVX
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) {
    fp(gpuMask, buffer, offset, size, data_p)
  })
}

///|
let d_glLabelObjectEXT : Dispatch = Dispatch::new("glLabelObjectEXT")

///|
pub fn gl_label_object_ext(
  type_ : UInt,
  object : UInt,
  length : Int,
  label : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, @pointer.Pointer[Byte]) -> Unit] = d_glLabelObjectEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(label, fn(label_p) {
    fp(type_, object, length, label_p)
  })
}

///|
let d_glLightEnviSGIX : Dispatch = Dispatch::new("glLightEnviSGIX")

///|
pub fn gl_light_envi_sgix(pname : UInt, param : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glLightEnviSGIX.get().unsafe_into()
  fp(pname, param)
}

///|
let d_glLightModelf : Dispatch = Dispatch::new("glLightModelf")

///|
pub fn gl_light_modelf(pname : UInt, param : Float) -> Unit {
  let fp : FuncRef[(UInt, Float) -> Unit] = d_glLightModelf.get().unsafe_into()
  fp(pname, param)
}

///|
let d_glLightModelfv : Dispatch = Dispatch::new("glLightModelfv")

///|
pub fn gl_light_modelfv(pname : UInt, params : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glLightModelfv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(pname, params_p) })
}

///|
let d_glLightModeli : Dispatch = Dispatch::new("glLightModeli")

///|
pub fn gl_light_modeli(pname : UInt, param : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glLightModeli.get().unsafe_into()
  fp(pname, param)
}

///|
let d_glLightModeliv : Dispatch = Dispatch::new("glLightModeliv")

///|
pub fn gl_light_modeliv(pname : UInt, params : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glLightModeliv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(pname, params_p) })
}

///|
let d_glLightModelx : Dispatch = Dispatch::new("glLightModelx")

///|
pub fn gl_light_modelx(pname : UInt, param : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glLightModelx.get().unsafe_into()
  fp(pname, param)
}

///|
let d_glLightModelxOES : Dispatch = Dispatch::new("glLightModelxOES")

///|
pub fn gl_light_modelx_oes(pname : UInt, param : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glLightModelxOES.get().unsafe_into()
  fp(pname, param)
}

///|
let d_glLightModelxv : Dispatch = Dispatch::new("glLightModelxv")

///|
pub fn gl_light_modelxv(pname : UInt, param : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glLightModelxv
    .get()
    .unsafe_into()
  @pointer.borrow_array(param, fn(param_p) { fp(pname, param_p) })
}

///|
let d_glLightModelxvOES : Dispatch = Dispatch::new("glLightModelxvOES")

///|
pub fn gl_light_modelxv_oes(pname : UInt, param : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glLightModelxvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(param, fn(param_p) { fp(pname, param_p) })
}

///|
let d_glLightf : Dispatch = Dispatch::new("glLightf")

///|
pub fn gl_lightf(light : UInt, pname : UInt, param : Float) -> Unit {
  let fp : FuncRef[(UInt, UInt, Float) -> Unit] = d_glLightf.get().unsafe_into()
  fp(light, pname, param)
}

///|
let d_glLightfv : Dispatch = Dispatch::new("glLightfv")

///|
pub fn gl_lightfv(
  light : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glLightfv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(light, pname, params_p) })
}

///|
let d_glLighti : Dispatch = Dispatch::new("glLighti")

///|
pub fn gl_lighti(light : UInt, pname : UInt, param : Int) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int) -> Unit] = d_glLighti.get().unsafe_into()
  fp(light, pname, param)
}

///|
let d_glLightiv : Dispatch = Dispatch::new("glLightiv")

///|
pub fn gl_lightiv(light : UInt, pname : UInt, params : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glLightiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(light, pname, params_p) })
}

///|
let d_glLightx : Dispatch = Dispatch::new("glLightx")

///|
pub fn gl_lightx(light : UInt, pname : UInt, param : Int) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int) -> Unit] = d_glLightx.get().unsafe_into()
  fp(light, pname, param)
}

///|
let d_glLightxOES : Dispatch = Dispatch::new("glLightxOES")

///|
pub fn gl_lightx_oes(light : UInt, pname : UInt, param : Int) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int) -> Unit] = d_glLightxOES
    .get()
    .unsafe_into()
  fp(light, pname, param)
}

///|
let d_glLightxv : Dispatch = Dispatch::new("glLightxv")

///|
pub fn gl_lightxv(light : UInt, pname : UInt, params : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glLightxv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(light, pname, params_p) })
}

///|
let d_glLightxvOES : Dispatch = Dispatch::new("glLightxvOES")

///|
pub fn gl_lightxv_oes(
  light : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glLightxvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(light, pname, params_p) })
}

///|
let d_glLineStipple : Dispatch = Dispatch::new("glLineStipple")

///|
pub fn gl_line_stipple(factor : Int, pattern : Int) -> Unit {
  let fp : FuncRef[(Int, Int) -> Unit] = d_glLineStipple.get().unsafe_into()
  fp(factor, pattern)
}

///|
let d_glLineWidth : Dispatch = Dispatch::new("glLineWidth")

///|
pub fn gl_line_width(width : Float) -> Unit {
  let fp : FuncRef[(Float) -> Unit] = d_glLineWidth.get().unsafe_into()
  fp(width)
}

///|
let d_glLineWidthx : Dispatch = Dispatch::new("glLineWidthx")

///|
pub fn gl_line_widthx(width : Int) -> Unit {
  let fp : FuncRef[(Int) -> Unit] = d_glLineWidthx.get().unsafe_into()
  fp(width)
}

///|
let d_glLineWidthxOES : Dispatch = Dispatch::new("glLineWidthxOES")

///|
pub fn gl_line_widthx_oes(width : Int) -> Unit {
  let fp : FuncRef[(Int) -> Unit] = d_glLineWidthxOES.get().unsafe_into()
  fp(width)
}

///|
let d_glLinkProgram : Dispatch = Dispatch::with_aliases("glLinkProgram", [
  "glLinkProgramARB",
])

///|
pub fn gl_link_program(program : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glLinkProgram.get().unsafe_into()
  fp(program)
}

///|
let d_glListBase : Dispatch = Dispatch::new("glListBase")

///|
pub fn gl_list_base(base : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glListBase.get().unsafe_into()
  fp(base)
}

///|
let d_glListParameterfSGIX : Dispatch = Dispatch::new("glListParameterfSGIX")

///|
pub fn gl_list_parameterf_sgix(
  list : UInt,
  pname : UInt,
  param : Float,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Float) -> Unit] = d_glListParameterfSGIX
    .get()
    .unsafe_into()
  fp(list, pname, param)
}

///|
let d_glListParameterfvSGIX : Dispatch = Dispatch::new("glListParameterfvSGIX")

///|
pub fn gl_list_parameterfv_sgix(
  list : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glListParameterfvSGIX
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(list, pname, params_p) })
}

///|
let d_glListParameteriSGIX : Dispatch = Dispatch::new("glListParameteriSGIX")

///|
pub fn gl_list_parameteri_sgix(list : UInt, pname : UInt, param : Int) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int) -> Unit] = d_glListParameteriSGIX
    .get()
    .unsafe_into()
  fp(list, pname, param)
}

///|
let d_glListParameterivSGIX : Dispatch = Dispatch::new("glListParameterivSGIX")

///|
pub fn gl_list_parameteriv_sgix(
  list : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glListParameterivSGIX
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(list, pname, params_p) })
}

///|
let d_glLoadIdentity : Dispatch = Dispatch::new("glLoadIdentity")

///|
pub fn gl_load_identity() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glLoadIdentity.get().unsafe_into()
  fp()
}

///|
let d_glLoadIdentityDeformationMapSGIX : Dispatch = Dispatch::new(
  "glLoadIdentityDeformationMapSGIX",
)

///|
pub fn gl_load_identity_deformation_map_sgix(mask : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glLoadIdentityDeformationMapSGIX
    .get()
    .unsafe_into()
  fp(mask)
}

///|
let d_glLoadMatrixd : Dispatch = Dispatch::new("glLoadMatrixd")

///|
pub fn gl_load_matrixd(m : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Double]) -> Unit] = d_glLoadMatrixd
    .get()
    .unsafe_into()
  @pointer.borrow_array(m, fn(m_p) { fp(m_p) })
}

///|
let d_glLoadMatrixf : Dispatch = Dispatch::new("glLoadMatrixf")

///|
pub fn gl_load_matrixf(m : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Float]) -> Unit] = d_glLoadMatrixf
    .get()
    .unsafe_into()
  @pointer.borrow_array(m, fn(m_p) { fp(m_p) })
}

///|
let d_glLoadMatrixx : Dispatch = Dispatch::new("glLoadMatrixx")

///|
pub fn gl_load_matrixx(m : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glLoadMatrixx
    .get()
    .unsafe_into()
  @pointer.borrow_array(m, fn(m_p) { fp(m_p) })
}

///|
let d_glLoadMatrixxOES : Dispatch = Dispatch::new("glLoadMatrixxOES")

///|
pub fn gl_load_matrixx_oes(m : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glLoadMatrixxOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(m, fn(m_p) { fp(m_p) })
}

///|
let d_glLoadName : Dispatch = Dispatch::new("glLoadName")

///|
pub fn gl_load_name(name : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glLoadName.get().unsafe_into()
  fp(name)
}

///|
let d_glLoadPaletteFromModelViewMatrixOES : Dispatch = Dispatch::new(
  "glLoadPaletteFromModelViewMatrixOES",
)

///|
pub fn gl_load_palette_from_model_view_matrix_oes() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glLoadPaletteFromModelViewMatrixOES
    .get()
    .unsafe_into()
  fp()
}

///|
let d_glLoadProgramNV : Dispatch = Dispatch::new("glLoadProgramNV")

///|
pub fn gl_load_program_nv(
  target : UInt,
  id : UInt,
  len : Int,
  program : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, @pointer.Pointer[Byte]) -> Unit] = d_glLoadProgramNV
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(program, fn(program_p) {
    fp(target, id, len, program_p)
  })
}

///|
let d_glLoadTransposeMatrixd : Dispatch = Dispatch::with_aliases(
  "glLoadTransposeMatrixd",
  ["glLoadTransposeMatrixdARB"],
)

///|
pub fn gl_load_transpose_matrixd(m : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Double]) -> Unit] = d_glLoadTransposeMatrixd
    .get()
    .unsafe_into()
  @pointer.borrow_array(m, fn(m_p) { fp(m_p) })
}

///|
let d_glLoadTransposeMatrixdARB : Dispatch = Dispatch::with_aliases(
  "glLoadTransposeMatrixdARB",
  ["glLoadTransposeMatrixd"],
)

///|
pub fn gl_load_transpose_matrixd_arb(m : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Double]) -> Unit] = d_glLoadTransposeMatrixdARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(m, fn(m_p) { fp(m_p) })
}

///|
let d_glLoadTransposeMatrixf : Dispatch = Dispatch::with_aliases(
  "glLoadTransposeMatrixf",
  ["glLoadTransposeMatrixfARB"],
)

///|
pub fn gl_load_transpose_matrixf(m : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Float]) -> Unit] = d_glLoadTransposeMatrixf
    .get()
    .unsafe_into()
  @pointer.borrow_array(m, fn(m_p) { fp(m_p) })
}

///|
let d_glLoadTransposeMatrixfARB : Dispatch = Dispatch::with_aliases(
  "glLoadTransposeMatrixfARB",
  ["glLoadTransposeMatrixf"],
)

///|
pub fn gl_load_transpose_matrixf_arb(m : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Float]) -> Unit] = d_glLoadTransposeMatrixfARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(m, fn(m_p) { fp(m_p) })
}

///|
let d_glLoadTransposeMatrixxOES : Dispatch = Dispatch::new(
  "glLoadTransposeMatrixxOES",
)

///|
pub fn gl_load_transpose_matrixx_oes(m : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glLoadTransposeMatrixxOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(m, fn(m_p) { fp(m_p) })
}

///|
let d_glLockArraysEXT : Dispatch = Dispatch::new("glLockArraysEXT")

///|
pub fn gl_lock_arrays_ext(first : Int, count : Int) -> Unit {
  let fp : FuncRef[(Int, Int) -> Unit] = d_glLockArraysEXT.get().unsafe_into()
  fp(first, count)
}

///|
let d_glLogicOp : Dispatch = Dispatch::new("glLogicOp")

///|
pub fn gl_logic_op(opcode : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glLogicOp.get().unsafe_into()
  fp(opcode)
}

///|
let d_glMakeBufferNonResidentNV : Dispatch = Dispatch::new(
  "glMakeBufferNonResidentNV",
)

///|
pub fn gl_make_buffer_non_resident_nv(target : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glMakeBufferNonResidentNV
    .get()
    .unsafe_into()
  fp(target)
}

///|
let d_glMakeBufferResidentNV : Dispatch = Dispatch::new(
  "glMakeBufferResidentNV",
)

///|
pub fn gl_make_buffer_resident_nv(target : UInt, access : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glMakeBufferResidentNV
    .get()
    .unsafe_into()
  fp(target, access)
}

///|
let d_glMakeImageHandleNonResidentARB : Dispatch = Dispatch::new(
  "glMakeImageHandleNonResidentARB",
)

///|
pub fn gl_make_image_handle_non_resident_arb(handle : UInt64) -> Unit {
  let fp : FuncRef[(UInt64) -> Unit] = d_glMakeImageHandleNonResidentARB
    .get()
    .unsafe_into()
  fp(handle)
}

///|
let d_glMakeImageHandleNonResidentNV : Dispatch = Dispatch::new(
  "glMakeImageHandleNonResidentNV",
)

///|
pub fn gl_make_image_handle_non_resident_nv(handle : UInt64) -> Unit {
  let fp : FuncRef[(UInt64) -> Unit] = d_glMakeImageHandleNonResidentNV
    .get()
    .unsafe_into()
  fp(handle)
}

///|
let d_glMakeImageHandleResidentARB : Dispatch = Dispatch::new(
  "glMakeImageHandleResidentARB",
)

///|
pub fn gl_make_image_handle_resident_arb(
  handle : UInt64,
  access : UInt,
) -> Unit {
  let fp : FuncRef[(UInt64, UInt) -> Unit] = d_glMakeImageHandleResidentARB
    .get()
    .unsafe_into()
  fp(handle, access)
}

///|
let d_glMakeImageHandleResidentNV : Dispatch = Dispatch::new(
  "glMakeImageHandleResidentNV",
)

///|
pub fn gl_make_image_handle_resident_nv(handle : UInt64, access : UInt) -> Unit {
  let fp : FuncRef[(UInt64, UInt) -> Unit] = d_glMakeImageHandleResidentNV
    .get()
    .unsafe_into()
  fp(handle, access)
}

///|
let d_glMakeNamedBufferNonResidentNV : Dispatch = Dispatch::new(
  "glMakeNamedBufferNonResidentNV",
)

///|
pub fn gl_make_named_buffer_non_resident_nv(buffer : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glMakeNamedBufferNonResidentNV
    .get()
    .unsafe_into()
  fp(buffer)
}

///|
let d_glMakeNamedBufferResidentNV : Dispatch = Dispatch::new(
  "glMakeNamedBufferResidentNV",
)

///|
pub fn gl_make_named_buffer_resident_nv(buffer : UInt, access : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glMakeNamedBufferResidentNV
    .get()
    .unsafe_into()
  fp(buffer, access)
}

///|
let d_glMakeTextureHandleNonResidentARB : Dispatch = Dispatch::new(
  "glMakeTextureHandleNonResidentARB",
)

///|
pub fn gl_make_texture_handle_non_resident_arb(handle : UInt64) -> Unit {
  let fp : FuncRef[(UInt64) -> Unit] = d_glMakeTextureHandleNonResidentARB
    .get()
    .unsafe_into()
  fp(handle)
}

///|
let d_glMakeTextureHandleNonResidentNV : Dispatch = Dispatch::new(
  "glMakeTextureHandleNonResidentNV",
)

///|
pub fn gl_make_texture_handle_non_resident_nv(handle : UInt64) -> Unit {
  let fp : FuncRef[(UInt64) -> Unit] = d_glMakeTextureHandleNonResidentNV
    .get()
    .unsafe_into()
  fp(handle)
}

///|
let d_glMakeTextureHandleResidentARB : Dispatch = Dispatch::new(
  "glMakeTextureHandleResidentARB",
)

///|
pub fn gl_make_texture_handle_resident_arb(handle : UInt64) -> Unit {
  let fp : FuncRef[(UInt64) -> Unit] = d_glMakeTextureHandleResidentARB
    .get()
    .unsafe_into()
  fp(handle)
}

///|
let d_glMakeTextureHandleResidentNV : Dispatch = Dispatch::new(
  "glMakeTextureHandleResidentNV",
)

///|
pub fn gl_make_texture_handle_resident_nv(handle : UInt64) -> Unit {
  let fp : FuncRef[(UInt64) -> Unit] = d_glMakeTextureHandleResidentNV
    .get()
    .unsafe_into()
  fp(handle)
}

///|
let d_glMap1d : Dispatch = Dispatch::new("glMap1d")

///|
pub fn gl_map1d(
  target : UInt,
  u1 : Double,
  u2 : Double,
  stride : Int,
  order : Int,
  points : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[
    (UInt, Double, Double, Int, Int, @pointer.Pointer[Double]) -> Unit,
  ] = d_glMap1d.get().unsafe_into()
  @pointer.borrow_array(points, fn(points_p) {
    fp(target, u1, u2, stride, order, points_p)
  })
}

///|
let d_glMap1f : Dispatch = Dispatch::new("glMap1f")

///|
pub fn gl_map1f(
  target : UInt,
  u1 : Float,
  u2 : Float,
  stride : Int,
  order : Int,
  points : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[
    (UInt, Float, Float, Int, Int, @pointer.Pointer[Float]) -> Unit,
  ] = d_glMap1f.get().unsafe_into()
  @pointer.borrow_array(points, fn(points_p) {
    fp(target, u1, u2, stride, order, points_p)
  })
}

///|
let d_glMap1xOES : Dispatch = Dispatch::new("glMap1xOES")

///|
pub fn gl_map1x_oes(
  target : UInt,
  u1 : Int,
  u2 : Int,
  stride : Int,
  order : Int,
  points : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int, Int) -> Unit] = d_glMap1xOES
    .get()
    .unsafe_into()
  fp(target, u1, u2, stride, order, points)
}

///|
let d_glMap2d : Dispatch = Dispatch::new("glMap2d")

///|
pub fn gl_map2d(
  target : UInt,
  u1 : Double,
  u2 : Double,
  ustride : Int,
  uorder : Int,
  v1 : Double,
  v2 : Double,
  vstride : Int,
  vorder : Int,
  points : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      Double,
      Double,
      Int,
      Int,
      Double,
      Double,
      Int,
      Int,
      @pointer.Pointer[Double],
    ) -> Unit,
  ] = d_glMap2d.get().unsafe_into()
  @pointer.borrow_array(points, fn(points_p) {
    fp(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points_p)
  })
}

///|
let d_glMap2f : Dispatch = Dispatch::new("glMap2f")

///|
pub fn gl_map2f(
  target : UInt,
  u1 : Float,
  u2 : Float,
  ustride : Int,
  uorder : Int,
  v1 : Float,
  v2 : Float,
  vstride : Int,
  vorder : Int,
  points : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      Float,
      Float,
      Int,
      Int,
      Float,
      Float,
      Int,
      Int,
      @pointer.Pointer[Float],
    ) -> Unit,
  ] = d_glMap2f.get().unsafe_into()
  @pointer.borrow_array(points, fn(points_p) {
    fp(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points_p)
  })
}

///|
let d_glMap2xOES : Dispatch = Dispatch::new("glMap2xOES")

///|
pub fn gl_map2x_oes(
  target : UInt,
  u1 : Int,
  u2 : Int,
  ustride : Int,
  uorder : Int,
  v1 : Int,
  v2 : Int,
  vstride : Int,
  vorder : Int,
  points : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int, Int, Int, Int, Int, Int) -> Unit] = d_glMap2xOES
    .get()
    .unsafe_into()
  fp(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points)
}

///|
let d_glMapControlPointsNV : Dispatch = Dispatch::new("glMapControlPointsNV")

///|
pub fn gl_map_control_points_nv(
  target : UInt,
  index : UInt,
  type_ : UInt,
  ustride : Int,
  vstride : Int,
  uorder : Int,
  vorder : Int,
  packed : Bool,
  points : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, UInt, Int, Int, Int, Int, Bool, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glMapControlPointsNV.get().unsafe_into()
  @pointer.borrow_bytes(points, fn(points_p) {
    fp(target, index, type_, ustride, vstride, uorder, vorder, packed, points_p)
  })
}

///|
let d_glMapGrid1d : Dispatch = Dispatch::new("glMapGrid1d")

///|
pub fn gl_map_grid1d(un : Int, u1 : Double, u2 : Double) -> Unit {
  let fp : FuncRef[(Int, Double, Double) -> Unit] = d_glMapGrid1d
    .get()
    .unsafe_into()
  fp(un, u1, u2)
}

///|
let d_glMapGrid1f : Dispatch = Dispatch::new("glMapGrid1f")

///|
pub fn gl_map_grid1f(un : Int, u1 : Float, u2 : Float) -> Unit {
  let fp : FuncRef[(Int, Float, Float) -> Unit] = d_glMapGrid1f
    .get()
    .unsafe_into()
  fp(un, u1, u2)
}

///|
let d_glMapGrid1xOES : Dispatch = Dispatch::new("glMapGrid1xOES")

///|
pub fn gl_map_grid1x_oes(n : Int, u1 : Int, u2 : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glMapGrid1xOES
    .get()
    .unsafe_into()
  fp(n, u1, u2)
}

///|
let d_glMapGrid2d : Dispatch = Dispatch::new("glMapGrid2d")

///|
pub fn gl_map_grid2d(
  un : Int,
  u1 : Double,
  u2 : Double,
  vn : Int,
  v1 : Double,
  v2 : Double,
) -> Unit {
  let fp : FuncRef[(Int, Double, Double, Int, Double, Double) -> Unit] = d_glMapGrid2d
    .get()
    .unsafe_into()
  fp(un, u1, u2, vn, v1, v2)
}

///|
let d_glMapGrid2f : Dispatch = Dispatch::new("glMapGrid2f")

///|
pub fn gl_map_grid2f(
  un : Int,
  u1 : Float,
  u2 : Float,
  vn : Int,
  v1 : Float,
  v2 : Float,
) -> Unit {
  let fp : FuncRef[(Int, Float, Float, Int, Float, Float) -> Unit] = d_glMapGrid2f
    .get()
    .unsafe_into()
  fp(un, u1, u2, vn, v1, v2)
}

///|
let d_glMapGrid2xOES : Dispatch = Dispatch::new("glMapGrid2xOES")

///|
pub fn gl_map_grid2x_oes(
  n : Int,
  u1 : Int,
  u2 : Int,
  v1 : Int,
  v2 : Int,
) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int, Int) -> Unit] = d_glMapGrid2xOES
    .get()
    .unsafe_into()
  fp(n, u1, u2, v1, v2)
}

///|
let d_glMapParameterfvNV : Dispatch = Dispatch::new("glMapParameterfvNV")

///|
pub fn gl_map_parameterfv_nv(
  target : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glMapParameterfvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glMapParameterivNV : Dispatch = Dispatch::new("glMapParameterivNV")

///|
pub fn gl_map_parameteriv_nv(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glMapParameterivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glMapVertexAttrib1dAPPLE : Dispatch = Dispatch::new(
  "glMapVertexAttrib1dAPPLE",
)

///|
pub fn gl_map_vertex_attrib1d_apple(
  index : UInt,
  size : UInt,
  u1 : Double,
  u2 : Double,
  stride : Int,
  order : Int,
  points : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, Double, Double, Int, Int, @pointer.Pointer[Double]) -> Unit,
  ] = d_glMapVertexAttrib1dAPPLE.get().unsafe_into()
  @pointer.borrow_array(points, fn(points_p) {
    fp(index, size, u1, u2, stride, order, points_p)
  })
}

///|
let d_glMapVertexAttrib1fAPPLE : Dispatch = Dispatch::new(
  "glMapVertexAttrib1fAPPLE",
)

///|
pub fn gl_map_vertex_attrib1f_apple(
  index : UInt,
  size : UInt,
  u1 : Float,
  u2 : Float,
  stride : Int,
  order : Int,
  points : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, Float, Float, Int, Int, @pointer.Pointer[Float]) -> Unit,
  ] = d_glMapVertexAttrib1fAPPLE.get().unsafe_into()
  @pointer.borrow_array(points, fn(points_p) {
    fp(index, size, u1, u2, stride, order, points_p)
  })
}

///|
let d_glMapVertexAttrib2dAPPLE : Dispatch = Dispatch::new(
  "glMapVertexAttrib2dAPPLE",
)

///|
pub fn gl_map_vertex_attrib2d_apple(
  index : UInt,
  size : UInt,
  u1 : Double,
  u2 : Double,
  ustride : Int,
  uorder : Int,
  v1 : Double,
  v2 : Double,
  vstride : Int,
  vorder : Int,
  points : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      UInt,
      Double,
      Double,
      Int,
      Int,
      Double,
      Double,
      Int,
      Int,
      @pointer.Pointer[Double],
    ) -> Unit,
  ] = d_glMapVertexAttrib2dAPPLE.get().unsafe_into()
  @pointer.borrow_array(points, fn(points_p) {
    fp(index, size, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points_p)
  })
}

///|
let d_glMapVertexAttrib2fAPPLE : Dispatch = Dispatch::new(
  "glMapVertexAttrib2fAPPLE",
)

///|
pub fn gl_map_vertex_attrib2f_apple(
  index : UInt,
  size : UInt,
  u1 : Float,
  u2 : Float,
  ustride : Int,
  uorder : Int,
  v1 : Float,
  v2 : Float,
  vstride : Int,
  vorder : Int,
  points : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      UInt,
      Float,
      Float,
      Int,
      Int,
      Float,
      Float,
      Int,
      Int,
      @pointer.Pointer[Float],
    ) -> Unit,
  ] = d_glMapVertexAttrib2fAPPLE.get().unsafe_into()
  @pointer.borrow_array(points, fn(points_p) {
    fp(index, size, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points_p)
  })
}

///|
let d_glMaterialf : Dispatch = Dispatch::new("glMaterialf")

///|
pub fn gl_materialf(face : UInt, pname : UInt, param : Float) -> Unit {
  let fp : FuncRef[(UInt, UInt, Float) -> Unit] = d_glMaterialf
    .get()
    .unsafe_into()
  fp(face, pname, param)
}

///|
let d_glMaterialfv : Dispatch = Dispatch::new("glMaterialfv")

///|
pub fn gl_materialfv(
  face : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glMaterialfv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(face, pname, params_p) })
}

///|
let d_glMateriali : Dispatch = Dispatch::new("glMateriali")

///|
pub fn gl_materiali(face : UInt, pname : UInt, param : Int) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int) -> Unit] = d_glMateriali
    .get()
    .unsafe_into()
  fp(face, pname, param)
}

///|
let d_glMaterialiv : Dispatch = Dispatch::new("glMaterialiv")

///|
pub fn gl_materialiv(
  face : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glMaterialiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(face, pname, params_p) })
}

///|
let d_glMaterialx : Dispatch = Dispatch::new("glMaterialx")

///|
pub fn gl_materialx(face : UInt, pname : UInt, param : Int) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int) -> Unit] = d_glMaterialx
    .get()
    .unsafe_into()
  fp(face, pname, param)
}

///|
let d_glMaterialxOES : Dispatch = Dispatch::new("glMaterialxOES")

///|
pub fn gl_materialx_oes(face : UInt, pname : UInt, param : Int) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int) -> Unit] = d_glMaterialxOES
    .get()
    .unsafe_into()
  fp(face, pname, param)
}

///|
let d_glMaterialxv : Dispatch = Dispatch::new("glMaterialxv")

///|
pub fn gl_materialxv(
  face : UInt,
  pname : UInt,
  param : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glMaterialxv
    .get()
    .unsafe_into()
  @pointer.borrow_array(param, fn(param_p) { fp(face, pname, param_p) })
}

///|
let d_glMaterialxvOES : Dispatch = Dispatch::new("glMaterialxvOES")

///|
pub fn gl_materialxv_oes(
  face : UInt,
  pname : UInt,
  param : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glMaterialxvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(param, fn(param_p) { fp(face, pname, param_p) })
}

///|
let d_glMatrixFrustumEXT : Dispatch = Dispatch::new("glMatrixFrustumEXT")

///|
pub fn gl_matrix_frustum_ext(
  mode : UInt,
  left : Double,
  right : Double,
  bottom : Double,
  top : Double,
  zNear : Double,
  zFar : Double,
) -> Unit {
  let fp : FuncRef[
    (UInt, Double, Double, Double, Double, Double, Double) -> Unit,
  ] = d_glMatrixFrustumEXT.get().unsafe_into()
  fp(mode, left, right, bottom, top, zNear, zFar)
}

///|
let d_glMatrixIndexPointerARB : Dispatch = Dispatch::new(
  "glMatrixIndexPointerARB",
)

///|
pub fn gl_matrix_index_pointer_arb(
  size : Int,
  type_ : UInt,
  stride : Int,
  pointer : Bytes,
) -> Unit {
  let fp : FuncRef[(Int, UInt, Int, @pointer.Pointer[Byte]) -> Unit] = d_glMatrixIndexPointerARB
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(pointer, fn(pointer_p) {
    fp(size, type_, stride, pointer_p)
  })
}

///|
let d_glMatrixIndexPointerOES : Dispatch = Dispatch::new(
  "glMatrixIndexPointerOES",
)

///|
/// Configure a vertex array from the buffer currently bound to `GL_ARRAY_BUFFER`.
/// `offset` is a byte offset; client-side arrays are not accepted.
pub fn gl_matrix_index_pointer_oes(
  size : Int,
  type_ : UInt,
  stride : Int,
  offset : Int64,
) -> Unit {
  let fp : FuncRef[(Int, UInt, Int, @pointer.Pointer[Unit]) -> Unit] = d_glMatrixIndexPointerOES
    .get()
    .unsafe_into()
  fp(size, type_, stride, @pointer.Pointer::unsafe_from_int64(offset))
}

///|
let d_glMatrixIndexubvARB : Dispatch = Dispatch::new("glMatrixIndexubvARB")

///|
pub fn gl_matrix_indexubv_arb(size : Int, indices : Bytes) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[Byte]) -> Unit] = d_glMatrixIndexubvARB
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(indices, fn(indices_p) { fp(size, indices_p) })
}

///|
let d_glMatrixIndexuivARB : Dispatch = Dispatch::new("glMatrixIndexuivARB")

///|
pub fn gl_matrix_indexuiv_arb(size : Int, indices : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glMatrixIndexuivARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(indices, fn(indices_p) { fp(size, indices_p) })
}

///|
let d_glMatrixIndexusvARB : Dispatch = Dispatch::new("glMatrixIndexusvARB")

///|
pub fn gl_matrix_indexusv_arb(size : Int, indices : FixedArray[UInt16]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt16]) -> Unit] = d_glMatrixIndexusvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(indices, fn(indices_p) { fp(size, indices_p) })
}

///|
let d_glMatrixLoad3x2fNV : Dispatch = Dispatch::new("glMatrixLoad3x2fNV")

///|
pub fn gl_matrix_load3x2f_nv(matrixMode : UInt, m : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glMatrixLoad3x2fNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(m, fn(m_p) { fp(matrixMode, m_p) })
}

///|
let d_glMatrixLoad3x3fNV : Dispatch = Dispatch::new("glMatrixLoad3x3fNV")

///|
pub fn gl_matrix_load3x3f_nv(matrixMode : UInt, m : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glMatrixLoad3x3fNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(m, fn(m_p) { fp(matrixMode, m_p) })
}

///|
let d_glMatrixLoadIdentityEXT : Dispatch = Dispatch::new(
  "glMatrixLoadIdentityEXT",
)

///|
pub fn gl_matrix_load_identity_ext(mode : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glMatrixLoadIdentityEXT
    .get()
    .unsafe_into()
  fp(mode)
}

///|
let d_glMatrixLoadTranspose3x3fNV : Dispatch = Dispatch::new(
  "glMatrixLoadTranspose3x3fNV",
)

///|
pub fn gl_matrix_load_transpose3x3f_nv(
  matrixMode : UInt,
  m : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glMatrixLoadTranspose3x3fNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(m, fn(m_p) { fp(matrixMode, m_p) })
}

///|
let d_glMatrixLoadTransposedEXT : Dispatch = Dispatch::new(
  "glMatrixLoadTransposedEXT",
)

///|
pub fn gl_matrix_load_transposed_ext(
  mode : UInt,
  m : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Double]) -> Unit] = d_glMatrixLoadTransposedEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(m, fn(m_p) { fp(mode, m_p) })
}

///|
let d_glMatrixLoadTransposefEXT : Dispatch = Dispatch::new(
  "glMatrixLoadTransposefEXT",
)

///|
pub fn gl_matrix_load_transposef_ext(
  mode : UInt,
  m : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glMatrixLoadTransposefEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(m, fn(m_p) { fp(mode, m_p) })
}

///|
let d_glMatrixLoaddEXT : Dispatch = Dispatch::new("glMatrixLoaddEXT")

///|
pub fn gl_matrix_loadd_ext(mode : UInt, m : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Double]) -> Unit] = d_glMatrixLoaddEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(m, fn(m_p) { fp(mode, m_p) })
}

///|
let d_glMatrixLoadfEXT : Dispatch = Dispatch::new("glMatrixLoadfEXT")

///|
pub fn gl_matrix_loadf_ext(mode : UInt, m : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glMatrixLoadfEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(m, fn(m_p) { fp(mode, m_p) })
}

///|
let d_glMatrixMode : Dispatch = Dispatch::new("glMatrixMode")

///|
pub fn gl_matrix_mode(mode : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glMatrixMode.get().unsafe_into()
  fp(mode)
}

///|
let d_glMatrixMult3x2fNV : Dispatch = Dispatch::new("glMatrixMult3x2fNV")

///|
pub fn gl_matrix_mult3x2f_nv(matrixMode : UInt, m : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glMatrixMult3x2fNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(m, fn(m_p) { fp(matrixMode, m_p) })
}

///|
let d_glMatrixMult3x3fNV : Dispatch = Dispatch::new("glMatrixMult3x3fNV")

///|
pub fn gl_matrix_mult3x3f_nv(matrixMode : UInt, m : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glMatrixMult3x3fNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(m, fn(m_p) { fp(matrixMode, m_p) })
}

///|
let d_glMatrixMultTranspose3x3fNV : Dispatch = Dispatch::new(
  "glMatrixMultTranspose3x3fNV",
)

///|
pub fn gl_matrix_mult_transpose3x3f_nv(
  matrixMode : UInt,
  m : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glMatrixMultTranspose3x3fNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(m, fn(m_p) { fp(matrixMode, m_p) })
}

///|
let d_glMatrixMultTransposedEXT : Dispatch = Dispatch::new(
  "glMatrixMultTransposedEXT",
)

///|
pub fn gl_matrix_mult_transposed_ext(
  mode : UInt,
  m : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Double]) -> Unit] = d_glMatrixMultTransposedEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(m, fn(m_p) { fp(mode, m_p) })
}

///|
let d_glMatrixMultTransposefEXT : Dispatch = Dispatch::new(
  "glMatrixMultTransposefEXT",
)

///|
pub fn gl_matrix_mult_transposef_ext(
  mode : UInt,
  m : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glMatrixMultTransposefEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(m, fn(m_p) { fp(mode, m_p) })
}

///|
let d_glMatrixMultdEXT : Dispatch = Dispatch::new("glMatrixMultdEXT")

///|
pub fn gl_matrix_multd_ext(mode : UInt, m : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Double]) -> Unit] = d_glMatrixMultdEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(m, fn(m_p) { fp(mode, m_p) })
}

///|
let d_glMatrixMultfEXT : Dispatch = Dispatch::new("glMatrixMultfEXT")

///|
pub fn gl_matrix_multf_ext(mode : UInt, m : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glMatrixMultfEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(m, fn(m_p) { fp(mode, m_p) })
}

///|
let d_glMatrixOrthoEXT : Dispatch = Dispatch::new("glMatrixOrthoEXT")

///|
pub fn gl_matrix_ortho_ext(
  mode : UInt,
  left : Double,
  right : Double,
  bottom : Double,
  top : Double,
  zNear : Double,
  zFar : Double,
) -> Unit {
  let fp : FuncRef[
    (UInt, Double, Double, Double, Double, Double, Double) -> Unit,
  ] = d_glMatrixOrthoEXT.get().unsafe_into()
  fp(mode, left, right, bottom, top, zNear, zFar)
}

///|
let d_glMatrixPopEXT : Dispatch = Dispatch::new("glMatrixPopEXT")

///|
pub fn gl_matrix_pop_ext(mode : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glMatrixPopEXT.get().unsafe_into()
  fp(mode)
}

///|
let d_glMatrixPushEXT : Dispatch = Dispatch::new("glMatrixPushEXT")

///|
pub fn gl_matrix_push_ext(mode : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glMatrixPushEXT.get().unsafe_into()
  fp(mode)
}

///|
let d_glMatrixRotatedEXT : Dispatch = Dispatch::new("glMatrixRotatedEXT")

///|
pub fn gl_matrix_rotated_ext(
  mode : UInt,
  angle : Double,
  x : Double,
  y : Double,
  z : Double,
) -> Unit {
  let fp : FuncRef[(UInt, Double, Double, Double, Double) -> Unit] = d_glMatrixRotatedEXT
    .get()
    .unsafe_into()
  fp(mode, angle, x, y, z)
}

///|
let d_glMatrixRotatefEXT : Dispatch = Dispatch::new("glMatrixRotatefEXT")

///|
pub fn gl_matrix_rotatef_ext(
  mode : UInt,
  angle : Float,
  x : Float,
  y : Float,
  z : Float,
) -> Unit {
  let fp : FuncRef[(UInt, Float, Float, Float, Float) -> Unit] = d_glMatrixRotatefEXT
    .get()
    .unsafe_into()
  fp(mode, angle, x, y, z)
}

///|
let d_glMatrixScaledEXT : Dispatch = Dispatch::new("glMatrixScaledEXT")

///|
pub fn gl_matrix_scaled_ext(
  mode : UInt,
  x : Double,
  y : Double,
  z : Double,
) -> Unit {
  let fp : FuncRef[(UInt, Double, Double, Double) -> Unit] = d_glMatrixScaledEXT
    .get()
    .unsafe_into()
  fp(mode, x, y, z)
}

///|
let d_glMatrixScalefEXT : Dispatch = Dispatch::new("glMatrixScalefEXT")

///|
pub fn gl_matrix_scalef_ext(
  mode : UInt,
  x : Float,
  y : Float,
  z : Float,
) -> Unit {
  let fp : FuncRef[(UInt, Float, Float, Float) -> Unit] = d_glMatrixScalefEXT
    .get()
    .unsafe_into()
  fp(mode, x, y, z)
}

///|
let d_glMatrixTranslatedEXT : Dispatch = Dispatch::new("glMatrixTranslatedEXT")

///|
pub fn gl_matrix_translated_ext(
  mode : UInt,
  x : Double,
  y : Double,
  z : Double,
) -> Unit {
  let fp : FuncRef[(UInt, Double, Double, Double) -> Unit] = d_glMatrixTranslatedEXT
    .get()
    .unsafe_into()
  fp(mode, x, y, z)
}

///|
let d_glMatrixTranslatefEXT : Dispatch = Dispatch::new("glMatrixTranslatefEXT")

///|
pub fn gl_matrix_translatef_ext(
  mode : UInt,
  x : Float,
  y : Float,
  z : Float,
) -> Unit {
  let fp : FuncRef[(UInt, Float, Float, Float) -> Unit] = d_glMatrixTranslatefEXT
    .get()
    .unsafe_into()
  fp(mode, x, y, z)
}

///|
let d_glMaxActiveShaderCoresARM : Dispatch = Dispatch::new(
  "glMaxActiveShaderCoresARM",
)

///|
pub fn gl_max_active_shader_cores_arm(count : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glMaxActiveShaderCoresARM
    .get()
    .unsafe_into()
  fp(count)
}

///|
let d_glMaxShaderCompilerThreadsKHR : Dispatch = Dispatch::with_aliases(
  "glMaxShaderCompilerThreadsKHR",
  ["glMaxShaderCompilerThreadsARB"],
)

///|
pub fn gl_max_shader_compiler_threads_khr(count : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glMaxShaderCompilerThreadsKHR
    .get()
    .unsafe_into()
  fp(count)
}

///|
let d_glMaxShaderCompilerThreadsARB : Dispatch = Dispatch::with_aliases(
  "glMaxShaderCompilerThreadsARB",
  ["glMaxShaderCompilerThreadsKHR"],
)

///|
pub fn gl_max_shader_compiler_threads_arb(count : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glMaxShaderCompilerThreadsARB
    .get()
    .unsafe_into()
  fp(count)
}

///|
let d_glMemoryBarrier : Dispatch = Dispatch::with_aliases("glMemoryBarrier", [
  "glMemoryBarrierEXT",
])

///|
pub fn gl_memory_barrier(barriers : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glMemoryBarrier.get().unsafe_into()
  fp(barriers)
}

///|
let d_glMemoryBarrierByRegion : Dispatch = Dispatch::new(
  "glMemoryBarrierByRegion",
)

///|
pub fn gl_memory_barrier_by_region(barriers : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glMemoryBarrierByRegion
    .get()
    .unsafe_into()
  fp(barriers)
}

///|
let d_glMemoryBarrierEXT : Dispatch = Dispatch::with_aliases(
  "glMemoryBarrierEXT",
  ["glMemoryBarrier"],
)

///|
pub fn gl_memory_barrier_ext(barriers : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glMemoryBarrierEXT.get().unsafe_into()
  fp(barriers)
}

///|
let d_glMemoryObjectParameterivEXT : Dispatch = Dispatch::new(
  "glMemoryObjectParameterivEXT",
)

///|
pub fn gl_memory_object_parameteriv_ext(
  memoryObject : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glMemoryObjectParameterivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(memoryObject, pname, params_p)
  })
}

///|
let d_glMinSampleShading : Dispatch = Dispatch::with_aliases(
  "glMinSampleShading",
  ["glMinSampleShadingARB", "glMinSampleShadingOES"],
)

///|
pub fn gl_min_sample_shading(value : Float) -> Unit {
  let fp : FuncRef[(Float) -> Unit] = d_glMinSampleShading.get().unsafe_into()
  fp(value)
}

///|
let d_glMinSampleShadingARB : Dispatch = Dispatch::with_aliases(
  "glMinSampleShadingARB",
  ["glMinSampleShading", "glMinSampleShadingOES"],
)

///|
pub fn gl_min_sample_shading_arb(value : Float) -> Unit {
  let fp : FuncRef[(Float) -> Unit] = d_glMinSampleShadingARB
    .get()
    .unsafe_into()
  fp(value)
}

///|
let d_glMinSampleShadingOES : Dispatch = Dispatch::with_aliases(
  "glMinSampleShadingOES",
  ["glMinSampleShading", "glMinSampleShadingARB"],
)

///|
pub fn gl_min_sample_shading_oes(value : Float) -> Unit {
  let fp : FuncRef[(Float) -> Unit] = d_glMinSampleShadingOES
    .get()
    .unsafe_into()
  fp(value)
}

///|
let d_glMinmax : Dispatch = Dispatch::with_aliases("glMinmax", ["glMinmaxEXT"])

///|
pub fn gl_minmax(target : UInt, internalformat : UInt, sink : Bool) -> Unit {
  let fp : FuncRef[(UInt, UInt, Bool) -> Unit] = d_glMinmax.get().unsafe_into()
  fp(target, internalformat, sink)
}

///|
let d_glMinmaxEXT : Dispatch = Dispatch::with_aliases("glMinmaxEXT", [
  "glMinmax",
])

///|
pub fn gl_minmax_ext(target : UInt, internalformat : UInt, sink : Bool) -> Unit {
  let fp : FuncRef[(UInt, UInt, Bool) -> Unit] = d_glMinmaxEXT
    .get()
    .unsafe_into()
  fp(target, internalformat, sink)
}

///|
let d_glMultMatrixd : Dispatch = Dispatch::new("glMultMatrixd")

///|
pub fn gl_mult_matrixd(m : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Double]) -> Unit] = d_glMultMatrixd
    .get()
    .unsafe_into()
  @pointer.borrow_array(m, fn(m_p) { fp(m_p) })
}

///|
let d_glMultMatrixf : Dispatch = Dispatch::new("glMultMatrixf")

///|
pub fn gl_mult_matrixf(m : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Float]) -> Unit] = d_glMultMatrixf
    .get()
    .unsafe_into()
  @pointer.borrow_array(m, fn(m_p) { fp(m_p) })
}

///|
let d_glMultMatrixx : Dispatch = Dispatch::new("glMultMatrixx")

///|
pub fn gl_mult_matrixx(m : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glMultMatrixx
    .get()
    .unsafe_into()
  @pointer.borrow_array(m, fn(m_p) { fp(m_p) })
}

///|
let d_glMultMatrixxOES : Dispatch = Dispatch::new("glMultMatrixxOES")

///|
pub fn gl_mult_matrixx_oes(m : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glMultMatrixxOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(m, fn(m_p) { fp(m_p) })
}

///|
let d_glMultTransposeMatrixd : Dispatch = Dispatch::with_aliases(
  "glMultTransposeMatrixd",
  ["glMultTransposeMatrixdARB"],
)

///|
pub fn gl_mult_transpose_matrixd(m : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Double]) -> Unit] = d_glMultTransposeMatrixd
    .get()
    .unsafe_into()
  @pointer.borrow_array(m, fn(m_p) { fp(m_p) })
}

///|
let d_glMultTransposeMatrixdARB : Dispatch = Dispatch::with_aliases(
  "glMultTransposeMatrixdARB",
  ["glMultTransposeMatrixd"],
)

///|
pub fn gl_mult_transpose_matrixd_arb(m : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Double]) -> Unit] = d_glMultTransposeMatrixdARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(m, fn(m_p) { fp(m_p) })
}

///|
let d_glMultTransposeMatrixf : Dispatch = Dispatch::with_aliases(
  "glMultTransposeMatrixf",
  ["glMultTransposeMatrixfARB"],
)

///|
pub fn gl_mult_transpose_matrixf(m : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Float]) -> Unit] = d_glMultTransposeMatrixf
    .get()
    .unsafe_into()
  @pointer.borrow_array(m, fn(m_p) { fp(m_p) })
}

///|
let d_glMultTransposeMatrixfARB : Dispatch = Dispatch::with_aliases(
  "glMultTransposeMatrixfARB",
  ["glMultTransposeMatrixf"],
)

///|
pub fn gl_mult_transpose_matrixf_arb(m : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Float]) -> Unit] = d_glMultTransposeMatrixfARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(m, fn(m_p) { fp(m_p) })
}

///|
let d_glMultTransposeMatrixxOES : Dispatch = Dispatch::new(
  "glMultTransposeMatrixxOES",
)

///|
pub fn gl_mult_transpose_matrixx_oes(m : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glMultTransposeMatrixxOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(m, fn(m_p) { fp(m_p) })
}

///|
let d_glMultiDrawArrays : Dispatch = Dispatch::with_aliases(
  "glMultiDrawArrays",
  ["glMultiDrawArraysEXT"],
)

///|
pub fn gl_multi_draw_arrays(
  mode : UInt,
  first : FixedArray[Int],
  count : FixedArray[Int],
  drawcount : Int,
) -> Unit {
  let fp : FuncRef[
    (UInt, @pointer.Pointer[Int], @pointer.Pointer[Int], Int) -> Unit,
  ] = d_glMultiDrawArrays.get().unsafe_into()
  @pointer.borrow_array(first, fn(first_p) {
    @pointer.borrow_array(count, fn(count_p) {
      fp(mode, first_p, count_p, drawcount)
    })
  })
}

///|
let d_glMultiDrawArraysEXT : Dispatch = Dispatch::with_aliases(
  "glMultiDrawArraysEXT",
  ["glMultiDrawArrays"],
)

///|
pub fn gl_multi_draw_arrays_ext(
  mode : UInt,
  first : FixedArray[Int],
  count : FixedArray[Int],
  primcount : Int,
) -> Unit {
  let fp : FuncRef[
    (UInt, @pointer.Pointer[Int], @pointer.Pointer[Int], Int) -> Unit,
  ] = d_glMultiDrawArraysEXT.get().unsafe_into()
  @pointer.borrow_array(first, fn(first_p) {
    @pointer.borrow_array(count, fn(count_p) {
      fp(mode, first_p, count_p, primcount)
    })
  })
}

///|
let d_glMultiDrawArraysIndirect : Dispatch = Dispatch::with_aliases(
  "glMultiDrawArraysIndirect",
  ["glMultiDrawArraysIndirectAMD", "glMultiDrawArraysIndirectEXT"],
)

///|
pub fn gl_multi_draw_arrays_indirect(
  mode : UInt,
  indirect : Bytes,
  drawcount : Int,
  stride : Int,
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Byte], Int, Int) -> Unit] = d_glMultiDrawArraysIndirect
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(indirect, fn(indirect_p) {
    fp(mode, indirect_p, drawcount, stride)
  })
}

///|
let d_glMultiDrawArraysIndirectAMD : Dispatch = Dispatch::with_aliases(
  "glMultiDrawArraysIndirectAMD",
  ["glMultiDrawArraysIndirect", "glMultiDrawArraysIndirectEXT"],
)

///|
pub fn gl_multi_draw_arrays_indirect_amd(
  mode : UInt,
  indirect : Bytes,
  primcount : Int,
  stride : Int,
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Byte], Int, Int) -> Unit] = d_glMultiDrawArraysIndirectAMD
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(indirect, fn(indirect_p) {
    fp(mode, indirect_p, primcount, stride)
  })
}

///|
let d_glMultiDrawArraysIndirectBindlessCountNV : Dispatch = Dispatch::new(
  "glMultiDrawArraysIndirectBindlessCountNV",
)

///|
pub fn gl_multi_draw_arrays_indirect_bindless_count_nv(
  mode : UInt,
  indirect : Bytes,
  drawCount : Int,
  maxDrawCount : Int,
  stride : Int,
  vertexBufferCount : Int,
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Byte], Int, Int, Int, Int) -> Unit] = d_glMultiDrawArraysIndirectBindlessCountNV
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(indirect, fn(indirect_p) {
    fp(mode, indirect_p, drawCount, maxDrawCount, stride, vertexBufferCount)
  })
}

///|
let d_glMultiDrawArraysIndirectBindlessNV : Dispatch = Dispatch::new(
  "glMultiDrawArraysIndirectBindlessNV",
)

///|
pub fn gl_multi_draw_arrays_indirect_bindless_nv(
  mode : UInt,
  indirect : Bytes,
  drawCount : Int,
  stride : Int,
  vertexBufferCount : Int,
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Byte], Int, Int, Int) -> Unit] = d_glMultiDrawArraysIndirectBindlessNV
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(indirect, fn(indirect_p) {
    fp(mode, indirect_p, drawCount, stride, vertexBufferCount)
  })
}

///|
let d_glMultiDrawArraysIndirectCount : Dispatch = Dispatch::with_aliases(
  "glMultiDrawArraysIndirectCount",
  ["glMultiDrawArraysIndirectCountARB"],
)

///|
pub fn gl_multi_draw_arrays_indirect_count(
  mode : UInt,
  indirect : Bytes,
  drawcount : Int64,
  maxdrawcount : Int,
  stride : Int,
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Byte], Int64, Int, Int) -> Unit] = d_glMultiDrawArraysIndirectCount
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(indirect, fn(indirect_p) {
    fp(mode, indirect_p, drawcount, maxdrawcount, stride)
  })
}

///|
let d_glMultiDrawArraysIndirectCountARB : Dispatch = Dispatch::with_aliases(
  "glMultiDrawArraysIndirectCountARB",
  ["glMultiDrawArraysIndirectCount"],
)

///|
pub fn gl_multi_draw_arrays_indirect_count_arb(
  mode : UInt,
  indirect : Bytes,
  drawcount : Int64,
  maxdrawcount : Int,
  stride : Int,
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Byte], Int64, Int, Int) -> Unit] = d_glMultiDrawArraysIndirectCountARB
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(indirect, fn(indirect_p) {
    fp(mode, indirect_p, drawcount, maxdrawcount, stride)
  })
}

///|
let d_glMultiDrawArraysIndirectEXT : Dispatch = Dispatch::with_aliases(
  "glMultiDrawArraysIndirectEXT",
  ["glMultiDrawArraysIndirect", "glMultiDrawArraysIndirectAMD"],
)

///|
pub fn gl_multi_draw_arrays_indirect_ext(
  mode : UInt,
  indirect : Bytes,
  drawcount : Int,
  stride : Int,
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Byte], Int, Int) -> Unit] = d_glMultiDrawArraysIndirectEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(indirect, fn(indirect_p) {
    fp(mode, indirect_p, drawcount, stride)
  })
}

///|
let d_glMultiDrawElementArrayAPPLE : Dispatch = Dispatch::new(
  "glMultiDrawElementArrayAPPLE",
)

///|
pub fn gl_multi_draw_element_array_apple(
  mode : UInt,
  first : FixedArray[Int],
  count : FixedArray[Int],
  primcount : Int,
) -> Unit {
  let fp : FuncRef[
    (UInt, @pointer.Pointer[Int], @pointer.Pointer[Int], Int) -> Unit,
  ] = d_glMultiDrawElementArrayAPPLE.get().unsafe_into()
  @pointer.borrow_array(first, fn(first_p) {
    @pointer.borrow_array(count, fn(count_p) {
      fp(mode, first_p, count_p, primcount)
    })
  })
}

///|
let d_glMultiDrawElementsIndirect : Dispatch = Dispatch::with_aliases(
  "glMultiDrawElementsIndirect",
  ["glMultiDrawElementsIndirectAMD", "glMultiDrawElementsIndirectEXT"],
)

///|
pub fn gl_multi_draw_elements_indirect(
  mode : UInt,
  type_ : UInt,
  indirect : Bytes,
  drawcount : Int,
  stride : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Byte], Int, Int) -> Unit] = d_glMultiDrawElementsIndirect
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(indirect, fn(indirect_p) {
    fp(mode, type_, indirect_p, drawcount, stride)
  })
}

///|
let d_glMultiDrawElementsIndirectAMD : Dispatch = Dispatch::with_aliases(
  "glMultiDrawElementsIndirectAMD",
  ["glMultiDrawElementsIndirect", "glMultiDrawElementsIndirectEXT"],
)

///|
pub fn gl_multi_draw_elements_indirect_amd(
  mode : UInt,
  type_ : UInt,
  indirect : Bytes,
  primcount : Int,
  stride : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Byte], Int, Int) -> Unit] = d_glMultiDrawElementsIndirectAMD
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(indirect, fn(indirect_p) {
    fp(mode, type_, indirect_p, primcount, stride)
  })
}

///|
let d_glMultiDrawElementsIndirectBindlessCountNV : Dispatch = Dispatch::new(
  "glMultiDrawElementsIndirectBindlessCountNV",
)

///|
pub fn gl_multi_draw_elements_indirect_bindless_count_nv(
  mode : UInt,
  type_ : UInt,
  indirect : Bytes,
  drawCount : Int,
  maxDrawCount : Int,
  stride : Int,
  vertexBufferCount : Int,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, @pointer.Pointer[Byte], Int, Int, Int, Int) -> Unit,
  ] = d_glMultiDrawElementsIndirectBindlessCountNV.get().unsafe_into()
  @pointer.borrow_bytes(indirect, fn(indirect_p) {
    fp(
      mode, type_, indirect_p, drawCount, maxDrawCount, stride, vertexBufferCount,
    )
  })
}

///|
let d_glMultiDrawElementsIndirectBindlessNV : Dispatch = Dispatch::new(
  "glMultiDrawElementsIndirectBindlessNV",
)

///|
pub fn gl_multi_draw_elements_indirect_bindless_nv(
  mode : UInt,
  type_ : UInt,
  indirect : Bytes,
  drawCount : Int,
  stride : Int,
  vertexBufferCount : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Byte], Int, Int, Int) -> Unit] = d_glMultiDrawElementsIndirectBindlessNV
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(indirect, fn(indirect_p) {
    fp(mode, type_, indirect_p, drawCount, stride, vertexBufferCount)
  })
}

///|
let d_glMultiDrawElementsIndirectCount : Dispatch = Dispatch::with_aliases(
  "glMultiDrawElementsIndirectCount",
  ["glMultiDrawElementsIndirectCountARB"],
)

///|
pub fn gl_multi_draw_elements_indirect_count(
  mode : UInt,
  type_ : UInt,
  indirect : Bytes,
  drawcount : Int64,
  maxdrawcount : Int,
  stride : Int,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, @pointer.Pointer[Byte], Int64, Int, Int) -> Unit,
  ] = d_glMultiDrawElementsIndirectCount.get().unsafe_into()
  @pointer.borrow_bytes(indirect, fn(indirect_p) {
    fp(mode, type_, indirect_p, drawcount, maxdrawcount, stride)
  })
}

///|
let d_glMultiDrawElementsIndirectCountARB : Dispatch = Dispatch::with_aliases(
  "glMultiDrawElementsIndirectCountARB",
  ["glMultiDrawElementsIndirectCount"],
)

///|
pub fn gl_multi_draw_elements_indirect_count_arb(
  mode : UInt,
  type_ : UInt,
  indirect : Bytes,
  drawcount : Int64,
  maxdrawcount : Int,
  stride : Int,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, @pointer.Pointer[Byte], Int64, Int, Int) -> Unit,
  ] = d_glMultiDrawElementsIndirectCountARB.get().unsafe_into()
  @pointer.borrow_bytes(indirect, fn(indirect_p) {
    fp(mode, type_, indirect_p, drawcount, maxdrawcount, stride)
  })
}

///|
let d_glMultiDrawElementsIndirectEXT : Dispatch = Dispatch::with_aliases(
  "glMultiDrawElementsIndirectEXT",
  ["glMultiDrawElementsIndirect", "glMultiDrawElementsIndirectAMD"],
)

///|
pub fn gl_multi_draw_elements_indirect_ext(
  mode : UInt,
  type_ : UInt,
  indirect : Bytes,
  drawcount : Int,
  stride : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Byte], Int, Int) -> Unit] = d_glMultiDrawElementsIndirectEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(indirect, fn(indirect_p) {
    fp(mode, type_, indirect_p, drawcount, stride)
  })
}

///|
let d_glMultiDrawMeshTasksIndirectEXT : Dispatch = Dispatch::new(
  "glMultiDrawMeshTasksIndirectEXT",
)

///|
pub fn gl_multi_draw_mesh_tasks_indirect_ext(
  indirect : Int64,
  drawcount : Int,
  stride : Int,
) -> Unit {
  let fp : FuncRef[(Int64, Int, Int) -> Unit] = d_glMultiDrawMeshTasksIndirectEXT
    .get()
    .unsafe_into()
  fp(indirect, drawcount, stride)
}

///|
let d_glMultiDrawMeshTasksIndirectNV : Dispatch = Dispatch::new(
  "glMultiDrawMeshTasksIndirectNV",
)

///|
pub fn gl_multi_draw_mesh_tasks_indirect_nv(
  indirect : Int64,
  drawcount : Int,
  stride : Int,
) -> Unit {
  let fp : FuncRef[(Int64, Int, Int) -> Unit] = d_glMultiDrawMeshTasksIndirectNV
    .get()
    .unsafe_into()
  fp(indirect, drawcount, stride)
}

///|
let d_glMultiDrawMeshTasksIndirectCountEXT : Dispatch = Dispatch::new(
  "glMultiDrawMeshTasksIndirectCountEXT",
)

///|
pub fn gl_multi_draw_mesh_tasks_indirect_count_ext(
  indirect : Int64,
  drawcount : Int64,
  maxdrawcount : Int,
  stride : Int,
) -> Unit {
  let fp : FuncRef[(Int64, Int64, Int, Int) -> Unit] = d_glMultiDrawMeshTasksIndirectCountEXT
    .get()
    .unsafe_into()
  fp(indirect, drawcount, maxdrawcount, stride)
}

///|
let d_glMultiDrawMeshTasksIndirectCountNV : Dispatch = Dispatch::new(
  "glMultiDrawMeshTasksIndirectCountNV",
)

///|
pub fn gl_multi_draw_mesh_tasks_indirect_count_nv(
  indirect : Int64,
  drawcount : Int64,
  maxdrawcount : Int,
  stride : Int,
) -> Unit {
  let fp : FuncRef[(Int64, Int64, Int, Int) -> Unit] = d_glMultiDrawMeshTasksIndirectCountNV
    .get()
    .unsafe_into()
  fp(indirect, drawcount, maxdrawcount, stride)
}

///|
let d_glMultiDrawRangeElementArrayAPPLE : Dispatch = Dispatch::new(
  "glMultiDrawRangeElementArrayAPPLE",
)

///|
pub fn gl_multi_draw_range_element_array_apple(
  mode : UInt,
  start : UInt,
  end : UInt,
  first : FixedArray[Int],
  count : FixedArray[Int],
  primcount : Int,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, UInt, @pointer.Pointer[Int], @pointer.Pointer[Int], Int) -> Unit,
  ] = d_glMultiDrawRangeElementArrayAPPLE.get().unsafe_into()
  @pointer.borrow_array(first, fn(first_p) {
    @pointer.borrow_array(count, fn(count_p) {
      fp(mode, start, end, first_p, count_p, primcount)
    })
  })
}

///|
let d_glMultiModeDrawArraysIBM : Dispatch = Dispatch::new(
  "glMultiModeDrawArraysIBM",
)

///|
pub fn gl_multi_mode_draw_arrays_ibm(
  mode : FixedArray[UInt],
  first : FixedArray[Int],
  count : FixedArray[Int],
  primcount : Int,
  modestride : Int,
) -> Unit {
  let fp : FuncRef[
    (
      @pointer.Pointer[UInt],
      @pointer.Pointer[Int],
      @pointer.Pointer[Int],
      Int,
      Int,
    ) -> Unit,
  ] = d_glMultiModeDrawArraysIBM.get().unsafe_into()
  @pointer.borrow_array(mode, fn(mode_p) {
    @pointer.borrow_array(first, fn(first_p) {
      @pointer.borrow_array(count, fn(count_p) {
        fp(mode_p, first_p, count_p, primcount, modestride)
      })
    })
  })
}

///|
let d_glMultiTexBufferEXT : Dispatch = Dispatch::new("glMultiTexBufferEXT")

///|
pub fn gl_multi_tex_buffer_ext(
  texunit : UInt,
  target : UInt,
  internalformat : UInt,
  buffer : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt) -> Unit] = d_glMultiTexBufferEXT
    .get()
    .unsafe_into()
  fp(texunit, target, internalformat, buffer)
}

///|
let d_glMultiTexCoord1bOES : Dispatch = Dispatch::new("glMultiTexCoord1bOES")

///|
pub fn gl_multi_tex_coord1b_oes(texture : UInt, s : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glMultiTexCoord1bOES
    .get()
    .unsafe_into()
  fp(texture, s)
}

///|
let d_glMultiTexCoord1bvOES : Dispatch = Dispatch::new("glMultiTexCoord1bvOES")

///|
pub fn gl_multi_tex_coord1bv_oes(texture : UInt, coords : Bytes) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Byte]) -> Unit] = d_glMultiTexCoord1bvOES
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(coords, fn(coords_p) { fp(texture, coords_p) })
}

///|
let d_glMultiTexCoord1d : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord1d",
  ["glMultiTexCoord1dARB"],
)

///|
pub fn gl_multi_tex_coord1d(target : UInt, s : Double) -> Unit {
  let fp : FuncRef[(UInt, Double) -> Unit] = d_glMultiTexCoord1d
    .get()
    .unsafe_into()
  fp(target, s)
}

///|
let d_glMultiTexCoord1dARB : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord1dARB",
  ["glMultiTexCoord1d"],
)

///|
pub fn gl_multi_tex_coord1d_arb(target : UInt, s : Double) -> Unit {
  let fp : FuncRef[(UInt, Double) -> Unit] = d_glMultiTexCoord1dARB
    .get()
    .unsafe_into()
  fp(target, s)
}

///|
let d_glMultiTexCoord1dv : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord1dv",
  ["glMultiTexCoord1dvARB"],
)

///|
pub fn gl_multi_tex_coord1dv(target : UInt, v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Double]) -> Unit] = d_glMultiTexCoord1dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, v_p) })
}

///|
let d_glMultiTexCoord1dvARB : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord1dvARB",
  ["glMultiTexCoord1dv"],
)

///|
pub fn gl_multi_tex_coord1dv_arb(target : UInt, v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Double]) -> Unit] = d_glMultiTexCoord1dvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, v_p) })
}

///|
let d_glMultiTexCoord1f : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord1f",
  ["glMultiTexCoord1fARB"],
)

///|
pub fn gl_multi_tex_coord1f(target : UInt, s : Float) -> Unit {
  let fp : FuncRef[(UInt, Float) -> Unit] = d_glMultiTexCoord1f
    .get()
    .unsafe_into()
  fp(target, s)
}

///|
let d_glMultiTexCoord1fARB : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord1fARB",
  ["glMultiTexCoord1f"],
)

///|
pub fn gl_multi_tex_coord1f_arb(target : UInt, s : Float) -> Unit {
  let fp : FuncRef[(UInt, Float) -> Unit] = d_glMultiTexCoord1fARB
    .get()
    .unsafe_into()
  fp(target, s)
}

///|
let d_glMultiTexCoord1fv : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord1fv",
  ["glMultiTexCoord1fvARB"],
)

///|
pub fn gl_multi_tex_coord1fv(target : UInt, v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glMultiTexCoord1fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, v_p) })
}

///|
let d_glMultiTexCoord1fvARB : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord1fvARB",
  ["glMultiTexCoord1fv"],
)

///|
pub fn gl_multi_tex_coord1fv_arb(target : UInt, v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glMultiTexCoord1fvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, v_p) })
}

///|
let d_glMultiTexCoord1hNV : Dispatch = Dispatch::new("glMultiTexCoord1hNV")

///|
pub fn gl_multi_tex_coord1h_nv(target : UInt, s : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glMultiTexCoord1hNV
    .get()
    .unsafe_into()
  fp(target, s)
}

///|
let d_glMultiTexCoord1hvNV : Dispatch = Dispatch::new("glMultiTexCoord1hvNV")

///|
pub fn gl_multi_tex_coord1hv_nv(target : UInt, v : FixedArray[UInt16]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt16]) -> Unit] = d_glMultiTexCoord1hvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, v_p) })
}

///|
let d_glMultiTexCoord1i : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord1i",
  ["glMultiTexCoord1iARB"],
)

///|
pub fn gl_multi_tex_coord1i(target : UInt, s : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glMultiTexCoord1i
    .get()
    .unsafe_into()
  fp(target, s)
}

///|
let d_glMultiTexCoord1iARB : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord1iARB",
  ["glMultiTexCoord1i"],
)

///|
pub fn gl_multi_tex_coord1i_arb(target : UInt, s : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glMultiTexCoord1iARB
    .get()
    .unsafe_into()
  fp(target, s)
}

///|
let d_glMultiTexCoord1iv : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord1iv",
  ["glMultiTexCoord1ivARB"],
)

///|
pub fn gl_multi_tex_coord1iv(target : UInt, v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glMultiTexCoord1iv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, v_p) })
}

///|
let d_glMultiTexCoord1ivARB : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord1ivARB",
  ["glMultiTexCoord1iv"],
)

///|
pub fn gl_multi_tex_coord1iv_arb(target : UInt, v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glMultiTexCoord1ivARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, v_p) })
}

///|
let d_glMultiTexCoord1s : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord1s",
  ["glMultiTexCoord1sARB"],
)

///|
pub fn gl_multi_tex_coord1s(target : UInt, s : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glMultiTexCoord1s
    .get()
    .unsafe_into()
  fp(target, s)
}

///|
let d_glMultiTexCoord1sARB : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord1sARB",
  ["glMultiTexCoord1s"],
)

///|
pub fn gl_multi_tex_coord1s_arb(target : UInt, s : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glMultiTexCoord1sARB
    .get()
    .unsafe_into()
  fp(target, s)
}

///|
let d_glMultiTexCoord1sv : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord1sv",
  ["glMultiTexCoord1svARB"],
)

///|
pub fn gl_multi_tex_coord1sv(target : UInt, v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int16]) -> Unit] = d_glMultiTexCoord1sv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, v_p) })
}

///|
let d_glMultiTexCoord1svARB : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord1svARB",
  ["glMultiTexCoord1sv"],
)

///|
pub fn gl_multi_tex_coord1sv_arb(target : UInt, v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int16]) -> Unit] = d_glMultiTexCoord1svARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, v_p) })
}

///|
let d_glMultiTexCoord1xOES : Dispatch = Dispatch::new("glMultiTexCoord1xOES")

///|
pub fn gl_multi_tex_coord1x_oes(texture : UInt, s : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glMultiTexCoord1xOES
    .get()
    .unsafe_into()
  fp(texture, s)
}

///|
let d_glMultiTexCoord1xvOES : Dispatch = Dispatch::new("glMultiTexCoord1xvOES")

///|
pub fn gl_multi_tex_coord1xv_oes(
  texture : UInt,
  coords : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glMultiTexCoord1xvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(texture, coords_p) })
}

///|
let d_glMultiTexCoord2bOES : Dispatch = Dispatch::new("glMultiTexCoord2bOES")

///|
pub fn gl_multi_tex_coord2b_oes(texture : UInt, s : Int, t : Int) -> Unit {
  let fp : FuncRef[(UInt, Int, Int) -> Unit] = d_glMultiTexCoord2bOES
    .get()
    .unsafe_into()
  fp(texture, s, t)
}

///|
let d_glMultiTexCoord2bvOES : Dispatch = Dispatch::new("glMultiTexCoord2bvOES")

///|
pub fn gl_multi_tex_coord2bv_oes(texture : UInt, coords : Bytes) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Byte]) -> Unit] = d_glMultiTexCoord2bvOES
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(coords, fn(coords_p) { fp(texture, coords_p) })
}

///|
let d_glMultiTexCoord2d : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord2d",
  ["glMultiTexCoord2dARB"],
)

///|
pub fn gl_multi_tex_coord2d(target : UInt, s : Double, t : Double) -> Unit {
  let fp : FuncRef[(UInt, Double, Double) -> Unit] = d_glMultiTexCoord2d
    .get()
    .unsafe_into()
  fp(target, s, t)
}

///|
let d_glMultiTexCoord2dARB : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord2dARB",
  ["glMultiTexCoord2d"],
)

///|
pub fn gl_multi_tex_coord2d_arb(target : UInt, s : Double, t : Double) -> Unit {
  let fp : FuncRef[(UInt, Double, Double) -> Unit] = d_glMultiTexCoord2dARB
    .get()
    .unsafe_into()
  fp(target, s, t)
}

///|
let d_glMultiTexCoord2dv : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord2dv",
  ["glMultiTexCoord2dvARB"],
)

///|
pub fn gl_multi_tex_coord2dv(target : UInt, v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Double]) -> Unit] = d_glMultiTexCoord2dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, v_p) })
}

///|
let d_glMultiTexCoord2dvARB : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord2dvARB",
  ["glMultiTexCoord2dv"],
)

///|
pub fn gl_multi_tex_coord2dv_arb(target : UInt, v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Double]) -> Unit] = d_glMultiTexCoord2dvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, v_p) })
}

///|
let d_glMultiTexCoord2f : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord2f",
  ["glMultiTexCoord2fARB"],
)

///|
pub fn gl_multi_tex_coord2f(target : UInt, s : Float, t : Float) -> Unit {
  let fp : FuncRef[(UInt, Float, Float) -> Unit] = d_glMultiTexCoord2f
    .get()
    .unsafe_into()
  fp(target, s, t)
}

///|
let d_glMultiTexCoord2fARB : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord2fARB",
  ["glMultiTexCoord2f"],
)

///|
pub fn gl_multi_tex_coord2f_arb(target : UInt, s : Float, t : Float) -> Unit {
  let fp : FuncRef[(UInt, Float, Float) -> Unit] = d_glMultiTexCoord2fARB
    .get()
    .unsafe_into()
  fp(target, s, t)
}

///|
let d_glMultiTexCoord2fv : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord2fv",
  ["glMultiTexCoord2fvARB"],
)

///|
pub fn gl_multi_tex_coord2fv(target : UInt, v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glMultiTexCoord2fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, v_p) })
}

///|
let d_glMultiTexCoord2fvARB : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord2fvARB",
  ["glMultiTexCoord2fv"],
)

///|
pub fn gl_multi_tex_coord2fv_arb(target : UInt, v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glMultiTexCoord2fvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, v_p) })
}

///|
let d_glMultiTexCoord2hNV : Dispatch = Dispatch::new("glMultiTexCoord2hNV")

///|
pub fn gl_multi_tex_coord2h_nv(target : UInt, s : Int, t : Int) -> Unit {
  let fp : FuncRef[(UInt, Int, Int) -> Unit] = d_glMultiTexCoord2hNV
    .get()
    .unsafe_into()
  fp(target, s, t)
}

///|
let d_glMultiTexCoord2hvNV : Dispatch = Dispatch::new("glMultiTexCoord2hvNV")

///|
pub fn gl_multi_tex_coord2hv_nv(target : UInt, v : FixedArray[UInt16]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt16]) -> Unit] = d_glMultiTexCoord2hvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, v_p) })
}

///|
let d_glMultiTexCoord2i : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord2i",
  ["glMultiTexCoord2iARB"],
)

///|
pub fn gl_multi_tex_coord2i(target : UInt, s : Int, t : Int) -> Unit {
  let fp : FuncRef[(UInt, Int, Int) -> Unit] = d_glMultiTexCoord2i
    .get()
    .unsafe_into()
  fp(target, s, t)
}

///|
let d_glMultiTexCoord2iARB : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord2iARB",
  ["glMultiTexCoord2i"],
)

///|
pub fn gl_multi_tex_coord2i_arb(target : UInt, s : Int, t : Int) -> Unit {
  let fp : FuncRef[(UInt, Int, Int) -> Unit] = d_glMultiTexCoord2iARB
    .get()
    .unsafe_into()
  fp(target, s, t)
}

///|
let d_glMultiTexCoord2iv : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord2iv",
  ["glMultiTexCoord2ivARB"],
)

///|
pub fn gl_multi_tex_coord2iv(target : UInt, v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glMultiTexCoord2iv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, v_p) })
}

///|
let d_glMultiTexCoord2ivARB : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord2ivARB",
  ["glMultiTexCoord2iv"],
)

///|
pub fn gl_multi_tex_coord2iv_arb(target : UInt, v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glMultiTexCoord2ivARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, v_p) })
}

///|
let d_glMultiTexCoord2s : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord2s",
  ["glMultiTexCoord2sARB"],
)

///|
pub fn gl_multi_tex_coord2s(target : UInt, s : Int, t : Int) -> Unit {
  let fp : FuncRef[(UInt, Int, Int) -> Unit] = d_glMultiTexCoord2s
    .get()
    .unsafe_into()
  fp(target, s, t)
}

///|
let d_glMultiTexCoord2sARB : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord2sARB",
  ["glMultiTexCoord2s"],
)

///|
pub fn gl_multi_tex_coord2s_arb(target : UInt, s : Int, t : Int) -> Unit {
  let fp : FuncRef[(UInt, Int, Int) -> Unit] = d_glMultiTexCoord2sARB
    .get()
    .unsafe_into()
  fp(target, s, t)
}

///|
let d_glMultiTexCoord2sv : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord2sv",
  ["glMultiTexCoord2svARB"],
)

///|
pub fn gl_multi_tex_coord2sv(target : UInt, v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int16]) -> Unit] = d_glMultiTexCoord2sv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, v_p) })
}

///|
let d_glMultiTexCoord2svARB : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord2svARB",
  ["glMultiTexCoord2sv"],
)

///|
pub fn gl_multi_tex_coord2sv_arb(target : UInt, v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int16]) -> Unit] = d_glMultiTexCoord2svARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, v_p) })
}

///|
let d_glMultiTexCoord2xOES : Dispatch = Dispatch::new("glMultiTexCoord2xOES")

///|
pub fn gl_multi_tex_coord2x_oes(texture : UInt, s : Int, t : Int) -> Unit {
  let fp : FuncRef[(UInt, Int, Int) -> Unit] = d_glMultiTexCoord2xOES
    .get()
    .unsafe_into()
  fp(texture, s, t)
}

///|
let d_glMultiTexCoord2xvOES : Dispatch = Dispatch::new("glMultiTexCoord2xvOES")

///|
pub fn gl_multi_tex_coord2xv_oes(
  texture : UInt,
  coords : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glMultiTexCoord2xvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(texture, coords_p) })
}

///|
let d_glMultiTexCoord3bOES : Dispatch = Dispatch::new("glMultiTexCoord3bOES")

///|
pub fn gl_multi_tex_coord3b_oes(
  texture : UInt,
  s : Int,
  t : Int,
  r : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int) -> Unit] = d_glMultiTexCoord3bOES
    .get()
    .unsafe_into()
  fp(texture, s, t, r)
}

///|
let d_glMultiTexCoord3bvOES : Dispatch = Dispatch::new("glMultiTexCoord3bvOES")

///|
pub fn gl_multi_tex_coord3bv_oes(texture : UInt, coords : Bytes) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Byte]) -> Unit] = d_glMultiTexCoord3bvOES
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(coords, fn(coords_p) { fp(texture, coords_p) })
}

///|
let d_glMultiTexCoord3d : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord3d",
  ["glMultiTexCoord3dARB"],
)

///|
pub fn gl_multi_tex_coord3d(
  target : UInt,
  s : Double,
  t : Double,
  r : Double,
) -> Unit {
  let fp : FuncRef[(UInt, Double, Double, Double) -> Unit] = d_glMultiTexCoord3d
    .get()
    .unsafe_into()
  fp(target, s, t, r)
}

///|
let d_glMultiTexCoord3dARB : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord3dARB",
  ["glMultiTexCoord3d"],
)

///|
pub fn gl_multi_tex_coord3d_arb(
  target : UInt,
  s : Double,
  t : Double,
  r : Double,
) -> Unit {
  let fp : FuncRef[(UInt, Double, Double, Double) -> Unit] = d_glMultiTexCoord3dARB
    .get()
    .unsafe_into()
  fp(target, s, t, r)
}

///|
let d_glMultiTexCoord3dv : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord3dv",
  ["glMultiTexCoord3dvARB"],
)

///|
pub fn gl_multi_tex_coord3dv(target : UInt, v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Double]) -> Unit] = d_glMultiTexCoord3dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, v_p) })
}

///|
let d_glMultiTexCoord3dvARB : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord3dvARB",
  ["glMultiTexCoord3dv"],
)

///|
pub fn gl_multi_tex_coord3dv_arb(target : UInt, v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Double]) -> Unit] = d_glMultiTexCoord3dvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, v_p) })
}

///|
let d_glMultiTexCoord3f : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord3f",
  ["glMultiTexCoord3fARB"],
)

///|
pub fn gl_multi_tex_coord3f(
  target : UInt,
  s : Float,
  t : Float,
  r : Float,
) -> Unit {
  let fp : FuncRef[(UInt, Float, Float, Float) -> Unit] = d_glMultiTexCoord3f
    .get()
    .unsafe_into()
  fp(target, s, t, r)
}

///|
let d_glMultiTexCoord3fARB : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord3fARB",
  ["glMultiTexCoord3f"],
)

///|
pub fn gl_multi_tex_coord3f_arb(
  target : UInt,
  s : Float,
  t : Float,
  r : Float,
) -> Unit {
  let fp : FuncRef[(UInt, Float, Float, Float) -> Unit] = d_glMultiTexCoord3fARB
    .get()
    .unsafe_into()
  fp(target, s, t, r)
}

///|
let d_glMultiTexCoord3fv : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord3fv",
  ["glMultiTexCoord3fvARB"],
)

///|
pub fn gl_multi_tex_coord3fv(target : UInt, v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glMultiTexCoord3fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, v_p) })
}

///|
let d_glMultiTexCoord3fvARB : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord3fvARB",
  ["glMultiTexCoord3fv"],
)

///|
pub fn gl_multi_tex_coord3fv_arb(target : UInt, v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glMultiTexCoord3fvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, v_p) })
}

///|
let d_glMultiTexCoord3hNV : Dispatch = Dispatch::new("glMultiTexCoord3hNV")

///|
pub fn gl_multi_tex_coord3h_nv(
  target : UInt,
  s : Int,
  t : Int,
  r : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int) -> Unit] = d_glMultiTexCoord3hNV
    .get()
    .unsafe_into()
  fp(target, s, t, r)
}

///|
let d_glMultiTexCoord3hvNV : Dispatch = Dispatch::new("glMultiTexCoord3hvNV")

///|
pub fn gl_multi_tex_coord3hv_nv(target : UInt, v : FixedArray[UInt16]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt16]) -> Unit] = d_glMultiTexCoord3hvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, v_p) })
}

///|
let d_glMultiTexCoord3i : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord3i",
  ["glMultiTexCoord3iARB"],
)

///|
pub fn gl_multi_tex_coord3i(target : UInt, s : Int, t : Int, r : Int) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int) -> Unit] = d_glMultiTexCoord3i
    .get()
    .unsafe_into()
  fp(target, s, t, r)
}

///|
let d_glMultiTexCoord3iARB : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord3iARB",
  ["glMultiTexCoord3i"],
)

///|
pub fn gl_multi_tex_coord3i_arb(
  target : UInt,
  s : Int,
  t : Int,
  r : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int) -> Unit] = d_glMultiTexCoord3iARB
    .get()
    .unsafe_into()
  fp(target, s, t, r)
}

///|
let d_glMultiTexCoord3iv : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord3iv",
  ["glMultiTexCoord3ivARB"],
)

///|
pub fn gl_multi_tex_coord3iv(target : UInt, v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glMultiTexCoord3iv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, v_p) })
}

///|
let d_glMultiTexCoord3ivARB : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord3ivARB",
  ["glMultiTexCoord3iv"],
)

///|
pub fn gl_multi_tex_coord3iv_arb(target : UInt, v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glMultiTexCoord3ivARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, v_p) })
}

///|
let d_glMultiTexCoord3s : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord3s",
  ["glMultiTexCoord3sARB"],
)

///|
pub fn gl_multi_tex_coord3s(target : UInt, s : Int, t : Int, r : Int) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int) -> Unit] = d_glMultiTexCoord3s
    .get()
    .unsafe_into()
  fp(target, s, t, r)
}

///|
let d_glMultiTexCoord3sARB : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord3sARB",
  ["glMultiTexCoord3s"],
)

///|
pub fn gl_multi_tex_coord3s_arb(
  target : UInt,
  s : Int,
  t : Int,
  r : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int) -> Unit] = d_glMultiTexCoord3sARB
    .get()
    .unsafe_into()
  fp(target, s, t, r)
}

///|
let d_glMultiTexCoord3sv : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord3sv",
  ["glMultiTexCoord3svARB"],
)

///|
pub fn gl_multi_tex_coord3sv(target : UInt, v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int16]) -> Unit] = d_glMultiTexCoord3sv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, v_p) })
}

///|
let d_glMultiTexCoord3svARB : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord3svARB",
  ["glMultiTexCoord3sv"],
)

///|
pub fn gl_multi_tex_coord3sv_arb(target : UInt, v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int16]) -> Unit] = d_glMultiTexCoord3svARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, v_p) })
}

///|
let d_glMultiTexCoord3xOES : Dispatch = Dispatch::new("glMultiTexCoord3xOES")

///|
pub fn gl_multi_tex_coord3x_oes(
  texture : UInt,
  s : Int,
  t : Int,
  r : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int) -> Unit] = d_glMultiTexCoord3xOES
    .get()
    .unsafe_into()
  fp(texture, s, t, r)
}

///|
let d_glMultiTexCoord3xvOES : Dispatch = Dispatch::new("glMultiTexCoord3xvOES")

///|
pub fn gl_multi_tex_coord3xv_oes(
  texture : UInt,
  coords : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glMultiTexCoord3xvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(texture, coords_p) })
}

///|
let d_glMultiTexCoord4bOES : Dispatch = Dispatch::new("glMultiTexCoord4bOES")

///|
pub fn gl_multi_tex_coord4b_oes(
  texture : UInt,
  s : Int,
  t : Int,
  r : Int,
  q : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int) -> Unit] = d_glMultiTexCoord4bOES
    .get()
    .unsafe_into()
  fp(texture, s, t, r, q)
}

///|
let d_glMultiTexCoord4bvOES : Dispatch = Dispatch::new("glMultiTexCoord4bvOES")

///|
pub fn gl_multi_tex_coord4bv_oes(texture : UInt, coords : Bytes) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Byte]) -> Unit] = d_glMultiTexCoord4bvOES
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(coords, fn(coords_p) { fp(texture, coords_p) })
}

///|
let d_glMultiTexCoord4d : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord4d",
  ["glMultiTexCoord4dARB"],
)

///|
pub fn gl_multi_tex_coord4d(
  target : UInt,
  s : Double,
  t : Double,
  r : Double,
  q : Double,
) -> Unit {
  let fp : FuncRef[(UInt, Double, Double, Double, Double) -> Unit] = d_glMultiTexCoord4d
    .get()
    .unsafe_into()
  fp(target, s, t, r, q)
}

///|
let d_glMultiTexCoord4dARB : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord4dARB",
  ["glMultiTexCoord4d"],
)

///|
pub fn gl_multi_tex_coord4d_arb(
  target : UInt,
  s : Double,
  t : Double,
  r : Double,
  q : Double,
) -> Unit {
  let fp : FuncRef[(UInt, Double, Double, Double, Double) -> Unit] = d_glMultiTexCoord4dARB
    .get()
    .unsafe_into()
  fp(target, s, t, r, q)
}

///|
let d_glMultiTexCoord4dv : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord4dv",
  ["glMultiTexCoord4dvARB"],
)

///|
pub fn gl_multi_tex_coord4dv(target : UInt, v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Double]) -> Unit] = d_glMultiTexCoord4dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, v_p) })
}

///|
let d_glMultiTexCoord4dvARB : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord4dvARB",
  ["glMultiTexCoord4dv"],
)

///|
pub fn gl_multi_tex_coord4dv_arb(target : UInt, v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Double]) -> Unit] = d_glMultiTexCoord4dvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, v_p) })
}

///|
let d_glMultiTexCoord4f : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord4f",
  ["glMultiTexCoord4fARB"],
)

///|
pub fn gl_multi_tex_coord4f(
  target : UInt,
  s : Float,
  t : Float,
  r : Float,
  q : Float,
) -> Unit {
  let fp : FuncRef[(UInt, Float, Float, Float, Float) -> Unit] = d_glMultiTexCoord4f
    .get()
    .unsafe_into()
  fp(target, s, t, r, q)
}

///|
let d_glMultiTexCoord4fARB : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord4fARB",
  ["glMultiTexCoord4f"],
)

///|
pub fn gl_multi_tex_coord4f_arb(
  target : UInt,
  s : Float,
  t : Float,
  r : Float,
  q : Float,
) -> Unit {
  let fp : FuncRef[(UInt, Float, Float, Float, Float) -> Unit] = d_glMultiTexCoord4fARB
    .get()
    .unsafe_into()
  fp(target, s, t, r, q)
}

///|
let d_glMultiTexCoord4fv : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord4fv",
  ["glMultiTexCoord4fvARB"],
)

///|
pub fn gl_multi_tex_coord4fv(target : UInt, v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glMultiTexCoord4fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, v_p) })
}

///|
let d_glMultiTexCoord4fvARB : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord4fvARB",
  ["glMultiTexCoord4fv"],
)

///|
pub fn gl_multi_tex_coord4fv_arb(target : UInt, v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glMultiTexCoord4fvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, v_p) })
}

///|
let d_glMultiTexCoord4hNV : Dispatch = Dispatch::new("glMultiTexCoord4hNV")

///|
pub fn gl_multi_tex_coord4h_nv(
  target : UInt,
  s : Int,
  t : Int,
  r : Int,
  q : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int) -> Unit] = d_glMultiTexCoord4hNV
    .get()
    .unsafe_into()
  fp(target, s, t, r, q)
}

///|
let d_glMultiTexCoord4hvNV : Dispatch = Dispatch::new("glMultiTexCoord4hvNV")

///|
pub fn gl_multi_tex_coord4hv_nv(target : UInt, v : FixedArray[UInt16]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt16]) -> Unit] = d_glMultiTexCoord4hvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, v_p) })
}

///|
let d_glMultiTexCoord4i : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord4i",
  ["glMultiTexCoord4iARB"],
)

///|
pub fn gl_multi_tex_coord4i(
  target : UInt,
  s : Int,
  t : Int,
  r : Int,
  q : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int) -> Unit] = d_glMultiTexCoord4i
    .get()
    .unsafe_into()
  fp(target, s, t, r, q)
}

///|
let d_glMultiTexCoord4iARB : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord4iARB",
  ["glMultiTexCoord4i"],
)

///|
pub fn gl_multi_tex_coord4i_arb(
  target : UInt,
  s : Int,
  t : Int,
  r : Int,
  q : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int) -> Unit] = d_glMultiTexCoord4iARB
    .get()
    .unsafe_into()
  fp(target, s, t, r, q)
}

///|
let d_glMultiTexCoord4iv : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord4iv",
  ["glMultiTexCoord4ivARB"],
)

///|
pub fn gl_multi_tex_coord4iv(target : UInt, v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glMultiTexCoord4iv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, v_p) })
}

///|
let d_glMultiTexCoord4ivARB : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord4ivARB",
  ["glMultiTexCoord4iv"],
)

///|
pub fn gl_multi_tex_coord4iv_arb(target : UInt, v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glMultiTexCoord4ivARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, v_p) })
}

///|
let d_glMultiTexCoord4s : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord4s",
  ["glMultiTexCoord4sARB"],
)

///|
pub fn gl_multi_tex_coord4s(
  target : UInt,
  s : Int,
  t : Int,
  r : Int,
  q : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int) -> Unit] = d_glMultiTexCoord4s
    .get()
    .unsafe_into()
  fp(target, s, t, r, q)
}

///|
let d_glMultiTexCoord4sARB : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord4sARB",
  ["glMultiTexCoord4s"],
)

///|
pub fn gl_multi_tex_coord4s_arb(
  target : UInt,
  s : Int,
  t : Int,
  r : Int,
  q : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int) -> Unit] = d_glMultiTexCoord4sARB
    .get()
    .unsafe_into()
  fp(target, s, t, r, q)
}

///|
let d_glMultiTexCoord4sv : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord4sv",
  ["glMultiTexCoord4svARB"],
)

///|
pub fn gl_multi_tex_coord4sv(target : UInt, v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int16]) -> Unit] = d_glMultiTexCoord4sv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, v_p) })
}

///|
let d_glMultiTexCoord4svARB : Dispatch = Dispatch::with_aliases(
  "glMultiTexCoord4svARB",
  ["glMultiTexCoord4sv"],
)

///|
pub fn gl_multi_tex_coord4sv_arb(target : UInt, v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int16]) -> Unit] = d_glMultiTexCoord4svARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, v_p) })
}

///|
let d_glMultiTexCoord4x : Dispatch = Dispatch::new("glMultiTexCoord4x")

///|
pub fn gl_multi_tex_coord4x(
  texture : UInt,
  s : Int,
  t : Int,
  r : Int,
  q : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int) -> Unit] = d_glMultiTexCoord4x
    .get()
    .unsafe_into()
  fp(texture, s, t, r, q)
}

///|
let d_glMultiTexCoord4xOES : Dispatch = Dispatch::new("glMultiTexCoord4xOES")

///|
pub fn gl_multi_tex_coord4x_oes(
  texture : UInt,
  s : Int,
  t : Int,
  r : Int,
  q : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int) -> Unit] = d_glMultiTexCoord4xOES
    .get()
    .unsafe_into()
  fp(texture, s, t, r, q)
}

///|
let d_glMultiTexCoord4xvOES : Dispatch = Dispatch::new("glMultiTexCoord4xvOES")

///|
pub fn gl_multi_tex_coord4xv_oes(
  texture : UInt,
  coords : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glMultiTexCoord4xvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(texture, coords_p) })
}

///|
let d_glMultiTexCoordP1ui : Dispatch = Dispatch::new("glMultiTexCoordP1ui")

///|
pub fn gl_multi_tex_coord_p1ui(
  texture : UInt,
  type_ : UInt,
  coords : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glMultiTexCoordP1ui
    .get()
    .unsafe_into()
  fp(texture, type_, coords)
}

///|
let d_glMultiTexCoordP1uiv : Dispatch = Dispatch::new("glMultiTexCoordP1uiv")

///|
pub fn gl_multi_tex_coord_p1uiv(
  texture : UInt,
  type_ : UInt,
  coords : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[UInt]) -> Unit] = d_glMultiTexCoordP1uiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(texture, type_, coords_p) })
}

///|
let d_glMultiTexCoordP2ui : Dispatch = Dispatch::new("glMultiTexCoordP2ui")

///|
pub fn gl_multi_tex_coord_p2ui(
  texture : UInt,
  type_ : UInt,
  coords : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glMultiTexCoordP2ui
    .get()
    .unsafe_into()
  fp(texture, type_, coords)
}

///|
let d_glMultiTexCoordP2uiv : Dispatch = Dispatch::new("glMultiTexCoordP2uiv")

///|
pub fn gl_multi_tex_coord_p2uiv(
  texture : UInt,
  type_ : UInt,
  coords : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[UInt]) -> Unit] = d_glMultiTexCoordP2uiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(texture, type_, coords_p) })
}

///|
let d_glMultiTexCoordP3ui : Dispatch = Dispatch::new("glMultiTexCoordP3ui")

///|
pub fn gl_multi_tex_coord_p3ui(
  texture : UInt,
  type_ : UInt,
  coords : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glMultiTexCoordP3ui
    .get()
    .unsafe_into()
  fp(texture, type_, coords)
}

///|
let d_glMultiTexCoordP3uiv : Dispatch = Dispatch::new("glMultiTexCoordP3uiv")

///|
pub fn gl_multi_tex_coord_p3uiv(
  texture : UInt,
  type_ : UInt,
  coords : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[UInt]) -> Unit] = d_glMultiTexCoordP3uiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(texture, type_, coords_p) })
}

///|
let d_glMultiTexCoordP4ui : Dispatch = Dispatch::new("glMultiTexCoordP4ui")

///|
pub fn gl_multi_tex_coord_p4ui(
  texture : UInt,
  type_ : UInt,
  coords : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glMultiTexCoordP4ui
    .get()
    .unsafe_into()
  fp(texture, type_, coords)
}

///|
let d_glMultiTexCoordP4uiv : Dispatch = Dispatch::new("glMultiTexCoordP4uiv")

///|
pub fn gl_multi_tex_coord_p4uiv(
  texture : UInt,
  type_ : UInt,
  coords : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[UInt]) -> Unit] = d_glMultiTexCoordP4uiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(texture, type_, coords_p) })
}

///|
let d_glMultiTexCoordPointerEXT : Dispatch = Dispatch::new(
  "glMultiTexCoordPointerEXT",
)

///|
pub fn gl_multi_tex_coord_pointer_ext(
  texunit : UInt,
  size : Int,
  type_ : UInt,
  stride : Int,
  pointer : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int, @pointer.Pointer[Byte]) -> Unit] = d_glMultiTexCoordPointerEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(pointer, fn(pointer_p) {
    fp(texunit, size, type_, stride, pointer_p)
  })
}

///|
let d_glMultiTexEnvfEXT : Dispatch = Dispatch::new("glMultiTexEnvfEXT")

///|
pub fn gl_multi_tex_envf_ext(
  texunit : UInt,
  target : UInt,
  pname : UInt,
  param : Float,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Float) -> Unit] = d_glMultiTexEnvfEXT
    .get()
    .unsafe_into()
  fp(texunit, target, pname, param)
}

///|
let d_glMultiTexEnvfvEXT : Dispatch = Dispatch::new("glMultiTexEnvfvEXT")

///|
pub fn gl_multi_tex_envfv_ext(
  texunit : UInt,
  target : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glMultiTexEnvfvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(texunit, target, pname, params_p)
  })
}

///|
let d_glMultiTexEnviEXT : Dispatch = Dispatch::new("glMultiTexEnviEXT")

///|
pub fn gl_multi_tex_envi_ext(
  texunit : UInt,
  target : UInt,
  pname : UInt,
  param : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int) -> Unit] = d_glMultiTexEnviEXT
    .get()
    .unsafe_into()
  fp(texunit, target, pname, param)
}

///|
let d_glMultiTexEnvivEXT : Dispatch = Dispatch::new("glMultiTexEnvivEXT")

///|
pub fn gl_multi_tex_enviv_ext(
  texunit : UInt,
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glMultiTexEnvivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(texunit, target, pname, params_p)
  })
}

///|
let d_glMultiTexGendEXT : Dispatch = Dispatch::new("glMultiTexGendEXT")

///|
pub fn gl_multi_tex_gend_ext(
  texunit : UInt,
  coord : UInt,
  pname : UInt,
  param : Double,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Double) -> Unit] = d_glMultiTexGendEXT
    .get()
    .unsafe_into()
  fp(texunit, coord, pname, param)
}

///|
let d_glMultiTexGendvEXT : Dispatch = Dispatch::new("glMultiTexGendvEXT")

///|
pub fn gl_multi_tex_gendv_ext(
  texunit : UInt,
  coord : UInt,
  pname : UInt,
  params : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Double]) -> Unit] = d_glMultiTexGendvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(texunit, coord, pname, params_p)
  })
}

///|
let d_glMultiTexGenfEXT : Dispatch = Dispatch::new("glMultiTexGenfEXT")

///|
pub fn gl_multi_tex_genf_ext(
  texunit : UInt,
  coord : UInt,
  pname : UInt,
  param : Float,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Float) -> Unit] = d_glMultiTexGenfEXT
    .get()
    .unsafe_into()
  fp(texunit, coord, pname, param)
}

///|
let d_glMultiTexGenfvEXT : Dispatch = Dispatch::new("glMultiTexGenfvEXT")

///|
pub fn gl_multi_tex_genfv_ext(
  texunit : UInt,
  coord : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glMultiTexGenfvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(texunit, coord, pname, params_p)
  })
}

///|
let d_glMultiTexGeniEXT : Dispatch = Dispatch::new("glMultiTexGeniEXT")

///|
pub fn gl_multi_tex_geni_ext(
  texunit : UInt,
  coord : UInt,
  pname : UInt,
  param : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int) -> Unit] = d_glMultiTexGeniEXT
    .get()
    .unsafe_into()
  fp(texunit, coord, pname, param)
}

///|
let d_glMultiTexGenivEXT : Dispatch = Dispatch::new("glMultiTexGenivEXT")

///|
pub fn gl_multi_tex_geniv_ext(
  texunit : UInt,
  coord : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glMultiTexGenivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(texunit, coord, pname, params_p)
  })
}

///|
let d_glMultiTexImage1DEXT : Dispatch = Dispatch::new("glMultiTexImage1DEXT")

///|
pub fn gl_multi_tex_image1_dext(
  texunit : UInt,
  target : UInt,
  level : Int,
  internalformat : Int,
  width : Int,
  border : Int,
  format : UInt,
  type_ : UInt,
  pixels : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, Int, Int, Int, Int, UInt, UInt, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glMultiTexImage1DEXT.get().unsafe_into()
  @pointer.borrow_bytes(pixels, fn(pixels_p) {
    fp(
      texunit, target, level, internalformat, width, border, format, type_, pixels_p,
    )
  })
}

///|
let d_glMultiTexImage2DEXT : Dispatch = Dispatch::new("glMultiTexImage2DEXT")

///|
pub fn gl_multi_tex_image2_dext(
  texunit : UInt,
  target : UInt,
  level : Int,
  internalformat : Int,
  width : Int,
  height : Int,
  border : Int,
  format : UInt,
  type_ : UInt,
  pixels : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, Int, Int, Int, Int, Int, UInt, UInt, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glMultiTexImage2DEXT.get().unsafe_into()
  @pointer.borrow_bytes(pixels, fn(pixels_p) {
    fp(
      texunit, target, level, internalformat, width, height, border, format, type_,
      pixels_p,
    )
  })
}

///|
let d_glMultiTexImage3DEXT : Dispatch = Dispatch::new("glMultiTexImage3DEXT")

///|
pub fn gl_multi_tex_image3_dext(
  texunit : UInt,
  target : UInt,
  level : Int,
  internalformat : Int,
  width : Int,
  height : Int,
  depth : Int,
  border : Int,
  format : UInt,
  type_ : UInt,
  pixels : Bytes,
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      UInt,
      Int,
      Int,
      Int,
      Int,
      Int,
      Int,
      UInt,
      UInt,
      @pointer.Pointer[Byte],
    ) -> Unit,
  ] = d_glMultiTexImage3DEXT.get().unsafe_into()
  @pointer.borrow_bytes(pixels, fn(pixels_p) {
    fp(
      texunit, target, level, internalformat, width, height, depth, border, format,
      type_, pixels_p,
    )
  })
}

///|
let d_glMultiTexParameterIivEXT : Dispatch = Dispatch::new(
  "glMultiTexParameterIivEXT",
)

///|
pub fn gl_multi_tex_parameter_iiv_ext(
  texunit : UInt,
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glMultiTexParameterIivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(texunit, target, pname, params_p)
  })
}

///|
let d_glMultiTexParameterIuivEXT : Dispatch = Dispatch::new(
  "glMultiTexParameterIuivEXT",
)

///|
pub fn gl_multi_tex_parameter_iuiv_ext(
  texunit : UInt,
  target : UInt,
  pname : UInt,
  params : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[UInt]) -> Unit] = d_glMultiTexParameterIuivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(texunit, target, pname, params_p)
  })
}

///|
let d_glMultiTexParameterfEXT : Dispatch = Dispatch::new(
  "glMultiTexParameterfEXT",
)

///|
pub fn gl_multi_tex_parameterf_ext(
  texunit : UInt,
  target : UInt,
  pname : UInt,
  param : Float,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Float) -> Unit] = d_glMultiTexParameterfEXT
    .get()
    .unsafe_into()
  fp(texunit, target, pname, param)
}

///|
let d_glMultiTexParameterfvEXT : Dispatch = Dispatch::new(
  "glMultiTexParameterfvEXT",
)

///|
pub fn gl_multi_tex_parameterfv_ext(
  texunit : UInt,
  target : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glMultiTexParameterfvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(texunit, target, pname, params_p)
  })
}

///|
let d_glMultiTexParameteriEXT : Dispatch = Dispatch::new(
  "glMultiTexParameteriEXT",
)

///|
pub fn gl_multi_tex_parameteri_ext(
  texunit : UInt,
  target : UInt,
  pname : UInt,
  param : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int) -> Unit] = d_glMultiTexParameteriEXT
    .get()
    .unsafe_into()
  fp(texunit, target, pname, param)
}

///|
let d_glMultiTexParameterivEXT : Dispatch = Dispatch::new(
  "glMultiTexParameterivEXT",
)

///|
pub fn gl_multi_tex_parameteriv_ext(
  texunit : UInt,
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glMultiTexParameterivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(texunit, target, pname, params_p)
  })
}

///|
let d_glMultiTexRenderbufferEXT : Dispatch = Dispatch::new(
  "glMultiTexRenderbufferEXT",
)

///|
pub fn gl_multi_tex_renderbuffer_ext(
  texunit : UInt,
  target : UInt,
  renderbuffer : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glMultiTexRenderbufferEXT
    .get()
    .unsafe_into()
  fp(texunit, target, renderbuffer)
}

///|
let d_glMultiTexSubImage1DEXT : Dispatch = Dispatch::new(
  "glMultiTexSubImage1DEXT",
)

///|
pub fn gl_multi_tex_sub_image1_dext(
  texunit : UInt,
  target : UInt,
  level : Int,
  xoffset : Int,
  width : Int,
  format : UInt,
  type_ : UInt,
  pixels : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, Int, Int, Int, UInt, UInt, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glMultiTexSubImage1DEXT.get().unsafe_into()
  @pointer.borrow_bytes(pixels, fn(pixels_p) {
    fp(texunit, target, level, xoffset, width, format, type_, pixels_p)
  })
}

///|
let d_glMultiTexSubImage2DEXT : Dispatch = Dispatch::new(
  "glMultiTexSubImage2DEXT",
)

///|
pub fn gl_multi_tex_sub_image2_dext(
  texunit : UInt,
  target : UInt,
  level : Int,
  xoffset : Int,
  yoffset : Int,
  width : Int,
  height : Int,
  format : UInt,
  type_ : UInt,
  pixels : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, Int, Int, Int, Int, Int, UInt, UInt, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glMultiTexSubImage2DEXT.get().unsafe_into()
  @pointer.borrow_bytes(pixels, fn(pixels_p) {
    fp(
      texunit, target, level, xoffset, yoffset, width, height, format, type_, pixels_p,
    )
  })
}

///|
let d_glMultiTexSubImage3DEXT : Dispatch = Dispatch::new(
  "glMultiTexSubImage3DEXT",
)

///|
pub fn gl_multi_tex_sub_image3_dext(
  texunit : UInt,
  target : UInt,
  level : Int,
  xoffset : Int,
  yoffset : Int,
  zoffset : Int,
  width : Int,
  height : Int,
  depth : Int,
  format : UInt,
  type_ : UInt,
  pixels : Bytes,
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      UInt,
      Int,
      Int,
      Int,
      Int,
      Int,
      Int,
      Int,
      UInt,
      UInt,
      @pointer.Pointer[Byte],
    ) -> Unit,
  ] = d_glMultiTexSubImage3DEXT.get().unsafe_into()
  @pointer.borrow_bytes(pixels, fn(pixels_p) {
    fp(
      texunit, target, level, xoffset, yoffset, zoffset, width, height, depth, format,
      type_, pixels_p,
    )
  })
}

///|
let d_glMulticastBarrierNV : Dispatch = Dispatch::new("glMulticastBarrierNV")

///|
pub fn gl_multicast_barrier_nv() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glMulticastBarrierNV.get().unsafe_into()
  fp()
}

///|
let d_glMulticastBlitFramebufferNV : Dispatch = Dispatch::new(
  "glMulticastBlitFramebufferNV",
)

///|
pub fn gl_multicast_blit_framebuffer_nv(
  srcGpu : UInt,
  dstGpu : UInt,
  srcX0 : Int,
  srcY0 : Int,
  srcX1 : Int,
  srcY1 : Int,
  dstX0 : Int,
  dstY0 : Int,
  dstX1 : Int,
  dstY1 : Int,
  mask : UInt,
  filter : UInt,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, Int, Int, Int, Int, Int, Int, Int, Int, UInt, UInt) -> Unit,
  ] = d_glMulticastBlitFramebufferNV.get().unsafe_into()
  fp(
    srcGpu, dstGpu, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask,
    filter,
  )
}

///|
let d_glMulticastBufferSubDataNV : Dispatch = Dispatch::new(
  "glMulticastBufferSubDataNV",
)

///|
pub fn gl_multicast_buffer_sub_data_nv(
  gpuMask : UInt,
  buffer : UInt,
  offset : Int64,
  size : Int64,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int64, Int64, @pointer.Pointer[Byte]) -> Unit] = d_glMulticastBufferSubDataNV
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) {
    fp(gpuMask, buffer, offset, size, data_p)
  })
}

///|
let d_glMulticastCopyBufferSubDataNV : Dispatch = Dispatch::new(
  "glMulticastCopyBufferSubDataNV",
)

///|
pub fn gl_multicast_copy_buffer_sub_data_nv(
  readGpu : UInt,
  writeGpuMask : UInt,
  readBuffer : UInt,
  writeBuffer : UInt,
  readOffset : Int64,
  writeOffset : Int64,
  size : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, Int64, Int64, Int64) -> Unit] = d_glMulticastCopyBufferSubDataNV
    .get()
    .unsafe_into()
  fp(
    readGpu, writeGpuMask, readBuffer, writeBuffer, readOffset, writeOffset, size,
  )
}

///|
let d_glMulticastCopyImageSubDataNV : Dispatch = Dispatch::new(
  "glMulticastCopyImageSubDataNV",
)

///|
pub fn gl_multicast_copy_image_sub_data_nv(
  srcGpu : UInt,
  dstGpuMask : UInt,
  srcName : UInt,
  srcTarget : UInt,
  srcLevel : Int,
  srcX : Int,
  srcY : Int,
  srcZ : Int,
  dstName : UInt,
  dstTarget : UInt,
  dstLevel : Int,
  dstX : Int,
  dstY : Int,
  dstZ : Int,
  srcWidth : Int,
  srcHeight : Int,
  srcDepth : Int,
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      UInt,
      UInt,
      UInt,
      Int,
      Int,
      Int,
      Int,
      UInt,
      UInt,
      Int,
      Int,
      Int,
      Int,
      Int,
      Int,
      Int,
    ) -> Unit,
  ] = d_glMulticastCopyImageSubDataNV.get().unsafe_into()
  fp(
    srcGpu, dstGpuMask, srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName,
    dstTarget, dstLevel, dstX, dstY, dstZ, srcWidth, srcHeight, srcDepth,
  )
}

///|
let d_glMulticastFramebufferSampleLocationsfvNV : Dispatch = Dispatch::new(
  "glMulticastFramebufferSampleLocationsfvNV",
)

///|
pub fn gl_multicast_framebuffer_sample_locationsfv_nv(
  gpu : UInt,
  framebuffer : UInt,
  start : UInt,
  count : Int,
  v : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int, @pointer.Pointer[Float]) -> Unit] = d_glMulticastFramebufferSampleLocationsfvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(gpu, framebuffer, start, count, v_p) })
}

///|
let d_glMulticastGetQueryObjecti64vNV : Dispatch = Dispatch::new(
  "glMulticastGetQueryObjecti64vNV",
)

///|
pub fn gl_multicast_get_query_objecti64v_nv(
  gpu : UInt,
  id : UInt,
  pname : UInt,
  params : FixedArray[Int64],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Int64]) -> Unit] = d_glMulticastGetQueryObjecti64vNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(gpu, id, pname, params_p) })
}

///|
let d_glMulticastGetQueryObjectivNV : Dispatch = Dispatch::new(
  "glMulticastGetQueryObjectivNV",
)

///|
pub fn gl_multicast_get_query_objectiv_nv(
  gpu : UInt,
  id : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glMulticastGetQueryObjectivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(gpu, id, pname, params_p) })
}

///|
let d_glMulticastGetQueryObjectui64vNV : Dispatch = Dispatch::new(
  "glMulticastGetQueryObjectui64vNV",
)

///|
pub fn gl_multicast_get_query_objectui64v_nv(
  gpu : UInt,
  id : UInt,
  pname : UInt,
  params : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[UInt64]) -> Unit] = d_glMulticastGetQueryObjectui64vNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(gpu, id, pname, params_p) })
}

///|
let d_glMulticastGetQueryObjectuivNV : Dispatch = Dispatch::new(
  "glMulticastGetQueryObjectuivNV",
)

///|
pub fn gl_multicast_get_query_objectuiv_nv(
  gpu : UInt,
  id : UInt,
  pname : UInt,
  params : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[UInt]) -> Unit] = d_glMulticastGetQueryObjectuivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(gpu, id, pname, params_p) })
}

///|
let d_glMulticastScissorArrayvNVX : Dispatch = Dispatch::new(
  "glMulticastScissorArrayvNVX",
)

///|
pub fn gl_multicast_scissor_arrayv_nvx(
  gpu : UInt,
  first : UInt,
  count : Int,
  v : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, @pointer.Pointer[Int]) -> Unit] = d_glMulticastScissorArrayvNVX
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(gpu, first, count, v_p) })
}

///|
let d_glMulticastViewportArrayvNVX : Dispatch = Dispatch::new(
  "glMulticastViewportArrayvNVX",
)

///|
pub fn gl_multicast_viewport_arrayv_nvx(
  gpu : UInt,
  first : UInt,
  count : Int,
  v : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, @pointer.Pointer[Float]) -> Unit] = d_glMulticastViewportArrayvNVX
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(gpu, first, count, v_p) })
}

///|
let d_glMulticastViewportPositionWScaleNVX : Dispatch = Dispatch::new(
  "glMulticastViewportPositionWScaleNVX",
)

///|
pub fn gl_multicast_viewport_position_w_scale_nvx(
  gpu : UInt,
  index : UInt,
  xcoeff : Float,
  ycoeff : Float,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Float, Float) -> Unit] = d_glMulticastViewportPositionWScaleNVX
    .get()
    .unsafe_into()
  fp(gpu, index, xcoeff, ycoeff)
}

///|
let d_glMulticastWaitSyncNV : Dispatch = Dispatch::new("glMulticastWaitSyncNV")

///|
pub fn gl_multicast_wait_sync_nv(signalGpu : UInt, waitGpuMask : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glMulticastWaitSyncNV
    .get()
    .unsafe_into()
  fp(signalGpu, waitGpuMask)
}

///|
let d_glNamedBufferAttachMemoryNV : Dispatch = Dispatch::new(
  "glNamedBufferAttachMemoryNV",
)

///|
pub fn gl_named_buffer_attach_memory_nv(
  buffer : UInt,
  memory : UInt,
  offset : UInt64,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt64) -> Unit] = d_glNamedBufferAttachMemoryNV
    .get()
    .unsafe_into()
  fp(buffer, memory, offset)
}

///|
let d_glNamedBufferData : Dispatch = Dispatch::new("glNamedBufferData")

///|
pub fn gl_named_buffer_data(
  buffer : UInt,
  size : Int64,
  data : Bytes,
  usage : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, Int64, @pointer.Pointer[Byte], UInt) -> Unit] = d_glNamedBufferData
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) { fp(buffer, size, data_p, usage) })
}

///|
let d_glNamedBufferDataEXT : Dispatch = Dispatch::new("glNamedBufferDataEXT")

///|
pub fn gl_named_buffer_data_ext(
  buffer : UInt,
  size : Int64,
  data : Bytes,
  usage : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, Int64, @pointer.Pointer[Byte], UInt) -> Unit] = d_glNamedBufferDataEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) { fp(buffer, size, data_p, usage) })
}

///|
let d_glNamedBufferPageCommitmentARB : Dispatch = Dispatch::new(
  "glNamedBufferPageCommitmentARB",
)

///|
pub fn gl_named_buffer_page_commitment_arb(
  buffer : UInt,
  offset : Int64,
  size : Int64,
  commit : Bool,
) -> Unit {
  let fp : FuncRef[(UInt, Int64, Int64, Bool) -> Unit] = d_glNamedBufferPageCommitmentARB
    .get()
    .unsafe_into()
  fp(buffer, offset, size, commit)
}

///|
let d_glNamedBufferPageCommitmentEXT : Dispatch = Dispatch::new(
  "glNamedBufferPageCommitmentEXT",
)

///|
pub fn gl_named_buffer_page_commitment_ext(
  buffer : UInt,
  offset : Int64,
  size : Int64,
  commit : Bool,
) -> Unit {
  let fp : FuncRef[(UInt, Int64, Int64, Bool) -> Unit] = d_glNamedBufferPageCommitmentEXT
    .get()
    .unsafe_into()
  fp(buffer, offset, size, commit)
}

///|
let d_glNamedBufferPageCommitmentMemNV : Dispatch = Dispatch::new(
  "glNamedBufferPageCommitmentMemNV",
)

///|
pub fn gl_named_buffer_page_commitment_mem_nv(
  buffer : UInt,
  offset : Int64,
  size : Int64,
  memory : UInt,
  memOffset : UInt64,
  commit : Bool,
) -> Unit {
  let fp : FuncRef[(UInt, Int64, Int64, UInt, UInt64, Bool) -> Unit] = d_glNamedBufferPageCommitmentMemNV
    .get()
    .unsafe_into()
  fp(buffer, offset, size, memory, memOffset, commit)
}

///|
let d_glNamedBufferStorage : Dispatch = Dispatch::with_aliases(
  "glNamedBufferStorage",
  ["glNamedBufferStorageEXT"],
)

///|
pub fn gl_named_buffer_storage(
  buffer : UInt,
  size : Int64,
  data : Bytes,
  flags : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, Int64, @pointer.Pointer[Byte], UInt) -> Unit] = d_glNamedBufferStorage
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) { fp(buffer, size, data_p, flags) })
}

///|
let d_glNamedBufferStorageExternalEXT : Dispatch = Dispatch::new(
  "glNamedBufferStorageExternalEXT",
)

///|
pub fn gl_named_buffer_storage_external_ext(
  buffer : UInt,
  offset : Int64,
  size : Int64,
  clientBuffer : GLeglClientBufferEXT,
  flags : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, Int64, Int64, GLeglClientBufferEXT, UInt) -> Unit] = d_glNamedBufferStorageExternalEXT
    .get()
    .unsafe_into()
  fp(buffer, offset, size, clientBuffer, flags)
}

///|
let d_glNamedBufferStorageEXT : Dispatch = Dispatch::with_aliases(
  "glNamedBufferStorageEXT",
  ["glNamedBufferStorage"],
)

///|
pub fn gl_named_buffer_storage_ext(
  buffer : UInt,
  size : Int64,
  data : Bytes,
  flags : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, Int64, @pointer.Pointer[Byte], UInt) -> Unit] = d_glNamedBufferStorageEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) { fp(buffer, size, data_p, flags) })
}

///|
let d_glNamedBufferStorageMemEXT : Dispatch = Dispatch::new(
  "glNamedBufferStorageMemEXT",
)

///|
pub fn gl_named_buffer_storage_mem_ext(
  buffer : UInt,
  size : Int64,
  memory : UInt,
  offset : UInt64,
) -> Unit {
  let fp : FuncRef[(UInt, Int64, UInt, UInt64) -> Unit] = d_glNamedBufferStorageMemEXT
    .get()
    .unsafe_into()
  fp(buffer, size, memory, offset)
}

///|
let d_glNamedBufferSubData : Dispatch = Dispatch::with_aliases(
  "glNamedBufferSubData",
  ["glNamedBufferSubDataEXT"],
)

///|
pub fn gl_named_buffer_sub_data(
  buffer : UInt,
  offset : Int64,
  size : Int64,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, Int64, Int64, @pointer.Pointer[Byte]) -> Unit] = d_glNamedBufferSubData
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) { fp(buffer, offset, size, data_p) })
}

///|
let d_glNamedBufferSubDataEXT : Dispatch = Dispatch::with_aliases(
  "glNamedBufferSubDataEXT",
  ["glNamedBufferSubData"],
)

///|
pub fn gl_named_buffer_sub_data_ext(
  buffer : UInt,
  offset : Int64,
  size : Int64,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, Int64, Int64, @pointer.Pointer[Byte]) -> Unit] = d_glNamedBufferSubDataEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) { fp(buffer, offset, size, data_p) })
}

///|
let d_glNamedCopyBufferSubDataEXT : Dispatch = Dispatch::new(
  "glNamedCopyBufferSubDataEXT",
)

///|
pub fn gl_named_copy_buffer_sub_data_ext(
  readBuffer : UInt,
  writeBuffer : UInt,
  readOffset : Int64,
  writeOffset : Int64,
  size : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int64, Int64, Int64) -> Unit] = d_glNamedCopyBufferSubDataEXT
    .get()
    .unsafe_into()
  fp(readBuffer, writeBuffer, readOffset, writeOffset, size)
}

///|
let d_glNamedFramebufferDrawBuffer : Dispatch = Dispatch::new(
  "glNamedFramebufferDrawBuffer",
)

///|
pub fn gl_named_framebuffer_draw_buffer(framebuffer : UInt, buf : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glNamedFramebufferDrawBuffer
    .get()
    .unsafe_into()
  fp(framebuffer, buf)
}

///|
let d_glNamedFramebufferDrawBuffers : Dispatch = Dispatch::new(
  "glNamedFramebufferDrawBuffers",
)

///|
pub fn gl_named_framebuffer_draw_buffers(
  framebuffer : UInt,
  n : Int,
  bufs : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[UInt]) -> Unit] = d_glNamedFramebufferDrawBuffers
    .get()
    .unsafe_into()
  @pointer.borrow_array(bufs, fn(bufs_p) { fp(framebuffer, n, bufs_p) })
}

///|
let d_glNamedFramebufferParameteri : Dispatch = Dispatch::new(
  "glNamedFramebufferParameteri",
)

///|
pub fn gl_named_framebuffer_parameteri(
  framebuffer : UInt,
  pname : UInt,
  param : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int) -> Unit] = d_glNamedFramebufferParameteri
    .get()
    .unsafe_into()
  fp(framebuffer, pname, param)
}

///|
let d_glNamedFramebufferParameteriEXT : Dispatch = Dispatch::new(
  "glNamedFramebufferParameteriEXT",
)

///|
pub fn gl_named_framebuffer_parameteri_ext(
  framebuffer : UInt,
  pname : UInt,
  param : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int) -> Unit] = d_glNamedFramebufferParameteriEXT
    .get()
    .unsafe_into()
  fp(framebuffer, pname, param)
}

///|
let d_glNamedFramebufferReadBuffer : Dispatch = Dispatch::new(
  "glNamedFramebufferReadBuffer",
)

///|
pub fn gl_named_framebuffer_read_buffer(framebuffer : UInt, src : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glNamedFramebufferReadBuffer
    .get()
    .unsafe_into()
  fp(framebuffer, src)
}

///|
let d_glNamedFramebufferRenderbuffer : Dispatch = Dispatch::new(
  "glNamedFramebufferRenderbuffer",
)

///|
pub fn gl_named_framebuffer_renderbuffer(
  framebuffer : UInt,
  attachment : UInt,
  renderbuffertarget : UInt,
  renderbuffer : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt) -> Unit] = d_glNamedFramebufferRenderbuffer
    .get()
    .unsafe_into()
  fp(framebuffer, attachment, renderbuffertarget, renderbuffer)
}

///|
let d_glNamedFramebufferRenderbufferEXT : Dispatch = Dispatch::new(
  "glNamedFramebufferRenderbufferEXT",
)

///|
pub fn gl_named_framebuffer_renderbuffer_ext(
  framebuffer : UInt,
  attachment : UInt,
  renderbuffertarget : UInt,
  renderbuffer : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt) -> Unit] = d_glNamedFramebufferRenderbufferEXT
    .get()
    .unsafe_into()
  fp(framebuffer, attachment, renderbuffertarget, renderbuffer)
}

///|
let d_glNamedFramebufferSampleLocationsfvARB : Dispatch = Dispatch::new(
  "glNamedFramebufferSampleLocationsfvARB",
)

///|
pub fn gl_named_framebuffer_sample_locationsfv_arb(
  framebuffer : UInt,
  start : UInt,
  count : Int,
  v : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, @pointer.Pointer[Float]) -> Unit] = d_glNamedFramebufferSampleLocationsfvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(framebuffer, start, count, v_p) })
}

///|
let d_glNamedFramebufferSampleLocationsfvNV : Dispatch = Dispatch::new(
  "glNamedFramebufferSampleLocationsfvNV",
)

///|
pub fn gl_named_framebuffer_sample_locationsfv_nv(
  framebuffer : UInt,
  start : UInt,
  count : Int,
  v : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, @pointer.Pointer[Float]) -> Unit] = d_glNamedFramebufferSampleLocationsfvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(framebuffer, start, count, v_p) })
}

///|
let d_glNamedFramebufferTexture : Dispatch = Dispatch::new(
  "glNamedFramebufferTexture",
)

///|
pub fn gl_named_framebuffer_texture(
  framebuffer : UInt,
  attachment : UInt,
  texture : UInt,
  level : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int) -> Unit] = d_glNamedFramebufferTexture
    .get()
    .unsafe_into()
  fp(framebuffer, attachment, texture, level)
}

///|
let d_glNamedFramebufferSamplePositionsfvAMD : Dispatch = Dispatch::new(
  "glNamedFramebufferSamplePositionsfvAMD",
)

///|
pub fn gl_named_framebuffer_sample_positionsfv_amd(
  framebuffer : UInt,
  numsamples : UInt,
  pixelindex : UInt,
  values : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glNamedFramebufferSamplePositionsfvAMD
    .get()
    .unsafe_into()
  @pointer.borrow_array(values, fn(values_p) {
    fp(framebuffer, numsamples, pixelindex, values_p)
  })
}

///|
let d_glNamedFramebufferTexture1DEXT : Dispatch = Dispatch::new(
  "glNamedFramebufferTexture1DEXT",
)

///|
pub fn gl_named_framebuffer_texture1_dext(
  framebuffer : UInt,
  attachment : UInt,
  textarget : UInt,
  texture : UInt,
  level : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, Int) -> Unit] = d_glNamedFramebufferTexture1DEXT
    .get()
    .unsafe_into()
  fp(framebuffer, attachment, textarget, texture, level)
}

///|
let d_glNamedFramebufferTexture2DEXT : Dispatch = Dispatch::new(
  "glNamedFramebufferTexture2DEXT",
)

///|
pub fn gl_named_framebuffer_texture2_dext(
  framebuffer : UInt,
  attachment : UInt,
  textarget : UInt,
  texture : UInt,
  level : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, Int) -> Unit] = d_glNamedFramebufferTexture2DEXT
    .get()
    .unsafe_into()
  fp(framebuffer, attachment, textarget, texture, level)
}

///|
let d_glNamedFramebufferTexture3DEXT : Dispatch = Dispatch::new(
  "glNamedFramebufferTexture3DEXT",
)

///|
pub fn gl_named_framebuffer_texture3_dext(
  framebuffer : UInt,
  attachment : UInt,
  textarget : UInt,
  texture : UInt,
  level : Int,
  zoffset : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, Int, Int) -> Unit] = d_glNamedFramebufferTexture3DEXT
    .get()
    .unsafe_into()
  fp(framebuffer, attachment, textarget, texture, level, zoffset)
}

///|
let d_glNamedFramebufferTextureEXT : Dispatch = Dispatch::new(
  "glNamedFramebufferTextureEXT",
)

///|
pub fn gl_named_framebuffer_texture_ext(
  framebuffer : UInt,
  attachment : UInt,
  texture : UInt,
  level : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int) -> Unit] = d_glNamedFramebufferTextureEXT
    .get()
    .unsafe_into()
  fp(framebuffer, attachment, texture, level)
}

///|
let d_glNamedFramebufferTextureFaceEXT : Dispatch = Dispatch::new(
  "glNamedFramebufferTextureFaceEXT",
)

///|
pub fn gl_named_framebuffer_texture_face_ext(
  framebuffer : UInt,
  attachment : UInt,
  texture : UInt,
  level : Int,
  face : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int, UInt) -> Unit] = d_glNamedFramebufferTextureFaceEXT
    .get()
    .unsafe_into()
  fp(framebuffer, attachment, texture, level, face)
}

///|
let d_glNamedFramebufferTextureLayer : Dispatch = Dispatch::new(
  "glNamedFramebufferTextureLayer",
)

///|
pub fn gl_named_framebuffer_texture_layer(
  framebuffer : UInt,
  attachment : UInt,
  texture : UInt,
  level : Int,
  layer : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int, Int) -> Unit] = d_glNamedFramebufferTextureLayer
    .get()
    .unsafe_into()
  fp(framebuffer, attachment, texture, level, layer)
}

///|
let d_glNamedFramebufferTextureLayerEXT : Dispatch = Dispatch::new(
  "glNamedFramebufferTextureLayerEXT",
)

///|
pub fn gl_named_framebuffer_texture_layer_ext(
  framebuffer : UInt,
  attachment : UInt,
  texture : UInt,
  level : Int,
  layer : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int, Int) -> Unit] = d_glNamedFramebufferTextureLayerEXT
    .get()
    .unsafe_into()
  fp(framebuffer, attachment, texture, level, layer)
}

///|
let d_glNamedFramebufferTextureMultiviewOVR : Dispatch = Dispatch::new(
  "glNamedFramebufferTextureMultiviewOVR",
)

///|
pub fn gl_named_framebuffer_texture_multiview_ovr(
  framebuffer : UInt,
  attachment : UInt,
  texture : UInt,
  level : Int,
  baseViewIndex : Int,
  numViews : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int, Int, Int) -> Unit] = d_glNamedFramebufferTextureMultiviewOVR
    .get()
    .unsafe_into()
  fp(framebuffer, attachment, texture, level, baseViewIndex, numViews)
}

///|
let d_glNamedProgramLocalParameter4dEXT : Dispatch = Dispatch::new(
  "glNamedProgramLocalParameter4dEXT",
)

///|
pub fn gl_named_program_local_parameter4d_ext(
  program : UInt,
  target : UInt,
  index : UInt,
  x : Double,
  y : Double,
  z : Double,
  w : Double,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Double, Double, Double, Double) -> Unit] = d_glNamedProgramLocalParameter4dEXT
    .get()
    .unsafe_into()
  fp(program, target, index, x, y, z, w)
}

///|
let d_glNamedProgramLocalParameter4dvEXT : Dispatch = Dispatch::new(
  "glNamedProgramLocalParameter4dvEXT",
)

///|
pub fn gl_named_program_local_parameter4dv_ext(
  program : UInt,
  target : UInt,
  index : UInt,
  params : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Double]) -> Unit] = d_glNamedProgramLocalParameter4dvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(program, target, index, params_p)
  })
}

///|
let d_glNamedProgramLocalParameter4fEXT : Dispatch = Dispatch::new(
  "glNamedProgramLocalParameter4fEXT",
)

///|
pub fn gl_named_program_local_parameter4f_ext(
  program : UInt,
  target : UInt,
  index : UInt,
  x : Float,
  y : Float,
  z : Float,
  w : Float,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Float, Float, Float, Float) -> Unit] = d_glNamedProgramLocalParameter4fEXT
    .get()
    .unsafe_into()
  fp(program, target, index, x, y, z, w)
}

///|
let d_glNamedProgramLocalParameter4fvEXT : Dispatch = Dispatch::new(
  "glNamedProgramLocalParameter4fvEXT",
)

///|
pub fn gl_named_program_local_parameter4fv_ext(
  program : UInt,
  target : UInt,
  index : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glNamedProgramLocalParameter4fvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(program, target, index, params_p)
  })
}

///|
let d_glNamedProgramLocalParameterI4iEXT : Dispatch = Dispatch::new(
  "glNamedProgramLocalParameterI4iEXT",
)

///|
pub fn gl_named_program_local_parameter_i4i_ext(
  program : UInt,
  target : UInt,
  index : UInt,
  x : Int,
  y : Int,
  z : Int,
  w : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int, Int, Int, Int) -> Unit] = d_glNamedProgramLocalParameterI4iEXT
    .get()
    .unsafe_into()
  fp(program, target, index, x, y, z, w)
}

///|
let d_glNamedProgramLocalParameterI4ivEXT : Dispatch = Dispatch::new(
  "glNamedProgramLocalParameterI4ivEXT",
)

///|
pub fn gl_named_program_local_parameter_i4iv_ext(
  program : UInt,
  target : UInt,
  index : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glNamedProgramLocalParameterI4ivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(program, target, index, params_p)
  })
}

///|
let d_glNamedProgramLocalParameterI4uiEXT : Dispatch = Dispatch::new(
  "glNamedProgramLocalParameterI4uiEXT",
)

///|
pub fn gl_named_program_local_parameter_i4ui_ext(
  program : UInt,
  target : UInt,
  index : UInt,
  x : UInt,
  y : UInt,
  z : UInt,
  w : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, UInt, UInt, UInt) -> Unit] = d_glNamedProgramLocalParameterI4uiEXT
    .get()
    .unsafe_into()
  fp(program, target, index, x, y, z, w)
}

///|
let d_glNamedProgramLocalParameterI4uivEXT : Dispatch = Dispatch::new(
  "glNamedProgramLocalParameterI4uivEXT",
)

///|
pub fn gl_named_program_local_parameter_i4uiv_ext(
  program : UInt,
  target : UInt,
  index : UInt,
  params : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[UInt]) -> Unit] = d_glNamedProgramLocalParameterI4uivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(program, target, index, params_p)
  })
}

///|
let d_glNamedProgramLocalParameters4fvEXT : Dispatch = Dispatch::new(
  "glNamedProgramLocalParameters4fvEXT",
)

///|
pub fn gl_named_program_local_parameters4fv_ext(
  program : UInt,
  target : UInt,
  index : UInt,
  count : Int,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int, @pointer.Pointer[Float]) -> Unit] = d_glNamedProgramLocalParameters4fvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(program, target, index, count, params_p)
  })
}

///|
let d_glNamedProgramLocalParametersI4ivEXT : Dispatch = Dispatch::new(
  "glNamedProgramLocalParametersI4ivEXT",
)

///|
pub fn gl_named_program_local_parameters_i4iv_ext(
  program : UInt,
  target : UInt,
  index : UInt,
  count : Int,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int, @pointer.Pointer[Int]) -> Unit] = d_glNamedProgramLocalParametersI4ivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(program, target, index, count, params_p)
  })
}

///|
let d_glNamedProgramLocalParametersI4uivEXT : Dispatch = Dispatch::new(
  "glNamedProgramLocalParametersI4uivEXT",
)

///|
pub fn gl_named_program_local_parameters_i4uiv_ext(
  program : UInt,
  target : UInt,
  index : UInt,
  count : Int,
  params : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int, @pointer.Pointer[UInt]) -> Unit] = d_glNamedProgramLocalParametersI4uivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(program, target, index, count, params_p)
  })
}

///|
let d_glNamedProgramStringEXT : Dispatch = Dispatch::new(
  "glNamedProgramStringEXT",
)

///|
pub fn gl_named_program_string_ext(
  program : UInt,
  target : UInt,
  format : UInt,
  len : Int,
  string : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int, @pointer.Pointer[Byte]) -> Unit] = d_glNamedProgramStringEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(string, fn(string_p) {
    fp(program, target, format, len, string_p)
  })
}

///|
let d_glNamedRenderbufferStorage : Dispatch = Dispatch::new(
  "glNamedRenderbufferStorage",
)

///|
pub fn gl_named_renderbuffer_storage(
  renderbuffer : UInt,
  internalformat : UInt,
  width : Int,
  height : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, Int) -> Unit] = d_glNamedRenderbufferStorage
    .get()
    .unsafe_into()
  fp(renderbuffer, internalformat, width, height)
}

///|
let d_glNamedRenderbufferStorageEXT : Dispatch = Dispatch::new(
  "glNamedRenderbufferStorageEXT",
)

///|
pub fn gl_named_renderbuffer_storage_ext(
  renderbuffer : UInt,
  internalformat : UInt,
  width : Int,
  height : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, Int) -> Unit] = d_glNamedRenderbufferStorageEXT
    .get()
    .unsafe_into()
  fp(renderbuffer, internalformat, width, height)
}

///|
let d_glNamedRenderbufferStorageMultisample : Dispatch = Dispatch::new(
  "glNamedRenderbufferStorageMultisample",
)

///|
pub fn gl_named_renderbuffer_storage_multisample(
  renderbuffer : UInt,
  samples : Int,
  internalformat : UInt,
  width : Int,
  height : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int, Int) -> Unit] = d_glNamedRenderbufferStorageMultisample
    .get()
    .unsafe_into()
  fp(renderbuffer, samples, internalformat, width, height)
}

///|
let d_glNamedRenderbufferStorageMultisampleAdvancedAMD : Dispatch = Dispatch::new(
  "glNamedRenderbufferStorageMultisampleAdvancedAMD",
)

///|
pub fn gl_named_renderbuffer_storage_multisample_advanced_amd(
  renderbuffer : UInt,
  samples : Int,
  storageSamples : Int,
  internalformat : UInt,
  width : Int,
  height : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, UInt, Int, Int) -> Unit] = d_glNamedRenderbufferStorageMultisampleAdvancedAMD
    .get()
    .unsafe_into()
  fp(renderbuffer, samples, storageSamples, internalformat, width, height)
}

///|
let d_glNamedRenderbufferStorageMultisampleCoverageEXT : Dispatch = Dispatch::new(
  "glNamedRenderbufferStorageMultisampleCoverageEXT",
)

///|
pub fn gl_named_renderbuffer_storage_multisample_coverage_ext(
  renderbuffer : UInt,
  coverageSamples : Int,
  colorSamples : Int,
  internalformat : UInt,
  width : Int,
  height : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, UInt, Int, Int) -> Unit] = d_glNamedRenderbufferStorageMultisampleCoverageEXT
    .get()
    .unsafe_into()
  fp(renderbuffer, coverageSamples, colorSamples, internalformat, width, height)
}

///|
let d_glNamedRenderbufferStorageMultisampleEXT : Dispatch = Dispatch::new(
  "glNamedRenderbufferStorageMultisampleEXT",
)

///|
pub fn gl_named_renderbuffer_storage_multisample_ext(
  renderbuffer : UInt,
  samples : Int,
  internalformat : UInt,
  width : Int,
  height : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int, Int) -> Unit] = d_glNamedRenderbufferStorageMultisampleEXT
    .get()
    .unsafe_into()
  fp(renderbuffer, samples, internalformat, width, height)
}

///|
let d_glNamedStringARB : Dispatch = Dispatch::new("glNamedStringARB")

///|
pub fn gl_named_string_arb(
  type_ : UInt,
  namelen : Int,
  name : Bytes,
  stringlen : Int,
  string : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, @pointer.Pointer[Byte], Int, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glNamedStringARB.get().unsafe_into()
  @pointer.borrow_bytes(name, fn(name_p) {
    @pointer.borrow_bytes(string, fn(string_p) {
      fp(type_, namelen, name_p, stringlen, string_p)
    })
  })
}

///|
let d_glNewList : Dispatch = Dispatch::new("glNewList")

///|
pub fn gl_new_list(list : UInt, mode : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glNewList.get().unsafe_into()
  fp(list, mode)
}

///|
let d_glNewObjectBufferATI : Dispatch = Dispatch::new("glNewObjectBufferATI")

///|
pub fn gl_new_object_buffer_ati(
  size : Int,
  pointer : Bytes,
  usage : UInt,
) -> UInt {
  let fp : FuncRef[(Int, @pointer.Pointer[Byte], UInt) -> UInt] = d_glNewObjectBufferATI
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(pointer, fn(pointer_p) { fp(size, pointer_p, usage) })
}

///|
let d_glNormal3b : Dispatch = Dispatch::new("glNormal3b")

///|
pub fn gl_normal3b(nx : Int, ny : Int, nz : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glNormal3b.get().unsafe_into()
  fp(nx, ny, nz)
}

///|
let d_glNormal3bv : Dispatch = Dispatch::new("glNormal3bv")

///|
pub fn gl_normal3bv(v : Bytes) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Byte]) -> Unit] = d_glNormal3bv
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(v, fn(v_p) { fp(v_p) })
}

///|
let d_glNormal3d : Dispatch = Dispatch::new("glNormal3d")

///|
pub fn gl_normal3d(nx : Double, ny : Double, nz : Double) -> Unit {
  let fp : FuncRef[(Double, Double, Double) -> Unit] = d_glNormal3d
    .get()
    .unsafe_into()
  fp(nx, ny, nz)
}

///|
let d_glNormal3dv : Dispatch = Dispatch::new("glNormal3dv")

///|
pub fn gl_normal3dv(v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Double]) -> Unit] = d_glNormal3dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glNormal3f : Dispatch = Dispatch::new("glNormal3f")

///|
pub fn gl_normal3f(nx : Float, ny : Float, nz : Float) -> Unit {
  let fp : FuncRef[(Float, Float, Float) -> Unit] = d_glNormal3f
    .get()
    .unsafe_into()
  fp(nx, ny, nz)
}

///|
let d_glNormal3fVertex3fSUN : Dispatch = Dispatch::new("glNormal3fVertex3fSUN")

///|
pub fn gl_normal3f_vertex3f_sun(
  nx : Float,
  ny : Float,
  nz : Float,
  x : Float,
  y : Float,
  z : Float,
) -> Unit {
  let fp : FuncRef[(Float, Float, Float, Float, Float, Float) -> Unit] = d_glNormal3fVertex3fSUN
    .get()
    .unsafe_into()
  fp(nx, ny, nz, x, y, z)
}

///|
let d_glNormal3fVertex3fvSUN : Dispatch = Dispatch::new(
  "glNormal3fVertex3fvSUN",
)

///|
pub fn gl_normal3f_vertex3fv_sun(
  n : FixedArray[Float],
  v : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Float], @pointer.Pointer[Float]) -> Unit] = d_glNormal3fVertex3fvSUN
    .get()
    .unsafe_into()
  @pointer.borrow_array(n, fn(n_p) {
    @pointer.borrow_array(v, fn(v_p) { fp(n_p, v_p) })
  })
}

///|
let d_glNormal3fv : Dispatch = Dispatch::new("glNormal3fv")

///|
pub fn gl_normal3fv(v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Float]) -> Unit] = d_glNormal3fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glNormal3hNV : Dispatch = Dispatch::new("glNormal3hNV")

///|
pub fn gl_normal3h_nv(nx : Int, ny : Int, nz : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glNormal3hNV.get().unsafe_into()
  fp(nx, ny, nz)
}

///|
let d_glNormal3hvNV : Dispatch = Dispatch::new("glNormal3hvNV")

///|
pub fn gl_normal3hv_nv(v : FixedArray[UInt16]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[UInt16]) -> Unit] = d_glNormal3hvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glNormal3i : Dispatch = Dispatch::new("glNormal3i")

///|
pub fn gl_normal3i(nx : Int, ny : Int, nz : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glNormal3i.get().unsafe_into()
  fp(nx, ny, nz)
}

///|
let d_glNormal3iv : Dispatch = Dispatch::new("glNormal3iv")

///|
pub fn gl_normal3iv(v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glNormal3iv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glNormal3s : Dispatch = Dispatch::new("glNormal3s")

///|
pub fn gl_normal3s(nx : Int, ny : Int, nz : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glNormal3s.get().unsafe_into()
  fp(nx, ny, nz)
}

///|
let d_glNormal3sv : Dispatch = Dispatch::new("glNormal3sv")

///|
pub fn gl_normal3sv(v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int16]) -> Unit] = d_glNormal3sv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glNormal3x : Dispatch = Dispatch::new("glNormal3x")

///|
pub fn gl_normal3x(nx : Int, ny : Int, nz : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glNormal3x.get().unsafe_into()
  fp(nx, ny, nz)
}

///|
let d_glNormal3xOES : Dispatch = Dispatch::new("glNormal3xOES")

///|
pub fn gl_normal3x_oes(nx : Int, ny : Int, nz : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glNormal3xOES
    .get()
    .unsafe_into()
  fp(nx, ny, nz)
}

///|
let d_glNormal3xvOES : Dispatch = Dispatch::new("glNormal3xvOES")

///|
pub fn gl_normal3xv_oes(coords : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glNormal3xvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(coords_p) })
}

///|
let d_glNormalFormatNV : Dispatch = Dispatch::new("glNormalFormatNV")

///|
pub fn gl_normal_format_nv(type_ : UInt, stride : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glNormalFormatNV.get().unsafe_into()
  fp(type_, stride)
}

///|
let d_glNormalP3ui : Dispatch = Dispatch::new("glNormalP3ui")

///|
pub fn gl_normal_p3ui(type_ : UInt, coords : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glNormalP3ui.get().unsafe_into()
  fp(type_, coords)
}

///|
let d_glNormalP3uiv : Dispatch = Dispatch::new("glNormalP3uiv")

///|
pub fn gl_normal_p3uiv(type_ : UInt, coords : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt]) -> Unit] = d_glNormalP3uiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(type_, coords_p) })
}

///|
let d_glNormalPointer : Dispatch = Dispatch::new("glNormalPointer")

///|
/// Configure a vertex array from the buffer currently bound to `GL_ARRAY_BUFFER`.
/// `offset` is a byte offset; client-side arrays are not accepted.
pub fn gl_normal_pointer(type_ : UInt, stride : Int, offset : Int64) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Unit]) -> Unit] = d_glNormalPointer
    .get()
    .unsafe_into()
  fp(type_, stride, @pointer.Pointer::unsafe_from_int64(offset))
}

///|
let d_glNormalPointerEXT : Dispatch = Dispatch::new("glNormalPointerEXT")

///|
pub fn gl_normal_pointer_ext(
  type_ : UInt,
  stride : Int,
  count : Int,
  pointer : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Byte]) -> Unit] = d_glNormalPointerEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(pointer, fn(pointer_p) {
    fp(type_, stride, count, pointer_p)
  })
}

///|
let d_glNormalStream3bATI : Dispatch = Dispatch::new("glNormalStream3bATI")

///|
pub fn gl_normal_stream3b_ati(
  stream : UInt,
  nx : Int,
  ny : Int,
  nz : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int) -> Unit] = d_glNormalStream3bATI
    .get()
    .unsafe_into()
  fp(stream, nx, ny, nz)
}

///|
let d_glNormalStream3bvATI : Dispatch = Dispatch::new("glNormalStream3bvATI")

///|
pub fn gl_normal_stream3bv_ati(stream : UInt, coords : Bytes) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Byte]) -> Unit] = d_glNormalStream3bvATI
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(coords, fn(coords_p) { fp(stream, coords_p) })
}

///|
let d_glNormalStream3dATI : Dispatch = Dispatch::new("glNormalStream3dATI")

///|
pub fn gl_normal_stream3d_ati(
  stream : UInt,
  nx : Double,
  ny : Double,
  nz : Double,
) -> Unit {
  let fp : FuncRef[(UInt, Double, Double, Double) -> Unit] = d_glNormalStream3dATI
    .get()
    .unsafe_into()
  fp(stream, nx, ny, nz)
}

///|
let d_glNormalStream3dvATI : Dispatch = Dispatch::new("glNormalStream3dvATI")

///|
pub fn gl_normal_stream3dv_ati(
  stream : UInt,
  coords : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Double]) -> Unit] = d_glNormalStream3dvATI
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(stream, coords_p) })
}

///|
let d_glNormalStream3fATI : Dispatch = Dispatch::new("glNormalStream3fATI")

///|
pub fn gl_normal_stream3f_ati(
  stream : UInt,
  nx : Float,
  ny : Float,
  nz : Float,
) -> Unit {
  let fp : FuncRef[(UInt, Float, Float, Float) -> Unit] = d_glNormalStream3fATI
    .get()
    .unsafe_into()
  fp(stream, nx, ny, nz)
}

///|
let d_glNormalStream3fvATI : Dispatch = Dispatch::new("glNormalStream3fvATI")

///|
pub fn gl_normal_stream3fv_ati(
  stream : UInt,
  coords : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glNormalStream3fvATI
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(stream, coords_p) })
}

///|
let d_glNormalStream3iATI : Dispatch = Dispatch::new("glNormalStream3iATI")

///|
pub fn gl_normal_stream3i_ati(
  stream : UInt,
  nx : Int,
  ny : Int,
  nz : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int) -> Unit] = d_glNormalStream3iATI
    .get()
    .unsafe_into()
  fp(stream, nx, ny, nz)
}

///|
let d_glNormalStream3ivATI : Dispatch = Dispatch::new("glNormalStream3ivATI")

///|
pub fn gl_normal_stream3iv_ati(stream : UInt, coords : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glNormalStream3ivATI
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(stream, coords_p) })
}

///|
let d_glNormalStream3sATI : Dispatch = Dispatch::new("glNormalStream3sATI")

///|
pub fn gl_normal_stream3s_ati(
  stream : UInt,
  nx : Int,
  ny : Int,
  nz : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int) -> Unit] = d_glNormalStream3sATI
    .get()
    .unsafe_into()
  fp(stream, nx, ny, nz)
}

///|
let d_glNormalStream3svATI : Dispatch = Dispatch::new("glNormalStream3svATI")

///|
pub fn gl_normal_stream3sv_ati(
  stream : UInt,
  coords : FixedArray[Int16],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int16]) -> Unit] = d_glNormalStream3svATI
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(stream, coords_p) })
}

///|
let d_glObjectLabel : Dispatch = Dispatch::with_aliases("glObjectLabel", [
  "glObjectLabelKHR",
])

///|
pub fn gl_object_label(
  identifier : UInt,
  name : UInt,
  length : Int,
  label : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, @pointer.Pointer[Byte]) -> Unit] = d_glObjectLabel
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(label, fn(label_p) {
    fp(identifier, name, length, label_p)
  })
}

///|
let d_glObjectLabelKHR : Dispatch = Dispatch::with_aliases("glObjectLabelKHR", [
  "glObjectLabel",
])

///|
pub fn gl_object_label_khr(
  identifier : UInt,
  name : UInt,
  length : Int,
  label : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, @pointer.Pointer[Byte]) -> Unit] = d_glObjectLabelKHR
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(label, fn(label_p) {
    fp(identifier, name, length, label_p)
  })
}

///|
let d_glObjectPtrLabel : Dispatch = Dispatch::with_aliases("glObjectPtrLabel", [
  "glObjectPtrLabelKHR",
])

///|
pub fn gl_object_ptr_label(ptr : Bytes, length : Int, label : Bytes) -> Unit {
  let fp : FuncRef[
    (@pointer.Pointer[Byte], Int, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glObjectPtrLabel.get().unsafe_into()
  @pointer.borrow_bytes(ptr, fn(ptr_p) {
    @pointer.borrow_bytes(label, fn(label_p) { fp(ptr_p, length, label_p) })
  })
}

///|
let d_glObjectPtrLabelKHR : Dispatch = Dispatch::with_aliases(
  "glObjectPtrLabelKHR",
  ["glObjectPtrLabel"],
)

///|
pub fn gl_object_ptr_label_khr(
  ptr : Bytes,
  length : Int,
  label : Bytes,
) -> Unit {
  let fp : FuncRef[
    (@pointer.Pointer[Byte], Int, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glObjectPtrLabelKHR.get().unsafe_into()
  @pointer.borrow_bytes(ptr, fn(ptr_p) {
    @pointer.borrow_bytes(label, fn(label_p) { fp(ptr_p, length, label_p) })
  })
}

///|
let d_glObjectPurgeableAPPLE : Dispatch = Dispatch::new(
  "glObjectPurgeableAPPLE",
)

///|
pub fn gl_object_purgeable_apple(
  objectType : UInt,
  name : UInt,
  option : UInt,
) -> UInt {
  let fp : FuncRef[(UInt, UInt, UInt) -> UInt] = d_glObjectPurgeableAPPLE
    .get()
    .unsafe_into()
  fp(objectType, name, option)
}

///|
let d_glObjectUnpurgeableAPPLE : Dispatch = Dispatch::new(
  "glObjectUnpurgeableAPPLE",
)

///|
pub fn gl_object_unpurgeable_apple(
  objectType : UInt,
  name : UInt,
  option : UInt,
) -> UInt {
  let fp : FuncRef[(UInt, UInt, UInt) -> UInt] = d_glObjectUnpurgeableAPPLE
    .get()
    .unsafe_into()
  fp(objectType, name, option)
}

///|
let d_glOrtho : Dispatch = Dispatch::new("glOrtho")

///|
pub fn gl_ortho(
  left : Double,
  right : Double,
  bottom : Double,
  top : Double,
  zNear : Double,
  zFar : Double,
) -> Unit {
  let fp : FuncRef[(Double, Double, Double, Double, Double, Double) -> Unit] = d_glOrtho
    .get()
    .unsafe_into()
  fp(left, right, bottom, top, zNear, zFar)
}

///|
let d_glOrthof : Dispatch = Dispatch::new("glOrthof")

///|
pub fn gl_orthof(
  l : Float,
  r : Float,
  b : Float,
  t : Float,
  n : Float,
  f : Float,
) -> Unit {
  let fp : FuncRef[(Float, Float, Float, Float, Float, Float) -> Unit] = d_glOrthof
    .get()
    .unsafe_into()
  fp(l, r, b, t, n, f)
}

///|
let d_glOrthofOES : Dispatch = Dispatch::new("glOrthofOES")

///|
pub fn gl_orthof_oes(
  l : Float,
  r : Float,
  b : Float,
  t : Float,
  n : Float,
  f : Float,
) -> Unit {
  let fp : FuncRef[(Float, Float, Float, Float, Float, Float) -> Unit] = d_glOrthofOES
    .get()
    .unsafe_into()
  fp(l, r, b, t, n, f)
}

///|
let d_glOrthox : Dispatch = Dispatch::new("glOrthox")

///|
pub fn gl_orthox(l : Int, r : Int, b : Int, t : Int, n : Int, f : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int, Int, Int) -> Unit] = d_glOrthox
    .get()
    .unsafe_into()
  fp(l, r, b, t, n, f)
}

///|
let d_glOrthoxOES : Dispatch = Dispatch::new("glOrthoxOES")

///|
pub fn gl_orthox_oes(
  l : Int,
  r : Int,
  b : Int,
  t : Int,
  n : Int,
  f : Int,
) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int, Int, Int) -> Unit] = d_glOrthoxOES
    .get()
    .unsafe_into()
  fp(l, r, b, t, n, f)
}

///|
let d_glPNTrianglesfATI : Dispatch = Dispatch::new("glPNTrianglesfATI")

///|
pub fn gl_pn_trianglesf_ati(pname : UInt, param : Float) -> Unit {
  let fp : FuncRef[(UInt, Float) -> Unit] = d_glPNTrianglesfATI
    .get()
    .unsafe_into()
  fp(pname, param)
}

///|
let d_glPNTrianglesiATI : Dispatch = Dispatch::new("glPNTrianglesiATI")

///|
pub fn gl_pn_trianglesi_ati(pname : UInt, param : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glPNTrianglesiATI
    .get()
    .unsafe_into()
  fp(pname, param)
}

///|
let d_glPassTexCoordATI : Dispatch = Dispatch::new("glPassTexCoordATI")

///|
pub fn gl_pass_tex_coord_ati(dst : UInt, coord : UInt, swizzle : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glPassTexCoordATI
    .get()
    .unsafe_into()
  fp(dst, coord, swizzle)
}

///|
let d_glPassThrough : Dispatch = Dispatch::new("glPassThrough")

///|
pub fn gl_pass_through(token : Float) -> Unit {
  let fp : FuncRef[(Float) -> Unit] = d_glPassThrough.get().unsafe_into()
  fp(token)
}

///|
let d_glPassThroughxOES : Dispatch = Dispatch::new("glPassThroughxOES")

///|
pub fn gl_pass_throughx_oes(token : Int) -> Unit {
  let fp : FuncRef[(Int) -> Unit] = d_glPassThroughxOES.get().unsafe_into()
  fp(token)
}

///|
let d_glPatchParameterfv : Dispatch = Dispatch::new("glPatchParameterfv")

///|
pub fn gl_patch_parameterfv(pname : UInt, values : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glPatchParameterfv
    .get()
    .unsafe_into()
  @pointer.borrow_array(values, fn(values_p) { fp(pname, values_p) })
}

///|
let d_glPatchParameteri : Dispatch = Dispatch::with_aliases(
  "glPatchParameteri",
  ["glPatchParameteriEXT", "glPatchParameteriOES"],
)

///|
pub fn gl_patch_parameteri(pname : UInt, value : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glPatchParameteri
    .get()
    .unsafe_into()
  fp(pname, value)
}

///|
let d_glPatchParameteriEXT : Dispatch = Dispatch::with_aliases(
  "glPatchParameteriEXT",
  ["glPatchParameteri", "glPatchParameteriOES"],
)

///|
pub fn gl_patch_parameteri_ext(pname : UInt, value : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glPatchParameteriEXT
    .get()
    .unsafe_into()
  fp(pname, value)
}

///|
let d_glPatchParameteriOES : Dispatch = Dispatch::with_aliases(
  "glPatchParameteriOES",
  ["glPatchParameteri", "glPatchParameteriEXT"],
)

///|
pub fn gl_patch_parameteri_oes(pname : UInt, value : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glPatchParameteriOES
    .get()
    .unsafe_into()
  fp(pname, value)
}

///|
let d_glPathColorGenNV : Dispatch = Dispatch::new("glPathColorGenNV")

///|
pub fn gl_path_color_gen_nv(
  color : UInt,
  genMode : UInt,
  colorFormat : UInt,
  coeffs : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glPathColorGenNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(coeffs, fn(coeffs_p) {
    fp(color, genMode, colorFormat, coeffs_p)
  })
}

///|
let d_glPathCommandsNV : Dispatch = Dispatch::new("glPathCommandsNV")

///|
pub fn gl_path_commands_nv(
  path : UInt,
  numCommands : Int,
  commands : Bytes,
  numCoords : Int,
  coordType : UInt,
  coords : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, @pointer.Pointer[Byte], Int, UInt, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glPathCommandsNV.get().unsafe_into()
  @pointer.borrow_bytes(commands, fn(commands_p) {
    @pointer.borrow_bytes(coords, fn(coords_p) {
      fp(path, numCommands, commands_p, numCoords, coordType, coords_p)
    })
  })
}

///|
let d_glPathCoordsNV : Dispatch = Dispatch::new("glPathCoordsNV")

///|
pub fn gl_path_coords_nv(
  path : UInt,
  numCoords : Int,
  coordType : UInt,
  coords : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, @pointer.Pointer[Byte]) -> Unit] = d_glPathCoordsNV
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(coords, fn(coords_p) {
    fp(path, numCoords, coordType, coords_p)
  })
}

///|
let d_glPathCoverDepthFuncNV : Dispatch = Dispatch::new(
  "glPathCoverDepthFuncNV",
)

///|
pub fn gl_path_cover_depth_func_nv(func : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glPathCoverDepthFuncNV
    .get()
    .unsafe_into()
  fp(func)
}

///|
let d_glPathDashArrayNV : Dispatch = Dispatch::new("glPathDashArrayNV")

///|
pub fn gl_path_dash_array_nv(
  path : UInt,
  dashCount : Int,
  dashArray : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Float]) -> Unit] = d_glPathDashArrayNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(dashArray, fn(dashArray_p) {
    fp(path, dashCount, dashArray_p)
  })
}

///|
let d_glPathFogGenNV : Dispatch = Dispatch::new("glPathFogGenNV")

///|
pub fn gl_path_fog_gen_nv(genMode : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glPathFogGenNV.get().unsafe_into()
  fp(genMode)
}

///|
let d_glPathGlyphIndexArrayNV : Dispatch = Dispatch::new(
  "glPathGlyphIndexArrayNV",
)

///|
pub fn gl_path_glyph_index_array_nv(
  firstPathName : UInt,
  fontTarget : UInt,
  fontName : Bytes,
  fontStyle : UInt,
  firstGlyphIndex : UInt,
  numGlyphs : Int,
  pathParameterTemplate : UInt,
  emScale : Float,
) -> UInt {
  let fp : FuncRef[
    (UInt, UInt, @pointer.Pointer[Byte], UInt, UInt, Int, UInt, Float) -> UInt,
  ] = d_glPathGlyphIndexArrayNV.get().unsafe_into()
  @pointer.borrow_bytes(fontName, fn(fontName_p) {
    fp(
      firstPathName, fontTarget, fontName_p, fontStyle, firstGlyphIndex, numGlyphs,
      pathParameterTemplate, emScale,
    )
  })
}

///|
let d_glPathGlyphIndexRangeNV : Dispatch = Dispatch::new(
  "glPathGlyphIndexRangeNV",
)

///|
pub fn gl_path_glyph_index_range_nv(
  fontTarget : UInt,
  fontName : Bytes,
  fontStyle : UInt,
  pathParameterTemplate : UInt,
  emScale : Float,
  baseAndCount : FixedArray[UInt],
) -> UInt {
  let fp : FuncRef[
    (UInt, @pointer.Pointer[Byte], UInt, UInt, Float, @pointer.Pointer[UInt]) -> UInt,
  ] = d_glPathGlyphIndexRangeNV.get().unsafe_into()
  @pointer.borrow_bytes(fontName, fn(fontName_p) {
    @pointer.borrow_array(baseAndCount, fn(baseAndCount_p) {
      fp(
        fontTarget, fontName_p, fontStyle, pathParameterTemplate, emScale, baseAndCount_p,
      )
    })
  })
}

///|
let d_glPathGlyphRangeNV : Dispatch = Dispatch::new("glPathGlyphRangeNV")

///|
pub fn gl_path_glyph_range_nv(
  firstPathName : UInt,
  fontTarget : UInt,
  fontName : Bytes,
  fontStyle : UInt,
  firstGlyph : UInt,
  numGlyphs : Int,
  handleMissingGlyphs : UInt,
  pathParameterTemplate : UInt,
  emScale : Float,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, @pointer.Pointer[Byte], UInt, UInt, Int, UInt, UInt, Float) -> Unit,
  ] = d_glPathGlyphRangeNV.get().unsafe_into()
  @pointer.borrow_bytes(fontName, fn(fontName_p) {
    fp(
      firstPathName, fontTarget, fontName_p, fontStyle, firstGlyph, numGlyphs, handleMissingGlyphs,
      pathParameterTemplate, emScale,
    )
  })
}

///|
let d_glPathGlyphsNV : Dispatch = Dispatch::new("glPathGlyphsNV")

///|
pub fn gl_path_glyphs_nv(
  firstPathName : UInt,
  fontTarget : UInt,
  fontName : Bytes,
  fontStyle : UInt,
  numGlyphs : Int,
  type_ : UInt,
  charcodes : Bytes,
  handleMissingGlyphs : UInt,
  pathParameterTemplate : UInt,
  emScale : Float,
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      UInt,
      @pointer.Pointer[Byte],
      UInt,
      Int,
      UInt,
      @pointer.Pointer[Byte],
      UInt,
      UInt,
      Float,
    ) -> Unit,
  ] = d_glPathGlyphsNV.get().unsafe_into()
  @pointer.borrow_bytes(fontName, fn(fontName_p) {
    @pointer.borrow_bytes(charcodes, fn(charcodes_p) {
      fp(
        firstPathName, fontTarget, fontName_p, fontStyle, numGlyphs, type_, charcodes_p,
        handleMissingGlyphs, pathParameterTemplate, emScale,
      )
    })
  })
}

///|
let d_glPathMemoryGlyphIndexArrayNV : Dispatch = Dispatch::new(
  "glPathMemoryGlyphIndexArrayNV",
)

///|
pub fn gl_path_memory_glyph_index_array_nv(
  firstPathName : UInt,
  fontTarget : UInt,
  fontSize : Int64,
  fontData : Bytes,
  faceIndex : Int,
  firstGlyphIndex : UInt,
  numGlyphs : Int,
  pathParameterTemplate : UInt,
  emScale : Float,
) -> UInt {
  let fp : FuncRef[
    (UInt, UInt, Int64, @pointer.Pointer[Byte], Int, UInt, Int, UInt, Float) -> UInt,
  ] = d_glPathMemoryGlyphIndexArrayNV.get().unsafe_into()
  @pointer.borrow_bytes(fontData, fn(fontData_p) {
    fp(
      firstPathName, fontTarget, fontSize, fontData_p, faceIndex, firstGlyphIndex,
      numGlyphs, pathParameterTemplate, emScale,
    )
  })
}

///|
let d_glPathParameterfNV : Dispatch = Dispatch::new("glPathParameterfNV")

///|
pub fn gl_path_parameterf_nv(path : UInt, pname : UInt, value : Float) -> Unit {
  let fp : FuncRef[(UInt, UInt, Float) -> Unit] = d_glPathParameterfNV
    .get()
    .unsafe_into()
  fp(path, pname, value)
}

///|
let d_glPathParameterfvNV : Dispatch = Dispatch::new("glPathParameterfvNV")

///|
pub fn gl_path_parameterfv_nv(
  path : UInt,
  pname : UInt,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glPathParameterfvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(path, pname, value_p) })
}

///|
let d_glPathParameteriNV : Dispatch = Dispatch::new("glPathParameteriNV")

///|
pub fn gl_path_parameteri_nv(path : UInt, pname : UInt, value : Int) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int) -> Unit] = d_glPathParameteriNV
    .get()
    .unsafe_into()
  fp(path, pname, value)
}

///|
let d_glPathParameterivNV : Dispatch = Dispatch::new("glPathParameterivNV")

///|
pub fn gl_path_parameteriv_nv(
  path : UInt,
  pname : UInt,
  value : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glPathParameterivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(path, pname, value_p) })
}

///|
let d_glPathStencilDepthOffsetNV : Dispatch = Dispatch::new(
  "glPathStencilDepthOffsetNV",
)

///|
pub fn gl_path_stencil_depth_offset_nv(factor : Float, units : Float) -> Unit {
  let fp : FuncRef[(Float, Float) -> Unit] = d_glPathStencilDepthOffsetNV
    .get()
    .unsafe_into()
  fp(factor, units)
}

///|
let d_glPathStencilFuncNV : Dispatch = Dispatch::new("glPathStencilFuncNV")

///|
pub fn gl_path_stencil_func_nv(func : UInt, ref_ : Int, mask : UInt) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt) -> Unit] = d_glPathStencilFuncNV
    .get()
    .unsafe_into()
  fp(func, ref_, mask)
}

///|
let d_glPathStringNV : Dispatch = Dispatch::new("glPathStringNV")

///|
pub fn gl_path_string_nv(
  path : UInt,
  format : UInt,
  length : Int,
  pathString : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, @pointer.Pointer[Byte]) -> Unit] = d_glPathStringNV
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(pathString, fn(pathString_p) {
    fp(path, format, length, pathString_p)
  })
}

///|
let d_glPathSubCommandsNV : Dispatch = Dispatch::new("glPathSubCommandsNV")

///|
pub fn gl_path_sub_commands_nv(
  path : UInt,
  commandStart : Int,
  commandsToDelete : Int,
  numCommands : Int,
  commands : Bytes,
  numCoords : Int,
  coordType : UInt,
  coords : Bytes,
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      Int,
      Int,
      Int,
      @pointer.Pointer[Byte],
      Int,
      UInt,
      @pointer.Pointer[Byte],
    ) -> Unit,
  ] = d_glPathSubCommandsNV.get().unsafe_into()
  @pointer.borrow_bytes(commands, fn(commands_p) {
    @pointer.borrow_bytes(coords, fn(coords_p) {
      fp(
        path, commandStart, commandsToDelete, numCommands, commands_p, numCoords,
        coordType, coords_p,
      )
    })
  })
}

///|
let d_glPathSubCoordsNV : Dispatch = Dispatch::new("glPathSubCoordsNV")

///|
pub fn gl_path_sub_coords_nv(
  path : UInt,
  coordStart : Int,
  numCoords : Int,
  coordType : UInt,
  coords : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, UInt, @pointer.Pointer[Byte]) -> Unit] = d_glPathSubCoordsNV
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(coords, fn(coords_p) {
    fp(path, coordStart, numCoords, coordType, coords_p)
  })
}

///|
let d_glPathTexGenNV : Dispatch = Dispatch::new("glPathTexGenNV")

///|
pub fn gl_path_tex_gen_nv(
  texCoordSet : UInt,
  genMode : UInt,
  components : Int,
  coeffs : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, @pointer.Pointer[Float]) -> Unit] = d_glPathTexGenNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(coeffs, fn(coeffs_p) {
    fp(texCoordSet, genMode, components, coeffs_p)
  })
}

///|
let d_glPauseTransformFeedback : Dispatch = Dispatch::with_aliases(
  "glPauseTransformFeedback",
  ["glPauseTransformFeedbackNV"],
)

///|
pub fn gl_pause_transform_feedback() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glPauseTransformFeedback.get().unsafe_into()
  fp()
}

///|
let d_glPauseTransformFeedbackNV : Dispatch = Dispatch::with_aliases(
  "glPauseTransformFeedbackNV",
  ["glPauseTransformFeedback"],
)

///|
pub fn gl_pause_transform_feedback_nv() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glPauseTransformFeedbackNV
    .get()
    .unsafe_into()
  fp()
}

///|
let d_glPixelDataRangeNV : Dispatch = Dispatch::new("glPixelDataRangeNV")

///|
pub fn gl_pixel_data_range_nv(
  target : UInt,
  length : Int,
  pointer : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Byte]) -> Unit] = d_glPixelDataRangeNV
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(pointer, fn(pointer_p) { fp(target, length, pointer_p) })
}

///|
let d_glPixelMapfv : Dispatch = Dispatch::new("glPixelMapfv")

///|
pub fn gl_pixel_mapfv(
  map : UInt,
  mapsize : Int,
  values : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Float]) -> Unit] = d_glPixelMapfv
    .get()
    .unsafe_into()
  @pointer.borrow_array(values, fn(values_p) { fp(map, mapsize, values_p) })
}

///|
let d_glPixelMapuiv : Dispatch = Dispatch::new("glPixelMapuiv")

///|
pub fn gl_pixel_mapuiv(
  map : UInt,
  mapsize : Int,
  values : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[UInt]) -> Unit] = d_glPixelMapuiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(values, fn(values_p) { fp(map, mapsize, values_p) })
}

///|
let d_glPixelMapusv : Dispatch = Dispatch::new("glPixelMapusv")

///|
pub fn gl_pixel_mapusv(
  map : UInt,
  mapsize : Int,
  values : FixedArray[UInt16],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[UInt16]) -> Unit] = d_glPixelMapusv
    .get()
    .unsafe_into()
  @pointer.borrow_array(values, fn(values_p) { fp(map, mapsize, values_p) })
}

///|
let d_glPixelMapx : Dispatch = Dispatch::new("glPixelMapx")

///|
pub fn gl_pixel_mapx(map : UInt, size : Int, values : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Int]) -> Unit] = d_glPixelMapx
    .get()
    .unsafe_into()
  @pointer.borrow_array(values, fn(values_p) { fp(map, size, values_p) })
}

///|
let d_glPixelStoref : Dispatch = Dispatch::new("glPixelStoref")

///|
pub fn gl_pixel_storef(pname : UInt, param : Float) -> Unit {
  let fp : FuncRef[(UInt, Float) -> Unit] = d_glPixelStoref.get().unsafe_into()
  fp(pname, param)
}

///|
let d_glPixelStorei : Dispatch = Dispatch::new("glPixelStorei")

///|
pub fn gl_pixel_storei(pname : UInt, param : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glPixelStorei.get().unsafe_into()
  fp(pname, param)
}

///|
let d_glPixelStorex : Dispatch = Dispatch::new("glPixelStorex")

///|
pub fn gl_pixel_storex(pname : UInt, param : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glPixelStorex.get().unsafe_into()
  fp(pname, param)
}

///|
let d_glPixelTexGenParameterfSGIS : Dispatch = Dispatch::new(
  "glPixelTexGenParameterfSGIS",
)

///|
pub fn gl_pixel_tex_gen_parameterf_sgis(pname : UInt, param : Float) -> Unit {
  let fp : FuncRef[(UInt, Float) -> Unit] = d_glPixelTexGenParameterfSGIS
    .get()
    .unsafe_into()
  fp(pname, param)
}

///|
let d_glPixelTexGenParameterfvSGIS : Dispatch = Dispatch::new(
  "glPixelTexGenParameterfvSGIS",
)

///|
pub fn gl_pixel_tex_gen_parameterfv_sgis(
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glPixelTexGenParameterfvSGIS
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(pname, params_p) })
}

///|
let d_glPixelTexGenParameteriSGIS : Dispatch = Dispatch::new(
  "glPixelTexGenParameteriSGIS",
)

///|
pub fn gl_pixel_tex_gen_parameteri_sgis(pname : UInt, param : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glPixelTexGenParameteriSGIS
    .get()
    .unsafe_into()
  fp(pname, param)
}

///|
let d_glPixelTexGenParameterivSGIS : Dispatch = Dispatch::new(
  "glPixelTexGenParameterivSGIS",
)

///|
pub fn gl_pixel_tex_gen_parameteriv_sgis(
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glPixelTexGenParameterivSGIS
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(pname, params_p) })
}

///|
let d_glPixelTexGenSGIX : Dispatch = Dispatch::new("glPixelTexGenSGIX")

///|
pub fn gl_pixel_tex_gen_sgix(mode : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glPixelTexGenSGIX.get().unsafe_into()
  fp(mode)
}

///|
let d_glPixelTransferf : Dispatch = Dispatch::new("glPixelTransferf")

///|
pub fn gl_pixel_transferf(pname : UInt, param : Float) -> Unit {
  let fp : FuncRef[(UInt, Float) -> Unit] = d_glPixelTransferf
    .get()
    .unsafe_into()
  fp(pname, param)
}

///|
let d_glPixelTransferi : Dispatch = Dispatch::new("glPixelTransferi")

///|
pub fn gl_pixel_transferi(pname : UInt, param : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glPixelTransferi.get().unsafe_into()
  fp(pname, param)
}

///|
let d_glPixelTransferxOES : Dispatch = Dispatch::new("glPixelTransferxOES")

///|
pub fn gl_pixel_transferx_oes(pname : UInt, param : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glPixelTransferxOES
    .get()
    .unsafe_into()
  fp(pname, param)
}

///|
let d_glPixelTransformParameterfEXT : Dispatch = Dispatch::new(
  "glPixelTransformParameterfEXT",
)

///|
pub fn gl_pixel_transform_parameterf_ext(
  target : UInt,
  pname : UInt,
  param : Float,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Float) -> Unit] = d_glPixelTransformParameterfEXT
    .get()
    .unsafe_into()
  fp(target, pname, param)
}

///|
let d_glPixelTransformParameterfvEXT : Dispatch = Dispatch::new(
  "glPixelTransformParameterfvEXT",
)

///|
pub fn gl_pixel_transform_parameterfv_ext(
  target : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glPixelTransformParameterfvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glPixelTransformParameteriEXT : Dispatch = Dispatch::new(
  "glPixelTransformParameteriEXT",
)

///|
pub fn gl_pixel_transform_parameteri_ext(
  target : UInt,
  pname : UInt,
  param : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int) -> Unit] = d_glPixelTransformParameteriEXT
    .get()
    .unsafe_into()
  fp(target, pname, param)
}

///|
let d_glPixelTransformParameterivEXT : Dispatch = Dispatch::new(
  "glPixelTransformParameterivEXT",
)

///|
pub fn gl_pixel_transform_parameteriv_ext(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glPixelTransformParameterivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glPixelZoom : Dispatch = Dispatch::new("glPixelZoom")

///|
pub fn gl_pixel_zoom(xfactor : Float, yfactor : Float) -> Unit {
  let fp : FuncRef[(Float, Float) -> Unit] = d_glPixelZoom.get().unsafe_into()
  fp(xfactor, yfactor)
}

///|
let d_glPixelZoomxOES : Dispatch = Dispatch::new("glPixelZoomxOES")

///|
pub fn gl_pixel_zoomx_oes(xfactor : Int, yfactor : Int) -> Unit {
  let fp : FuncRef[(Int, Int) -> Unit] = d_glPixelZoomxOES.get().unsafe_into()
  fp(xfactor, yfactor)
}

///|
let d_glPointAlongPathNV : Dispatch = Dispatch::new("glPointAlongPathNV")

///|
pub fn gl_point_along_path_nv(
  path : UInt,
  startSegment : Int,
  numSegments : Int,
  distance : Float,
  x : FixedArray[Float],
  y : FixedArray[Float],
  tangentX : FixedArray[Float],
  tangentY : FixedArray[Float],
) -> Bool {
  let fp : FuncRef[
    (
      UInt,
      Int,
      Int,
      Float,
      @pointer.Pointer[Float],
      @pointer.Pointer[Float],
      @pointer.Pointer[Float],
      @pointer.Pointer[Float],
    ) -> Int,
  ] = d_glPointAlongPathNV.get().unsafe_into()
  @pointer.borrow_array(x, fn(x_p) {
    @pointer.borrow_array(y, fn(y_p) {
      @pointer.borrow_array(tangentX, fn(tangentX_p) {
        @pointer.borrow_array(tangentY, fn(tangentY_p) {
          (
            fp(
              path, startSegment, numSegments, distance, x_p, y_p, tangentX_p, tangentY_p,
            ) &
            0xFF
          ) !=
          0
        })
      })
    })
  })
}

///|
let d_glPointParameterf : Dispatch = Dispatch::with_aliases(
  "glPointParameterf",
  ["glPointParameterfARB", "glPointParameterfEXT", "glPointParameterfSGIS"],
)

///|
pub fn gl_point_parameterf(pname : UInt, param : Float) -> Unit {
  let fp : FuncRef[(UInt, Float) -> Unit] = d_glPointParameterf
    .get()
    .unsafe_into()
  fp(pname, param)
}

///|
let d_glPointParameterfARB : Dispatch = Dispatch::with_aliases(
  "glPointParameterfARB",
  ["glPointParameterf", "glPointParameterfEXT", "glPointParameterfSGIS"],
)

///|
pub fn gl_point_parameterf_arb(pname : UInt, param : Float) -> Unit {
  let fp : FuncRef[(UInt, Float) -> Unit] = d_glPointParameterfARB
    .get()
    .unsafe_into()
  fp(pname, param)
}

///|
let d_glPointParameterfEXT : Dispatch = Dispatch::with_aliases(
  "glPointParameterfEXT",
  ["glPointParameterf", "glPointParameterfARB", "glPointParameterfSGIS"],
)

///|
pub fn gl_point_parameterf_ext(pname : UInt, param : Float) -> Unit {
  let fp : FuncRef[(UInt, Float) -> Unit] = d_glPointParameterfEXT
    .get()
    .unsafe_into()
  fp(pname, param)
}

///|
let d_glPointParameterfSGIS : Dispatch = Dispatch::with_aliases(
  "glPointParameterfSGIS",
  ["glPointParameterf", "glPointParameterfARB", "glPointParameterfEXT"],
)

///|
pub fn gl_point_parameterf_sgis(pname : UInt, param : Float) -> Unit {
  let fp : FuncRef[(UInt, Float) -> Unit] = d_glPointParameterfSGIS
    .get()
    .unsafe_into()
  fp(pname, param)
}

///|
let d_glPointParameterfv : Dispatch = Dispatch::with_aliases(
  "glPointParameterfv",
  ["glPointParameterfvARB", "glPointParameterfvEXT", "glPointParameterfvSGIS"],
)

///|
pub fn gl_point_parameterfv(pname : UInt, params : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glPointParameterfv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(pname, params_p) })
}

///|
let d_glPointParameterfvARB : Dispatch = Dispatch::with_aliases(
  "glPointParameterfvARB",
  ["glPointParameterfv", "glPointParameterfvEXT", "glPointParameterfvSGIS"],
)

///|
pub fn gl_point_parameterfv_arb(
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glPointParameterfvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(pname, params_p) })
}

///|
let d_glPointParameterfvEXT : Dispatch = Dispatch::with_aliases(
  "glPointParameterfvEXT",
  ["glPointParameterfv", "glPointParameterfvARB", "glPointParameterfvSGIS"],
)

///|
pub fn gl_point_parameterfv_ext(
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glPointParameterfvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(pname, params_p) })
}

///|
let d_glPointParameterfvSGIS : Dispatch = Dispatch::with_aliases(
  "glPointParameterfvSGIS",
  ["glPointParameterfv", "glPointParameterfvARB", "glPointParameterfvEXT"],
)

///|
pub fn gl_point_parameterfv_sgis(
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glPointParameterfvSGIS
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(pname, params_p) })
}

///|
let d_glPointParameteri : Dispatch = Dispatch::with_aliases(
  "glPointParameteri",
  ["glPointParameteriNV"],
)

///|
pub fn gl_point_parameteri(pname : UInt, param : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glPointParameteri
    .get()
    .unsafe_into()
  fp(pname, param)
}

///|
let d_glPointParameteriNV : Dispatch = Dispatch::with_aliases(
  "glPointParameteriNV",
  ["glPointParameteri"],
)

///|
pub fn gl_point_parameteri_nv(pname : UInt, param : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glPointParameteriNV
    .get()
    .unsafe_into()
  fp(pname, param)
}

///|
let d_glPointParameteriv : Dispatch = Dispatch::with_aliases(
  "glPointParameteriv",
  ["glPointParameterivNV"],
)

///|
pub fn gl_point_parameteriv(pname : UInt, params : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glPointParameteriv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(pname, params_p) })
}

///|
let d_glPointParameterivNV : Dispatch = Dispatch::with_aliases(
  "glPointParameterivNV",
  ["glPointParameteriv"],
)

///|
pub fn gl_point_parameteriv_nv(pname : UInt, params : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glPointParameterivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(pname, params_p) })
}

///|
let d_glPointParameterx : Dispatch = Dispatch::new("glPointParameterx")

///|
pub fn gl_point_parameterx(pname : UInt, param : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glPointParameterx
    .get()
    .unsafe_into()
  fp(pname, param)
}

///|
let d_glPointParameterxOES : Dispatch = Dispatch::new("glPointParameterxOES")

///|
pub fn gl_point_parameterx_oes(pname : UInt, param : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glPointParameterxOES
    .get()
    .unsafe_into()
  fp(pname, param)
}

///|
let d_glPointParameterxv : Dispatch = Dispatch::new("glPointParameterxv")

///|
pub fn gl_point_parameterxv(pname : UInt, params : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glPointParameterxv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(pname, params_p) })
}

///|
let d_glPointParameterxvOES : Dispatch = Dispatch::new("glPointParameterxvOES")

///|
pub fn gl_point_parameterxv_oes(pname : UInt, params : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glPointParameterxvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(pname, params_p) })
}

///|
let d_glPointSize : Dispatch = Dispatch::new("glPointSize")

///|
pub fn gl_point_size(size : Float) -> Unit {
  let fp : FuncRef[(Float) -> Unit] = d_glPointSize.get().unsafe_into()
  fp(size)
}

///|
let d_glPointSizePointerOES : Dispatch = Dispatch::new("glPointSizePointerOES")

///|
pub fn gl_point_size_pointer_oes(
  type_ : UInt,
  stride : Int,
  pointer : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Byte]) -> Unit] = d_glPointSizePointerOES
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(pointer, fn(pointer_p) { fp(type_, stride, pointer_p) })
}

///|
let d_glPointSizex : Dispatch = Dispatch::new("glPointSizex")

///|
pub fn gl_point_sizex(size : Int) -> Unit {
  let fp : FuncRef[(Int) -> Unit] = d_glPointSizex.get().unsafe_into()
  fp(size)
}

///|
let d_glPointSizexOES : Dispatch = Dispatch::new("glPointSizexOES")

///|
pub fn gl_point_sizex_oes(size : Int) -> Unit {
  let fp : FuncRef[(Int) -> Unit] = d_glPointSizexOES.get().unsafe_into()
  fp(size)
}

///|
let d_glPollAsyncSGIX : Dispatch = Dispatch::new("glPollAsyncSGIX")

///|
pub fn gl_poll_async_sgix(markerp : FixedArray[UInt]) -> Int {
  let fp : FuncRef[(@pointer.Pointer[UInt]) -> Int] = d_glPollAsyncSGIX
    .get()
    .unsafe_into()
  @pointer.borrow_array(markerp, fn(markerp_p) { fp(markerp_p) })
}

///|
let d_glPollInstrumentsSGIX : Dispatch = Dispatch::new("glPollInstrumentsSGIX")

///|
pub fn gl_poll_instruments_sgix(marker_p : FixedArray[Int]) -> Int {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Int] = d_glPollInstrumentsSGIX
    .get()
    .unsafe_into()
  @pointer.borrow_array(marker_p, fn(marker_p_p) { fp(marker_p_p) })
}

///|
let d_glPolygonMode : Dispatch = Dispatch::with_aliases("glPolygonMode", [
  "glPolygonModeNV",
])

///|
pub fn gl_polygon_mode(face : UInt, mode : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glPolygonMode.get().unsafe_into()
  fp(face, mode)
}

///|
let d_glPolygonModeNV : Dispatch = Dispatch::with_aliases("glPolygonModeNV", [
  "glPolygonMode",
])

///|
pub fn gl_polygon_mode_nv(face : UInt, mode : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glPolygonModeNV.get().unsafe_into()
  fp(face, mode)
}

///|
let d_glPolygonOffset : Dispatch = Dispatch::new("glPolygonOffset")

///|
pub fn gl_polygon_offset(factor : Float, units : Float) -> Unit {
  let fp : FuncRef[(Float, Float) -> Unit] = d_glPolygonOffset
    .get()
    .unsafe_into()
  fp(factor, units)
}

///|
let d_glPolygonOffsetClamp : Dispatch = Dispatch::with_aliases(
  "glPolygonOffsetClamp",
  ["glPolygonOffsetClampEXT"],
)

///|
pub fn gl_polygon_offset_clamp(
  factor : Float,
  units : Float,
  clamp : Float,
) -> Unit {
  let fp : FuncRef[(Float, Float, Float) -> Unit] = d_glPolygonOffsetClamp
    .get()
    .unsafe_into()
  fp(factor, units, clamp)
}

///|
let d_glPolygonOffsetClampEXT : Dispatch = Dispatch::with_aliases(
  "glPolygonOffsetClampEXT",
  ["glPolygonOffsetClamp"],
)

///|
pub fn gl_polygon_offset_clamp_ext(
  factor : Float,
  units : Float,
  clamp : Float,
) -> Unit {
  let fp : FuncRef[(Float, Float, Float) -> Unit] = d_glPolygonOffsetClampEXT
    .get()
    .unsafe_into()
  fp(factor, units, clamp)
}

///|
let d_glPolygonOffsetEXT : Dispatch = Dispatch::new("glPolygonOffsetEXT")

///|
pub fn gl_polygon_offset_ext(factor : Float, bias : Float) -> Unit {
  let fp : FuncRef[(Float, Float) -> Unit] = d_glPolygonOffsetEXT
    .get()
    .unsafe_into()
  fp(factor, bias)
}

///|
let d_glPolygonOffsetx : Dispatch = Dispatch::new("glPolygonOffsetx")

///|
pub fn gl_polygon_offsetx(factor : Int, units : Int) -> Unit {
  let fp : FuncRef[(Int, Int) -> Unit] = d_glPolygonOffsetx.get().unsafe_into()
  fp(factor, units)
}

///|
let d_glPolygonOffsetxOES : Dispatch = Dispatch::new("glPolygonOffsetxOES")

///|
pub fn gl_polygon_offsetx_oes(factor : Int, units : Int) -> Unit {
  let fp : FuncRef[(Int, Int) -> Unit] = d_glPolygonOffsetxOES
    .get()
    .unsafe_into()
  fp(factor, units)
}

///|
let d_glPolygonStipple : Dispatch = Dispatch::new("glPolygonStipple")

///|
pub fn gl_polygon_stipple(mask : Bytes) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Byte]) -> Unit] = d_glPolygonStipple
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(mask, fn(mask_p) { fp(mask_p) })
}

///|
let d_glPopAttrib : Dispatch = Dispatch::new("glPopAttrib")

///|
pub fn gl_pop_attrib() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glPopAttrib.get().unsafe_into()
  fp()
}

///|
let d_glPopClientAttrib : Dispatch = Dispatch::new("glPopClientAttrib")

///|
pub fn gl_pop_client_attrib() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glPopClientAttrib.get().unsafe_into()
  fp()
}

///|
let d_glPopDebugGroup : Dispatch = Dispatch::with_aliases("glPopDebugGroup", [
  "glPopDebugGroupKHR",
])

///|
pub fn gl_pop_debug_group() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glPopDebugGroup.get().unsafe_into()
  fp()
}

///|
let d_glPopDebugGroupKHR : Dispatch = Dispatch::with_aliases(
  "glPopDebugGroupKHR",
  ["glPopDebugGroup"],
)

///|
pub fn gl_pop_debug_group_khr() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glPopDebugGroupKHR.get().unsafe_into()
  fp()
}

///|
let d_glPopGroupMarkerEXT : Dispatch = Dispatch::new("glPopGroupMarkerEXT")

///|
pub fn gl_pop_group_marker_ext() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glPopGroupMarkerEXT.get().unsafe_into()
  fp()
}

///|
let d_glPopMatrix : Dispatch = Dispatch::new("glPopMatrix")

///|
pub fn gl_pop_matrix() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glPopMatrix.get().unsafe_into()
  fp()
}

///|
let d_glPopName : Dispatch = Dispatch::new("glPopName")

///|
pub fn gl_pop_name() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glPopName.get().unsafe_into()
  fp()
}

///|
let d_glPresentFrameDualFillNV : Dispatch = Dispatch::new(
  "glPresentFrameDualFillNV",
)

///|
pub fn gl_present_frame_dual_fill_nv(
  video_slot : UInt,
  minPresentTime : UInt64,
  beginPresentTimeId : UInt,
  presentDurationId : UInt,
  type_ : UInt,
  target0 : UInt,
  fill0 : UInt,
  target1 : UInt,
  fill1 : UInt,
  target2 : UInt,
  fill2 : UInt,
  target3 : UInt,
  fill3 : UInt,
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      UInt64,
      UInt,
      UInt,
      UInt,
      UInt,
      UInt,
      UInt,
      UInt,
      UInt,
      UInt,
      UInt,
      UInt,
    ) -> Unit,
  ] = d_glPresentFrameDualFillNV.get().unsafe_into()
  fp(
    video_slot, minPresentTime, beginPresentTimeId, presentDurationId, type_, target0,
    fill0, target1, fill1, target2, fill2, target3, fill3,
  )
}

///|
let d_glPresentFrameKeyedNV : Dispatch = Dispatch::new("glPresentFrameKeyedNV")

///|
pub fn gl_present_frame_keyed_nv(
  video_slot : UInt,
  minPresentTime : UInt64,
  beginPresentTimeId : UInt,
  presentDurationId : UInt,
  type_ : UInt,
  target0 : UInt,
  fill0 : UInt,
  key0 : UInt,
  target1 : UInt,
  fill1 : UInt,
  key1 : UInt,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt64, UInt, UInt, UInt, UInt, UInt, UInt, UInt, UInt, UInt) -> Unit,
  ] = d_glPresentFrameKeyedNV.get().unsafe_into()
  fp(
    video_slot, minPresentTime, beginPresentTimeId, presentDurationId, type_, target0,
    fill0, key0, target1, fill1, key1,
  )
}

///|
let d_glPrimitiveBoundingBox : Dispatch = Dispatch::with_aliases(
  "glPrimitiveBoundingBox",
  [
    "glPrimitiveBoundingBoxARB", "glPrimitiveBoundingBoxEXT", "glPrimitiveBoundingBoxOES",
  ],
)

///|
pub fn gl_primitive_bounding_box(
  minX : Float,
  minY : Float,
  minZ : Float,
  minW : Float,
  maxX : Float,
  maxY : Float,
  maxZ : Float,
  maxW : Float,
) -> Unit {
  let fp : FuncRef[
    (Float, Float, Float, Float, Float, Float, Float, Float) -> Unit,
  ] = d_glPrimitiveBoundingBox.get().unsafe_into()
  fp(minX, minY, minZ, minW, maxX, maxY, maxZ, maxW)
}

///|
let d_glPrimitiveBoundingBoxARB : Dispatch = Dispatch::with_aliases(
  "glPrimitiveBoundingBoxARB",
  [
    "glPrimitiveBoundingBox", "glPrimitiveBoundingBoxEXT", "glPrimitiveBoundingBoxOES",
  ],
)

///|
pub fn gl_primitive_bounding_box_arb(
  minX : Float,
  minY : Float,
  minZ : Float,
  minW : Float,
  maxX : Float,
  maxY : Float,
  maxZ : Float,
  maxW : Float,
) -> Unit {
  let fp : FuncRef[
    (Float, Float, Float, Float, Float, Float, Float, Float) -> Unit,
  ] = d_glPrimitiveBoundingBoxARB.get().unsafe_into()
  fp(minX, minY, minZ, minW, maxX, maxY, maxZ, maxW)
}

///|
let d_glPrimitiveBoundingBoxEXT : Dispatch = Dispatch::with_aliases(
  "glPrimitiveBoundingBoxEXT",
  [
    "glPrimitiveBoundingBox", "glPrimitiveBoundingBoxARB", "glPrimitiveBoundingBoxOES",
  ],
)

///|
pub fn gl_primitive_bounding_box_ext(
  minX : Float,
  minY : Float,
  minZ : Float,
  minW : Float,
  maxX : Float,
  maxY : Float,
  maxZ : Float,
  maxW : Float,
) -> Unit {
  let fp : FuncRef[
    (Float, Float, Float, Float, Float, Float, Float, Float) -> Unit,
  ] = d_glPrimitiveBoundingBoxEXT.get().unsafe_into()
  fp(minX, minY, minZ, minW, maxX, maxY, maxZ, maxW)
}

///|
let d_glPrimitiveBoundingBoxOES : Dispatch = Dispatch::with_aliases(
  "glPrimitiveBoundingBoxOES",
  [
    "glPrimitiveBoundingBox", "glPrimitiveBoundingBoxARB", "glPrimitiveBoundingBoxEXT",
  ],
)

///|
pub fn gl_primitive_bounding_box_oes(
  minX : Float,
  minY : Float,
  minZ : Float,
  minW : Float,
  maxX : Float,
  maxY : Float,
  maxZ : Float,
  maxW : Float,
) -> Unit {
  let fp : FuncRef[
    (Float, Float, Float, Float, Float, Float, Float, Float) -> Unit,
  ] = d_glPrimitiveBoundingBoxOES.get().unsafe_into()
  fp(minX, minY, minZ, minW, maxX, maxY, maxZ, maxW)
}

///|
let d_glPrimitiveRestartIndex : Dispatch = Dispatch::new(
  "glPrimitiveRestartIndex",
)

///|
pub fn gl_primitive_restart_index(index : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glPrimitiveRestartIndex
    .get()
    .unsafe_into()
  fp(index)
}

///|
let d_glPrimitiveRestartIndexNV : Dispatch = Dispatch::new(
  "glPrimitiveRestartIndexNV",
)

///|
pub fn gl_primitive_restart_index_nv(index : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glPrimitiveRestartIndexNV
    .get()
    .unsafe_into()
  fp(index)
}

///|
let d_glPrimitiveRestartNV : Dispatch = Dispatch::new("glPrimitiveRestartNV")

///|
pub fn gl_primitive_restart_nv() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glPrimitiveRestartNV.get().unsafe_into()
  fp()
}

///|
let d_glPrioritizeTextures : Dispatch = Dispatch::with_aliases(
  "glPrioritizeTextures",
  ["glPrioritizeTexturesEXT"],
)

///|
pub fn gl_prioritize_textures(
  n : Int,
  textures : FixedArray[UInt],
  priorities : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[
    (Int, @pointer.Pointer[UInt], @pointer.Pointer[Float]) -> Unit,
  ] = d_glPrioritizeTextures.get().unsafe_into()
  @pointer.borrow_array(textures, fn(textures_p) {
    @pointer.borrow_array(priorities, fn(priorities_p) {
      fp(n, textures_p, priorities_p)
    })
  })
}

///|
let d_glPrioritizeTexturesEXT : Dispatch = Dispatch::with_aliases(
  "glPrioritizeTexturesEXT",
  ["glPrioritizeTextures"],
)

///|
pub fn gl_prioritize_textures_ext(
  n : Int,
  textures : FixedArray[UInt],
  priorities : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[
    (Int, @pointer.Pointer[UInt], @pointer.Pointer[Float]) -> Unit,
  ] = d_glPrioritizeTexturesEXT.get().unsafe_into()
  @pointer.borrow_array(textures, fn(textures_p) {
    @pointer.borrow_array(priorities, fn(priorities_p) {
      fp(n, textures_p, priorities_p)
    })
  })
}

///|
let d_glPrioritizeTexturesxOES : Dispatch = Dispatch::new(
  "glPrioritizeTexturesxOES",
)

///|
pub fn gl_prioritize_texturesx_oes(
  n : Int,
  textures : FixedArray[UInt],
  priorities : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt], @pointer.Pointer[Int]) -> Unit] = d_glPrioritizeTexturesxOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(textures, fn(textures_p) {
    @pointer.borrow_array(priorities, fn(priorities_p) {
      fp(n, textures_p, priorities_p)
    })
  })
}

///|
let d_glProgramBinary : Dispatch = Dispatch::with_aliases("glProgramBinary", [
  "glProgramBinaryOES",
])

///|
pub fn gl_program_binary(
  program : UInt,
  binaryFormat : UInt,
  binary : Bytes,
  length : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Byte], Int) -> Unit] = d_glProgramBinary
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(binary, fn(binary_p) {
    fp(program, binaryFormat, binary_p, length)
  })
}

///|
let d_glProgramBinaryOES : Dispatch = Dispatch::with_aliases(
  "glProgramBinaryOES",
  ["glProgramBinary"],
)

///|
pub fn gl_program_binary_oes(
  program : UInt,
  binaryFormat : UInt,
  binary : Bytes,
  length : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Byte], Int) -> Unit] = d_glProgramBinaryOES
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(binary, fn(binary_p) {
    fp(program, binaryFormat, binary_p, length)
  })
}

///|
let d_glProgramBufferParametersIivNV : Dispatch = Dispatch::new(
  "glProgramBufferParametersIivNV",
)

///|
pub fn gl_program_buffer_parameters_iiv_nv(
  target : UInt,
  bindingIndex : UInt,
  wordIndex : UInt,
  count : Int,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int, @pointer.Pointer[Int]) -> Unit] = d_glProgramBufferParametersIivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(target, bindingIndex, wordIndex, count, params_p)
  })
}

///|
let d_glProgramBufferParametersIuivNV : Dispatch = Dispatch::new(
  "glProgramBufferParametersIuivNV",
)

///|
pub fn gl_program_buffer_parameters_iuiv_nv(
  target : UInt,
  bindingIndex : UInt,
  wordIndex : UInt,
  count : Int,
  params : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int, @pointer.Pointer[UInt]) -> Unit] = d_glProgramBufferParametersIuivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(target, bindingIndex, wordIndex, count, params_p)
  })
}

///|
let d_glProgramBufferParametersfvNV : Dispatch = Dispatch::new(
  "glProgramBufferParametersfvNV",
)

///|
pub fn gl_program_buffer_parametersfv_nv(
  target : UInt,
  bindingIndex : UInt,
  wordIndex : UInt,
  count : Int,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int, @pointer.Pointer[Float]) -> Unit] = d_glProgramBufferParametersfvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(target, bindingIndex, wordIndex, count, params_p)
  })
}

///|
let d_glProgramEnvParameter4dARB : Dispatch = Dispatch::new(
  "glProgramEnvParameter4dARB",
)

///|
pub fn gl_program_env_parameter4d_arb(
  target : UInt,
  index : UInt,
  x : Double,
  y : Double,
  z : Double,
  w : Double,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Double, Double, Double, Double) -> Unit] = d_glProgramEnvParameter4dARB
    .get()
    .unsafe_into()
  fp(target, index, x, y, z, w)
}

///|
let d_glProgramEnvParameter4dvARB : Dispatch = Dispatch::new(
  "glProgramEnvParameter4dvARB",
)

///|
pub fn gl_program_env_parameter4dv_arb(
  target : UInt,
  index : UInt,
  params : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Double]) -> Unit] = d_glProgramEnvParameter4dvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, index, params_p) })
}

///|
let d_glProgramEnvParameter4fARB : Dispatch = Dispatch::new(
  "glProgramEnvParameter4fARB",
)

///|
pub fn gl_program_env_parameter4f_arb(
  target : UInt,
  index : UInt,
  x : Float,
  y : Float,
  z : Float,
  w : Float,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Float, Float, Float, Float) -> Unit] = d_glProgramEnvParameter4fARB
    .get()
    .unsafe_into()
  fp(target, index, x, y, z, w)
}

///|
let d_glProgramEnvParameter4fvARB : Dispatch = Dispatch::new(
  "glProgramEnvParameter4fvARB",
)

///|
pub fn gl_program_env_parameter4fv_arb(
  target : UInt,
  index : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glProgramEnvParameter4fvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, index, params_p) })
}

///|
let d_glProgramEnvParameterI4iNV : Dispatch = Dispatch::new(
  "glProgramEnvParameterI4iNV",
)

///|
pub fn gl_program_env_parameter_i4i_nv(
  target : UInt,
  index : UInt,
  x : Int,
  y : Int,
  z : Int,
  w : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, Int, Int, Int) -> Unit] = d_glProgramEnvParameterI4iNV
    .get()
    .unsafe_into()
  fp(target, index, x, y, z, w)
}

///|
let d_glProgramEnvParameterI4ivNV : Dispatch = Dispatch::new(
  "glProgramEnvParameterI4ivNV",
)

///|
pub fn gl_program_env_parameter_i4iv_nv(
  target : UInt,
  index : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glProgramEnvParameterI4ivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, index, params_p) })
}

///|
let d_glProgramEnvParameterI4uiNV : Dispatch = Dispatch::new(
  "glProgramEnvParameterI4uiNV",
)

///|
pub fn gl_program_env_parameter_i4ui_nv(
  target : UInt,
  index : UInt,
  x : UInt,
  y : UInt,
  z : UInt,
  w : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, UInt, UInt) -> Unit] = d_glProgramEnvParameterI4uiNV
    .get()
    .unsafe_into()
  fp(target, index, x, y, z, w)
}

///|
let d_glProgramEnvParameterI4uivNV : Dispatch = Dispatch::new(
  "glProgramEnvParameterI4uivNV",
)

///|
pub fn gl_program_env_parameter_i4uiv_nv(
  target : UInt,
  index : UInt,
  params : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[UInt]) -> Unit] = d_glProgramEnvParameterI4uivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, index, params_p) })
}

///|
let d_glProgramEnvParameters4fvEXT : Dispatch = Dispatch::new(
  "glProgramEnvParameters4fvEXT",
)

///|
pub fn gl_program_env_parameters4fv_ext(
  target : UInt,
  index : UInt,
  count : Int,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, @pointer.Pointer[Float]) -> Unit] = d_glProgramEnvParameters4fvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(target, index, count, params_p)
  })
}

///|
let d_glProgramEnvParametersI4ivNV : Dispatch = Dispatch::new(
  "glProgramEnvParametersI4ivNV",
)

///|
pub fn gl_program_env_parameters_i4iv_nv(
  target : UInt,
  index : UInt,
  count : Int,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, @pointer.Pointer[Int]) -> Unit] = d_glProgramEnvParametersI4ivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(target, index, count, params_p)
  })
}

///|
let d_glProgramEnvParametersI4uivNV : Dispatch = Dispatch::new(
  "glProgramEnvParametersI4uivNV",
)

///|
pub fn gl_program_env_parameters_i4uiv_nv(
  target : UInt,
  index : UInt,
  count : Int,
  params : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, @pointer.Pointer[UInt]) -> Unit] = d_glProgramEnvParametersI4uivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(target, index, count, params_p)
  })
}

///|
let d_glProgramLocalParameter4dARB : Dispatch = Dispatch::new(
  "glProgramLocalParameter4dARB",
)

///|
pub fn gl_program_local_parameter4d_arb(
  target : UInt,
  index : UInt,
  x : Double,
  y : Double,
  z : Double,
  w : Double,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Double, Double, Double, Double) -> Unit] = d_glProgramLocalParameter4dARB
    .get()
    .unsafe_into()
  fp(target, index, x, y, z, w)
}

///|
let d_glProgramLocalParameter4dvARB : Dispatch = Dispatch::new(
  "glProgramLocalParameter4dvARB",
)

///|
pub fn gl_program_local_parameter4dv_arb(
  target : UInt,
  index : UInt,
  params : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Double]) -> Unit] = d_glProgramLocalParameter4dvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, index, params_p) })
}

///|
let d_glProgramLocalParameter4fARB : Dispatch = Dispatch::new(
  "glProgramLocalParameter4fARB",
)

///|
pub fn gl_program_local_parameter4f_arb(
  target : UInt,
  index : UInt,
  x : Float,
  y : Float,
  z : Float,
  w : Float,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Float, Float, Float, Float) -> Unit] = d_glProgramLocalParameter4fARB
    .get()
    .unsafe_into()
  fp(target, index, x, y, z, w)
}

///|
let d_glProgramLocalParameter4fvARB : Dispatch = Dispatch::new(
  "glProgramLocalParameter4fvARB",
)

///|
pub fn gl_program_local_parameter4fv_arb(
  target : UInt,
  index : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glProgramLocalParameter4fvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, index, params_p) })
}

///|
let d_glProgramLocalParameterI4iNV : Dispatch = Dispatch::new(
  "glProgramLocalParameterI4iNV",
)

///|
pub fn gl_program_local_parameter_i4i_nv(
  target : UInt,
  index : UInt,
  x : Int,
  y : Int,
  z : Int,
  w : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, Int, Int, Int) -> Unit] = d_glProgramLocalParameterI4iNV
    .get()
    .unsafe_into()
  fp(target, index, x, y, z, w)
}

///|
let d_glProgramLocalParameterI4ivNV : Dispatch = Dispatch::new(
  "glProgramLocalParameterI4ivNV",
)

///|
pub fn gl_program_local_parameter_i4iv_nv(
  target : UInt,
  index : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glProgramLocalParameterI4ivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, index, params_p) })
}

///|
let d_glProgramLocalParameterI4uiNV : Dispatch = Dispatch::new(
  "glProgramLocalParameterI4uiNV",
)

///|
pub fn gl_program_local_parameter_i4ui_nv(
  target : UInt,
  index : UInt,
  x : UInt,
  y : UInt,
  z : UInt,
  w : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, UInt, UInt) -> Unit] = d_glProgramLocalParameterI4uiNV
    .get()
    .unsafe_into()
  fp(target, index, x, y, z, w)
}

///|
let d_glProgramLocalParameterI4uivNV : Dispatch = Dispatch::new(
  "glProgramLocalParameterI4uivNV",
)

///|
pub fn gl_program_local_parameter_i4uiv_nv(
  target : UInt,
  index : UInt,
  params : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[UInt]) -> Unit] = d_glProgramLocalParameterI4uivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, index, params_p) })
}

///|
let d_glProgramLocalParameters4fvEXT : Dispatch = Dispatch::new(
  "glProgramLocalParameters4fvEXT",
)

///|
pub fn gl_program_local_parameters4fv_ext(
  target : UInt,
  index : UInt,
  count : Int,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, @pointer.Pointer[Float]) -> Unit] = d_glProgramLocalParameters4fvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(target, index, count, params_p)
  })
}

///|
let d_glProgramLocalParametersI4ivNV : Dispatch = Dispatch::new(
  "glProgramLocalParametersI4ivNV",
)

///|
pub fn gl_program_local_parameters_i4iv_nv(
  target : UInt,
  index : UInt,
  count : Int,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, @pointer.Pointer[Int]) -> Unit] = d_glProgramLocalParametersI4ivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(target, index, count, params_p)
  })
}

///|
let d_glProgramLocalParametersI4uivNV : Dispatch = Dispatch::new(
  "glProgramLocalParametersI4uivNV",
)

///|
pub fn gl_program_local_parameters_i4uiv_nv(
  target : UInt,
  index : UInt,
  count : Int,
  params : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, @pointer.Pointer[UInt]) -> Unit] = d_glProgramLocalParametersI4uivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(target, index, count, params_p)
  })
}

///|
let d_glProgramNamedParameter4dNV : Dispatch = Dispatch::new(
  "glProgramNamedParameter4dNV",
)

///|
pub fn gl_program_named_parameter4d_nv(
  id : UInt,
  len : Int,
  name : Bytes,
  x : Double,
  y : Double,
  z : Double,
  w : Double,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, @pointer.Pointer[Byte], Double, Double, Double, Double) -> Unit,
  ] = d_glProgramNamedParameter4dNV.get().unsafe_into()
  @pointer.borrow_bytes(name, fn(name_p) { fp(id, len, name_p, x, y, z, w) })
}

///|
let d_glProgramNamedParameter4dvNV : Dispatch = Dispatch::new(
  "glProgramNamedParameter4dvNV",
)

///|
pub fn gl_program_named_parameter4dv_nv(
  id : UInt,
  len : Int,
  name : Bytes,
  v : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, @pointer.Pointer[Byte], @pointer.Pointer[Double]) -> Unit,
  ] = d_glProgramNamedParameter4dvNV.get().unsafe_into()
  @pointer.borrow_bytes(name, fn(name_p) {
    @pointer.borrow_array(v, fn(v_p) { fp(id, len, name_p, v_p) })
  })
}

///|
let d_glProgramNamedParameter4fNV : Dispatch = Dispatch::new(
  "glProgramNamedParameter4fNV",
)

///|
pub fn gl_program_named_parameter4f_nv(
  id : UInt,
  len : Int,
  name : Bytes,
  x : Float,
  y : Float,
  z : Float,
  w : Float,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, @pointer.Pointer[Byte], Float, Float, Float, Float) -> Unit,
  ] = d_glProgramNamedParameter4fNV.get().unsafe_into()
  @pointer.borrow_bytes(name, fn(name_p) { fp(id, len, name_p, x, y, z, w) })
}

///|
let d_glProgramNamedParameter4fvNV : Dispatch = Dispatch::new(
  "glProgramNamedParameter4fvNV",
)

///|
pub fn gl_program_named_parameter4fv_nv(
  id : UInt,
  len : Int,
  name : Bytes,
  v : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, @pointer.Pointer[Byte], @pointer.Pointer[Float]) -> Unit,
  ] = d_glProgramNamedParameter4fvNV.get().unsafe_into()
  @pointer.borrow_bytes(name, fn(name_p) {
    @pointer.borrow_array(v, fn(v_p) { fp(id, len, name_p, v_p) })
  })
}

///|
let d_glProgramParameter4dNV : Dispatch = Dispatch::new(
  "glProgramParameter4dNV",
)

///|
pub fn gl_program_parameter4d_nv(
  target : UInt,
  index : UInt,
  x : Double,
  y : Double,
  z : Double,
  w : Double,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Double, Double, Double, Double) -> Unit] = d_glProgramParameter4dNV
    .get()
    .unsafe_into()
  fp(target, index, x, y, z, w)
}

///|
let d_glProgramParameter4dvNV : Dispatch = Dispatch::new(
  "glProgramParameter4dvNV",
)

///|
pub fn gl_program_parameter4dv_nv(
  target : UInt,
  index : UInt,
  v : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Double]) -> Unit] = d_glProgramParameter4dvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, index, v_p) })
}

///|
let d_glProgramParameter4fNV : Dispatch = Dispatch::new(
  "glProgramParameter4fNV",
)

///|
pub fn gl_program_parameter4f_nv(
  target : UInt,
  index : UInt,
  x : Float,
  y : Float,
  z : Float,
  w : Float,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Float, Float, Float, Float) -> Unit] = d_glProgramParameter4fNV
    .get()
    .unsafe_into()
  fp(target, index, x, y, z, w)
}

///|
let d_glProgramParameter4fvNV : Dispatch = Dispatch::new(
  "glProgramParameter4fvNV",
)

///|
pub fn gl_program_parameter4fv_nv(
  target : UInt,
  index : UInt,
  v : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glProgramParameter4fvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, index, v_p) })
}

///|
let d_glProgramParameteri : Dispatch = Dispatch::with_aliases(
  "glProgramParameteri",
  ["glProgramParameteriARB", "glProgramParameteriEXT"],
)

///|
pub fn gl_program_parameteri(program : UInt, pname : UInt, value : Int) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int) -> Unit] = d_glProgramParameteri
    .get()
    .unsafe_into()
  fp(program, pname, value)
}

///|
let d_glProgramParameteriARB : Dispatch = Dispatch::with_aliases(
  "glProgramParameteriARB",
  ["glProgramParameteri", "glProgramParameteriEXT"],
)

///|
pub fn gl_program_parameteri_arb(
  program : UInt,
  pname : UInt,
  value : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int) -> Unit] = d_glProgramParameteriARB
    .get()
    .unsafe_into()
  fp(program, pname, value)
}

///|
let d_glProgramParameteriEXT : Dispatch = Dispatch::with_aliases(
  "glProgramParameteriEXT",
  ["glProgramParameteri", "glProgramParameteriARB"],
)

///|
pub fn gl_program_parameteri_ext(
  program : UInt,
  pname : UInt,
  value : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int) -> Unit] = d_glProgramParameteriEXT
    .get()
    .unsafe_into()
  fp(program, pname, value)
}

///|
let d_glProgramParameters4dvNV : Dispatch = Dispatch::new(
  "glProgramParameters4dvNV",
)

///|
pub fn gl_program_parameters4dv_nv(
  target : UInt,
  index : UInt,
  count : Int,
  v : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, @pointer.Pointer[Double]) -> Unit] = d_glProgramParameters4dvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, index, count, v_p) })
}

///|
let d_glProgramParameters4fvNV : Dispatch = Dispatch::new(
  "glProgramParameters4fvNV",
)

///|
pub fn gl_program_parameters4fv_nv(
  target : UInt,
  index : UInt,
  count : Int,
  v : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, @pointer.Pointer[Float]) -> Unit] = d_glProgramParameters4fvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(target, index, count, v_p) })
}

///|
let d_glProgramPathFragmentInputGenNV : Dispatch = Dispatch::new(
  "glProgramPathFragmentInputGenNV",
)

///|
pub fn gl_program_path_fragment_input_gen_nv(
  program : UInt,
  location : Int,
  genMode : UInt,
  components : Int,
  coeffs : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int, @pointer.Pointer[Float]) -> Unit] = d_glProgramPathFragmentInputGenNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(coeffs, fn(coeffs_p) {
    fp(program, location, genMode, components, coeffs_p)
  })
}

///|
let d_glProgramStringARB : Dispatch = Dispatch::new("glProgramStringARB")

///|
pub fn gl_program_string_arb(
  target : UInt,
  format : UInt,
  len : Int,
  string : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, @pointer.Pointer[Byte]) -> Unit] = d_glProgramStringARB
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(string, fn(string_p) {
    fp(target, format, len, string_p)
  })
}

///|
let d_glProgramSubroutineParametersuivNV : Dispatch = Dispatch::new(
  "glProgramSubroutineParametersuivNV",
)

///|
pub fn gl_program_subroutine_parametersuiv_nv(
  target : UInt,
  count : Int,
  params : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[UInt]) -> Unit] = d_glProgramSubroutineParametersuivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, count, params_p) })
}

///|
let d_glProgramUniform1d : Dispatch = Dispatch::new("glProgramUniform1d")

///|
pub fn gl_program_uniform1d(
  program : UInt,
  location : Int,
  v0 : Double,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Double) -> Unit] = d_glProgramUniform1d
    .get()
    .unsafe_into()
  fp(program, location, v0)
}

///|
let d_glProgramUniform1dEXT : Dispatch = Dispatch::new("glProgramUniform1dEXT")

///|
pub fn gl_program_uniform1d_ext(
  program : UInt,
  location : Int,
  x : Double,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Double) -> Unit] = d_glProgramUniform1dEXT
    .get()
    .unsafe_into()
  fp(program, location, x)
}

///|
let d_glProgramUniform1dv : Dispatch = Dispatch::new("glProgramUniform1dv")

///|
pub fn gl_program_uniform1dv(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Double]) -> Unit] = d_glProgramUniform1dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform1dvEXT : Dispatch = Dispatch::new(
  "glProgramUniform1dvEXT",
)

///|
pub fn gl_program_uniform1dv_ext(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Double]) -> Unit] = d_glProgramUniform1dvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform1f : Dispatch = Dispatch::with_aliases(
  "glProgramUniform1f",
  ["glProgramUniform1fEXT"],
)

///|
pub fn gl_program_uniform1f(program : UInt, location : Int, v0 : Float) -> Unit {
  let fp : FuncRef[(UInt, Int, Float) -> Unit] = d_glProgramUniform1f
    .get()
    .unsafe_into()
  fp(program, location, v0)
}

///|
let d_glProgramUniform1fEXT : Dispatch = Dispatch::with_aliases(
  "glProgramUniform1fEXT",
  ["glProgramUniform1f"],
)

///|
pub fn gl_program_uniform1f_ext(
  program : UInt,
  location : Int,
  v0 : Float,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Float) -> Unit] = d_glProgramUniform1fEXT
    .get()
    .unsafe_into()
  fp(program, location, v0)
}

///|
let d_glProgramUniform1fv : Dispatch = Dispatch::with_aliases(
  "glProgramUniform1fv",
  ["glProgramUniform1fvEXT"],
)

///|
pub fn gl_program_uniform1fv(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Float]) -> Unit] = d_glProgramUniform1fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform1fvEXT : Dispatch = Dispatch::with_aliases(
  "glProgramUniform1fvEXT",
  ["glProgramUniform1fv"],
)

///|
pub fn gl_program_uniform1fv_ext(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Float]) -> Unit] = d_glProgramUniform1fvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform1i : Dispatch = Dispatch::with_aliases(
  "glProgramUniform1i",
  ["glProgramUniform1iEXT"],
)

///|
pub fn gl_program_uniform1i(program : UInt, location : Int, v0 : Int) -> Unit {
  let fp : FuncRef[(UInt, Int, Int) -> Unit] = d_glProgramUniform1i
    .get()
    .unsafe_into()
  fp(program, location, v0)
}

///|
let d_glProgramUniform1i64ARB : Dispatch = Dispatch::new(
  "glProgramUniform1i64ARB",
)

///|
pub fn gl_program_uniform1i64_arb(
  program : UInt,
  location : Int,
  x : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int64) -> Unit] = d_glProgramUniform1i64ARB
    .get()
    .unsafe_into()
  fp(program, location, x)
}

///|
let d_glProgramUniform1i64NV : Dispatch = Dispatch::new(
  "glProgramUniform1i64NV",
)

///|
pub fn gl_program_uniform1i64_nv(
  program : UInt,
  location : Int,
  x : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int64) -> Unit] = d_glProgramUniform1i64NV
    .get()
    .unsafe_into()
  fp(program, location, x)
}

///|
let d_glProgramUniform1i64vARB : Dispatch = Dispatch::new(
  "glProgramUniform1i64vARB",
)

///|
pub fn gl_program_uniform1i64v_arb(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[Int64],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Int64]) -> Unit] = d_glProgramUniform1i64vARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform1i64vNV : Dispatch = Dispatch::new(
  "glProgramUniform1i64vNV",
)

///|
pub fn gl_program_uniform1i64v_nv(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[Int64],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Int64]) -> Unit] = d_glProgramUniform1i64vNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform1iEXT : Dispatch = Dispatch::with_aliases(
  "glProgramUniform1iEXT",
  ["glProgramUniform1i"],
)

///|
pub fn gl_program_uniform1i_ext(
  program : UInt,
  location : Int,
  v0 : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int) -> Unit] = d_glProgramUniform1iEXT
    .get()
    .unsafe_into()
  fp(program, location, v0)
}

///|
let d_glProgramUniform1iv : Dispatch = Dispatch::with_aliases(
  "glProgramUniform1iv",
  ["glProgramUniform1ivEXT"],
)

///|
pub fn gl_program_uniform1iv(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Int]) -> Unit] = d_glProgramUniform1iv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform1ivEXT : Dispatch = Dispatch::with_aliases(
  "glProgramUniform1ivEXT",
  ["glProgramUniform1iv"],
)

///|
pub fn gl_program_uniform1iv_ext(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Int]) -> Unit] = d_glProgramUniform1ivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform1ui : Dispatch = Dispatch::with_aliases(
  "glProgramUniform1ui",
  ["glProgramUniform1uiEXT"],
)

///|
pub fn gl_program_uniform1ui(program : UInt, location : Int, v0 : UInt) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt) -> Unit] = d_glProgramUniform1ui
    .get()
    .unsafe_into()
  fp(program, location, v0)
}

///|
let d_glProgramUniform1ui64ARB : Dispatch = Dispatch::new(
  "glProgramUniform1ui64ARB",
)

///|
pub fn gl_program_uniform1ui64_arb(
  program : UInt,
  location : Int,
  x : UInt64,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt64) -> Unit] = d_glProgramUniform1ui64ARB
    .get()
    .unsafe_into()
  fp(program, location, x)
}

///|
let d_glProgramUniform1ui64NV : Dispatch = Dispatch::new(
  "glProgramUniform1ui64NV",
)

///|
pub fn gl_program_uniform1ui64_nv(
  program : UInt,
  location : Int,
  x : UInt64,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt64) -> Unit] = d_glProgramUniform1ui64NV
    .get()
    .unsafe_into()
  fp(program, location, x)
}

///|
let d_glProgramUniform1ui64vARB : Dispatch = Dispatch::new(
  "glProgramUniform1ui64vARB",
)

///|
pub fn gl_program_uniform1ui64v_arb(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[UInt64]) -> Unit] = d_glProgramUniform1ui64vARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform1ui64vNV : Dispatch = Dispatch::new(
  "glProgramUniform1ui64vNV",
)

///|
pub fn gl_program_uniform1ui64v_nv(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[UInt64]) -> Unit] = d_glProgramUniform1ui64vNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform1uiEXT : Dispatch = Dispatch::with_aliases(
  "glProgramUniform1uiEXT",
  ["glProgramUniform1ui"],
)

///|
pub fn gl_program_uniform1ui_ext(
  program : UInt,
  location : Int,
  v0 : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt) -> Unit] = d_glProgramUniform1uiEXT
    .get()
    .unsafe_into()
  fp(program, location, v0)
}

///|
let d_glProgramUniform1uiv : Dispatch = Dispatch::with_aliases(
  "glProgramUniform1uiv",
  ["glProgramUniform1uivEXT"],
)

///|
pub fn gl_program_uniform1uiv(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[UInt]) -> Unit] = d_glProgramUniform1uiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform1uivEXT : Dispatch = Dispatch::with_aliases(
  "glProgramUniform1uivEXT",
  ["glProgramUniform1uiv"],
)

///|
pub fn gl_program_uniform1uiv_ext(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[UInt]) -> Unit] = d_glProgramUniform1uivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform2d : Dispatch = Dispatch::new("glProgramUniform2d")

///|
pub fn gl_program_uniform2d(
  program : UInt,
  location : Int,
  v0 : Double,
  v1 : Double,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Double, Double) -> Unit] = d_glProgramUniform2d
    .get()
    .unsafe_into()
  fp(program, location, v0, v1)
}

///|
let d_glProgramUniform2dEXT : Dispatch = Dispatch::new("glProgramUniform2dEXT")

///|
pub fn gl_program_uniform2d_ext(
  program : UInt,
  location : Int,
  x : Double,
  y : Double,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Double, Double) -> Unit] = d_glProgramUniform2dEXT
    .get()
    .unsafe_into()
  fp(program, location, x, y)
}

///|
let d_glProgramUniform2dv : Dispatch = Dispatch::new("glProgramUniform2dv")

///|
pub fn gl_program_uniform2dv(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Double]) -> Unit] = d_glProgramUniform2dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform2dvEXT : Dispatch = Dispatch::new(
  "glProgramUniform2dvEXT",
)

///|
pub fn gl_program_uniform2dv_ext(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Double]) -> Unit] = d_glProgramUniform2dvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform2f : Dispatch = Dispatch::with_aliases(
  "glProgramUniform2f",
  ["glProgramUniform2fEXT"],
)

///|
pub fn gl_program_uniform2f(
  program : UInt,
  location : Int,
  v0 : Float,
  v1 : Float,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Float, Float) -> Unit] = d_glProgramUniform2f
    .get()
    .unsafe_into()
  fp(program, location, v0, v1)
}

///|
let d_glProgramUniform2fEXT : Dispatch = Dispatch::with_aliases(
  "glProgramUniform2fEXT",
  ["glProgramUniform2f"],
)

///|
pub fn gl_program_uniform2f_ext(
  program : UInt,
  location : Int,
  v0 : Float,
  v1 : Float,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Float, Float) -> Unit] = d_glProgramUniform2fEXT
    .get()
    .unsafe_into()
  fp(program, location, v0, v1)
}

///|
let d_glProgramUniform2fv : Dispatch = Dispatch::with_aliases(
  "glProgramUniform2fv",
  ["glProgramUniform2fvEXT"],
)

///|
pub fn gl_program_uniform2fv(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Float]) -> Unit] = d_glProgramUniform2fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform2fvEXT : Dispatch = Dispatch::with_aliases(
  "glProgramUniform2fvEXT",
  ["glProgramUniform2fv"],
)

///|
pub fn gl_program_uniform2fv_ext(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Float]) -> Unit] = d_glProgramUniform2fvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform2i : Dispatch = Dispatch::with_aliases(
  "glProgramUniform2i",
  ["glProgramUniform2iEXT"],
)

///|
pub fn gl_program_uniform2i(
  program : UInt,
  location : Int,
  v0 : Int,
  v1 : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int) -> Unit] = d_glProgramUniform2i
    .get()
    .unsafe_into()
  fp(program, location, v0, v1)
}

///|
let d_glProgramUniform2i64ARB : Dispatch = Dispatch::new(
  "glProgramUniform2i64ARB",
)

///|
pub fn gl_program_uniform2i64_arb(
  program : UInt,
  location : Int,
  x : Int64,
  y : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int64, Int64) -> Unit] = d_glProgramUniform2i64ARB
    .get()
    .unsafe_into()
  fp(program, location, x, y)
}

///|
let d_glProgramUniform2i64NV : Dispatch = Dispatch::new(
  "glProgramUniform2i64NV",
)

///|
pub fn gl_program_uniform2i64_nv(
  program : UInt,
  location : Int,
  x : Int64,
  y : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int64, Int64) -> Unit] = d_glProgramUniform2i64NV
    .get()
    .unsafe_into()
  fp(program, location, x, y)
}

///|
let d_glProgramUniform2i64vARB : Dispatch = Dispatch::new(
  "glProgramUniform2i64vARB",
)

///|
pub fn gl_program_uniform2i64v_arb(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[Int64],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Int64]) -> Unit] = d_glProgramUniform2i64vARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform2i64vNV : Dispatch = Dispatch::new(
  "glProgramUniform2i64vNV",
)

///|
pub fn gl_program_uniform2i64v_nv(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[Int64],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Int64]) -> Unit] = d_glProgramUniform2i64vNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform2iEXT : Dispatch = Dispatch::with_aliases(
  "glProgramUniform2iEXT",
  ["glProgramUniform2i"],
)

///|
pub fn gl_program_uniform2i_ext(
  program : UInt,
  location : Int,
  v0 : Int,
  v1 : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int) -> Unit] = d_glProgramUniform2iEXT
    .get()
    .unsafe_into()
  fp(program, location, v0, v1)
}

///|
let d_glProgramUniform2iv : Dispatch = Dispatch::with_aliases(
  "glProgramUniform2iv",
  ["glProgramUniform2ivEXT"],
)

///|
pub fn gl_program_uniform2iv(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Int]) -> Unit] = d_glProgramUniform2iv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform2ivEXT : Dispatch = Dispatch::with_aliases(
  "glProgramUniform2ivEXT",
  ["glProgramUniform2iv"],
)

///|
pub fn gl_program_uniform2iv_ext(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Int]) -> Unit] = d_glProgramUniform2ivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform2ui : Dispatch = Dispatch::with_aliases(
  "glProgramUniform2ui",
  ["glProgramUniform2uiEXT"],
)

///|
pub fn gl_program_uniform2ui(
  program : UInt,
  location : Int,
  v0 : UInt,
  v1 : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, UInt) -> Unit] = d_glProgramUniform2ui
    .get()
    .unsafe_into()
  fp(program, location, v0, v1)
}

///|
let d_glProgramUniform2ui64ARB : Dispatch = Dispatch::new(
  "glProgramUniform2ui64ARB",
)

///|
pub fn gl_program_uniform2ui64_arb(
  program : UInt,
  location : Int,
  x : UInt64,
  y : UInt64,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt64, UInt64) -> Unit] = d_glProgramUniform2ui64ARB
    .get()
    .unsafe_into()
  fp(program, location, x, y)
}

///|
let d_glProgramUniform2ui64NV : Dispatch = Dispatch::new(
  "glProgramUniform2ui64NV",
)

///|
pub fn gl_program_uniform2ui64_nv(
  program : UInt,
  location : Int,
  x : UInt64,
  y : UInt64,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt64, UInt64) -> Unit] = d_glProgramUniform2ui64NV
    .get()
    .unsafe_into()
  fp(program, location, x, y)
}

///|
let d_glProgramUniform2ui64vARB : Dispatch = Dispatch::new(
  "glProgramUniform2ui64vARB",
)

///|
pub fn gl_program_uniform2ui64v_arb(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[UInt64]) -> Unit] = d_glProgramUniform2ui64vARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform2ui64vNV : Dispatch = Dispatch::new(
  "glProgramUniform2ui64vNV",
)

///|
pub fn gl_program_uniform2ui64v_nv(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[UInt64]) -> Unit] = d_glProgramUniform2ui64vNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform2uiEXT : Dispatch = Dispatch::with_aliases(
  "glProgramUniform2uiEXT",
  ["glProgramUniform2ui"],
)

///|
pub fn gl_program_uniform2ui_ext(
  program : UInt,
  location : Int,
  v0 : UInt,
  v1 : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, UInt) -> Unit] = d_glProgramUniform2uiEXT
    .get()
    .unsafe_into()
  fp(program, location, v0, v1)
}

///|
let d_glProgramUniform2uiv : Dispatch = Dispatch::with_aliases(
  "glProgramUniform2uiv",
  ["glProgramUniform2uivEXT"],
)

///|
pub fn gl_program_uniform2uiv(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[UInt]) -> Unit] = d_glProgramUniform2uiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform2uivEXT : Dispatch = Dispatch::with_aliases(
  "glProgramUniform2uivEXT",
  ["glProgramUniform2uiv"],
)

///|
pub fn gl_program_uniform2uiv_ext(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[UInt]) -> Unit] = d_glProgramUniform2uivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform3d : Dispatch = Dispatch::new("glProgramUniform3d")

///|
pub fn gl_program_uniform3d(
  program : UInt,
  location : Int,
  v0 : Double,
  v1 : Double,
  v2 : Double,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Double, Double, Double) -> Unit] = d_glProgramUniform3d
    .get()
    .unsafe_into()
  fp(program, location, v0, v1, v2)
}

///|
let d_glProgramUniform3dEXT : Dispatch = Dispatch::new("glProgramUniform3dEXT")

///|
pub fn gl_program_uniform3d_ext(
  program : UInt,
  location : Int,
  x : Double,
  y : Double,
  z : Double,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Double, Double, Double) -> Unit] = d_glProgramUniform3dEXT
    .get()
    .unsafe_into()
  fp(program, location, x, y, z)
}

///|
let d_glProgramUniform3dv : Dispatch = Dispatch::new("glProgramUniform3dv")

///|
pub fn gl_program_uniform3dv(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Double]) -> Unit] = d_glProgramUniform3dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform3dvEXT : Dispatch = Dispatch::new(
  "glProgramUniform3dvEXT",
)

///|
pub fn gl_program_uniform3dv_ext(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Double]) -> Unit] = d_glProgramUniform3dvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform3f : Dispatch = Dispatch::with_aliases(
  "glProgramUniform3f",
  ["glProgramUniform3fEXT"],
)

///|
pub fn gl_program_uniform3f(
  program : UInt,
  location : Int,
  v0 : Float,
  v1 : Float,
  v2 : Float,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Float, Float, Float) -> Unit] = d_glProgramUniform3f
    .get()
    .unsafe_into()
  fp(program, location, v0, v1, v2)
}

///|
let d_glProgramUniform3fEXT : Dispatch = Dispatch::with_aliases(
  "glProgramUniform3fEXT",
  ["glProgramUniform3f"],
)

///|
pub fn gl_program_uniform3f_ext(
  program : UInt,
  location : Int,
  v0 : Float,
  v1 : Float,
  v2 : Float,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Float, Float, Float) -> Unit] = d_glProgramUniform3fEXT
    .get()
    .unsafe_into()
  fp(program, location, v0, v1, v2)
}

///|
let d_glProgramUniform3fv : Dispatch = Dispatch::with_aliases(
  "glProgramUniform3fv",
  ["glProgramUniform3fvEXT"],
)

///|
pub fn gl_program_uniform3fv(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Float]) -> Unit] = d_glProgramUniform3fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform3fvEXT : Dispatch = Dispatch::with_aliases(
  "glProgramUniform3fvEXT",
  ["glProgramUniform3fv"],
)

///|
pub fn gl_program_uniform3fv_ext(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Float]) -> Unit] = d_glProgramUniform3fvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform3i : Dispatch = Dispatch::with_aliases(
  "glProgramUniform3i",
  ["glProgramUniform3iEXT"],
)

///|
pub fn gl_program_uniform3i(
  program : UInt,
  location : Int,
  v0 : Int,
  v1 : Int,
  v2 : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int) -> Unit] = d_glProgramUniform3i
    .get()
    .unsafe_into()
  fp(program, location, v0, v1, v2)
}

///|
let d_glProgramUniform3i64ARB : Dispatch = Dispatch::new(
  "glProgramUniform3i64ARB",
)

///|
pub fn gl_program_uniform3i64_arb(
  program : UInt,
  location : Int,
  x : Int64,
  y : Int64,
  z : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int64, Int64, Int64) -> Unit] = d_glProgramUniform3i64ARB
    .get()
    .unsafe_into()
  fp(program, location, x, y, z)
}

///|
let d_glProgramUniform3i64NV : Dispatch = Dispatch::new(
  "glProgramUniform3i64NV",
)

///|
pub fn gl_program_uniform3i64_nv(
  program : UInt,
  location : Int,
  x : Int64,
  y : Int64,
  z : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int64, Int64, Int64) -> Unit] = d_glProgramUniform3i64NV
    .get()
    .unsafe_into()
  fp(program, location, x, y, z)
}

///|
let d_glProgramUniform3i64vARB : Dispatch = Dispatch::new(
  "glProgramUniform3i64vARB",
)

///|
pub fn gl_program_uniform3i64v_arb(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[Int64],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Int64]) -> Unit] = d_glProgramUniform3i64vARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform3i64vNV : Dispatch = Dispatch::new(
  "glProgramUniform3i64vNV",
)

///|
pub fn gl_program_uniform3i64v_nv(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[Int64],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Int64]) -> Unit] = d_glProgramUniform3i64vNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform3iEXT : Dispatch = Dispatch::with_aliases(
  "glProgramUniform3iEXT",
  ["glProgramUniform3i"],
)

///|
pub fn gl_program_uniform3i_ext(
  program : UInt,
  location : Int,
  v0 : Int,
  v1 : Int,
  v2 : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int) -> Unit] = d_glProgramUniform3iEXT
    .get()
    .unsafe_into()
  fp(program, location, v0, v1, v2)
}

///|
let d_glProgramUniform3iv : Dispatch = Dispatch::with_aliases(
  "glProgramUniform3iv",
  ["glProgramUniform3ivEXT"],
)

///|
pub fn gl_program_uniform3iv(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Int]) -> Unit] = d_glProgramUniform3iv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform3ivEXT : Dispatch = Dispatch::with_aliases(
  "glProgramUniform3ivEXT",
  ["glProgramUniform3iv"],
)

///|
pub fn gl_program_uniform3iv_ext(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Int]) -> Unit] = d_glProgramUniform3ivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform3ui : Dispatch = Dispatch::with_aliases(
  "glProgramUniform3ui",
  ["glProgramUniform3uiEXT"],
)

///|
pub fn gl_program_uniform3ui(
  program : UInt,
  location : Int,
  v0 : UInt,
  v1 : UInt,
  v2 : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, UInt, UInt) -> Unit] = d_glProgramUniform3ui
    .get()
    .unsafe_into()
  fp(program, location, v0, v1, v2)
}

///|
let d_glProgramUniform3ui64ARB : Dispatch = Dispatch::new(
  "glProgramUniform3ui64ARB",
)

///|
pub fn gl_program_uniform3ui64_arb(
  program : UInt,
  location : Int,
  x : UInt64,
  y : UInt64,
  z : UInt64,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt64, UInt64, UInt64) -> Unit] = d_glProgramUniform3ui64ARB
    .get()
    .unsafe_into()
  fp(program, location, x, y, z)
}

///|
let d_glProgramUniform3ui64NV : Dispatch = Dispatch::new(
  "glProgramUniform3ui64NV",
)

///|
pub fn gl_program_uniform3ui64_nv(
  program : UInt,
  location : Int,
  x : UInt64,
  y : UInt64,
  z : UInt64,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt64, UInt64, UInt64) -> Unit] = d_glProgramUniform3ui64NV
    .get()
    .unsafe_into()
  fp(program, location, x, y, z)
}

///|
let d_glProgramUniform3ui64vARB : Dispatch = Dispatch::new(
  "glProgramUniform3ui64vARB",
)

///|
pub fn gl_program_uniform3ui64v_arb(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[UInt64]) -> Unit] = d_glProgramUniform3ui64vARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform3ui64vNV : Dispatch = Dispatch::new(
  "glProgramUniform3ui64vNV",
)

///|
pub fn gl_program_uniform3ui64v_nv(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[UInt64]) -> Unit] = d_glProgramUniform3ui64vNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform3uiEXT : Dispatch = Dispatch::with_aliases(
  "glProgramUniform3uiEXT",
  ["glProgramUniform3ui"],
)

///|
pub fn gl_program_uniform3ui_ext(
  program : UInt,
  location : Int,
  v0 : UInt,
  v1 : UInt,
  v2 : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, UInt, UInt) -> Unit] = d_glProgramUniform3uiEXT
    .get()
    .unsafe_into()
  fp(program, location, v0, v1, v2)
}

///|
let d_glProgramUniform3uiv : Dispatch = Dispatch::with_aliases(
  "glProgramUniform3uiv",
  ["glProgramUniform3uivEXT"],
)

///|
pub fn gl_program_uniform3uiv(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[UInt]) -> Unit] = d_glProgramUniform3uiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform3uivEXT : Dispatch = Dispatch::with_aliases(
  "glProgramUniform3uivEXT",
  ["glProgramUniform3uiv"],
)

///|
pub fn gl_program_uniform3uiv_ext(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[UInt]) -> Unit] = d_glProgramUniform3uivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform4d : Dispatch = Dispatch::new("glProgramUniform4d")

///|
pub fn gl_program_uniform4d(
  program : UInt,
  location : Int,
  v0 : Double,
  v1 : Double,
  v2 : Double,
  v3 : Double,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Double, Double, Double, Double) -> Unit] = d_glProgramUniform4d
    .get()
    .unsafe_into()
  fp(program, location, v0, v1, v2, v3)
}

///|
let d_glProgramUniform4dEXT : Dispatch = Dispatch::new("glProgramUniform4dEXT")

///|
pub fn gl_program_uniform4d_ext(
  program : UInt,
  location : Int,
  x : Double,
  y : Double,
  z : Double,
  w : Double,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Double, Double, Double, Double) -> Unit] = d_glProgramUniform4dEXT
    .get()
    .unsafe_into()
  fp(program, location, x, y, z, w)
}

///|
let d_glProgramUniform4dv : Dispatch = Dispatch::new("glProgramUniform4dv")

///|
pub fn gl_program_uniform4dv(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Double]) -> Unit] = d_glProgramUniform4dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform4dvEXT : Dispatch = Dispatch::new(
  "glProgramUniform4dvEXT",
)

///|
pub fn gl_program_uniform4dv_ext(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Double]) -> Unit] = d_glProgramUniform4dvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform4f : Dispatch = Dispatch::with_aliases(
  "glProgramUniform4f",
  ["glProgramUniform4fEXT"],
)

///|
pub fn gl_program_uniform4f(
  program : UInt,
  location : Int,
  v0 : Float,
  v1 : Float,
  v2 : Float,
  v3 : Float,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Float, Float, Float, Float) -> Unit] = d_glProgramUniform4f
    .get()
    .unsafe_into()
  fp(program, location, v0, v1, v2, v3)
}

///|
let d_glProgramUniform4fEXT : Dispatch = Dispatch::with_aliases(
  "glProgramUniform4fEXT",
  ["glProgramUniform4f"],
)

///|
pub fn gl_program_uniform4f_ext(
  program : UInt,
  location : Int,
  v0 : Float,
  v1 : Float,
  v2 : Float,
  v3 : Float,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Float, Float, Float, Float) -> Unit] = d_glProgramUniform4fEXT
    .get()
    .unsafe_into()
  fp(program, location, v0, v1, v2, v3)
}

///|
let d_glProgramUniform4fv : Dispatch = Dispatch::with_aliases(
  "glProgramUniform4fv",
  ["glProgramUniform4fvEXT"],
)

///|
pub fn gl_program_uniform4fv(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Float]) -> Unit] = d_glProgramUniform4fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform4fvEXT : Dispatch = Dispatch::with_aliases(
  "glProgramUniform4fvEXT",
  ["glProgramUniform4fv"],
)

///|
pub fn gl_program_uniform4fv_ext(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Float]) -> Unit] = d_glProgramUniform4fvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform4i : Dispatch = Dispatch::with_aliases(
  "glProgramUniform4i",
  ["glProgramUniform4iEXT"],
)

///|
pub fn gl_program_uniform4i(
  program : UInt,
  location : Int,
  v0 : Int,
  v1 : Int,
  v2 : Int,
  v3 : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int, Int) -> Unit] = d_glProgramUniform4i
    .get()
    .unsafe_into()
  fp(program, location, v0, v1, v2, v3)
}

///|
let d_glProgramUniform4i64ARB : Dispatch = Dispatch::new(
  "glProgramUniform4i64ARB",
)

///|
pub fn gl_program_uniform4i64_arb(
  program : UInt,
  location : Int,
  x : Int64,
  y : Int64,
  z : Int64,
  w : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int64, Int64, Int64, Int64) -> Unit] = d_glProgramUniform4i64ARB
    .get()
    .unsafe_into()
  fp(program, location, x, y, z, w)
}

///|
let d_glProgramUniform4i64NV : Dispatch = Dispatch::new(
  "glProgramUniform4i64NV",
)

///|
pub fn gl_program_uniform4i64_nv(
  program : UInt,
  location : Int,
  x : Int64,
  y : Int64,
  z : Int64,
  w : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int64, Int64, Int64, Int64) -> Unit] = d_glProgramUniform4i64NV
    .get()
    .unsafe_into()
  fp(program, location, x, y, z, w)
}

///|
let d_glProgramUniform4i64vARB : Dispatch = Dispatch::new(
  "glProgramUniform4i64vARB",
)

///|
pub fn gl_program_uniform4i64v_arb(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[Int64],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Int64]) -> Unit] = d_glProgramUniform4i64vARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform4i64vNV : Dispatch = Dispatch::new(
  "glProgramUniform4i64vNV",
)

///|
pub fn gl_program_uniform4i64v_nv(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[Int64],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Int64]) -> Unit] = d_glProgramUniform4i64vNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform4iEXT : Dispatch = Dispatch::with_aliases(
  "glProgramUniform4iEXT",
  ["glProgramUniform4i"],
)

///|
pub fn gl_program_uniform4i_ext(
  program : UInt,
  location : Int,
  v0 : Int,
  v1 : Int,
  v2 : Int,
  v3 : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int, Int) -> Unit] = d_glProgramUniform4iEXT
    .get()
    .unsafe_into()
  fp(program, location, v0, v1, v2, v3)
}

///|
let d_glProgramUniform4iv : Dispatch = Dispatch::with_aliases(
  "glProgramUniform4iv",
  ["glProgramUniform4ivEXT"],
)

///|
pub fn gl_program_uniform4iv(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Int]) -> Unit] = d_glProgramUniform4iv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform4ivEXT : Dispatch = Dispatch::with_aliases(
  "glProgramUniform4ivEXT",
  ["glProgramUniform4iv"],
)

///|
pub fn gl_program_uniform4iv_ext(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[Int]) -> Unit] = d_glProgramUniform4ivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform4ui : Dispatch = Dispatch::with_aliases(
  "glProgramUniform4ui",
  ["glProgramUniform4uiEXT"],
)

///|
pub fn gl_program_uniform4ui(
  program : UInt,
  location : Int,
  v0 : UInt,
  v1 : UInt,
  v2 : UInt,
  v3 : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, UInt, UInt, UInt) -> Unit] = d_glProgramUniform4ui
    .get()
    .unsafe_into()
  fp(program, location, v0, v1, v2, v3)
}

///|
let d_glProgramUniform4ui64ARB : Dispatch = Dispatch::new(
  "glProgramUniform4ui64ARB",
)

///|
pub fn gl_program_uniform4ui64_arb(
  program : UInt,
  location : Int,
  x : UInt64,
  y : UInt64,
  z : UInt64,
  w : UInt64,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt64, UInt64, UInt64, UInt64) -> Unit] = d_glProgramUniform4ui64ARB
    .get()
    .unsafe_into()
  fp(program, location, x, y, z, w)
}

///|
let d_glProgramUniform4ui64NV : Dispatch = Dispatch::new(
  "glProgramUniform4ui64NV",
)

///|
pub fn gl_program_uniform4ui64_nv(
  program : UInt,
  location : Int,
  x : UInt64,
  y : UInt64,
  z : UInt64,
  w : UInt64,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt64, UInt64, UInt64, UInt64) -> Unit] = d_glProgramUniform4ui64NV
    .get()
    .unsafe_into()
  fp(program, location, x, y, z, w)
}

///|
let d_glProgramUniform4ui64vARB : Dispatch = Dispatch::new(
  "glProgramUniform4ui64vARB",
)

///|
pub fn gl_program_uniform4ui64v_arb(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[UInt64]) -> Unit] = d_glProgramUniform4ui64vARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform4ui64vNV : Dispatch = Dispatch::new(
  "glProgramUniform4ui64vNV",
)

///|
pub fn gl_program_uniform4ui64v_nv(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[UInt64]) -> Unit] = d_glProgramUniform4ui64vNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform4uiEXT : Dispatch = Dispatch::with_aliases(
  "glProgramUniform4uiEXT",
  ["glProgramUniform4ui"],
)

///|
pub fn gl_program_uniform4ui_ext(
  program : UInt,
  location : Int,
  v0 : UInt,
  v1 : UInt,
  v2 : UInt,
  v3 : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, UInt, UInt, UInt) -> Unit] = d_glProgramUniform4uiEXT
    .get()
    .unsafe_into()
  fp(program, location, v0, v1, v2, v3)
}

///|
let d_glProgramUniform4uiv : Dispatch = Dispatch::with_aliases(
  "glProgramUniform4uiv",
  ["glProgramUniform4uivEXT"],
)

///|
pub fn gl_program_uniform4uiv(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[UInt]) -> Unit] = d_glProgramUniform4uiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniform4uivEXT : Dispatch = Dispatch::with_aliases(
  "glProgramUniform4uivEXT",
  ["glProgramUniform4uiv"],
)

///|
pub fn gl_program_uniform4uiv_ext(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[UInt]) -> Unit] = d_glProgramUniform4uivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramUniformHandleui64ARB : Dispatch = Dispatch::with_aliases(
  "glProgramUniformHandleui64ARB",
  ["glProgramUniformHandleui64IMG"],
)

///|
pub fn gl_program_uniform_handleui64_arb(
  program : UInt,
  location : Int,
  value : UInt64,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt64) -> Unit] = d_glProgramUniformHandleui64ARB
    .get()
    .unsafe_into()
  fp(program, location, value)
}

///|
let d_glProgramUniformHandleui64IMG : Dispatch = Dispatch::with_aliases(
  "glProgramUniformHandleui64IMG",
  ["glProgramUniformHandleui64ARB"],
)

///|
pub fn gl_program_uniform_handleui64_img(
  program : UInt,
  location : Int,
  value : UInt64,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt64) -> Unit] = d_glProgramUniformHandleui64IMG
    .get()
    .unsafe_into()
  fp(program, location, value)
}

///|
let d_glProgramUniformHandleui64NV : Dispatch = Dispatch::new(
  "glProgramUniformHandleui64NV",
)

///|
pub fn gl_program_uniform_handleui64_nv(
  program : UInt,
  location : Int,
  value : UInt64,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt64) -> Unit] = d_glProgramUniformHandleui64NV
    .get()
    .unsafe_into()
  fp(program, location, value)
}

///|
let d_glProgramUniformHandleui64vARB : Dispatch = Dispatch::with_aliases(
  "glProgramUniformHandleui64vARB",
  ["glProgramUniformHandleui64vIMG"],
)

///|
pub fn gl_program_uniform_handleui64v_arb(
  program : UInt,
  location : Int,
  count : Int,
  values : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[UInt64]) -> Unit] = d_glProgramUniformHandleui64vARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(values, fn(values_p) {
    fp(program, location, count, values_p)
  })
}

///|
let d_glProgramUniformHandleui64vIMG : Dispatch = Dispatch::with_aliases(
  "glProgramUniformHandleui64vIMG",
  ["glProgramUniformHandleui64vARB"],
)

///|
pub fn gl_program_uniform_handleui64v_img(
  program : UInt,
  location : Int,
  count : Int,
  values : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[UInt64]) -> Unit] = d_glProgramUniformHandleui64vIMG
    .get()
    .unsafe_into()
  @pointer.borrow_array(values, fn(values_p) {
    fp(program, location, count, values_p)
  })
}

///|
let d_glProgramUniformHandleui64vNV : Dispatch = Dispatch::new(
  "glProgramUniformHandleui64vNV",
)

///|
pub fn gl_program_uniform_handleui64v_nv(
  program : UInt,
  location : Int,
  count : Int,
  values : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[UInt64]) -> Unit] = d_glProgramUniformHandleui64vNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(values, fn(values_p) {
    fp(program, location, count, values_p)
  })
}

///|
let d_glProgramUniformMatrix2dv : Dispatch = Dispatch::new(
  "glProgramUniformMatrix2dv",
)

///|
pub fn gl_program_uniform_matrix2dv(
  program : UInt,
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Bool, @pointer.Pointer[Double]) -> Unit] = d_glProgramUniformMatrix2dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, transpose, value_p)
  })
}

///|
let d_glProgramUniformMatrix2dvEXT : Dispatch = Dispatch::new(
  "glProgramUniformMatrix2dvEXT",
)

///|
pub fn gl_program_uniform_matrix2dv_ext(
  program : UInt,
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Bool, @pointer.Pointer[Double]) -> Unit] = d_glProgramUniformMatrix2dvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, transpose, value_p)
  })
}

///|
let d_glProgramUniformMatrix2fv : Dispatch = Dispatch::with_aliases(
  "glProgramUniformMatrix2fv",
  ["glProgramUniformMatrix2fvEXT"],
)

///|
pub fn gl_program_uniform_matrix2fv(
  program : UInt,
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Bool, @pointer.Pointer[Float]) -> Unit] = d_glProgramUniformMatrix2fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, transpose, value_p)
  })
}

///|
let d_glProgramUniformMatrix2fvEXT : Dispatch = Dispatch::with_aliases(
  "glProgramUniformMatrix2fvEXT",
  ["glProgramUniformMatrix2fv"],
)

///|
pub fn gl_program_uniform_matrix2fv_ext(
  program : UInt,
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Bool, @pointer.Pointer[Float]) -> Unit] = d_glProgramUniformMatrix2fvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, transpose, value_p)
  })
}

///|
let d_glProgramUniformMatrix2x3dv : Dispatch = Dispatch::new(
  "glProgramUniformMatrix2x3dv",
)

///|
pub fn gl_program_uniform_matrix2x3dv(
  program : UInt,
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Bool, @pointer.Pointer[Double]) -> Unit] = d_glProgramUniformMatrix2x3dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, transpose, value_p)
  })
}

///|
let d_glProgramUniformMatrix2x3dvEXT : Dispatch = Dispatch::new(
  "glProgramUniformMatrix2x3dvEXT",
)

///|
pub fn gl_program_uniform_matrix2x3dv_ext(
  program : UInt,
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Bool, @pointer.Pointer[Double]) -> Unit] = d_glProgramUniformMatrix2x3dvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, transpose, value_p)
  })
}

///|
let d_glProgramUniformMatrix2x3fv : Dispatch = Dispatch::with_aliases(
  "glProgramUniformMatrix2x3fv",
  ["glProgramUniformMatrix2x3fvEXT"],
)

///|
pub fn gl_program_uniform_matrix2x3fv(
  program : UInt,
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Bool, @pointer.Pointer[Float]) -> Unit] = d_glProgramUniformMatrix2x3fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, transpose, value_p)
  })
}

///|
let d_glProgramUniformMatrix2x3fvEXT : Dispatch = Dispatch::with_aliases(
  "glProgramUniformMatrix2x3fvEXT",
  ["glProgramUniformMatrix2x3fv"],
)

///|
pub fn gl_program_uniform_matrix2x3fv_ext(
  program : UInt,
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Bool, @pointer.Pointer[Float]) -> Unit] = d_glProgramUniformMatrix2x3fvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, transpose, value_p)
  })
}

///|
let d_glProgramUniformMatrix2x4dv : Dispatch = Dispatch::new(
  "glProgramUniformMatrix2x4dv",
)

///|
pub fn gl_program_uniform_matrix2x4dv(
  program : UInt,
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Bool, @pointer.Pointer[Double]) -> Unit] = d_glProgramUniformMatrix2x4dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, transpose, value_p)
  })
}

///|
let d_glProgramUniformMatrix2x4dvEXT : Dispatch = Dispatch::new(
  "glProgramUniformMatrix2x4dvEXT",
)

///|
pub fn gl_program_uniform_matrix2x4dv_ext(
  program : UInt,
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Bool, @pointer.Pointer[Double]) -> Unit] = d_glProgramUniformMatrix2x4dvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, transpose, value_p)
  })
}

///|
let d_glProgramUniformMatrix2x4fv : Dispatch = Dispatch::with_aliases(
  "glProgramUniformMatrix2x4fv",
  ["glProgramUniformMatrix2x4fvEXT"],
)

///|
pub fn gl_program_uniform_matrix2x4fv(
  program : UInt,
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Bool, @pointer.Pointer[Float]) -> Unit] = d_glProgramUniformMatrix2x4fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, transpose, value_p)
  })
}

///|
let d_glProgramUniformMatrix2x4fvEXT : Dispatch = Dispatch::with_aliases(
  "glProgramUniformMatrix2x4fvEXT",
  ["glProgramUniformMatrix2x4fv"],
)

///|
pub fn gl_program_uniform_matrix2x4fv_ext(
  program : UInt,
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Bool, @pointer.Pointer[Float]) -> Unit] = d_glProgramUniformMatrix2x4fvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, transpose, value_p)
  })
}

///|
let d_glProgramUniformMatrix3dv : Dispatch = Dispatch::new(
  "glProgramUniformMatrix3dv",
)

///|
pub fn gl_program_uniform_matrix3dv(
  program : UInt,
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Bool, @pointer.Pointer[Double]) -> Unit] = d_glProgramUniformMatrix3dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, transpose, value_p)
  })
}

///|
let d_glProgramUniformMatrix3dvEXT : Dispatch = Dispatch::new(
  "glProgramUniformMatrix3dvEXT",
)

///|
pub fn gl_program_uniform_matrix3dv_ext(
  program : UInt,
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Bool, @pointer.Pointer[Double]) -> Unit] = d_glProgramUniformMatrix3dvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, transpose, value_p)
  })
}

///|
let d_glProgramUniformMatrix3fv : Dispatch = Dispatch::with_aliases(
  "glProgramUniformMatrix3fv",
  ["glProgramUniformMatrix3fvEXT"],
)

///|
pub fn gl_program_uniform_matrix3fv(
  program : UInt,
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Bool, @pointer.Pointer[Float]) -> Unit] = d_glProgramUniformMatrix3fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, transpose, value_p)
  })
}

///|
let d_glProgramUniformMatrix3fvEXT : Dispatch = Dispatch::with_aliases(
  "glProgramUniformMatrix3fvEXT",
  ["glProgramUniformMatrix3fv"],
)

///|
pub fn gl_program_uniform_matrix3fv_ext(
  program : UInt,
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Bool, @pointer.Pointer[Float]) -> Unit] = d_glProgramUniformMatrix3fvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, transpose, value_p)
  })
}

///|
let d_glProgramUniformMatrix3x2dv : Dispatch = Dispatch::new(
  "glProgramUniformMatrix3x2dv",
)

///|
pub fn gl_program_uniform_matrix3x2dv(
  program : UInt,
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Bool, @pointer.Pointer[Double]) -> Unit] = d_glProgramUniformMatrix3x2dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, transpose, value_p)
  })
}

///|
let d_glProgramUniformMatrix3x2dvEXT : Dispatch = Dispatch::new(
  "glProgramUniformMatrix3x2dvEXT",
)

///|
pub fn gl_program_uniform_matrix3x2dv_ext(
  program : UInt,
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Bool, @pointer.Pointer[Double]) -> Unit] = d_glProgramUniformMatrix3x2dvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, transpose, value_p)
  })
}

///|
let d_glProgramUniformMatrix3x2fv : Dispatch = Dispatch::with_aliases(
  "glProgramUniformMatrix3x2fv",
  ["glProgramUniformMatrix3x2fvEXT"],
)

///|
pub fn gl_program_uniform_matrix3x2fv(
  program : UInt,
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Bool, @pointer.Pointer[Float]) -> Unit] = d_glProgramUniformMatrix3x2fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, transpose, value_p)
  })
}

///|
let d_glProgramUniformMatrix3x2fvEXT : Dispatch = Dispatch::with_aliases(
  "glProgramUniformMatrix3x2fvEXT",
  ["glProgramUniformMatrix3x2fv"],
)

///|
pub fn gl_program_uniform_matrix3x2fv_ext(
  program : UInt,
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Bool, @pointer.Pointer[Float]) -> Unit] = d_glProgramUniformMatrix3x2fvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, transpose, value_p)
  })
}

///|
let d_glProgramUniformMatrix3x4dv : Dispatch = Dispatch::new(
  "glProgramUniformMatrix3x4dv",
)

///|
pub fn gl_program_uniform_matrix3x4dv(
  program : UInt,
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Bool, @pointer.Pointer[Double]) -> Unit] = d_glProgramUniformMatrix3x4dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, transpose, value_p)
  })
}

///|
let d_glProgramUniformMatrix3x4dvEXT : Dispatch = Dispatch::new(
  "glProgramUniformMatrix3x4dvEXT",
)

///|
pub fn gl_program_uniform_matrix3x4dv_ext(
  program : UInt,
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Bool, @pointer.Pointer[Double]) -> Unit] = d_glProgramUniformMatrix3x4dvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, transpose, value_p)
  })
}

///|
let d_glProgramUniformMatrix3x4fv : Dispatch = Dispatch::with_aliases(
  "glProgramUniformMatrix3x4fv",
  ["glProgramUniformMatrix3x4fvEXT"],
)

///|
pub fn gl_program_uniform_matrix3x4fv(
  program : UInt,
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Bool, @pointer.Pointer[Float]) -> Unit] = d_glProgramUniformMatrix3x4fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, transpose, value_p)
  })
}

///|
let d_glProgramUniformMatrix3x4fvEXT : Dispatch = Dispatch::with_aliases(
  "glProgramUniformMatrix3x4fvEXT",
  ["glProgramUniformMatrix3x4fv"],
)

///|
pub fn gl_program_uniform_matrix3x4fv_ext(
  program : UInt,
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Bool, @pointer.Pointer[Float]) -> Unit] = d_glProgramUniformMatrix3x4fvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, transpose, value_p)
  })
}

///|
let d_glProgramUniformMatrix4dv : Dispatch = Dispatch::new(
  "glProgramUniformMatrix4dv",
)

///|
pub fn gl_program_uniform_matrix4dv(
  program : UInt,
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Bool, @pointer.Pointer[Double]) -> Unit] = d_glProgramUniformMatrix4dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, transpose, value_p)
  })
}

///|
let d_glProgramUniformMatrix4dvEXT : Dispatch = Dispatch::new(
  "glProgramUniformMatrix4dvEXT",
)

///|
pub fn gl_program_uniform_matrix4dv_ext(
  program : UInt,
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Bool, @pointer.Pointer[Double]) -> Unit] = d_glProgramUniformMatrix4dvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, transpose, value_p)
  })
}

///|
let d_glProgramUniformMatrix4fv : Dispatch = Dispatch::with_aliases(
  "glProgramUniformMatrix4fv",
  ["glProgramUniformMatrix4fvEXT"],
)

///|
pub fn gl_program_uniform_matrix4fv(
  program : UInt,
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Bool, @pointer.Pointer[Float]) -> Unit] = d_glProgramUniformMatrix4fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, transpose, value_p)
  })
}

///|
let d_glProgramUniformMatrix4fvEXT : Dispatch = Dispatch::with_aliases(
  "glProgramUniformMatrix4fvEXT",
  ["glProgramUniformMatrix4fv"],
)

///|
pub fn gl_program_uniform_matrix4fv_ext(
  program : UInt,
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Bool, @pointer.Pointer[Float]) -> Unit] = d_glProgramUniformMatrix4fvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, transpose, value_p)
  })
}

///|
let d_glProgramUniformMatrix4x2dv : Dispatch = Dispatch::new(
  "glProgramUniformMatrix4x2dv",
)

///|
pub fn gl_program_uniform_matrix4x2dv(
  program : UInt,
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Bool, @pointer.Pointer[Double]) -> Unit] = d_glProgramUniformMatrix4x2dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, transpose, value_p)
  })
}

///|
let d_glProgramUniformMatrix4x2dvEXT : Dispatch = Dispatch::new(
  "glProgramUniformMatrix4x2dvEXT",
)

///|
pub fn gl_program_uniform_matrix4x2dv_ext(
  program : UInt,
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Bool, @pointer.Pointer[Double]) -> Unit] = d_glProgramUniformMatrix4x2dvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, transpose, value_p)
  })
}

///|
let d_glProgramUniformMatrix4x2fv : Dispatch = Dispatch::with_aliases(
  "glProgramUniformMatrix4x2fv",
  ["glProgramUniformMatrix4x2fvEXT"],
)

///|
pub fn gl_program_uniform_matrix4x2fv(
  program : UInt,
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Bool, @pointer.Pointer[Float]) -> Unit] = d_glProgramUniformMatrix4x2fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, transpose, value_p)
  })
}

///|
let d_glProgramUniformMatrix4x2fvEXT : Dispatch = Dispatch::with_aliases(
  "glProgramUniformMatrix4x2fvEXT",
  ["glProgramUniformMatrix4x2fv"],
)

///|
pub fn gl_program_uniform_matrix4x2fv_ext(
  program : UInt,
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Bool, @pointer.Pointer[Float]) -> Unit] = d_glProgramUniformMatrix4x2fvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, transpose, value_p)
  })
}

///|
let d_glProgramUniformMatrix4x3dv : Dispatch = Dispatch::new(
  "glProgramUniformMatrix4x3dv",
)

///|
pub fn gl_program_uniform_matrix4x3dv(
  program : UInt,
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Bool, @pointer.Pointer[Double]) -> Unit] = d_glProgramUniformMatrix4x3dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, transpose, value_p)
  })
}

///|
let d_glProgramUniformMatrix4x3dvEXT : Dispatch = Dispatch::new(
  "glProgramUniformMatrix4x3dvEXT",
)

///|
pub fn gl_program_uniform_matrix4x3dv_ext(
  program : UInt,
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Bool, @pointer.Pointer[Double]) -> Unit] = d_glProgramUniformMatrix4x3dvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, transpose, value_p)
  })
}

///|
let d_glProgramUniformMatrix4x3fv : Dispatch = Dispatch::with_aliases(
  "glProgramUniformMatrix4x3fv",
  ["glProgramUniformMatrix4x3fvEXT"],
)

///|
pub fn gl_program_uniform_matrix4x3fv(
  program : UInt,
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Bool, @pointer.Pointer[Float]) -> Unit] = d_glProgramUniformMatrix4x3fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, transpose, value_p)
  })
}

///|
let d_glProgramUniformMatrix4x3fvEXT : Dispatch = Dispatch::with_aliases(
  "glProgramUniformMatrix4x3fvEXT",
  ["glProgramUniformMatrix4x3fv"],
)

///|
pub fn gl_program_uniform_matrix4x3fv_ext(
  program : UInt,
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Bool, @pointer.Pointer[Float]) -> Unit] = d_glProgramUniformMatrix4x3fvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, transpose, value_p)
  })
}

///|
let d_glProgramUniformui64NV : Dispatch = Dispatch::new(
  "glProgramUniformui64NV",
)

///|
pub fn gl_program_uniformui64_nv(
  program : UInt,
  location : Int,
  value : UInt64,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt64) -> Unit] = d_glProgramUniformui64NV
    .get()
    .unsafe_into()
  fp(program, location, value)
}

///|
let d_glProgramUniformui64vNV : Dispatch = Dispatch::new(
  "glProgramUniformui64vNV",
)

///|
pub fn gl_program_uniformui64v_nv(
  program : UInt,
  location : Int,
  count : Int,
  value : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, @pointer.Pointer[UInt64]) -> Unit] = d_glProgramUniformui64vNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(program, location, count, value_p)
  })
}

///|
let d_glProgramVertexLimitNV : Dispatch = Dispatch::new(
  "glProgramVertexLimitNV",
)

///|
pub fn gl_program_vertex_limit_nv(target : UInt, limit : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glProgramVertexLimitNV
    .get()
    .unsafe_into()
  fp(target, limit)
}

///|
let d_glProvokingVertex : Dispatch = Dispatch::with_aliases(
  "glProvokingVertex",
  ["glProvokingVertexEXT"],
)

///|
pub fn gl_provoking_vertex(mode : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glProvokingVertex.get().unsafe_into()
  fp(mode)
}

///|
let d_glProvokingVertexEXT : Dispatch = Dispatch::with_aliases(
  "glProvokingVertexEXT",
  ["glProvokingVertex"],
)

///|
pub fn gl_provoking_vertex_ext(mode : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glProvokingVertexEXT.get().unsafe_into()
  fp(mode)
}

///|
let d_glPushAttrib : Dispatch = Dispatch::new("glPushAttrib")

///|
pub fn gl_push_attrib(mask : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glPushAttrib.get().unsafe_into()
  fp(mask)
}

///|
let d_glPushClientAttrib : Dispatch = Dispatch::new("glPushClientAttrib")

///|
pub fn gl_push_client_attrib(mask : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glPushClientAttrib.get().unsafe_into()
  fp(mask)
}

///|
let d_glPushClientAttribDefaultEXT : Dispatch = Dispatch::new(
  "glPushClientAttribDefaultEXT",
)

///|
pub fn gl_push_client_attrib_default_ext(mask : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glPushClientAttribDefaultEXT
    .get()
    .unsafe_into()
  fp(mask)
}

///|
let d_glPushDebugGroup : Dispatch = Dispatch::with_aliases("glPushDebugGroup", [
  "glPushDebugGroupKHR",
])

///|
pub fn gl_push_debug_group(
  source : UInt,
  id : UInt,
  length : Int,
  message : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, @pointer.Pointer[Byte]) -> Unit] = d_glPushDebugGroup
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(message, fn(message_p) {
    fp(source, id, length, message_p)
  })
}

///|
let d_glPushDebugGroupKHR : Dispatch = Dispatch::with_aliases(
  "glPushDebugGroupKHR",
  ["glPushDebugGroup"],
)

///|
pub fn gl_push_debug_group_khr(
  source : UInt,
  id : UInt,
  length : Int,
  message : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, @pointer.Pointer[Byte]) -> Unit] = d_glPushDebugGroupKHR
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(message, fn(message_p) {
    fp(source, id, length, message_p)
  })
}

///|
let d_glPushGroupMarkerEXT : Dispatch = Dispatch::new("glPushGroupMarkerEXT")

///|
pub fn gl_push_group_marker_ext(length : Int, marker : Bytes) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[Byte]) -> Unit] = d_glPushGroupMarkerEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(marker, fn(marker_p) { fp(length, marker_p) })
}

///|
let d_glPushMatrix : Dispatch = Dispatch::new("glPushMatrix")

///|
pub fn gl_push_matrix() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glPushMatrix.get().unsafe_into()
  fp()
}

///|
let d_glPushName : Dispatch = Dispatch::new("glPushName")

///|
pub fn gl_push_name(name : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glPushName.get().unsafe_into()
  fp(name)
}

///|
let d_glQueryCounter : Dispatch = Dispatch::with_aliases("glQueryCounter", [
  "glQueryCounterEXT",
])

///|
pub fn gl_query_counter(id : UInt, target : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glQueryCounter.get().unsafe_into()
  fp(id, target)
}

///|
let d_glQueryCounterEXT : Dispatch = Dispatch::with_aliases(
  "glQueryCounterEXT",
  ["glQueryCounter"],
)

///|
pub fn gl_query_counter_ext(id : UInt, target : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glQueryCounterEXT
    .get()
    .unsafe_into()
  fp(id, target)
}

///|
let d_glQueryMatrixxOES : Dispatch = Dispatch::new("glQueryMatrixxOES")

///|
pub fn gl_query_matrixx_oes(
  mantissa : FixedArray[Int],
  exponent : FixedArray[Int],
) -> UInt {
  let fp : FuncRef[(@pointer.Pointer[Int], @pointer.Pointer[Int]) -> UInt] = d_glQueryMatrixxOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(mantissa, fn(mantissa_p) {
    @pointer.borrow_array(exponent, fn(exponent_p) {
      fp(mantissa_p, exponent_p)
    })
  })
}

///|
let d_glQueryObjectParameteruiAMD : Dispatch = Dispatch::new(
  "glQueryObjectParameteruiAMD",
)

///|
pub fn gl_query_object_parameterui_amd(
  target : UInt,
  id : UInt,
  pname : UInt,
  param : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt) -> Unit] = d_glQueryObjectParameteruiAMD
    .get()
    .unsafe_into()
  fp(target, id, pname, param)
}

///|
let d_glQueryResourceNV : Dispatch = Dispatch::new("glQueryResourceNV")

///|
pub fn gl_query_resource_nv(
  queryType : UInt,
  tagId : Int,
  count : UInt,
  buffer : FixedArray[Int],
) -> Int {
  let fp : FuncRef[(UInt, Int, UInt, @pointer.Pointer[Int]) -> Int] = d_glQueryResourceNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(buffer, fn(buffer_p) {
    fp(queryType, tagId, count, buffer_p)
  })
}

///|
let d_glQueryResourceTagNV : Dispatch = Dispatch::new("glQueryResourceTagNV")

///|
pub fn gl_query_resource_tag_nv(tagId : Int, tagString : Bytes) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[Byte]) -> Unit] = d_glQueryResourceTagNV
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(tagString, fn(tagString_p) { fp(tagId, tagString_p) })
}

///|
let d_glRasterPos2d : Dispatch = Dispatch::new("glRasterPos2d")

///|
pub fn gl_raster_pos2d(x : Double, y : Double) -> Unit {
  let fp : FuncRef[(Double, Double) -> Unit] = d_glRasterPos2d
    .get()
    .unsafe_into()
  fp(x, y)
}

///|
let d_glRasterPos2dv : Dispatch = Dispatch::new("glRasterPos2dv")

///|
pub fn gl_raster_pos2dv(v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Double]) -> Unit] = d_glRasterPos2dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glRasterPos2f : Dispatch = Dispatch::new("glRasterPos2f")

///|
pub fn gl_raster_pos2f(x : Float, y : Float) -> Unit {
  let fp : FuncRef[(Float, Float) -> Unit] = d_glRasterPos2f.get().unsafe_into()
  fp(x, y)
}

///|
let d_glRasterPos2fv : Dispatch = Dispatch::new("glRasterPos2fv")

///|
pub fn gl_raster_pos2fv(v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Float]) -> Unit] = d_glRasterPos2fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glRasterPos2i : Dispatch = Dispatch::new("glRasterPos2i")

///|
pub fn gl_raster_pos2i(x : Int, y : Int) -> Unit {
  let fp : FuncRef[(Int, Int) -> Unit] = d_glRasterPos2i.get().unsafe_into()
  fp(x, y)
}

///|
let d_glRasterPos2iv : Dispatch = Dispatch::new("glRasterPos2iv")

///|
pub fn gl_raster_pos2iv(v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glRasterPos2iv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glRasterPos2s : Dispatch = Dispatch::new("glRasterPos2s")

///|
pub fn gl_raster_pos2s(x : Int, y : Int) -> Unit {
  let fp : FuncRef[(Int, Int) -> Unit] = d_glRasterPos2s.get().unsafe_into()
  fp(x, y)
}

///|
let d_glRasterPos2sv : Dispatch = Dispatch::new("glRasterPos2sv")

///|
pub fn gl_raster_pos2sv(v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int16]) -> Unit] = d_glRasterPos2sv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glRasterPos2xOES : Dispatch = Dispatch::new("glRasterPos2xOES")

///|
pub fn gl_raster_pos2x_oes(x : Int, y : Int) -> Unit {
  let fp : FuncRef[(Int, Int) -> Unit] = d_glRasterPos2xOES.get().unsafe_into()
  fp(x, y)
}

///|
let d_glRasterPos2xvOES : Dispatch = Dispatch::new("glRasterPos2xvOES")

///|
pub fn gl_raster_pos2xv_oes(coords : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glRasterPos2xvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(coords_p) })
}

///|
let d_glRasterPos3d : Dispatch = Dispatch::new("glRasterPos3d")

///|
pub fn gl_raster_pos3d(x : Double, y : Double, z : Double) -> Unit {
  let fp : FuncRef[(Double, Double, Double) -> Unit] = d_glRasterPos3d
    .get()
    .unsafe_into()
  fp(x, y, z)
}

///|
let d_glRasterPos3dv : Dispatch = Dispatch::new("glRasterPos3dv")

///|
pub fn gl_raster_pos3dv(v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Double]) -> Unit] = d_glRasterPos3dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glRasterPos3f : Dispatch = Dispatch::new("glRasterPos3f")

///|
pub fn gl_raster_pos3f(x : Float, y : Float, z : Float) -> Unit {
  let fp : FuncRef[(Float, Float, Float) -> Unit] = d_glRasterPos3f
    .get()
    .unsafe_into()
  fp(x, y, z)
}

///|
let d_glRasterPos3fv : Dispatch = Dispatch::new("glRasterPos3fv")

///|
pub fn gl_raster_pos3fv(v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Float]) -> Unit] = d_glRasterPos3fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glRasterPos3i : Dispatch = Dispatch::new("glRasterPos3i")

///|
pub fn gl_raster_pos3i(x : Int, y : Int, z : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glRasterPos3i
    .get()
    .unsafe_into()
  fp(x, y, z)
}

///|
let d_glRasterPos3iv : Dispatch = Dispatch::new("glRasterPos3iv")

///|
pub fn gl_raster_pos3iv(v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glRasterPos3iv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glRasterPos3s : Dispatch = Dispatch::new("glRasterPos3s")

///|
pub fn gl_raster_pos3s(x : Int, y : Int, z : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glRasterPos3s
    .get()
    .unsafe_into()
  fp(x, y, z)
}

///|
let d_glRasterPos3sv : Dispatch = Dispatch::new("glRasterPos3sv")

///|
pub fn gl_raster_pos3sv(v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int16]) -> Unit] = d_glRasterPos3sv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glRasterPos3xOES : Dispatch = Dispatch::new("glRasterPos3xOES")

///|
pub fn gl_raster_pos3x_oes(x : Int, y : Int, z : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glRasterPos3xOES
    .get()
    .unsafe_into()
  fp(x, y, z)
}

///|
let d_glRasterPos3xvOES : Dispatch = Dispatch::new("glRasterPos3xvOES")

///|
pub fn gl_raster_pos3xv_oes(coords : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glRasterPos3xvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(coords_p) })
}

///|
let d_glRasterPos4d : Dispatch = Dispatch::new("glRasterPos4d")

///|
pub fn gl_raster_pos4d(x : Double, y : Double, z : Double, w : Double) -> Unit {
  let fp : FuncRef[(Double, Double, Double, Double) -> Unit] = d_glRasterPos4d
    .get()
    .unsafe_into()
  fp(x, y, z, w)
}

///|
let d_glRasterPos4dv : Dispatch = Dispatch::new("glRasterPos4dv")

///|
pub fn gl_raster_pos4dv(v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Double]) -> Unit] = d_glRasterPos4dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glRasterPos4f : Dispatch = Dispatch::new("glRasterPos4f")

///|
pub fn gl_raster_pos4f(x : Float, y : Float, z : Float, w : Float) -> Unit {
  let fp : FuncRef[(Float, Float, Float, Float) -> Unit] = d_glRasterPos4f
    .get()
    .unsafe_into()
  fp(x, y, z, w)
}

///|
let d_glRasterPos4fv : Dispatch = Dispatch::new("glRasterPos4fv")

///|
pub fn gl_raster_pos4fv(v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Float]) -> Unit] = d_glRasterPos4fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glRasterPos4i : Dispatch = Dispatch::new("glRasterPos4i")

///|
pub fn gl_raster_pos4i(x : Int, y : Int, z : Int, w : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int) -> Unit] = d_glRasterPos4i
    .get()
    .unsafe_into()
  fp(x, y, z, w)
}

///|
let d_glRasterPos4iv : Dispatch = Dispatch::new("glRasterPos4iv")

///|
pub fn gl_raster_pos4iv(v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glRasterPos4iv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glRasterPos4s : Dispatch = Dispatch::new("glRasterPos4s")

///|
pub fn gl_raster_pos4s(x : Int, y : Int, z : Int, w : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int) -> Unit] = d_glRasterPos4s
    .get()
    .unsafe_into()
  fp(x, y, z, w)
}

///|
let d_glRasterPos4sv : Dispatch = Dispatch::new("glRasterPos4sv")

///|
pub fn gl_raster_pos4sv(v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int16]) -> Unit] = d_glRasterPos4sv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glRasterPos4xOES : Dispatch = Dispatch::new("glRasterPos4xOES")

///|
pub fn gl_raster_pos4x_oes(x : Int, y : Int, z : Int, w : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int) -> Unit] = d_glRasterPos4xOES
    .get()
    .unsafe_into()
  fp(x, y, z, w)
}

///|
let d_glRasterPos4xvOES : Dispatch = Dispatch::new("glRasterPos4xvOES")

///|
pub fn gl_raster_pos4xv_oes(coords : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glRasterPos4xvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(coords_p) })
}

///|
let d_glRasterSamplesEXT : Dispatch = Dispatch::new("glRasterSamplesEXT")

///|
pub fn gl_raster_samples_ext(
  samples : UInt,
  fixedsamplelocations : Bool,
) -> Unit {
  let fp : FuncRef[(UInt, Bool) -> Unit] = d_glRasterSamplesEXT
    .get()
    .unsafe_into()
  fp(samples, fixedsamplelocations)
}

///|
let d_glReadBuffer : Dispatch = Dispatch::new("glReadBuffer")

///|
pub fn gl_read_buffer(src : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glReadBuffer.get().unsafe_into()
  fp(src)
}

///|
let d_glReadBufferIndexedEXT : Dispatch = Dispatch::new(
  "glReadBufferIndexedEXT",
)

///|
pub fn gl_read_buffer_indexed_ext(src : UInt, index : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glReadBufferIndexedEXT
    .get()
    .unsafe_into()
  fp(src, index)
}

///|
let d_glReadBufferNV : Dispatch = Dispatch::new("glReadBufferNV")

///|
pub fn gl_read_buffer_nv(mode : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glReadBufferNV.get().unsafe_into()
  fp(mode)
}

///|
let d_glReadInstrumentsSGIX : Dispatch = Dispatch::new("glReadInstrumentsSGIX")

///|
pub fn gl_read_instruments_sgix(marker : Int) -> Unit {
  let fp : FuncRef[(Int) -> Unit] = d_glReadInstrumentsSGIX.get().unsafe_into()
  fp(marker)
}

///|
let d_glReadPixels : Dispatch = Dispatch::new("glReadPixels")

///|
pub fn gl_read_pixels(
  x : Int,
  y : Int,
  width : Int,
  height : Int,
  format : UInt,
  type_ : UInt,
  pixels : Bytes,
) -> Unit {
  let fp : FuncRef[
    (Int, Int, Int, Int, UInt, UInt, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glReadPixels.get().unsafe_into()
  @pointer.borrow_bytes(pixels, fn(pixels_p) {
    fp(x, y, width, height, format, type_, pixels_p)
  })
}

///|
let d_glReadnPixels : Dispatch = Dispatch::with_aliases("glReadnPixels", [
  "glReadnPixelsARB", "glReadnPixelsEXT", "glReadnPixelsKHR",
])

///|
pub fn gl_readn_pixels(
  x : Int,
  y : Int,
  width : Int,
  height : Int,
  format : UInt,
  type_ : UInt,
  bufSize : Int,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[
    (Int, Int, Int, Int, UInt, UInt, Int, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glReadnPixels.get().unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) {
    fp(x, y, width, height, format, type_, bufSize, data_p)
  })
}

///|
let d_glReadnPixelsARB : Dispatch = Dispatch::with_aliases("glReadnPixelsARB", [
  "glReadnPixels", "glReadnPixelsEXT", "glReadnPixelsKHR",
])

///|
pub fn gl_readn_pixels_arb(
  x : Int,
  y : Int,
  width : Int,
  height : Int,
  format : UInt,
  type_ : UInt,
  bufSize : Int,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[
    (Int, Int, Int, Int, UInt, UInt, Int, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glReadnPixelsARB.get().unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) {
    fp(x, y, width, height, format, type_, bufSize, data_p)
  })
}

///|
let d_glReadnPixelsEXT : Dispatch = Dispatch::with_aliases("glReadnPixelsEXT", [
  "glReadnPixels", "glReadnPixelsARB", "glReadnPixelsKHR",
])

///|
pub fn gl_readn_pixels_ext(
  x : Int,
  y : Int,
  width : Int,
  height : Int,
  format : UInt,
  type_ : UInt,
  bufSize : Int,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[
    (Int, Int, Int, Int, UInt, UInt, Int, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glReadnPixelsEXT.get().unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) {
    fp(x, y, width, height, format, type_, bufSize, data_p)
  })
}

///|
let d_glReadnPixelsKHR : Dispatch = Dispatch::with_aliases("glReadnPixelsKHR", [
  "glReadnPixels", "glReadnPixelsARB", "glReadnPixelsEXT",
])

///|
pub fn gl_readn_pixels_khr(
  x : Int,
  y : Int,
  width : Int,
  height : Int,
  format : UInt,
  type_ : UInt,
  bufSize : Int,
  data : Bytes,
) -> Unit {
  let fp : FuncRef[
    (Int, Int, Int, Int, UInt, UInt, Int, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glReadnPixelsKHR.get().unsafe_into()
  @pointer.borrow_bytes(data, fn(data_p) {
    fp(x, y, width, height, format, type_, bufSize, data_p)
  })
}

///|
let d_glReleaseKeyedMutexWin32EXT : Dispatch = Dispatch::new(
  "glReleaseKeyedMutexWin32EXT",
)

///|
pub fn gl_release_keyed_mutex_win32_ext(memory : UInt, key : UInt64) -> Bool {
  let fp : FuncRef[(UInt, UInt64) -> Int] = d_glReleaseKeyedMutexWin32EXT
    .get()
    .unsafe_into()
  (fp(memory, key) & 0xFF) != 0
}

///|
let d_glRectd : Dispatch = Dispatch::new("glRectd")

///|
pub fn gl_rectd(x1 : Double, y1 : Double, x2 : Double, y2 : Double) -> Unit {
  let fp : FuncRef[(Double, Double, Double, Double) -> Unit] = d_glRectd
    .get()
    .unsafe_into()
  fp(x1, y1, x2, y2)
}

///|
let d_glRectdv : Dispatch = Dispatch::new("glRectdv")

///|
pub fn gl_rectdv(v1 : FixedArray[Double], v2 : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Double], @pointer.Pointer[Double]) -> Unit] = d_glRectdv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v1, fn(v1_p) {
    @pointer.borrow_array(v2, fn(v2_p) { fp(v1_p, v2_p) })
  })
}

///|
let d_glRectf : Dispatch = Dispatch::new("glRectf")

///|
pub fn gl_rectf(x1 : Float, y1 : Float, x2 : Float, y2 : Float) -> Unit {
  let fp : FuncRef[(Float, Float, Float, Float) -> Unit] = d_glRectf
    .get()
    .unsafe_into()
  fp(x1, y1, x2, y2)
}

///|
let d_glRectfv : Dispatch = Dispatch::new("glRectfv")

///|
pub fn gl_rectfv(v1 : FixedArray[Float], v2 : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Float], @pointer.Pointer[Float]) -> Unit] = d_glRectfv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v1, fn(v1_p) {
    @pointer.borrow_array(v2, fn(v2_p) { fp(v1_p, v2_p) })
  })
}

///|
let d_glRecti : Dispatch = Dispatch::new("glRecti")

///|
pub fn gl_recti(x1 : Int, y1 : Int, x2 : Int, y2 : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int) -> Unit] = d_glRecti.get().unsafe_into()
  fp(x1, y1, x2, y2)
}

///|
let d_glRectiv : Dispatch = Dispatch::new("glRectiv")

///|
pub fn gl_rectiv(v1 : FixedArray[Int], v2 : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int], @pointer.Pointer[Int]) -> Unit] = d_glRectiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v1, fn(v1_p) {
    @pointer.borrow_array(v2, fn(v2_p) { fp(v1_p, v2_p) })
  })
}

///|
let d_glRects : Dispatch = Dispatch::new("glRects")

///|
pub fn gl_rects(x1 : Int, y1 : Int, x2 : Int, y2 : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int) -> Unit] = d_glRects.get().unsafe_into()
  fp(x1, y1, x2, y2)
}

///|
let d_glRectsv : Dispatch = Dispatch::new("glRectsv")

///|
pub fn gl_rectsv(v1 : FixedArray[Int16], v2 : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int16], @pointer.Pointer[Int16]) -> Unit] = d_glRectsv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v1, fn(v1_p) {
    @pointer.borrow_array(v2, fn(v2_p) { fp(v1_p, v2_p) })
  })
}

///|
let d_glRectxOES : Dispatch = Dispatch::new("glRectxOES")

///|
pub fn gl_rectx_oes(x1 : Int, y1 : Int, x2 : Int, y2 : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int) -> Unit] = d_glRectxOES
    .get()
    .unsafe_into()
  fp(x1, y1, x2, y2)
}

///|
let d_glRectxvOES : Dispatch = Dispatch::new("glRectxvOES")

///|
pub fn gl_rectxv_oes(v1 : FixedArray[Int], v2 : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int], @pointer.Pointer[Int]) -> Unit] = d_glRectxvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(v1, fn(v1_p) {
    @pointer.borrow_array(v2, fn(v2_p) { fp(v1_p, v2_p) })
  })
}

///|
let d_glReferencePlaneSGIX : Dispatch = Dispatch::new("glReferencePlaneSGIX")

///|
pub fn gl_reference_plane_sgix(equation : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Double]) -> Unit] = d_glReferencePlaneSGIX
    .get()
    .unsafe_into()
  @pointer.borrow_array(equation, fn(equation_p) { fp(equation_p) })
}

///|
let d_glReleaseShaderCompiler : Dispatch = Dispatch::new(
  "glReleaseShaderCompiler",
)

///|
pub fn gl_release_shader_compiler() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glReleaseShaderCompiler.get().unsafe_into()
  fp()
}

///|
let d_glRenderGpuMaskNV : Dispatch = Dispatch::new("glRenderGpuMaskNV")

///|
pub fn gl_render_gpu_mask_nv(mask : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glRenderGpuMaskNV.get().unsafe_into()
  fp(mask)
}

///|
let d_glRenderMode : Dispatch = Dispatch::new("glRenderMode")

///|
pub fn gl_render_mode(mode : UInt) -> Int {
  let fp : FuncRef[(UInt) -> Int] = d_glRenderMode.get().unsafe_into()
  fp(mode)
}

///|
let d_glRenderbufferStorage : Dispatch = Dispatch::with_aliases(
  "glRenderbufferStorage",
  ["glRenderbufferStorageEXT"],
)

///|
pub fn gl_renderbuffer_storage(
  target : UInt,
  internalformat : UInt,
  width : Int,
  height : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, Int) -> Unit] = d_glRenderbufferStorage
    .get()
    .unsafe_into()
  fp(target, internalformat, width, height)
}

///|
let d_glRenderbufferStorageEXT : Dispatch = Dispatch::with_aliases(
  "glRenderbufferStorageEXT",
  ["glRenderbufferStorage"],
)

///|
pub fn gl_renderbuffer_storage_ext(
  target : UInt,
  internalformat : UInt,
  width : Int,
  height : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, Int) -> Unit] = d_glRenderbufferStorageEXT
    .get()
    .unsafe_into()
  fp(target, internalformat, width, height)
}

///|
let d_glRenderbufferStorageMultisample : Dispatch = Dispatch::with_aliases(
  "glRenderbufferStorageMultisample",
  ["glRenderbufferStorageMultisampleEXT", "glRenderbufferStorageMultisampleNV"],
)

///|
pub fn gl_renderbuffer_storage_multisample(
  target : UInt,
  samples : Int,
  internalformat : UInt,
  width : Int,
  height : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int, Int) -> Unit] = d_glRenderbufferStorageMultisample
    .get()
    .unsafe_into()
  fp(target, samples, internalformat, width, height)
}

///|
let d_glRenderbufferStorageMultisampleANGLE : Dispatch = Dispatch::new(
  "glRenderbufferStorageMultisampleANGLE",
)

///|
pub fn gl_renderbuffer_storage_multisample_angle(
  target : UInt,
  samples : Int,
  internalformat : UInt,
  width : Int,
  height : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int, Int) -> Unit] = d_glRenderbufferStorageMultisampleANGLE
    .get()
    .unsafe_into()
  fp(target, samples, internalformat, width, height)
}

///|
let d_glRenderbufferStorageMultisampleAPPLE : Dispatch = Dispatch::new(
  "glRenderbufferStorageMultisampleAPPLE",
)

///|
pub fn gl_renderbuffer_storage_multisample_apple(
  target : UInt,
  samples : Int,
  internalformat : UInt,
  width : Int,
  height : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int, Int) -> Unit] = d_glRenderbufferStorageMultisampleAPPLE
    .get()
    .unsafe_into()
  fp(target, samples, internalformat, width, height)
}

///|
let d_glRenderbufferStorageMultisampleAdvancedAMD : Dispatch = Dispatch::new(
  "glRenderbufferStorageMultisampleAdvancedAMD",
)

///|
pub fn gl_renderbuffer_storage_multisample_advanced_amd(
  target : UInt,
  samples : Int,
  storageSamples : Int,
  internalformat : UInt,
  width : Int,
  height : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, UInt, Int, Int) -> Unit] = d_glRenderbufferStorageMultisampleAdvancedAMD
    .get()
    .unsafe_into()
  fp(target, samples, storageSamples, internalformat, width, height)
}

///|
let d_glRenderbufferStorageMultisampleCoverageNV : Dispatch = Dispatch::new(
  "glRenderbufferStorageMultisampleCoverageNV",
)

///|
pub fn gl_renderbuffer_storage_multisample_coverage_nv(
  target : UInt,
  coverageSamples : Int,
  colorSamples : Int,
  internalformat : UInt,
  width : Int,
  height : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, UInt, Int, Int) -> Unit] = d_glRenderbufferStorageMultisampleCoverageNV
    .get()
    .unsafe_into()
  fp(target, coverageSamples, colorSamples, internalformat, width, height)
}

///|
let d_glRenderbufferStorageMultisampleEXT : Dispatch = Dispatch::with_aliases(
  "glRenderbufferStorageMultisampleEXT",
  ["glRenderbufferStorageMultisample", "glRenderbufferStorageMultisampleNV"],
)

///|
pub fn gl_renderbuffer_storage_multisample_ext(
  target : UInt,
  samples : Int,
  internalformat : UInt,
  width : Int,
  height : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int, Int) -> Unit] = d_glRenderbufferStorageMultisampleEXT
    .get()
    .unsafe_into()
  fp(target, samples, internalformat, width, height)
}

///|
let d_glRenderbufferStorageMultisampleIMG : Dispatch = Dispatch::new(
  "glRenderbufferStorageMultisampleIMG",
)

///|
pub fn gl_renderbuffer_storage_multisample_img(
  target : UInt,
  samples : Int,
  internalformat : UInt,
  width : Int,
  height : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int, Int) -> Unit] = d_glRenderbufferStorageMultisampleIMG
    .get()
    .unsafe_into()
  fp(target, samples, internalformat, width, height)
}

///|
let d_glRenderbufferStorageMultisampleNV : Dispatch = Dispatch::with_aliases(
  "glRenderbufferStorageMultisampleNV",
  ["glRenderbufferStorageMultisample", "glRenderbufferStorageMultisampleEXT"],
)

///|
pub fn gl_renderbuffer_storage_multisample_nv(
  target : UInt,
  samples : Int,
  internalformat : UInt,
  width : Int,
  height : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int, Int) -> Unit] = d_glRenderbufferStorageMultisampleNV
    .get()
    .unsafe_into()
  fp(target, samples, internalformat, width, height)
}

///|
let d_glRenderbufferStorageOES : Dispatch = Dispatch::new(
  "glRenderbufferStorageOES",
)

///|
pub fn gl_renderbuffer_storage_oes(
  target : UInt,
  internalformat : UInt,
  width : Int,
  height : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, Int) -> Unit] = d_glRenderbufferStorageOES
    .get()
    .unsafe_into()
  fp(target, internalformat, width, height)
}

///|
let d_glReplacementCodeubSUN : Dispatch = Dispatch::new(
  "glReplacementCodeubSUN",
)

///|
pub fn gl_replacement_codeub_sun(code : Int) -> Unit {
  let fp : FuncRef[(Int) -> Unit] = d_glReplacementCodeubSUN.get().unsafe_into()
  fp(code)
}

///|
let d_glReplacementCodeubvSUN : Dispatch = Dispatch::new(
  "glReplacementCodeubvSUN",
)

///|
pub fn gl_replacement_codeubv_sun(code : Bytes) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Byte]) -> Unit] = d_glReplacementCodeubvSUN
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(code, fn(code_p) { fp(code_p) })
}

///|
let d_glReplacementCodeuiColor3fVertex3fSUN : Dispatch = Dispatch::new(
  "glReplacementCodeuiColor3fVertex3fSUN",
)

///|
pub fn gl_replacement_codeui_color3f_vertex3f_sun(
  rc : UInt,
  r : Float,
  g : Float,
  b : Float,
  x : Float,
  y : Float,
  z : Float,
) -> Unit {
  let fp : FuncRef[(UInt, Float, Float, Float, Float, Float, Float) -> Unit] = d_glReplacementCodeuiColor3fVertex3fSUN
    .get()
    .unsafe_into()
  fp(rc, r, g, b, x, y, z)
}

///|
let d_glReplacementCodeuiColor3fVertex3fvSUN : Dispatch = Dispatch::new(
  "glReplacementCodeuiColor3fVertex3fvSUN",
)

///|
pub fn gl_replacement_codeui_color3f_vertex3fv_sun(
  rc : FixedArray[UInt],
  c : FixedArray[Float],
  v : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[
    (@pointer.Pointer[UInt], @pointer.Pointer[Float], @pointer.Pointer[Float]) -> Unit,
  ] = d_glReplacementCodeuiColor3fVertex3fvSUN.get().unsafe_into()
  @pointer.borrow_array(rc, fn(rc_p) {
    @pointer.borrow_array(c, fn(c_p) {
      @pointer.borrow_array(v, fn(v_p) { fp(rc_p, c_p, v_p) })
    })
  })
}

///|
let d_glReplacementCodeuiColor4fNormal3fVertex3fSUN : Dispatch = Dispatch::new(
  "glReplacementCodeuiColor4fNormal3fVertex3fSUN",
)

///|
pub fn gl_replacement_codeui_color4f_normal3f_vertex3f_sun(
  rc : UInt,
  r : Float,
  g : Float,
  b : Float,
  a : Float,
  nx : Float,
  ny : Float,
  nz : Float,
  x : Float,
  y : Float,
  z : Float,
) -> Unit {
  let fp : FuncRef[
    (UInt, Float, Float, Float, Float, Float, Float, Float, Float, Float, Float) -> Unit,
  ] = d_glReplacementCodeuiColor4fNormal3fVertex3fSUN.get().unsafe_into()
  fp(rc, r, g, b, a, nx, ny, nz, x, y, z)
}

///|
let d_glReplacementCodeuiColor4fNormal3fVertex3fvSUN : Dispatch = Dispatch::new(
  "glReplacementCodeuiColor4fNormal3fVertex3fvSUN",
)

///|
pub fn gl_replacement_codeui_color4f_normal3f_vertex3fv_sun(
  rc : FixedArray[UInt],
  c : FixedArray[Float],
  n : FixedArray[Float],
  v : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[
    (
      @pointer.Pointer[UInt],
      @pointer.Pointer[Float],
      @pointer.Pointer[Float],
      @pointer.Pointer[Float],
    ) -> Unit,
  ] = d_glReplacementCodeuiColor4fNormal3fVertex3fvSUN.get().unsafe_into()
  @pointer.borrow_array(rc, fn(rc_p) {
    @pointer.borrow_array(c, fn(c_p) {
      @pointer.borrow_array(n, fn(n_p) {
        @pointer.borrow_array(v, fn(v_p) { fp(rc_p, c_p, n_p, v_p) })
      })
    })
  })
}

///|
let d_glReplacementCodeuiColor4ubVertex3fSUN : Dispatch = Dispatch::new(
  "glReplacementCodeuiColor4ubVertex3fSUN",
)

///|
pub fn gl_replacement_codeui_color4ub_vertex3f_sun(
  rc : UInt,
  r : Int,
  g : Int,
  b : Int,
  a : Int,
  x : Float,
  y : Float,
  z : Float,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int, Float, Float, Float) -> Unit] = d_glReplacementCodeuiColor4ubVertex3fSUN
    .get()
    .unsafe_into()
  fp(rc, r, g, b, a, x, y, z)
}

///|
let d_glReplacementCodeuiColor4ubVertex3fvSUN : Dispatch = Dispatch::new(
  "glReplacementCodeuiColor4ubVertex3fvSUN",
)

///|
pub fn gl_replacement_codeui_color4ub_vertex3fv_sun(
  rc : FixedArray[UInt],
  c : Bytes,
  v : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[
    (@pointer.Pointer[UInt], @pointer.Pointer[Byte], @pointer.Pointer[Float]) -> Unit,
  ] = d_glReplacementCodeuiColor4ubVertex3fvSUN.get().unsafe_into()
  @pointer.borrow_array(rc, fn(rc_p) {
    @pointer.borrow_bytes(c, fn(c_p) {
      @pointer.borrow_array(v, fn(v_p) { fp(rc_p, c_p, v_p) })
    })
  })
}

///|
let d_glReplacementCodeuiNormal3fVertex3fSUN : Dispatch = Dispatch::new(
  "glReplacementCodeuiNormal3fVertex3fSUN",
)

///|
pub fn gl_replacement_codeui_normal3f_vertex3f_sun(
  rc : UInt,
  nx : Float,
  ny : Float,
  nz : Float,
  x : Float,
  y : Float,
  z : Float,
) -> Unit {
  let fp : FuncRef[(UInt, Float, Float, Float, Float, Float, Float) -> Unit] = d_glReplacementCodeuiNormal3fVertex3fSUN
    .get()
    .unsafe_into()
  fp(rc, nx, ny, nz, x, y, z)
}

///|
let d_glReplacementCodeuiNormal3fVertex3fvSUN : Dispatch = Dispatch::new(
  "glReplacementCodeuiNormal3fVertex3fvSUN",
)

///|
pub fn gl_replacement_codeui_normal3f_vertex3fv_sun(
  rc : FixedArray[UInt],
  n : FixedArray[Float],
  v : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[
    (@pointer.Pointer[UInt], @pointer.Pointer[Float], @pointer.Pointer[Float]) -> Unit,
  ] = d_glReplacementCodeuiNormal3fVertex3fvSUN.get().unsafe_into()
  @pointer.borrow_array(rc, fn(rc_p) {
    @pointer.borrow_array(n, fn(n_p) {
      @pointer.borrow_array(v, fn(v_p) { fp(rc_p, n_p, v_p) })
    })
  })
}

///|
let d_glReplacementCodeuiSUN : Dispatch = Dispatch::new(
  "glReplacementCodeuiSUN",
)

///|
pub fn gl_replacement_codeui_sun(code : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glReplacementCodeuiSUN
    .get()
    .unsafe_into()
  fp(code)
}

///|
let d_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN : Dispatch = Dispatch::new(
  "glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN",
)

///|
pub fn gl_replacement_codeui_tex_coord2f_color4f_normal3f_vertex3f_sun(
  rc : UInt,
  s : Float,
  t : Float,
  r : Float,
  g : Float,
  b : Float,
  a : Float,
  nx : Float,
  ny : Float,
  nz : Float,
  x : Float,
  y : Float,
  z : Float,
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      Float,
      Float,
      Float,
      Float,
      Float,
      Float,
      Float,
      Float,
      Float,
      Float,
      Float,
      Float,
    ) -> Unit,
  ] = d_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN
    .get()
    .unsafe_into()
  fp(rc, s, t, r, g, b, a, nx, ny, nz, x, y, z)
}

///|
let d_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN : Dispatch = Dispatch::new(
  "glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN",
)

///|
pub fn gl_replacement_codeui_tex_coord2f_color4f_normal3f_vertex3fv_sun(
  rc : FixedArray[UInt],
  tc : FixedArray[Float],
  c : FixedArray[Float],
  n : FixedArray[Float],
  v : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[
    (
      @pointer.Pointer[UInt],
      @pointer.Pointer[Float],
      @pointer.Pointer[Float],
      @pointer.Pointer[Float],
      @pointer.Pointer[Float],
    ) -> Unit,
  ] = d_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN
    .get()
    .unsafe_into()
  @pointer.borrow_array(rc, fn(rc_p) {
    @pointer.borrow_array(tc, fn(tc_p) {
      @pointer.borrow_array(c, fn(c_p) {
        @pointer.borrow_array(n, fn(n_p) {
          @pointer.borrow_array(v, fn(v_p) { fp(rc_p, tc_p, c_p, n_p, v_p) })
        })
      })
    })
  })
}

///|
let d_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN : Dispatch = Dispatch::new(
  "glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN",
)

///|
pub fn gl_replacement_codeui_tex_coord2f_normal3f_vertex3f_sun(
  rc : UInt,
  s : Float,
  t : Float,
  nx : Float,
  ny : Float,
  nz : Float,
  x : Float,
  y : Float,
  z : Float,
) -> Unit {
  let fp : FuncRef[
    (UInt, Float, Float, Float, Float, Float, Float, Float, Float) -> Unit,
  ] = d_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN.get().unsafe_into()
  fp(rc, s, t, nx, ny, nz, x, y, z)
}

///|
let d_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN : Dispatch = Dispatch::new(
  "glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN",
)

///|
pub fn gl_replacement_codeui_tex_coord2f_normal3f_vertex3fv_sun(
  rc : FixedArray[UInt],
  tc : FixedArray[Float],
  n : FixedArray[Float],
  v : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[
    (
      @pointer.Pointer[UInt],
      @pointer.Pointer[Float],
      @pointer.Pointer[Float],
      @pointer.Pointer[Float],
    ) -> Unit,
  ] = d_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN.get().unsafe_into()
  @pointer.borrow_array(rc, fn(rc_p) {
    @pointer.borrow_array(tc, fn(tc_p) {
      @pointer.borrow_array(n, fn(n_p) {
        @pointer.borrow_array(v, fn(v_p) { fp(rc_p, tc_p, n_p, v_p) })
      })
    })
  })
}

///|
let d_glReplacementCodeuiTexCoord2fVertex3fSUN : Dispatch = Dispatch::new(
  "glReplacementCodeuiTexCoord2fVertex3fSUN",
)

///|
pub fn gl_replacement_codeui_tex_coord2f_vertex3f_sun(
  rc : UInt,
  s : Float,
  t : Float,
  x : Float,
  y : Float,
  z : Float,
) -> Unit {
  let fp : FuncRef[(UInt, Float, Float, Float, Float, Float) -> Unit] = d_glReplacementCodeuiTexCoord2fVertex3fSUN
    .get()
    .unsafe_into()
  fp(rc, s, t, x, y, z)
}

///|
let d_glReplacementCodeuiTexCoord2fVertex3fvSUN : Dispatch = Dispatch::new(
  "glReplacementCodeuiTexCoord2fVertex3fvSUN",
)

///|
pub fn gl_replacement_codeui_tex_coord2f_vertex3fv_sun(
  rc : FixedArray[UInt],
  tc : FixedArray[Float],
  v : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[
    (@pointer.Pointer[UInt], @pointer.Pointer[Float], @pointer.Pointer[Float]) -> Unit,
  ] = d_glReplacementCodeuiTexCoord2fVertex3fvSUN.get().unsafe_into()
  @pointer.borrow_array(rc, fn(rc_p) {
    @pointer.borrow_array(tc, fn(tc_p) {
      @pointer.borrow_array(v, fn(v_p) { fp(rc_p, tc_p, v_p) })
    })
  })
}

///|
let d_glReplacementCodeuiVertex3fSUN : Dispatch = Dispatch::new(
  "glReplacementCodeuiVertex3fSUN",
)

///|
pub fn gl_replacement_codeui_vertex3f_sun(
  rc : UInt,
  x : Float,
  y : Float,
  z : Float,
) -> Unit {
  let fp : FuncRef[(UInt, Float, Float, Float) -> Unit] = d_glReplacementCodeuiVertex3fSUN
    .get()
    .unsafe_into()
  fp(rc, x, y, z)
}

///|
let d_glReplacementCodeuiVertex3fvSUN : Dispatch = Dispatch::new(
  "glReplacementCodeuiVertex3fvSUN",
)

///|
pub fn gl_replacement_codeui_vertex3fv_sun(
  rc : FixedArray[UInt],
  v : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[UInt], @pointer.Pointer[Float]) -> Unit] = d_glReplacementCodeuiVertex3fvSUN
    .get()
    .unsafe_into()
  @pointer.borrow_array(rc, fn(rc_p) {
    @pointer.borrow_array(v, fn(v_p) { fp(rc_p, v_p) })
  })
}

///|
let d_glReplacementCodeuivSUN : Dispatch = Dispatch::new(
  "glReplacementCodeuivSUN",
)

///|
pub fn gl_replacement_codeuiv_sun(code : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[UInt]) -> Unit] = d_glReplacementCodeuivSUN
    .get()
    .unsafe_into()
  @pointer.borrow_array(code, fn(code_p) { fp(code_p) })
}

///|
let d_glReplacementCodeusSUN : Dispatch = Dispatch::new(
  "glReplacementCodeusSUN",
)

///|
pub fn gl_replacement_codeus_sun(code : Int) -> Unit {
  let fp : FuncRef[(Int) -> Unit] = d_glReplacementCodeusSUN.get().unsafe_into()
  fp(code)
}

///|
let d_glReplacementCodeusvSUN : Dispatch = Dispatch::new(
  "glReplacementCodeusvSUN",
)

///|
pub fn gl_replacement_codeusv_sun(code : FixedArray[UInt16]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[UInt16]) -> Unit] = d_glReplacementCodeusvSUN
    .get()
    .unsafe_into()
  @pointer.borrow_array(code, fn(code_p) { fp(code_p) })
}

///|
let d_glRequestResidentProgramsNV : Dispatch = Dispatch::new(
  "glRequestResidentProgramsNV",
)

///|
pub fn gl_request_resident_programs_nv(
  n : Int,
  programs : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glRequestResidentProgramsNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(programs, fn(programs_p) { fp(n, programs_p) })
}

///|
let d_glResetHistogram : Dispatch = Dispatch::with_aliases("glResetHistogram", [
  "glResetHistogramEXT",
])

///|
pub fn gl_reset_histogram(target : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glResetHistogram.get().unsafe_into()
  fp(target)
}

///|
let d_glResetHistogramEXT : Dispatch = Dispatch::with_aliases(
  "glResetHistogramEXT",
  ["glResetHistogram"],
)

///|
pub fn gl_reset_histogram_ext(target : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glResetHistogramEXT.get().unsafe_into()
  fp(target)
}

///|
let d_glResetMemoryObjectParameterNV : Dispatch = Dispatch::new(
  "glResetMemoryObjectParameterNV",
)

///|
pub fn gl_reset_memory_object_parameter_nv(memory : UInt, pname : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glResetMemoryObjectParameterNV
    .get()
    .unsafe_into()
  fp(memory, pname)
}

///|
let d_glResetMinmax : Dispatch = Dispatch::with_aliases("glResetMinmax", [
  "glResetMinmaxEXT",
])

///|
pub fn gl_reset_minmax(target : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glResetMinmax.get().unsafe_into()
  fp(target)
}

///|
let d_glResetMinmaxEXT : Dispatch = Dispatch::with_aliases("glResetMinmaxEXT", [
  "glResetMinmax",
])

///|
pub fn gl_reset_minmax_ext(target : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glResetMinmaxEXT.get().unsafe_into()
  fp(target)
}

///|
let d_glResizeBuffersMESA : Dispatch = Dispatch::new("glResizeBuffersMESA")

///|
pub fn gl_resize_buffers_mesa() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glResizeBuffersMESA.get().unsafe_into()
  fp()
}

///|
let d_glResolveDepthValuesNV : Dispatch = Dispatch::new(
  "glResolveDepthValuesNV",
)

///|
pub fn gl_resolve_depth_values_nv() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glResolveDepthValuesNV.get().unsafe_into()
  fp()
}

///|
let d_glResolveMultisampleFramebufferAPPLE : Dispatch = Dispatch::new(
  "glResolveMultisampleFramebufferAPPLE",
)

///|
pub fn gl_resolve_multisample_framebuffer_apple() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glResolveMultisampleFramebufferAPPLE
    .get()
    .unsafe_into()
  fp()
}

///|
let d_glResumeTransformFeedback : Dispatch = Dispatch::with_aliases(
  "glResumeTransformFeedback",
  ["glResumeTransformFeedbackNV"],
)

///|
pub fn gl_resume_transform_feedback() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glResumeTransformFeedback.get().unsafe_into()
  fp()
}

///|
let d_glResumeTransformFeedbackNV : Dispatch = Dispatch::with_aliases(
  "glResumeTransformFeedbackNV",
  ["glResumeTransformFeedback"],
)

///|
pub fn gl_resume_transform_feedback_nv() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glResumeTransformFeedbackNV
    .get()
    .unsafe_into()
  fp()
}

///|
let d_glRotated : Dispatch = Dispatch::new("glRotated")

///|
pub fn gl_rotated(angle : Double, x : Double, y : Double, z : Double) -> Unit {
  let fp : FuncRef[(Double, Double, Double, Double) -> Unit] = d_glRotated
    .get()
    .unsafe_into()
  fp(angle, x, y, z)
}

///|
let d_glRotatef : Dispatch = Dispatch::new("glRotatef")

///|
pub fn gl_rotatef(angle : Float, x : Float, y : Float, z : Float) -> Unit {
  let fp : FuncRef[(Float, Float, Float, Float) -> Unit] = d_glRotatef
    .get()
    .unsafe_into()
  fp(angle, x, y, z)
}

///|
let d_glRotatex : Dispatch = Dispatch::new("glRotatex")

///|
pub fn gl_rotatex(angle : Int, x : Int, y : Int, z : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int) -> Unit] = d_glRotatex
    .get()
    .unsafe_into()
  fp(angle, x, y, z)
}

///|
let d_glRotatexOES : Dispatch = Dispatch::new("glRotatexOES")

///|
pub fn gl_rotatex_oes(angle : Int, x : Int, y : Int, z : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int) -> Unit] = d_glRotatexOES
    .get()
    .unsafe_into()
  fp(angle, x, y, z)
}

///|
let d_glSampleCoverage : Dispatch = Dispatch::with_aliases("glSampleCoverage", [
  "glSampleCoverageARB",
])

///|
pub fn gl_sample_coverage(value : Float, invert : Bool) -> Unit {
  let fp : FuncRef[(Float, Bool) -> Unit] = d_glSampleCoverage
    .get()
    .unsafe_into()
  fp(value, invert)
}

///|
let d_glSampleCoverageARB : Dispatch = Dispatch::with_aliases(
  "glSampleCoverageARB",
  ["glSampleCoverage"],
)

///|
pub fn gl_sample_coverage_arb(value : Float, invert : Bool) -> Unit {
  let fp : FuncRef[(Float, Bool) -> Unit] = d_glSampleCoverageARB
    .get()
    .unsafe_into()
  fp(value, invert)
}

///|
let d_glSampleCoveragex : Dispatch = Dispatch::new("glSampleCoveragex")

///|
pub fn gl_sample_coveragex(value : Int, invert : Bool) -> Unit {
  let fp : FuncRef[(Int, Bool) -> Unit] = d_glSampleCoveragex
    .get()
    .unsafe_into()
  fp(value, invert)
}

///|
let d_glSampleCoveragexOES : Dispatch = Dispatch::new("glSampleCoveragexOES")

///|
pub fn gl_sample_coveragex_oes(value : Int, invert : Bool) -> Unit {
  let fp : FuncRef[(Int, Bool) -> Unit] = d_glSampleCoveragexOES
    .get()
    .unsafe_into()
  fp(value, invert)
}

///|
let d_glSampleMapATI : Dispatch = Dispatch::new("glSampleMapATI")

///|
pub fn gl_sample_map_ati(dst : UInt, interp : UInt, swizzle : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glSampleMapATI
    .get()
    .unsafe_into()
  fp(dst, interp, swizzle)
}

///|
let d_glSampleMaskEXT : Dispatch = Dispatch::with_aliases("glSampleMaskEXT", [
  "glSampleMaskSGIS",
])

///|
pub fn gl_sample_mask_ext(value : Float, invert : Bool) -> Unit {
  let fp : FuncRef[(Float, Bool) -> Unit] = d_glSampleMaskEXT
    .get()
    .unsafe_into()
  fp(value, invert)
}

///|
let d_glSampleMaskIndexedNV : Dispatch = Dispatch::new("glSampleMaskIndexedNV")

///|
pub fn gl_sample_mask_indexed_nv(index : UInt, mask : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glSampleMaskIndexedNV
    .get()
    .unsafe_into()
  fp(index, mask)
}

///|
let d_glSampleMaskSGIS : Dispatch = Dispatch::with_aliases("glSampleMaskSGIS", [
  "glSampleMaskEXT",
])

///|
pub fn gl_sample_mask_sgis(value : Float, invert : Bool) -> Unit {
  let fp : FuncRef[(Float, Bool) -> Unit] = d_glSampleMaskSGIS
    .get()
    .unsafe_into()
  fp(value, invert)
}

///|
let d_glSampleMaski : Dispatch = Dispatch::new("glSampleMaski")

///|
pub fn gl_sample_maski(maskNumber : UInt, mask : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glSampleMaski.get().unsafe_into()
  fp(maskNumber, mask)
}

///|
let d_glSamplePatternEXT : Dispatch = Dispatch::with_aliases(
  "glSamplePatternEXT",
  ["glSamplePatternSGIS"],
)

///|
pub fn gl_sample_pattern_ext(pattern : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glSamplePatternEXT.get().unsafe_into()
  fp(pattern)
}

///|
let d_glSamplePatternSGIS : Dispatch = Dispatch::with_aliases(
  "glSamplePatternSGIS",
  ["glSamplePatternEXT"],
)

///|
pub fn gl_sample_pattern_sgis(pattern : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glSamplePatternSGIS.get().unsafe_into()
  fp(pattern)
}

///|
let d_glSamplerParameterIiv : Dispatch = Dispatch::with_aliases(
  "glSamplerParameterIiv",
  ["glSamplerParameterIivEXT", "glSamplerParameterIivOES"],
)

///|
pub fn gl_sampler_parameter_iiv(
  sampler : UInt,
  pname : UInt,
  param : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glSamplerParameterIiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(param, fn(param_p) { fp(sampler, pname, param_p) })
}

///|
let d_glSamplerParameterIivEXT : Dispatch = Dispatch::with_aliases(
  "glSamplerParameterIivEXT",
  ["glSamplerParameterIiv", "glSamplerParameterIivOES"],
)

///|
pub fn gl_sampler_parameter_iiv_ext(
  sampler : UInt,
  pname : UInt,
  param : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glSamplerParameterIivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(param, fn(param_p) { fp(sampler, pname, param_p) })
}

///|
let d_glSamplerParameterIivOES : Dispatch = Dispatch::with_aliases(
  "glSamplerParameterIivOES",
  ["glSamplerParameterIiv", "glSamplerParameterIivEXT"],
)

///|
pub fn gl_sampler_parameter_iiv_oes(
  sampler : UInt,
  pname : UInt,
  param : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glSamplerParameterIivOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(param, fn(param_p) { fp(sampler, pname, param_p) })
}

///|
let d_glSamplerParameterIuiv : Dispatch = Dispatch::with_aliases(
  "glSamplerParameterIuiv",
  ["glSamplerParameterIuivEXT", "glSamplerParameterIuivOES"],
)

///|
pub fn gl_sampler_parameter_iuiv(
  sampler : UInt,
  pname : UInt,
  param : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[UInt]) -> Unit] = d_glSamplerParameterIuiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(param, fn(param_p) { fp(sampler, pname, param_p) })
}

///|
let d_glSamplerParameterIuivEXT : Dispatch = Dispatch::with_aliases(
  "glSamplerParameterIuivEXT",
  ["glSamplerParameterIuiv", "glSamplerParameterIuivOES"],
)

///|
pub fn gl_sampler_parameter_iuiv_ext(
  sampler : UInt,
  pname : UInt,
  param : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[UInt]) -> Unit] = d_glSamplerParameterIuivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(param, fn(param_p) { fp(sampler, pname, param_p) })
}

///|
let d_glSamplerParameterIuivOES : Dispatch = Dispatch::with_aliases(
  "glSamplerParameterIuivOES",
  ["glSamplerParameterIuiv", "glSamplerParameterIuivEXT"],
)

///|
pub fn gl_sampler_parameter_iuiv_oes(
  sampler : UInt,
  pname : UInt,
  param : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[UInt]) -> Unit] = d_glSamplerParameterIuivOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(param, fn(param_p) { fp(sampler, pname, param_p) })
}

///|
let d_glSamplerParameterf : Dispatch = Dispatch::new("glSamplerParameterf")

///|
pub fn gl_sampler_parameterf(
  sampler : UInt,
  pname : UInt,
  param : Float,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Float) -> Unit] = d_glSamplerParameterf
    .get()
    .unsafe_into()
  fp(sampler, pname, param)
}

///|
let d_glSamplerParameterfv : Dispatch = Dispatch::new("glSamplerParameterfv")

///|
pub fn gl_sampler_parameterfv(
  sampler : UInt,
  pname : UInt,
  param : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glSamplerParameterfv
    .get()
    .unsafe_into()
  @pointer.borrow_array(param, fn(param_p) { fp(sampler, pname, param_p) })
}

///|
let d_glSamplerParameteri : Dispatch = Dispatch::new("glSamplerParameteri")

///|
pub fn gl_sampler_parameteri(sampler : UInt, pname : UInt, param : Int) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int) -> Unit] = d_glSamplerParameteri
    .get()
    .unsafe_into()
  fp(sampler, pname, param)
}

///|
let d_glSamplerParameteriv : Dispatch = Dispatch::new("glSamplerParameteriv")

///|
pub fn gl_sampler_parameteriv(
  sampler : UInt,
  pname : UInt,
  param : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glSamplerParameteriv
    .get()
    .unsafe_into()
  @pointer.borrow_array(param, fn(param_p) { fp(sampler, pname, param_p) })
}

///|
let d_glScaled : Dispatch = Dispatch::new("glScaled")

///|
pub fn gl_scaled(x : Double, y : Double, z : Double) -> Unit {
  let fp : FuncRef[(Double, Double, Double) -> Unit] = d_glScaled
    .get()
    .unsafe_into()
  fp(x, y, z)
}

///|
let d_glScalef : Dispatch = Dispatch::new("glScalef")

///|
pub fn gl_scalef(x : Float, y : Float, z : Float) -> Unit {
  let fp : FuncRef[(Float, Float, Float) -> Unit] = d_glScalef
    .get()
    .unsafe_into()
  fp(x, y, z)
}

///|
let d_glScalex : Dispatch = Dispatch::new("glScalex")

///|
pub fn gl_scalex(x : Int, y : Int, z : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glScalex.get().unsafe_into()
  fp(x, y, z)
}

///|
let d_glScalexOES : Dispatch = Dispatch::new("glScalexOES")

///|
pub fn gl_scalex_oes(x : Int, y : Int, z : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glScalexOES.get().unsafe_into()
  fp(x, y, z)
}

///|
let d_glScissor : Dispatch = Dispatch::new("glScissor")

///|
pub fn gl_scissor(x : Int, y : Int, width : Int, height : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int) -> Unit] = d_glScissor
    .get()
    .unsafe_into()
  fp(x, y, width, height)
}

///|
let d_glScissorArrayv : Dispatch = Dispatch::with_aliases("glScissorArrayv", [
  "glScissorArrayvNV", "glScissorArrayvOES",
])

///|
pub fn gl_scissor_arrayv(
  first : UInt,
  count : Int,
  v : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Int]) -> Unit] = d_glScissorArrayv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(first, count, v_p) })
}

///|
let d_glScissorArrayvNV : Dispatch = Dispatch::with_aliases(
  "glScissorArrayvNV",
  ["glScissorArrayv", "glScissorArrayvOES"],
)

///|
pub fn gl_scissor_arrayv_nv(
  first : UInt,
  count : Int,
  v : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Int]) -> Unit] = d_glScissorArrayvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(first, count, v_p) })
}

///|
let d_glScissorArrayvOES : Dispatch = Dispatch::with_aliases(
  "glScissorArrayvOES",
  ["glScissorArrayv", "glScissorArrayvNV"],
)

///|
pub fn gl_scissor_arrayv_oes(
  first : UInt,
  count : Int,
  v : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Int]) -> Unit] = d_glScissorArrayvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(first, count, v_p) })
}

///|
let d_glScissorExclusiveArrayvNV : Dispatch = Dispatch::new(
  "glScissorExclusiveArrayvNV",
)

///|
pub fn gl_scissor_exclusive_arrayv_nv(
  first : UInt,
  count : Int,
  v : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Int]) -> Unit] = d_glScissorExclusiveArrayvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(first, count, v_p) })
}

///|
let d_glScissorExclusiveNV : Dispatch = Dispatch::new("glScissorExclusiveNV")

///|
pub fn gl_scissor_exclusive_nv(
  x : Int,
  y : Int,
  width : Int,
  height : Int,
) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int) -> Unit] = d_glScissorExclusiveNV
    .get()
    .unsafe_into()
  fp(x, y, width, height)
}

///|
let d_glScissorIndexed : Dispatch = Dispatch::with_aliases("glScissorIndexed", [
  "glScissorIndexedNV", "glScissorIndexedOES",
])

///|
pub fn gl_scissor_indexed(
  index : UInt,
  left : Int,
  bottom : Int,
  width : Int,
  height : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int) -> Unit] = d_glScissorIndexed
    .get()
    .unsafe_into()
  fp(index, left, bottom, width, height)
}

///|
let d_glScissorIndexedNV : Dispatch = Dispatch::with_aliases(
  "glScissorIndexedNV",
  ["glScissorIndexed", "glScissorIndexedOES"],
)

///|
pub fn gl_scissor_indexed_nv(
  index : UInt,
  left : Int,
  bottom : Int,
  width : Int,
  height : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int) -> Unit] = d_glScissorIndexedNV
    .get()
    .unsafe_into()
  fp(index, left, bottom, width, height)
}

///|
let d_glScissorIndexedOES : Dispatch = Dispatch::with_aliases(
  "glScissorIndexedOES",
  ["glScissorIndexed", "glScissorIndexedNV"],
)

///|
pub fn gl_scissor_indexed_oes(
  index : UInt,
  left : Int,
  bottom : Int,
  width : Int,
  height : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int) -> Unit] = d_glScissorIndexedOES
    .get()
    .unsafe_into()
  fp(index, left, bottom, width, height)
}

///|
let d_glScissorIndexedv : Dispatch = Dispatch::with_aliases(
  "glScissorIndexedv",
  ["glScissorIndexedvNV", "glScissorIndexedvOES"],
)

///|
pub fn gl_scissor_indexedv(index : UInt, v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glScissorIndexedv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glScissorIndexedvNV : Dispatch = Dispatch::with_aliases(
  "glScissorIndexedvNV",
  ["glScissorIndexedv", "glScissorIndexedvOES"],
)

///|
pub fn gl_scissor_indexedv_nv(index : UInt, v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glScissorIndexedvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glScissorIndexedvOES : Dispatch = Dispatch::with_aliases(
  "glScissorIndexedvOES",
  ["glScissorIndexedv", "glScissorIndexedvNV"],
)

///|
pub fn gl_scissor_indexedv_oes(index : UInt, v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glScissorIndexedvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glSecondaryColor3b : Dispatch = Dispatch::with_aliases(
  "glSecondaryColor3b",
  ["glSecondaryColor3bEXT"],
)

///|
pub fn gl_secondary_color3b(red : Int, green : Int, blue : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glSecondaryColor3b
    .get()
    .unsafe_into()
  fp(red, green, blue)
}

///|
let d_glSecondaryColor3bEXT : Dispatch = Dispatch::with_aliases(
  "glSecondaryColor3bEXT",
  ["glSecondaryColor3b"],
)

///|
pub fn gl_secondary_color3b_ext(red : Int, green : Int, blue : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glSecondaryColor3bEXT
    .get()
    .unsafe_into()
  fp(red, green, blue)
}

///|
let d_glSecondaryColor3bv : Dispatch = Dispatch::with_aliases(
  "glSecondaryColor3bv",
  ["glSecondaryColor3bvEXT"],
)

///|
pub fn gl_secondary_color3bv(v : Bytes) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Byte]) -> Unit] = d_glSecondaryColor3bv
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(v, fn(v_p) { fp(v_p) })
}

///|
let d_glSecondaryColor3bvEXT : Dispatch = Dispatch::with_aliases(
  "glSecondaryColor3bvEXT",
  ["glSecondaryColor3bv"],
)

///|
pub fn gl_secondary_color3bv_ext(v : Bytes) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Byte]) -> Unit] = d_glSecondaryColor3bvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(v, fn(v_p) { fp(v_p) })
}

///|
let d_glSecondaryColor3d : Dispatch = Dispatch::with_aliases(
  "glSecondaryColor3d",
  ["glSecondaryColor3dEXT"],
)

///|
pub fn gl_secondary_color3d(
  red : Double,
  green : Double,
  blue : Double,
) -> Unit {
  let fp : FuncRef[(Double, Double, Double) -> Unit] = d_glSecondaryColor3d
    .get()
    .unsafe_into()
  fp(red, green, blue)
}

///|
let d_glSecondaryColor3dEXT : Dispatch = Dispatch::with_aliases(
  "glSecondaryColor3dEXT",
  ["glSecondaryColor3d"],
)

///|
pub fn gl_secondary_color3d_ext(
  red : Double,
  green : Double,
  blue : Double,
) -> Unit {
  let fp : FuncRef[(Double, Double, Double) -> Unit] = d_glSecondaryColor3dEXT
    .get()
    .unsafe_into()
  fp(red, green, blue)
}

///|
let d_glSecondaryColor3dv : Dispatch = Dispatch::with_aliases(
  "glSecondaryColor3dv",
  ["glSecondaryColor3dvEXT"],
)

///|
pub fn gl_secondary_color3dv(v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Double]) -> Unit] = d_glSecondaryColor3dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glSecondaryColor3dvEXT : Dispatch = Dispatch::with_aliases(
  "glSecondaryColor3dvEXT",
  ["glSecondaryColor3dv"],
)

///|
pub fn gl_secondary_color3dv_ext(v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Double]) -> Unit] = d_glSecondaryColor3dvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glSecondaryColor3f : Dispatch = Dispatch::with_aliases(
  "glSecondaryColor3f",
  ["glSecondaryColor3fEXT"],
)

///|
pub fn gl_secondary_color3f(red : Float, green : Float, blue : Float) -> Unit {
  let fp : FuncRef[(Float, Float, Float) -> Unit] = d_glSecondaryColor3f
    .get()
    .unsafe_into()
  fp(red, green, blue)
}

///|
let d_glSecondaryColor3fEXT : Dispatch = Dispatch::with_aliases(
  "glSecondaryColor3fEXT",
  ["glSecondaryColor3f"],
)

///|
pub fn gl_secondary_color3f_ext(
  red : Float,
  green : Float,
  blue : Float,
) -> Unit {
  let fp : FuncRef[(Float, Float, Float) -> Unit] = d_glSecondaryColor3fEXT
    .get()
    .unsafe_into()
  fp(red, green, blue)
}

///|
let d_glSecondaryColor3fv : Dispatch = Dispatch::with_aliases(
  "glSecondaryColor3fv",
  ["glSecondaryColor3fvEXT"],
)

///|
pub fn gl_secondary_color3fv(v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Float]) -> Unit] = d_glSecondaryColor3fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glSecondaryColor3fvEXT : Dispatch = Dispatch::with_aliases(
  "glSecondaryColor3fvEXT",
  ["glSecondaryColor3fv"],
)

///|
pub fn gl_secondary_color3fv_ext(v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Float]) -> Unit] = d_glSecondaryColor3fvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glSecondaryColor3hNV : Dispatch = Dispatch::new("glSecondaryColor3hNV")

///|
pub fn gl_secondary_color3h_nv(red : Int, green : Int, blue : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glSecondaryColor3hNV
    .get()
    .unsafe_into()
  fp(red, green, blue)
}

///|
let d_glSecondaryColor3hvNV : Dispatch = Dispatch::new("glSecondaryColor3hvNV")

///|
pub fn gl_secondary_color3hv_nv(v : FixedArray[UInt16]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[UInt16]) -> Unit] = d_glSecondaryColor3hvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glSecondaryColor3i : Dispatch = Dispatch::with_aliases(
  "glSecondaryColor3i",
  ["glSecondaryColor3iEXT"],
)

///|
pub fn gl_secondary_color3i(red : Int, green : Int, blue : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glSecondaryColor3i
    .get()
    .unsafe_into()
  fp(red, green, blue)
}

///|
let d_glSecondaryColor3iEXT : Dispatch = Dispatch::with_aliases(
  "glSecondaryColor3iEXT",
  ["glSecondaryColor3i"],
)

///|
pub fn gl_secondary_color3i_ext(red : Int, green : Int, blue : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glSecondaryColor3iEXT
    .get()
    .unsafe_into()
  fp(red, green, blue)
}

///|
let d_glSecondaryColor3iv : Dispatch = Dispatch::with_aliases(
  "glSecondaryColor3iv",
  ["glSecondaryColor3ivEXT"],
)

///|
pub fn gl_secondary_color3iv(v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glSecondaryColor3iv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glSecondaryColor3ivEXT : Dispatch = Dispatch::with_aliases(
  "glSecondaryColor3ivEXT",
  ["glSecondaryColor3iv"],
)

///|
pub fn gl_secondary_color3iv_ext(v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glSecondaryColor3ivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glSecondaryColor3s : Dispatch = Dispatch::with_aliases(
  "glSecondaryColor3s",
  ["glSecondaryColor3sEXT"],
)

///|
pub fn gl_secondary_color3s(red : Int, green : Int, blue : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glSecondaryColor3s
    .get()
    .unsafe_into()
  fp(red, green, blue)
}

///|
let d_glSecondaryColor3sEXT : Dispatch = Dispatch::with_aliases(
  "glSecondaryColor3sEXT",
  ["glSecondaryColor3s"],
)

///|
pub fn gl_secondary_color3s_ext(red : Int, green : Int, blue : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glSecondaryColor3sEXT
    .get()
    .unsafe_into()
  fp(red, green, blue)
}

///|
let d_glSecondaryColor3sv : Dispatch = Dispatch::with_aliases(
  "glSecondaryColor3sv",
  ["glSecondaryColor3svEXT"],
)

///|
pub fn gl_secondary_color3sv(v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int16]) -> Unit] = d_glSecondaryColor3sv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glSecondaryColor3svEXT : Dispatch = Dispatch::with_aliases(
  "glSecondaryColor3svEXT",
  ["glSecondaryColor3sv"],
)

///|
pub fn gl_secondary_color3sv_ext(v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int16]) -> Unit] = d_glSecondaryColor3svEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glSecondaryColor3ub : Dispatch = Dispatch::with_aliases(
  "glSecondaryColor3ub",
  ["glSecondaryColor3ubEXT"],
)

///|
pub fn gl_secondary_color3ub(red : Int, green : Int, blue : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glSecondaryColor3ub
    .get()
    .unsafe_into()
  fp(red, green, blue)
}

///|
let d_glSecondaryColor3ubEXT : Dispatch = Dispatch::with_aliases(
  "glSecondaryColor3ubEXT",
  ["glSecondaryColor3ub"],
)

///|
pub fn gl_secondary_color3ub_ext(red : Int, green : Int, blue : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glSecondaryColor3ubEXT
    .get()
    .unsafe_into()
  fp(red, green, blue)
}

///|
let d_glSecondaryColor3ubv : Dispatch = Dispatch::with_aliases(
  "glSecondaryColor3ubv",
  ["glSecondaryColor3ubvEXT"],
)

///|
pub fn gl_secondary_color3ubv(v : Bytes) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Byte]) -> Unit] = d_glSecondaryColor3ubv
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(v, fn(v_p) { fp(v_p) })
}

///|
let d_glSecondaryColor3ubvEXT : Dispatch = Dispatch::with_aliases(
  "glSecondaryColor3ubvEXT",
  ["glSecondaryColor3ubv"],
)

///|
pub fn gl_secondary_color3ubv_ext(v : Bytes) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Byte]) -> Unit] = d_glSecondaryColor3ubvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(v, fn(v_p) { fp(v_p) })
}

///|
let d_glSecondaryColor3ui : Dispatch = Dispatch::with_aliases(
  "glSecondaryColor3ui",
  ["glSecondaryColor3uiEXT"],
)

///|
pub fn gl_secondary_color3ui(red : UInt, green : UInt, blue : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glSecondaryColor3ui
    .get()
    .unsafe_into()
  fp(red, green, blue)
}

///|
let d_glSecondaryColor3uiEXT : Dispatch = Dispatch::with_aliases(
  "glSecondaryColor3uiEXT",
  ["glSecondaryColor3ui"],
)

///|
pub fn gl_secondary_color3ui_ext(red : UInt, green : UInt, blue : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glSecondaryColor3uiEXT
    .get()
    .unsafe_into()
  fp(red, green, blue)
}

///|
let d_glSecondaryColor3uiv : Dispatch = Dispatch::with_aliases(
  "glSecondaryColor3uiv",
  ["glSecondaryColor3uivEXT"],
)

///|
pub fn gl_secondary_color3uiv(v : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[UInt]) -> Unit] = d_glSecondaryColor3uiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glSecondaryColor3uivEXT : Dispatch = Dispatch::with_aliases(
  "glSecondaryColor3uivEXT",
  ["glSecondaryColor3uiv"],
)

///|
pub fn gl_secondary_color3uiv_ext(v : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[UInt]) -> Unit] = d_glSecondaryColor3uivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glSecondaryColor3us : Dispatch = Dispatch::with_aliases(
  "glSecondaryColor3us",
  ["glSecondaryColor3usEXT"],
)

///|
pub fn gl_secondary_color3us(red : Int, green : Int, blue : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glSecondaryColor3us
    .get()
    .unsafe_into()
  fp(red, green, blue)
}

///|
let d_glSecondaryColor3usEXT : Dispatch = Dispatch::with_aliases(
  "glSecondaryColor3usEXT",
  ["glSecondaryColor3us"],
)

///|
pub fn gl_secondary_color3us_ext(red : Int, green : Int, blue : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glSecondaryColor3usEXT
    .get()
    .unsafe_into()
  fp(red, green, blue)
}

///|
let d_glSecondaryColor3usv : Dispatch = Dispatch::with_aliases(
  "glSecondaryColor3usv",
  ["glSecondaryColor3usvEXT"],
)

///|
pub fn gl_secondary_color3usv(v : FixedArray[UInt16]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[UInt16]) -> Unit] = d_glSecondaryColor3usv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glSecondaryColor3usvEXT : Dispatch = Dispatch::with_aliases(
  "glSecondaryColor3usvEXT",
  ["glSecondaryColor3usv"],
)

///|
pub fn gl_secondary_color3usv_ext(v : FixedArray[UInt16]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[UInt16]) -> Unit] = d_glSecondaryColor3usvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glSecondaryColorFormatNV : Dispatch = Dispatch::new(
  "glSecondaryColorFormatNV",
)

///|
pub fn gl_secondary_color_format_nv(
  size : Int,
  type_ : UInt,
  stride : Int,
) -> Unit {
  let fp : FuncRef[(Int, UInt, Int) -> Unit] = d_glSecondaryColorFormatNV
    .get()
    .unsafe_into()
  fp(size, type_, stride)
}

///|
let d_glSecondaryColorP3ui : Dispatch = Dispatch::new("glSecondaryColorP3ui")

///|
pub fn gl_secondary_color_p3ui(type_ : UInt, color : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glSecondaryColorP3ui
    .get()
    .unsafe_into()
  fp(type_, color)
}

///|
let d_glSecondaryColorP3uiv : Dispatch = Dispatch::new("glSecondaryColorP3uiv")

///|
pub fn gl_secondary_color_p3uiv(type_ : UInt, color : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt]) -> Unit] = d_glSecondaryColorP3uiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(color, fn(color_p) { fp(type_, color_p) })
}

///|
let d_glSecondaryColorPointer : Dispatch = Dispatch::with_aliases(
  "glSecondaryColorPointer",
  ["glSecondaryColorPointerEXT"],
)

///|
/// Configure a vertex array from the buffer currently bound to `GL_ARRAY_BUFFER`.
/// `offset` is a byte offset; client-side arrays are not accepted.
pub fn gl_secondary_color_pointer(
  size : Int,
  type_ : UInt,
  stride : Int,
  offset : Int64,
) -> Unit {
  let fp : FuncRef[(Int, UInt, Int, @pointer.Pointer[Unit]) -> Unit] = d_glSecondaryColorPointer
    .get()
    .unsafe_into()
  fp(size, type_, stride, @pointer.Pointer::unsafe_from_int64(offset))
}

///|
let d_glSecondaryColorPointerEXT : Dispatch = Dispatch::with_aliases(
  "glSecondaryColorPointerEXT",
  ["glSecondaryColorPointer"],
)

///|
/// Configure a vertex array from the buffer currently bound to `GL_ARRAY_BUFFER`.
/// `offset` is a byte offset; client-side arrays are not accepted.
pub fn gl_secondary_color_pointer_ext(
  size : Int,
  type_ : UInt,
  stride : Int,
  offset : Int64,
) -> Unit {
  let fp : FuncRef[(Int, UInt, Int, @pointer.Pointer[Unit]) -> Unit] = d_glSecondaryColorPointerEXT
    .get()
    .unsafe_into()
  fp(size, type_, stride, @pointer.Pointer::unsafe_from_int64(offset))
}

///|
let d_glSelectBuffer : Dispatch = Dispatch::new("glSelectBuffer")

///|
pub fn gl_select_buffer(size : Int, buffer : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glSelectBuffer
    .get()
    .unsafe_into()
  @pointer.borrow_array(buffer, fn(buffer_p) { fp(size, buffer_p) })
}

///|
let d_glSelectPerfMonitorCountersAMD : Dispatch = Dispatch::new(
  "glSelectPerfMonitorCountersAMD",
)

///|
pub fn gl_select_perf_monitor_counters_amd(
  monitor : UInt,
  enable : Bool,
  group : UInt,
  numCounters : Int,
  counterList : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, Bool, UInt, Int, @pointer.Pointer[UInt]) -> Unit] = d_glSelectPerfMonitorCountersAMD
    .get()
    .unsafe_into()
  @pointer.borrow_array(counterList, fn(counterList_p) {
    fp(monitor, enable, group, numCounters, counterList_p)
  })
}

///|
let d_glSemaphoreParameterivNV : Dispatch = Dispatch::new(
  "glSemaphoreParameterivNV",
)

///|
pub fn gl_semaphore_parameteriv_nv(
  semaphore : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glSemaphoreParameterivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(semaphore, pname, params_p) })
}

///|
let d_glSemaphoreParameterui64vEXT : Dispatch = Dispatch::new(
  "glSemaphoreParameterui64vEXT",
)

///|
pub fn gl_semaphore_parameterui64v_ext(
  semaphore : UInt,
  pname : UInt,
  params : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[UInt64]) -> Unit] = d_glSemaphoreParameterui64vEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(semaphore, pname, params_p) })
}

///|
let d_glSeparableFilter2D : Dispatch = Dispatch::with_aliases(
  "glSeparableFilter2D",
  ["glSeparableFilter2DEXT"],
)

///|
pub fn gl_separable_filter2_d(
  target : UInt,
  internalformat : UInt,
  width : Int,
  height : Int,
  format : UInt,
  type_ : UInt,
  row : Bytes,
  column : Bytes,
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      UInt,
      Int,
      Int,
      UInt,
      UInt,
      @pointer.Pointer[Byte],
      @pointer.Pointer[Byte],
    ) -> Unit,
  ] = d_glSeparableFilter2D.get().unsafe_into()
  @pointer.borrow_bytes(row, fn(row_p) {
    @pointer.borrow_bytes(column, fn(column_p) {
      fp(target, internalformat, width, height, format, type_, row_p, column_p)
    })
  })
}

///|
let d_glSeparableFilter2DEXT : Dispatch = Dispatch::with_aliases(
  "glSeparableFilter2DEXT",
  ["glSeparableFilter2D"],
)

///|
pub fn gl_separable_filter2_dext(
  target : UInt,
  internalformat : UInt,
  width : Int,
  height : Int,
  format : UInt,
  type_ : UInt,
  row : Bytes,
  column : Bytes,
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      UInt,
      Int,
      Int,
      UInt,
      UInt,
      @pointer.Pointer[Byte],
      @pointer.Pointer[Byte],
    ) -> Unit,
  ] = d_glSeparableFilter2DEXT.get().unsafe_into()
  @pointer.borrow_bytes(row, fn(row_p) {
    @pointer.borrow_bytes(column, fn(column_p) {
      fp(target, internalformat, width, height, format, type_, row_p, column_p)
    })
  })
}

///|
let d_glSetFenceAPPLE : Dispatch = Dispatch::new("glSetFenceAPPLE")

///|
pub fn gl_set_fence_apple(fence : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glSetFenceAPPLE.get().unsafe_into()
  fp(fence)
}

///|
let d_glSetFenceNV : Dispatch = Dispatch::new("glSetFenceNV")

///|
pub fn gl_set_fence_nv(fence : UInt, condition : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glSetFenceNV.get().unsafe_into()
  fp(fence, condition)
}

///|
let d_glSetFragmentShaderConstantATI : Dispatch = Dispatch::new(
  "glSetFragmentShaderConstantATI",
)

///|
pub fn gl_set_fragment_shader_constant_ati(
  dst : UInt,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glSetFragmentShaderConstantATI
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(dst, value_p) })
}

///|
let d_glSetInvariantEXT : Dispatch = Dispatch::new("glSetInvariantEXT")

///|
pub fn gl_set_invariant_ext(id : UInt, type_ : UInt, addr : Bytes) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Byte]) -> Unit] = d_glSetInvariantEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(addr, fn(addr_p) { fp(id, type_, addr_p) })
}

///|
let d_glSetLocalConstantEXT : Dispatch = Dispatch::new("glSetLocalConstantEXT")

///|
pub fn gl_set_local_constant_ext(id : UInt, type_ : UInt, addr : Bytes) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Byte]) -> Unit] = d_glSetLocalConstantEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(addr, fn(addr_p) { fp(id, type_, addr_p) })
}

///|
let d_glSetMultisamplefvAMD : Dispatch = Dispatch::new("glSetMultisamplefvAMD")

///|
pub fn gl_set_multisamplefv_amd(
  pname : UInt,
  index : UInt,
  val : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glSetMultisamplefvAMD
    .get()
    .unsafe_into()
  @pointer.borrow_array(val, fn(val_p) { fp(pname, index, val_p) })
}

///|
let d_glShadeModel : Dispatch = Dispatch::new("glShadeModel")

///|
pub fn gl_shade_model(mode : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glShadeModel.get().unsafe_into()
  fp(mode)
}

///|
let d_glShaderBinary : Dispatch = Dispatch::new("glShaderBinary")

///|
pub fn gl_shader_binary(
  count : Int,
  shaders : FixedArray[UInt],
  binaryFormat : UInt,
  binary : Bytes,
  length : Int,
) -> Unit {
  let fp : FuncRef[
    (Int, @pointer.Pointer[UInt], UInt, @pointer.Pointer[Byte], Int) -> Unit,
  ] = d_glShaderBinary.get().unsafe_into()
  @pointer.borrow_array(shaders, fn(shaders_p) {
    @pointer.borrow_bytes(binary, fn(binary_p) {
      fp(count, shaders_p, binaryFormat, binary_p, length)
    })
  })
}

///|
let d_glShaderOp1EXT : Dispatch = Dispatch::new("glShaderOp1EXT")

///|
pub fn gl_shader_op1_ext(op : UInt, res : UInt, arg1 : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glShaderOp1EXT
    .get()
    .unsafe_into()
  fp(op, res, arg1)
}

///|
let d_glShaderOp2EXT : Dispatch = Dispatch::new("glShaderOp2EXT")

///|
pub fn gl_shader_op2_ext(
  op : UInt,
  res : UInt,
  arg1 : UInt,
  arg2 : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt) -> Unit] = d_glShaderOp2EXT
    .get()
    .unsafe_into()
  fp(op, res, arg1, arg2)
}

///|
let d_glShaderOp3EXT : Dispatch = Dispatch::new("glShaderOp3EXT")

///|
pub fn gl_shader_op3_ext(
  op : UInt,
  res : UInt,
  arg1 : UInt,
  arg2 : UInt,
  arg3 : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, UInt) -> Unit] = d_glShaderOp3EXT
    .get()
    .unsafe_into()
  fp(op, res, arg1, arg2, arg3)
}

///|
let d_glShaderSource : Dispatch = Dispatch::with_aliases("glShaderSource", [
  "glShaderSourceARB",
])

///|
pub fn gl_shader_source(
  shader : UInt,
  count : Int,
  string : FixedArray[Bytes],
  length : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, @pointer.Pointer[Bytes], @pointer.Pointer[Int]) -> Unit,
  ] = d_glShaderSource.get().unsafe_into()
  @pointer.borrow_array(string, fn(string_p) {
    @pointer.borrow_array(length, fn(length_p) {
      fp(shader, count, string_p, length_p)
    })
  })
}

///|
let d_glShaderStorageBlockBinding : Dispatch = Dispatch::new(
  "glShaderStorageBlockBinding",
)

///|
pub fn gl_shader_storage_block_binding(
  program : UInt,
  storageBlockIndex : UInt,
  storageBlockBinding : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glShaderStorageBlockBinding
    .get()
    .unsafe_into()
  fp(program, storageBlockIndex, storageBlockBinding)
}

///|
let d_glShadingRateEXT : Dispatch = Dispatch::new("glShadingRateEXT")

///|
pub fn gl_shading_rate_ext(rate : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glShadingRateEXT.get().unsafe_into()
  fp(rate)
}

///|
let d_glShadingRateCombinerOpsEXT : Dispatch = Dispatch::new(
  "glShadingRateCombinerOpsEXT",
)

///|
pub fn gl_shading_rate_combiner_ops_ext(
  combinerOp0 : UInt,
  combinerOp1 : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glShadingRateCombinerOpsEXT
    .get()
    .unsafe_into()
  fp(combinerOp0, combinerOp1)
}

///|
let d_glShadingRateImageBarrierNV : Dispatch = Dispatch::new(
  "glShadingRateImageBarrierNV",
)

///|
pub fn gl_shading_rate_image_barrier_nv(synchronize : Bool) -> Unit {
  let fp : FuncRef[(Bool) -> Unit] = d_glShadingRateImageBarrierNV
    .get()
    .unsafe_into()
  fp(synchronize)
}

///|
let d_glShadingRateQCOM : Dispatch = Dispatch::new("glShadingRateQCOM")

///|
pub fn gl_shading_rate_qcom(rate : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glShadingRateQCOM.get().unsafe_into()
  fp(rate)
}

///|
let d_glShadingRateImagePaletteNV : Dispatch = Dispatch::new(
  "glShadingRateImagePaletteNV",
)

///|
pub fn gl_shading_rate_image_palette_nv(
  viewport : UInt,
  first : UInt,
  count : Int,
  rates : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, @pointer.Pointer[UInt]) -> Unit] = d_glShadingRateImagePaletteNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(rates, fn(rates_p) {
    fp(viewport, first, count, rates_p)
  })
}

///|
let d_glShadingRateSampleOrderNV : Dispatch = Dispatch::new(
  "glShadingRateSampleOrderNV",
)

///|
pub fn gl_shading_rate_sample_order_nv(order : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glShadingRateSampleOrderNV
    .get()
    .unsafe_into()
  fp(order)
}

///|
let d_glShadingRateSampleOrderCustomNV : Dispatch = Dispatch::new(
  "glShadingRateSampleOrderCustomNV",
)

///|
pub fn gl_shading_rate_sample_order_custom_nv(
  rate : UInt,
  samples : UInt,
  locations : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glShadingRateSampleOrderCustomNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(locations, fn(locations_p) {
    fp(rate, samples, locations_p)
  })
}

///|
let d_glSharpenTexFuncSGIS : Dispatch = Dispatch::new("glSharpenTexFuncSGIS")

///|
pub fn gl_sharpen_tex_func_sgis(
  target : UInt,
  n : Int,
  points : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Float]) -> Unit] = d_glSharpenTexFuncSGIS
    .get()
    .unsafe_into()
  @pointer.borrow_array(points, fn(points_p) { fp(target, n, points_p) })
}

///|
let d_glSignalSemaphoreEXT : Dispatch = Dispatch::new("glSignalSemaphoreEXT")

///|
pub fn gl_signal_semaphore_ext(
  semaphore : UInt,
  numBufferBarriers : UInt,
  buffers : FixedArray[UInt],
  numTextureBarriers : UInt,
  textures : FixedArray[UInt],
  dstLayouts : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      UInt,
      @pointer.Pointer[UInt],
      UInt,
      @pointer.Pointer[UInt],
      @pointer.Pointer[UInt],
    ) -> Unit,
  ] = d_glSignalSemaphoreEXT.get().unsafe_into()
  @pointer.borrow_array(buffers, fn(buffers_p) {
    @pointer.borrow_array(textures, fn(textures_p) {
      @pointer.borrow_array(dstLayouts, fn(dstLayouts_p) {
        fp(
          semaphore, numBufferBarriers, buffers_p, numTextureBarriers, textures_p,
          dstLayouts_p,
        )
      })
    })
  })
}

///|
let d_glSignalSemaphoreui64NVX : Dispatch = Dispatch::new(
  "glSignalSemaphoreui64NVX",
)

///|
pub fn gl_signal_semaphoreui64_nvx(
  signalGpu : UInt,
  fenceObjectCount : Int,
  semaphoreArray : FixedArray[UInt],
  fenceValueArray : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, @pointer.Pointer[UInt], @pointer.Pointer[UInt64]) -> Unit,
  ] = d_glSignalSemaphoreui64NVX.get().unsafe_into()
  @pointer.borrow_array(semaphoreArray, fn(semaphoreArray_p) {
    @pointer.borrow_array(fenceValueArray, fn(fenceValueArray_p) {
      fp(signalGpu, fenceObjectCount, semaphoreArray_p, fenceValueArray_p)
    })
  })
}

///|
let d_glSpecializeShader : Dispatch = Dispatch::with_aliases(
  "glSpecializeShader",
  ["glSpecializeShaderARB"],
)

///|
pub fn gl_specialize_shader(
  shader : UInt,
  pEntryPoint : Bytes,
  numSpecializationConstants : UInt,
  pConstantIndex : FixedArray[UInt],
  pConstantValue : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      @pointer.Pointer[Byte],
      UInt,
      @pointer.Pointer[UInt],
      @pointer.Pointer[UInt],
    ) -> Unit,
  ] = d_glSpecializeShader.get().unsafe_into()
  @pointer.borrow_bytes(pEntryPoint, fn(pEntryPoint_p) {
    @pointer.borrow_array(pConstantIndex, fn(pConstantIndex_p) {
      @pointer.borrow_array(pConstantValue, fn(pConstantValue_p) {
        fp(
          shader, pEntryPoint_p, numSpecializationConstants, pConstantIndex_p, pConstantValue_p,
        )
      })
    })
  })
}

///|
let d_glSpecializeShaderARB : Dispatch = Dispatch::with_aliases(
  "glSpecializeShaderARB",
  ["glSpecializeShader"],
)

///|
pub fn gl_specialize_shader_arb(
  shader : UInt,
  pEntryPoint : Bytes,
  numSpecializationConstants : UInt,
  pConstantIndex : FixedArray[UInt],
  pConstantValue : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      @pointer.Pointer[Byte],
      UInt,
      @pointer.Pointer[UInt],
      @pointer.Pointer[UInt],
    ) -> Unit,
  ] = d_glSpecializeShaderARB.get().unsafe_into()
  @pointer.borrow_bytes(pEntryPoint, fn(pEntryPoint_p) {
    @pointer.borrow_array(pConstantIndex, fn(pConstantIndex_p) {
      @pointer.borrow_array(pConstantValue, fn(pConstantValue_p) {
        fp(
          shader, pEntryPoint_p, numSpecializationConstants, pConstantIndex_p, pConstantValue_p,
        )
      })
    })
  })
}

///|
let d_glSpriteParameterfSGIX : Dispatch = Dispatch::new(
  "glSpriteParameterfSGIX",
)

///|
pub fn gl_sprite_parameterf_sgix(pname : UInt, param : Float) -> Unit {
  let fp : FuncRef[(UInt, Float) -> Unit] = d_glSpriteParameterfSGIX
    .get()
    .unsafe_into()
  fp(pname, param)
}

///|
let d_glSpriteParameterfvSGIX : Dispatch = Dispatch::new(
  "glSpriteParameterfvSGIX",
)

///|
pub fn gl_sprite_parameterfv_sgix(
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glSpriteParameterfvSGIX
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(pname, params_p) })
}

///|
let d_glSpriteParameteriSGIX : Dispatch = Dispatch::new(
  "glSpriteParameteriSGIX",
)

///|
pub fn gl_sprite_parameteri_sgix(pname : UInt, param : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glSpriteParameteriSGIX
    .get()
    .unsafe_into()
  fp(pname, param)
}

///|
let d_glSpriteParameterivSGIX : Dispatch = Dispatch::new(
  "glSpriteParameterivSGIX",
)

///|
pub fn gl_sprite_parameteriv_sgix(
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glSpriteParameterivSGIX
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(pname, params_p) })
}

///|
let d_glStartInstrumentsSGIX : Dispatch = Dispatch::new(
  "glStartInstrumentsSGIX",
)

///|
pub fn gl_start_instruments_sgix() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glStartInstrumentsSGIX.get().unsafe_into()
  fp()
}

///|
let d_glStartTilingQCOM : Dispatch = Dispatch::new("glStartTilingQCOM")

///|
pub fn gl_start_tiling_qcom(
  x : UInt,
  y : UInt,
  width : UInt,
  height : UInt,
  preserveMask : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, UInt) -> Unit] = d_glStartTilingQCOM
    .get()
    .unsafe_into()
  fp(x, y, width, height, preserveMask)
}

///|
let d_glStateCaptureNV : Dispatch = Dispatch::new("glStateCaptureNV")

///|
pub fn gl_state_capture_nv(state : UInt, mode : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glStateCaptureNV
    .get()
    .unsafe_into()
  fp(state, mode)
}

///|
let d_glStencilClearTagEXT : Dispatch = Dispatch::new("glStencilClearTagEXT")

///|
pub fn gl_stencil_clear_tag_ext(
  stencilTagBits : Int,
  stencilClearTag : UInt,
) -> Unit {
  let fp : FuncRef[(Int, UInt) -> Unit] = d_glStencilClearTagEXT
    .get()
    .unsafe_into()
  fp(stencilTagBits, stencilClearTag)
}

///|
let d_glStencilFillPathInstancedNV : Dispatch = Dispatch::new(
  "glStencilFillPathInstancedNV",
)

///|
pub fn gl_stencil_fill_path_instanced_nv(
  numPaths : Int,
  pathNameType : UInt,
  paths : Bytes,
  pathBase : UInt,
  fillMode : UInt,
  mask : UInt,
  transformType : UInt,
  transformValues : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[
    (
      Int,
      UInt,
      @pointer.Pointer[Byte],
      UInt,
      UInt,
      UInt,
      UInt,
      @pointer.Pointer[Float],
    ) -> Unit,
  ] = d_glStencilFillPathInstancedNV.get().unsafe_into()
  @pointer.borrow_bytes(paths, fn(paths_p) {
    @pointer.borrow_array(transformValues, fn(transformValues_p) {
      fp(
        numPaths, pathNameType, paths_p, pathBase, fillMode, mask, transformType,
        transformValues_p,
      )
    })
  })
}

///|
let d_glStencilFillPathNV : Dispatch = Dispatch::new("glStencilFillPathNV")

///|
pub fn gl_stencil_fill_path_nv(
  path : UInt,
  fillMode : UInt,
  mask : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glStencilFillPathNV
    .get()
    .unsafe_into()
  fp(path, fillMode, mask)
}

///|
let d_glStencilFunc : Dispatch = Dispatch::new("glStencilFunc")

///|
pub fn gl_stencil_func(func : UInt, ref_ : Int, mask : UInt) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt) -> Unit] = d_glStencilFunc
    .get()
    .unsafe_into()
  fp(func, ref_, mask)
}

///|
let d_glStencilFuncSeparate : Dispatch = Dispatch::new("glStencilFuncSeparate")

///|
pub fn gl_stencil_func_separate(
  face : UInt,
  func : UInt,
  ref_ : Int,
  mask : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, UInt) -> Unit] = d_glStencilFuncSeparate
    .get()
    .unsafe_into()
  fp(face, func, ref_, mask)
}

///|
let d_glStencilFuncSeparateATI : Dispatch = Dispatch::new(
  "glStencilFuncSeparateATI",
)

///|
pub fn gl_stencil_func_separate_ati(
  frontfunc : UInt,
  backfunc : UInt,
  ref_ : Int,
  mask : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, UInt) -> Unit] = d_glStencilFuncSeparateATI
    .get()
    .unsafe_into()
  fp(frontfunc, backfunc, ref_, mask)
}

///|
let d_glStencilMask : Dispatch = Dispatch::new("glStencilMask")

///|
pub fn gl_stencil_mask(mask : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glStencilMask.get().unsafe_into()
  fp(mask)
}

///|
let d_glStencilMaskSeparate : Dispatch = Dispatch::new("glStencilMaskSeparate")

///|
pub fn gl_stencil_mask_separate(face : UInt, mask : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glStencilMaskSeparate
    .get()
    .unsafe_into()
  fp(face, mask)
}

///|
let d_glStencilOp : Dispatch = Dispatch::new("glStencilOp")

///|
pub fn gl_stencil_op(fail : UInt, zfail : UInt, zpass : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glStencilOp
    .get()
    .unsafe_into()
  fp(fail, zfail, zpass)
}

///|
let d_glStencilOpSeparate : Dispatch = Dispatch::with_aliases(
  "glStencilOpSeparate",
  ["glStencilOpSeparateATI"],
)

///|
pub fn gl_stencil_op_separate(
  face : UInt,
  sfail : UInt,
  dpfail : UInt,
  dppass : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt) -> Unit] = d_glStencilOpSeparate
    .get()
    .unsafe_into()
  fp(face, sfail, dpfail, dppass)
}

///|
let d_glStencilOpSeparateATI : Dispatch = Dispatch::with_aliases(
  "glStencilOpSeparateATI",
  ["glStencilOpSeparate"],
)

///|
pub fn gl_stencil_op_separate_ati(
  face : UInt,
  sfail : UInt,
  dpfail : UInt,
  dppass : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt) -> Unit] = d_glStencilOpSeparateATI
    .get()
    .unsafe_into()
  fp(face, sfail, dpfail, dppass)
}

///|
let d_glStencilOpValueAMD : Dispatch = Dispatch::new("glStencilOpValueAMD")

///|
pub fn gl_stencil_op_value_amd(face : UInt, value : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glStencilOpValueAMD
    .get()
    .unsafe_into()
  fp(face, value)
}

///|
let d_glStencilStrokePathInstancedNV : Dispatch = Dispatch::new(
  "glStencilStrokePathInstancedNV",
)

///|
pub fn gl_stencil_stroke_path_instanced_nv(
  numPaths : Int,
  pathNameType : UInt,
  paths : Bytes,
  pathBase : UInt,
  reference : Int,
  mask : UInt,
  transformType : UInt,
  transformValues : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[
    (
      Int,
      UInt,
      @pointer.Pointer[Byte],
      UInt,
      Int,
      UInt,
      UInt,
      @pointer.Pointer[Float],
    ) -> Unit,
  ] = d_glStencilStrokePathInstancedNV.get().unsafe_into()
  @pointer.borrow_bytes(paths, fn(paths_p) {
    @pointer.borrow_array(transformValues, fn(transformValues_p) {
      fp(
        numPaths, pathNameType, paths_p, pathBase, reference, mask, transformType,
        transformValues_p,
      )
    })
  })
}

///|
let d_glStencilStrokePathNV : Dispatch = Dispatch::new("glStencilStrokePathNV")

///|
pub fn gl_stencil_stroke_path_nv(
  path : UInt,
  reference : Int,
  mask : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt) -> Unit] = d_glStencilStrokePathNV
    .get()
    .unsafe_into()
  fp(path, reference, mask)
}

///|
let d_glStencilThenCoverFillPathInstancedNV : Dispatch = Dispatch::new(
  "glStencilThenCoverFillPathInstancedNV",
)

///|
pub fn gl_stencil_then_cover_fill_path_instanced_nv(
  numPaths : Int,
  pathNameType : UInt,
  paths : Bytes,
  pathBase : UInt,
  fillMode : UInt,
  mask : UInt,
  coverMode : UInt,
  transformType : UInt,
  transformValues : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[
    (
      Int,
      UInt,
      @pointer.Pointer[Byte],
      UInt,
      UInt,
      UInt,
      UInt,
      UInt,
      @pointer.Pointer[Float],
    ) -> Unit,
  ] = d_glStencilThenCoverFillPathInstancedNV.get().unsafe_into()
  @pointer.borrow_bytes(paths, fn(paths_p) {
    @pointer.borrow_array(transformValues, fn(transformValues_p) {
      fp(
        numPaths, pathNameType, paths_p, pathBase, fillMode, mask, coverMode, transformType,
        transformValues_p,
      )
    })
  })
}

///|
let d_glStencilThenCoverFillPathNV : Dispatch = Dispatch::new(
  "glStencilThenCoverFillPathNV",
)

///|
pub fn gl_stencil_then_cover_fill_path_nv(
  path : UInt,
  fillMode : UInt,
  mask : UInt,
  coverMode : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt) -> Unit] = d_glStencilThenCoverFillPathNV
    .get()
    .unsafe_into()
  fp(path, fillMode, mask, coverMode)
}

///|
let d_glStencilThenCoverStrokePathInstancedNV : Dispatch = Dispatch::new(
  "glStencilThenCoverStrokePathInstancedNV",
)

///|
pub fn gl_stencil_then_cover_stroke_path_instanced_nv(
  numPaths : Int,
  pathNameType : UInt,
  paths : Bytes,
  pathBase : UInt,
  reference : Int,
  mask : UInt,
  coverMode : UInt,
  transformType : UInt,
  transformValues : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[
    (
      Int,
      UInt,
      @pointer.Pointer[Byte],
      UInt,
      Int,
      UInt,
      UInt,
      UInt,
      @pointer.Pointer[Float],
    ) -> Unit,
  ] = d_glStencilThenCoverStrokePathInstancedNV.get().unsafe_into()
  @pointer.borrow_bytes(paths, fn(paths_p) {
    @pointer.borrow_array(transformValues, fn(transformValues_p) {
      fp(
        numPaths, pathNameType, paths_p, pathBase, reference, mask, coverMode, transformType,
        transformValues_p,
      )
    })
  })
}

///|
let d_glStencilThenCoverStrokePathNV : Dispatch = Dispatch::new(
  "glStencilThenCoverStrokePathNV",
)

///|
pub fn gl_stencil_then_cover_stroke_path_nv(
  path : UInt,
  reference : Int,
  mask : UInt,
  coverMode : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, UInt) -> Unit] = d_glStencilThenCoverStrokePathNV
    .get()
    .unsafe_into()
  fp(path, reference, mask, coverMode)
}

///|
let d_glStopInstrumentsSGIX : Dispatch = Dispatch::new("glStopInstrumentsSGIX")

///|
pub fn gl_stop_instruments_sgix(marker : Int) -> Unit {
  let fp : FuncRef[(Int) -> Unit] = d_glStopInstrumentsSGIX.get().unsafe_into()
  fp(marker)
}

///|
let d_glStringMarkerGREMEDY : Dispatch = Dispatch::new("glStringMarkerGREMEDY")

///|
pub fn gl_string_marker_gremedy(len : Int, string : Bytes) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[Byte]) -> Unit] = d_glStringMarkerGREMEDY
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(string, fn(string_p) { fp(len, string_p) })
}

///|
let d_glSubpixelPrecisionBiasNV : Dispatch = Dispatch::new(
  "glSubpixelPrecisionBiasNV",
)

///|
pub fn gl_subpixel_precision_bias_nv(xbits : UInt, ybits : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glSubpixelPrecisionBiasNV
    .get()
    .unsafe_into()
  fp(xbits, ybits)
}

///|
let d_glSwizzleEXT : Dispatch = Dispatch::new("glSwizzleEXT")

///|
pub fn gl_swizzle_ext(
  res : UInt,
  in_ : UInt,
  outX : UInt,
  outY : UInt,
  outZ : UInt,
  outW : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, UInt, UInt) -> Unit] = d_glSwizzleEXT
    .get()
    .unsafe_into()
  fp(res, in_, outX, outY, outZ, outW)
}

///|
let d_glSyncTextureINTEL : Dispatch = Dispatch::new("glSyncTextureINTEL")

///|
pub fn gl_sync_texture_intel(texture : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glSyncTextureINTEL.get().unsafe_into()
  fp(texture)
}

///|
let d_glTagSampleBufferSGIX : Dispatch = Dispatch::new("glTagSampleBufferSGIX")

///|
pub fn gl_tag_sample_buffer_sgix() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glTagSampleBufferSGIX.get().unsafe_into()
  fp()
}

///|
let d_glTangent3bEXT : Dispatch = Dispatch::new("glTangent3bEXT")

///|
pub fn gl_tangent3b_ext(tx : Int, ty : Int, tz : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glTangent3bEXT
    .get()
    .unsafe_into()
  fp(tx, ty, tz)
}

///|
let d_glTangent3bvEXT : Dispatch = Dispatch::new("glTangent3bvEXT")

///|
pub fn gl_tangent3bv_ext(v : Bytes) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Byte]) -> Unit] = d_glTangent3bvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(v, fn(v_p) { fp(v_p) })
}

///|
let d_glTangent3dEXT : Dispatch = Dispatch::new("glTangent3dEXT")

///|
pub fn gl_tangent3d_ext(tx : Double, ty : Double, tz : Double) -> Unit {
  let fp : FuncRef[(Double, Double, Double) -> Unit] = d_glTangent3dEXT
    .get()
    .unsafe_into()
  fp(tx, ty, tz)
}

///|
let d_glTangent3dvEXT : Dispatch = Dispatch::new("glTangent3dvEXT")

///|
pub fn gl_tangent3dv_ext(v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Double]) -> Unit] = d_glTangent3dvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glTangent3fEXT : Dispatch = Dispatch::new("glTangent3fEXT")

///|
pub fn gl_tangent3f_ext(tx : Float, ty : Float, tz : Float) -> Unit {
  let fp : FuncRef[(Float, Float, Float) -> Unit] = d_glTangent3fEXT
    .get()
    .unsafe_into()
  fp(tx, ty, tz)
}

///|
let d_glTangent3fvEXT : Dispatch = Dispatch::new("glTangent3fvEXT")

///|
pub fn gl_tangent3fv_ext(v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Float]) -> Unit] = d_glTangent3fvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glTangent3iEXT : Dispatch = Dispatch::new("glTangent3iEXT")

///|
pub fn gl_tangent3i_ext(tx : Int, ty : Int, tz : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glTangent3iEXT
    .get()
    .unsafe_into()
  fp(tx, ty, tz)
}

///|
let d_glTangent3ivEXT : Dispatch = Dispatch::new("glTangent3ivEXT")

///|
pub fn gl_tangent3iv_ext(v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glTangent3ivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glTangent3sEXT : Dispatch = Dispatch::new("glTangent3sEXT")

///|
pub fn gl_tangent3s_ext(tx : Int, ty : Int, tz : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glTangent3sEXT
    .get()
    .unsafe_into()
  fp(tx, ty, tz)
}

///|
let d_glTangent3svEXT : Dispatch = Dispatch::new("glTangent3svEXT")

///|
pub fn gl_tangent3sv_ext(v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int16]) -> Unit] = d_glTangent3svEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glTangentPointerEXT : Dispatch = Dispatch::new("glTangentPointerEXT")

///|
pub fn gl_tangent_pointer_ext(
  type_ : UInt,
  stride : Int,
  pointer : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Byte]) -> Unit] = d_glTangentPointerEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(pointer, fn(pointer_p) { fp(type_, stride, pointer_p) })
}

///|
let d_glTbufferMask3DFX : Dispatch = Dispatch::new("glTbufferMask3DFX")

///|
pub fn gl_tbuffer_mask3_dfx(mask : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glTbufferMask3DFX.get().unsafe_into()
  fp(mask)
}

///|
let d_glTessellationFactorAMD : Dispatch = Dispatch::new(
  "glTessellationFactorAMD",
)

///|
pub fn gl_tessellation_factor_amd(factor : Float) -> Unit {
  let fp : FuncRef[(Float) -> Unit] = d_glTessellationFactorAMD
    .get()
    .unsafe_into()
  fp(factor)
}

///|
let d_glTessellationModeAMD : Dispatch = Dispatch::new("glTessellationModeAMD")

///|
pub fn gl_tessellation_mode_amd(mode : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glTessellationModeAMD.get().unsafe_into()
  fp(mode)
}

///|
let d_glTestFenceAPPLE : Dispatch = Dispatch::new("glTestFenceAPPLE")

///|
pub fn gl_test_fence_apple(fence : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glTestFenceAPPLE.get().unsafe_into()
  (fp(fence) & 0xFF) != 0
}

///|
let d_glTestFenceNV : Dispatch = Dispatch::new("glTestFenceNV")

///|
pub fn gl_test_fence_nv(fence : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glTestFenceNV.get().unsafe_into()
  (fp(fence) & 0xFF) != 0
}

///|
let d_glTestObjectAPPLE : Dispatch = Dispatch::new("glTestObjectAPPLE")

///|
pub fn gl_test_object_apple(object : UInt, name : UInt) -> Bool {
  let fp : FuncRef[(UInt, UInt) -> Int] = d_glTestObjectAPPLE
    .get()
    .unsafe_into()
  (fp(object, name) & 0xFF) != 0
}

///|
let d_glTexAttachMemoryNV : Dispatch = Dispatch::new("glTexAttachMemoryNV")

///|
pub fn gl_tex_attach_memory_nv(
  target : UInt,
  memory : UInt,
  offset : UInt64,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt64) -> Unit] = d_glTexAttachMemoryNV
    .get()
    .unsafe_into()
  fp(target, memory, offset)
}

///|
let d_glTexBuffer : Dispatch = Dispatch::with_aliases("glTexBuffer", [
  "glTexBufferARB", "glTexBufferEXT", "glTexBufferOES",
])

///|
pub fn gl_tex_buffer(
  target : UInt,
  internalformat : UInt,
  buffer : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glTexBuffer
    .get()
    .unsafe_into()
  fp(target, internalformat, buffer)
}

///|
let d_glTexBufferARB : Dispatch = Dispatch::with_aliases("glTexBufferARB", [
  "glTexBuffer", "glTexBufferEXT", "glTexBufferOES",
])

///|
pub fn gl_tex_buffer_arb(
  target : UInt,
  internalformat : UInt,
  buffer : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glTexBufferARB
    .get()
    .unsafe_into()
  fp(target, internalformat, buffer)
}

///|
let d_glTexBufferEXT : Dispatch = Dispatch::with_aliases("glTexBufferEXT", [
  "glTexBuffer", "glTexBufferARB", "glTexBufferOES",
])

///|
pub fn gl_tex_buffer_ext(
  target : UInt,
  internalformat : UInt,
  buffer : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glTexBufferEXT
    .get()
    .unsafe_into()
  fp(target, internalformat, buffer)
}

///|
let d_glTexBufferOES : Dispatch = Dispatch::with_aliases("glTexBufferOES", [
  "glTexBuffer", "glTexBufferARB", "glTexBufferEXT",
])

///|
pub fn gl_tex_buffer_oes(
  target : UInt,
  internalformat : UInt,
  buffer : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glTexBufferOES
    .get()
    .unsafe_into()
  fp(target, internalformat, buffer)
}

///|
let d_glTexBufferRange : Dispatch = Dispatch::with_aliases("glTexBufferRange", [
  "glTexBufferRangeEXT", "glTexBufferRangeOES",
])

///|
pub fn gl_tex_buffer_range(
  target : UInt,
  internalformat : UInt,
  buffer : UInt,
  offset : Int64,
  size : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int64, Int64) -> Unit] = d_glTexBufferRange
    .get()
    .unsafe_into()
  fp(target, internalformat, buffer, offset, size)
}

///|
let d_glTexBufferRangeEXT : Dispatch = Dispatch::with_aliases(
  "glTexBufferRangeEXT",
  ["glTexBufferRange", "glTexBufferRangeOES"],
)

///|
pub fn gl_tex_buffer_range_ext(
  target : UInt,
  internalformat : UInt,
  buffer : UInt,
  offset : Int64,
  size : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int64, Int64) -> Unit] = d_glTexBufferRangeEXT
    .get()
    .unsafe_into()
  fp(target, internalformat, buffer, offset, size)
}

///|
let d_glTexBufferRangeOES : Dispatch = Dispatch::with_aliases(
  "glTexBufferRangeOES",
  ["glTexBufferRange", "glTexBufferRangeEXT"],
)

///|
pub fn gl_tex_buffer_range_oes(
  target : UInt,
  internalformat : UInt,
  buffer : UInt,
  offset : Int64,
  size : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int64, Int64) -> Unit] = d_glTexBufferRangeOES
    .get()
    .unsafe_into()
  fp(target, internalformat, buffer, offset, size)
}

///|
let d_glTexBumpParameterfvATI : Dispatch = Dispatch::new(
  "glTexBumpParameterfvATI",
)

///|
pub fn gl_tex_bump_parameterfv_ati(
  pname : UInt,
  param : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glTexBumpParameterfvATI
    .get()
    .unsafe_into()
  @pointer.borrow_array(param, fn(param_p) { fp(pname, param_p) })
}

///|
let d_glTexBumpParameterivATI : Dispatch = Dispatch::new(
  "glTexBumpParameterivATI",
)

///|
pub fn gl_tex_bump_parameteriv_ati(
  pname : UInt,
  param : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glTexBumpParameterivATI
    .get()
    .unsafe_into()
  @pointer.borrow_array(param, fn(param_p) { fp(pname, param_p) })
}

///|
let d_glTexCoord1bOES : Dispatch = Dispatch::new("glTexCoord1bOES")

///|
pub fn gl_tex_coord1b_oes(s : Int) -> Unit {
  let fp : FuncRef[(Int) -> Unit] = d_glTexCoord1bOES.get().unsafe_into()
  fp(s)
}

///|
let d_glTexCoord1bvOES : Dispatch = Dispatch::new("glTexCoord1bvOES")

///|
pub fn gl_tex_coord1bv_oes(coords : Bytes) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Byte]) -> Unit] = d_glTexCoord1bvOES
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(coords, fn(coords_p) { fp(coords_p) })
}

///|
let d_glTexCoord1d : Dispatch = Dispatch::new("glTexCoord1d")

///|
pub fn gl_tex_coord1d(s : Double) -> Unit {
  let fp : FuncRef[(Double) -> Unit] = d_glTexCoord1d.get().unsafe_into()
  fp(s)
}

///|
let d_glTexCoord1dv : Dispatch = Dispatch::new("glTexCoord1dv")

///|
pub fn gl_tex_coord1dv(v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Double]) -> Unit] = d_glTexCoord1dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glTexCoord1f : Dispatch = Dispatch::new("glTexCoord1f")

///|
pub fn gl_tex_coord1f(s : Float) -> Unit {
  let fp : FuncRef[(Float) -> Unit] = d_glTexCoord1f.get().unsafe_into()
  fp(s)
}

///|
let d_glTexCoord1fv : Dispatch = Dispatch::new("glTexCoord1fv")

///|
pub fn gl_tex_coord1fv(v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Float]) -> Unit] = d_glTexCoord1fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glTexCoord1hNV : Dispatch = Dispatch::new("glTexCoord1hNV")

///|
pub fn gl_tex_coord1h_nv(s : Int) -> Unit {
  let fp : FuncRef[(Int) -> Unit] = d_glTexCoord1hNV.get().unsafe_into()
  fp(s)
}

///|
let d_glTexCoord1hvNV : Dispatch = Dispatch::new("glTexCoord1hvNV")

///|
pub fn gl_tex_coord1hv_nv(v : FixedArray[UInt16]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[UInt16]) -> Unit] = d_glTexCoord1hvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glTexCoord1i : Dispatch = Dispatch::new("glTexCoord1i")

///|
pub fn gl_tex_coord1i(s : Int) -> Unit {
  let fp : FuncRef[(Int) -> Unit] = d_glTexCoord1i.get().unsafe_into()
  fp(s)
}

///|
let d_glTexCoord1iv : Dispatch = Dispatch::new("glTexCoord1iv")

///|
pub fn gl_tex_coord1iv(v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glTexCoord1iv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glTexCoord1s : Dispatch = Dispatch::new("glTexCoord1s")

///|
pub fn gl_tex_coord1s(s : Int) -> Unit {
  let fp : FuncRef[(Int) -> Unit] = d_glTexCoord1s.get().unsafe_into()
  fp(s)
}

///|
let d_glTexCoord1sv : Dispatch = Dispatch::new("glTexCoord1sv")

///|
pub fn gl_tex_coord1sv(v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int16]) -> Unit] = d_glTexCoord1sv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glTexCoord1xOES : Dispatch = Dispatch::new("glTexCoord1xOES")

///|
pub fn gl_tex_coord1x_oes(s : Int) -> Unit {
  let fp : FuncRef[(Int) -> Unit] = d_glTexCoord1xOES.get().unsafe_into()
  fp(s)
}

///|
let d_glTexCoord1xvOES : Dispatch = Dispatch::new("glTexCoord1xvOES")

///|
pub fn gl_tex_coord1xv_oes(coords : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glTexCoord1xvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(coords_p) })
}

///|
let d_glTexCoord2bOES : Dispatch = Dispatch::new("glTexCoord2bOES")

///|
pub fn gl_tex_coord2b_oes(s : Int, t : Int) -> Unit {
  let fp : FuncRef[(Int, Int) -> Unit] = d_glTexCoord2bOES.get().unsafe_into()
  fp(s, t)
}

///|
let d_glTexCoord2bvOES : Dispatch = Dispatch::new("glTexCoord2bvOES")

///|
pub fn gl_tex_coord2bv_oes(coords : Bytes) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Byte]) -> Unit] = d_glTexCoord2bvOES
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(coords, fn(coords_p) { fp(coords_p) })
}

///|
let d_glTexCoord2d : Dispatch = Dispatch::new("glTexCoord2d")

///|
pub fn gl_tex_coord2d(s : Double, t : Double) -> Unit {
  let fp : FuncRef[(Double, Double) -> Unit] = d_glTexCoord2d
    .get()
    .unsafe_into()
  fp(s, t)
}

///|
let d_glTexCoord2dv : Dispatch = Dispatch::new("glTexCoord2dv")

///|
pub fn gl_tex_coord2dv(v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Double]) -> Unit] = d_glTexCoord2dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glTexCoord2f : Dispatch = Dispatch::new("glTexCoord2f")

///|
pub fn gl_tex_coord2f(s : Float, t : Float) -> Unit {
  let fp : FuncRef[(Float, Float) -> Unit] = d_glTexCoord2f.get().unsafe_into()
  fp(s, t)
}

///|
let d_glTexCoord2fColor3fVertex3fSUN : Dispatch = Dispatch::new(
  "glTexCoord2fColor3fVertex3fSUN",
)

///|
pub fn gl_tex_coord2f_color3f_vertex3f_sun(
  s : Float,
  t : Float,
  r : Float,
  g : Float,
  b : Float,
  x : Float,
  y : Float,
  z : Float,
) -> Unit {
  let fp : FuncRef[
    (Float, Float, Float, Float, Float, Float, Float, Float) -> Unit,
  ] = d_glTexCoord2fColor3fVertex3fSUN.get().unsafe_into()
  fp(s, t, r, g, b, x, y, z)
}

///|
let d_glTexCoord2fColor3fVertex3fvSUN : Dispatch = Dispatch::new(
  "glTexCoord2fColor3fVertex3fvSUN",
)

///|
pub fn gl_tex_coord2f_color3f_vertex3fv_sun(
  tc : FixedArray[Float],
  c : FixedArray[Float],
  v : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[
    (@pointer.Pointer[Float], @pointer.Pointer[Float], @pointer.Pointer[Float]) -> Unit,
  ] = d_glTexCoord2fColor3fVertex3fvSUN.get().unsafe_into()
  @pointer.borrow_array(tc, fn(tc_p) {
    @pointer.borrow_array(c, fn(c_p) {
      @pointer.borrow_array(v, fn(v_p) { fp(tc_p, c_p, v_p) })
    })
  })
}

///|
let d_glTexCoord2fColor4fNormal3fVertex3fSUN : Dispatch = Dispatch::new(
  "glTexCoord2fColor4fNormal3fVertex3fSUN",
)

///|
pub fn gl_tex_coord2f_color4f_normal3f_vertex3f_sun(
  s : Float,
  t : Float,
  r : Float,
  g : Float,
  b : Float,
  a : Float,
  nx : Float,
  ny : Float,
  nz : Float,
  x : Float,
  y : Float,
  z : Float,
) -> Unit {
  let fp : FuncRef[
    (
      Float,
      Float,
      Float,
      Float,
      Float,
      Float,
      Float,
      Float,
      Float,
      Float,
      Float,
      Float,
    ) -> Unit,
  ] = d_glTexCoord2fColor4fNormal3fVertex3fSUN.get().unsafe_into()
  fp(s, t, r, g, b, a, nx, ny, nz, x, y, z)
}

///|
let d_glTexCoord2fColor4fNormal3fVertex3fvSUN : Dispatch = Dispatch::new(
  "glTexCoord2fColor4fNormal3fVertex3fvSUN",
)

///|
pub fn gl_tex_coord2f_color4f_normal3f_vertex3fv_sun(
  tc : FixedArray[Float],
  c : FixedArray[Float],
  n : FixedArray[Float],
  v : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[
    (
      @pointer.Pointer[Float],
      @pointer.Pointer[Float],
      @pointer.Pointer[Float],
      @pointer.Pointer[Float],
    ) -> Unit,
  ] = d_glTexCoord2fColor4fNormal3fVertex3fvSUN.get().unsafe_into()
  @pointer.borrow_array(tc, fn(tc_p) {
    @pointer.borrow_array(c, fn(c_p) {
      @pointer.borrow_array(n, fn(n_p) {
        @pointer.borrow_array(v, fn(v_p) { fp(tc_p, c_p, n_p, v_p) })
      })
    })
  })
}

///|
let d_glTexCoord2fColor4ubVertex3fSUN : Dispatch = Dispatch::new(
  "glTexCoord2fColor4ubVertex3fSUN",
)

///|
pub fn gl_tex_coord2f_color4ub_vertex3f_sun(
  s : Float,
  t : Float,
  r : Int,
  g : Int,
  b : Int,
  a : Int,
  x : Float,
  y : Float,
  z : Float,
) -> Unit {
  let fp : FuncRef[
    (Float, Float, Int, Int, Int, Int, Float, Float, Float) -> Unit,
  ] = d_glTexCoord2fColor4ubVertex3fSUN.get().unsafe_into()
  fp(s, t, r, g, b, a, x, y, z)
}

///|
let d_glTexCoord2fColor4ubVertex3fvSUN : Dispatch = Dispatch::new(
  "glTexCoord2fColor4ubVertex3fvSUN",
)

///|
pub fn gl_tex_coord2f_color4ub_vertex3fv_sun(
  tc : FixedArray[Float],
  c : Bytes,
  v : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[
    (@pointer.Pointer[Float], @pointer.Pointer[Byte], @pointer.Pointer[Float]) -> Unit,
  ] = d_glTexCoord2fColor4ubVertex3fvSUN.get().unsafe_into()
  @pointer.borrow_array(tc, fn(tc_p) {
    @pointer.borrow_bytes(c, fn(c_p) {
      @pointer.borrow_array(v, fn(v_p) { fp(tc_p, c_p, v_p) })
    })
  })
}

///|
let d_glTexCoord2fNormal3fVertex3fSUN : Dispatch = Dispatch::new(
  "glTexCoord2fNormal3fVertex3fSUN",
)

///|
pub fn gl_tex_coord2f_normal3f_vertex3f_sun(
  s : Float,
  t : Float,
  nx : Float,
  ny : Float,
  nz : Float,
  x : Float,
  y : Float,
  z : Float,
) -> Unit {
  let fp : FuncRef[
    (Float, Float, Float, Float, Float, Float, Float, Float) -> Unit,
  ] = d_glTexCoord2fNormal3fVertex3fSUN.get().unsafe_into()
  fp(s, t, nx, ny, nz, x, y, z)
}

///|
let d_glTexCoord2fNormal3fVertex3fvSUN : Dispatch = Dispatch::new(
  "glTexCoord2fNormal3fVertex3fvSUN",
)

///|
pub fn gl_tex_coord2f_normal3f_vertex3fv_sun(
  tc : FixedArray[Float],
  n : FixedArray[Float],
  v : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[
    (@pointer.Pointer[Float], @pointer.Pointer[Float], @pointer.Pointer[Float]) -> Unit,
  ] = d_glTexCoord2fNormal3fVertex3fvSUN.get().unsafe_into()
  @pointer.borrow_array(tc, fn(tc_p) {
    @pointer.borrow_array(n, fn(n_p) {
      @pointer.borrow_array(v, fn(v_p) { fp(tc_p, n_p, v_p) })
    })
  })
}

///|
let d_glTexCoord2fVertex3fSUN : Dispatch = Dispatch::new(
  "glTexCoord2fVertex3fSUN",
)

///|
pub fn gl_tex_coord2f_vertex3f_sun(
  s : Float,
  t : Float,
  x : Float,
  y : Float,
  z : Float,
) -> Unit {
  let fp : FuncRef[(Float, Float, Float, Float, Float) -> Unit] = d_glTexCoord2fVertex3fSUN
    .get()
    .unsafe_into()
  fp(s, t, x, y, z)
}

///|
let d_glTexCoord2fVertex3fvSUN : Dispatch = Dispatch::new(
  "glTexCoord2fVertex3fvSUN",
)

///|
pub fn gl_tex_coord2f_vertex3fv_sun(
  tc : FixedArray[Float],
  v : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Float], @pointer.Pointer[Float]) -> Unit] = d_glTexCoord2fVertex3fvSUN
    .get()
    .unsafe_into()
  @pointer.borrow_array(tc, fn(tc_p) {
    @pointer.borrow_array(v, fn(v_p) { fp(tc_p, v_p) })
  })
}

///|
let d_glTexCoord2fv : Dispatch = Dispatch::new("glTexCoord2fv")

///|
pub fn gl_tex_coord2fv(v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Float]) -> Unit] = d_glTexCoord2fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glTexCoord2hNV : Dispatch = Dispatch::new("glTexCoord2hNV")

///|
pub fn gl_tex_coord2h_nv(s : Int, t : Int) -> Unit {
  let fp : FuncRef[(Int, Int) -> Unit] = d_glTexCoord2hNV.get().unsafe_into()
  fp(s, t)
}

///|
let d_glTexCoord2hvNV : Dispatch = Dispatch::new("glTexCoord2hvNV")

///|
pub fn gl_tex_coord2hv_nv(v : FixedArray[UInt16]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[UInt16]) -> Unit] = d_glTexCoord2hvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glTexCoord2i : Dispatch = Dispatch::new("glTexCoord2i")

///|
pub fn gl_tex_coord2i(s : Int, t : Int) -> Unit {
  let fp : FuncRef[(Int, Int) -> Unit] = d_glTexCoord2i.get().unsafe_into()
  fp(s, t)
}

///|
let d_glTexCoord2iv : Dispatch = Dispatch::new("glTexCoord2iv")

///|
pub fn gl_tex_coord2iv(v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glTexCoord2iv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glTexCoord2s : Dispatch = Dispatch::new("glTexCoord2s")

///|
pub fn gl_tex_coord2s(s : Int, t : Int) -> Unit {
  let fp : FuncRef[(Int, Int) -> Unit] = d_glTexCoord2s.get().unsafe_into()
  fp(s, t)
}

///|
let d_glTexCoord2sv : Dispatch = Dispatch::new("glTexCoord2sv")

///|
pub fn gl_tex_coord2sv(v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int16]) -> Unit] = d_glTexCoord2sv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glTexCoord2xOES : Dispatch = Dispatch::new("glTexCoord2xOES")

///|
pub fn gl_tex_coord2x_oes(s : Int, t : Int) -> Unit {
  let fp : FuncRef[(Int, Int) -> Unit] = d_glTexCoord2xOES.get().unsafe_into()
  fp(s, t)
}

///|
let d_glTexCoord2xvOES : Dispatch = Dispatch::new("glTexCoord2xvOES")

///|
pub fn gl_tex_coord2xv_oes(coords : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glTexCoord2xvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(coords_p) })
}

///|
let d_glTexCoord3bOES : Dispatch = Dispatch::new("glTexCoord3bOES")

///|
pub fn gl_tex_coord3b_oes(s : Int, t : Int, r : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glTexCoord3bOES
    .get()
    .unsafe_into()
  fp(s, t, r)
}

///|
let d_glTexCoord3bvOES : Dispatch = Dispatch::new("glTexCoord3bvOES")

///|
pub fn gl_tex_coord3bv_oes(coords : Bytes) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Byte]) -> Unit] = d_glTexCoord3bvOES
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(coords, fn(coords_p) { fp(coords_p) })
}

///|
let d_glTexCoord3d : Dispatch = Dispatch::new("glTexCoord3d")

///|
pub fn gl_tex_coord3d(s : Double, t : Double, r : Double) -> Unit {
  let fp : FuncRef[(Double, Double, Double) -> Unit] = d_glTexCoord3d
    .get()
    .unsafe_into()
  fp(s, t, r)
}

///|
let d_glTexCoord3dv : Dispatch = Dispatch::new("glTexCoord3dv")

///|
pub fn gl_tex_coord3dv(v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Double]) -> Unit] = d_glTexCoord3dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glTexCoord3f : Dispatch = Dispatch::new("glTexCoord3f")

///|
pub fn gl_tex_coord3f(s : Float, t : Float, r : Float) -> Unit {
  let fp : FuncRef[(Float, Float, Float) -> Unit] = d_glTexCoord3f
    .get()
    .unsafe_into()
  fp(s, t, r)
}

///|
let d_glTexCoord3fv : Dispatch = Dispatch::new("glTexCoord3fv")

///|
pub fn gl_tex_coord3fv(v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Float]) -> Unit] = d_glTexCoord3fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glTexCoord3hNV : Dispatch = Dispatch::new("glTexCoord3hNV")

///|
pub fn gl_tex_coord3h_nv(s : Int, t : Int, r : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glTexCoord3hNV
    .get()
    .unsafe_into()
  fp(s, t, r)
}

///|
let d_glTexCoord3hvNV : Dispatch = Dispatch::new("glTexCoord3hvNV")

///|
pub fn gl_tex_coord3hv_nv(v : FixedArray[UInt16]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[UInt16]) -> Unit] = d_glTexCoord3hvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glTexCoord3i : Dispatch = Dispatch::new("glTexCoord3i")

///|
pub fn gl_tex_coord3i(s : Int, t : Int, r : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glTexCoord3i.get().unsafe_into()
  fp(s, t, r)
}

///|
let d_glTexCoord3iv : Dispatch = Dispatch::new("glTexCoord3iv")

///|
pub fn gl_tex_coord3iv(v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glTexCoord3iv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glTexCoord3s : Dispatch = Dispatch::new("glTexCoord3s")

///|
pub fn gl_tex_coord3s(s : Int, t : Int, r : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glTexCoord3s.get().unsafe_into()
  fp(s, t, r)
}

///|
let d_glTexCoord3sv : Dispatch = Dispatch::new("glTexCoord3sv")

///|
pub fn gl_tex_coord3sv(v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int16]) -> Unit] = d_glTexCoord3sv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glTexCoord3xOES : Dispatch = Dispatch::new("glTexCoord3xOES")

///|
pub fn gl_tex_coord3x_oes(s : Int, t : Int, r : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glTexCoord3xOES
    .get()
    .unsafe_into()
  fp(s, t, r)
}

///|
let d_glTexCoord3xvOES : Dispatch = Dispatch::new("glTexCoord3xvOES")

///|
pub fn gl_tex_coord3xv_oes(coords : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glTexCoord3xvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(coords_p) })
}

///|
let d_glTexCoord4bOES : Dispatch = Dispatch::new("glTexCoord4bOES")

///|
pub fn gl_tex_coord4b_oes(s : Int, t : Int, r : Int, q : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int) -> Unit] = d_glTexCoord4bOES
    .get()
    .unsafe_into()
  fp(s, t, r, q)
}

///|
let d_glTexCoord4bvOES : Dispatch = Dispatch::new("glTexCoord4bvOES")

///|
pub fn gl_tex_coord4bv_oes(coords : Bytes) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Byte]) -> Unit] = d_glTexCoord4bvOES
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(coords, fn(coords_p) { fp(coords_p) })
}

///|
let d_glTexCoord4d : Dispatch = Dispatch::new("glTexCoord4d")

///|
pub fn gl_tex_coord4d(s : Double, t : Double, r : Double, q : Double) -> Unit {
  let fp : FuncRef[(Double, Double, Double, Double) -> Unit] = d_glTexCoord4d
    .get()
    .unsafe_into()
  fp(s, t, r, q)
}

///|
let d_glTexCoord4dv : Dispatch = Dispatch::new("glTexCoord4dv")

///|
pub fn gl_tex_coord4dv(v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Double]) -> Unit] = d_glTexCoord4dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glTexCoord4f : Dispatch = Dispatch::new("glTexCoord4f")

///|
pub fn gl_tex_coord4f(s : Float, t : Float, r : Float, q : Float) -> Unit {
  let fp : FuncRef[(Float, Float, Float, Float) -> Unit] = d_glTexCoord4f
    .get()
    .unsafe_into()
  fp(s, t, r, q)
}

///|
let d_glTexCoord4fColor4fNormal3fVertex4fSUN : Dispatch = Dispatch::new(
  "glTexCoord4fColor4fNormal3fVertex4fSUN",
)

///|
pub fn gl_tex_coord4f_color4f_normal3f_vertex4f_sun(
  s : Float,
  t : Float,
  p : Float,
  q : Float,
  r : Float,
  g : Float,
  b : Float,
  a : Float,
  nx : Float,
  ny : Float,
  nz : Float,
  x : Float,
  y : Float,
  z : Float,
  w : Float,
) -> Unit {
  let fp : FuncRef[
    (
      Float,
      Float,
      Float,
      Float,
      Float,
      Float,
      Float,
      Float,
      Float,
      Float,
      Float,
      Float,
      Float,
      Float,
      Float,
    ) -> Unit,
  ] = d_glTexCoord4fColor4fNormal3fVertex4fSUN.get().unsafe_into()
  fp(s, t, p, q, r, g, b, a, nx, ny, nz, x, y, z, w)
}

///|
let d_glTexCoord4fColor4fNormal3fVertex4fvSUN : Dispatch = Dispatch::new(
  "glTexCoord4fColor4fNormal3fVertex4fvSUN",
)

///|
pub fn gl_tex_coord4f_color4f_normal3f_vertex4fv_sun(
  tc : FixedArray[Float],
  c : FixedArray[Float],
  n : FixedArray[Float],
  v : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[
    (
      @pointer.Pointer[Float],
      @pointer.Pointer[Float],
      @pointer.Pointer[Float],
      @pointer.Pointer[Float],
    ) -> Unit,
  ] = d_glTexCoord4fColor4fNormal3fVertex4fvSUN.get().unsafe_into()
  @pointer.borrow_array(tc, fn(tc_p) {
    @pointer.borrow_array(c, fn(c_p) {
      @pointer.borrow_array(n, fn(n_p) {
        @pointer.borrow_array(v, fn(v_p) { fp(tc_p, c_p, n_p, v_p) })
      })
    })
  })
}

///|
let d_glTexCoord4fVertex4fSUN : Dispatch = Dispatch::new(
  "glTexCoord4fVertex4fSUN",
)

///|
pub fn gl_tex_coord4f_vertex4f_sun(
  s : Float,
  t : Float,
  p : Float,
  q : Float,
  x : Float,
  y : Float,
  z : Float,
  w : Float,
) -> Unit {
  let fp : FuncRef[
    (Float, Float, Float, Float, Float, Float, Float, Float) -> Unit,
  ] = d_glTexCoord4fVertex4fSUN.get().unsafe_into()
  fp(s, t, p, q, x, y, z, w)
}

///|
let d_glTexCoord4fVertex4fvSUN : Dispatch = Dispatch::new(
  "glTexCoord4fVertex4fvSUN",
)

///|
pub fn gl_tex_coord4f_vertex4fv_sun(
  tc : FixedArray[Float],
  v : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Float], @pointer.Pointer[Float]) -> Unit] = d_glTexCoord4fVertex4fvSUN
    .get()
    .unsafe_into()
  @pointer.borrow_array(tc, fn(tc_p) {
    @pointer.borrow_array(v, fn(v_p) { fp(tc_p, v_p) })
  })
}

///|
let d_glTexCoord4fv : Dispatch = Dispatch::new("glTexCoord4fv")

///|
pub fn gl_tex_coord4fv(v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Float]) -> Unit] = d_glTexCoord4fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glTexCoord4hNV : Dispatch = Dispatch::new("glTexCoord4hNV")

///|
pub fn gl_tex_coord4h_nv(s : Int, t : Int, r : Int, q : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int) -> Unit] = d_glTexCoord4hNV
    .get()
    .unsafe_into()
  fp(s, t, r, q)
}

///|
let d_glTexCoord4hvNV : Dispatch = Dispatch::new("glTexCoord4hvNV")

///|
pub fn gl_tex_coord4hv_nv(v : FixedArray[UInt16]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[UInt16]) -> Unit] = d_glTexCoord4hvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glTexCoord4i : Dispatch = Dispatch::new("glTexCoord4i")

///|
pub fn gl_tex_coord4i(s : Int, t : Int, r : Int, q : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int) -> Unit] = d_glTexCoord4i
    .get()
    .unsafe_into()
  fp(s, t, r, q)
}

///|
let d_glTexCoord4iv : Dispatch = Dispatch::new("glTexCoord4iv")

///|
pub fn gl_tex_coord4iv(v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glTexCoord4iv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glTexCoord4s : Dispatch = Dispatch::new("glTexCoord4s")

///|
pub fn gl_tex_coord4s(s : Int, t : Int, r : Int, q : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int) -> Unit] = d_glTexCoord4s
    .get()
    .unsafe_into()
  fp(s, t, r, q)
}

///|
let d_glTexCoord4sv : Dispatch = Dispatch::new("glTexCoord4sv")

///|
pub fn gl_tex_coord4sv(v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int16]) -> Unit] = d_glTexCoord4sv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glTexCoord4xOES : Dispatch = Dispatch::new("glTexCoord4xOES")

///|
pub fn gl_tex_coord4x_oes(s : Int, t : Int, r : Int, q : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int) -> Unit] = d_glTexCoord4xOES
    .get()
    .unsafe_into()
  fp(s, t, r, q)
}

///|
let d_glTexCoord4xvOES : Dispatch = Dispatch::new("glTexCoord4xvOES")

///|
pub fn gl_tex_coord4xv_oes(coords : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glTexCoord4xvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(coords_p) })
}

///|
let d_glTexCoordFormatNV : Dispatch = Dispatch::new("glTexCoordFormatNV")

///|
pub fn gl_tex_coord_format_nv(size : Int, type_ : UInt, stride : Int) -> Unit {
  let fp : FuncRef[(Int, UInt, Int) -> Unit] = d_glTexCoordFormatNV
    .get()
    .unsafe_into()
  fp(size, type_, stride)
}

///|
let d_glTexCoordP1ui : Dispatch = Dispatch::new("glTexCoordP1ui")

///|
pub fn gl_tex_coord_p1ui(type_ : UInt, coords : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glTexCoordP1ui.get().unsafe_into()
  fp(type_, coords)
}

///|
let d_glTexCoordP1uiv : Dispatch = Dispatch::new("glTexCoordP1uiv")

///|
pub fn gl_tex_coord_p1uiv(type_ : UInt, coords : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt]) -> Unit] = d_glTexCoordP1uiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(type_, coords_p) })
}

///|
let d_glTexCoordP2ui : Dispatch = Dispatch::new("glTexCoordP2ui")

///|
pub fn gl_tex_coord_p2ui(type_ : UInt, coords : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glTexCoordP2ui.get().unsafe_into()
  fp(type_, coords)
}

///|
let d_glTexCoordP2uiv : Dispatch = Dispatch::new("glTexCoordP2uiv")

///|
pub fn gl_tex_coord_p2uiv(type_ : UInt, coords : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt]) -> Unit] = d_glTexCoordP2uiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(type_, coords_p) })
}

///|
let d_glTexCoordP3ui : Dispatch = Dispatch::new("glTexCoordP3ui")

///|
pub fn gl_tex_coord_p3ui(type_ : UInt, coords : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glTexCoordP3ui.get().unsafe_into()
  fp(type_, coords)
}

///|
let d_glTexCoordP3uiv : Dispatch = Dispatch::new("glTexCoordP3uiv")

///|
pub fn gl_tex_coord_p3uiv(type_ : UInt, coords : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt]) -> Unit] = d_glTexCoordP3uiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(type_, coords_p) })
}

///|
let d_glTexCoordP4ui : Dispatch = Dispatch::new("glTexCoordP4ui")

///|
pub fn gl_tex_coord_p4ui(type_ : UInt, coords : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glTexCoordP4ui.get().unsafe_into()
  fp(type_, coords)
}

///|
let d_glTexCoordP4uiv : Dispatch = Dispatch::new("glTexCoordP4uiv")

///|
pub fn gl_tex_coord_p4uiv(type_ : UInt, coords : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt]) -> Unit] = d_glTexCoordP4uiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(type_, coords_p) })
}

///|
let d_glTexCoordPointer : Dispatch = Dispatch::new("glTexCoordPointer")

///|
/// Configure a vertex array from the buffer currently bound to `GL_ARRAY_BUFFER`.
/// `offset` is a byte offset; client-side arrays are not accepted.
pub fn gl_tex_coord_pointer(
  size : Int,
  type_ : UInt,
  stride : Int,
  offset : Int64,
) -> Unit {
  let fp : FuncRef[(Int, UInt, Int, @pointer.Pointer[Unit]) -> Unit] = d_glTexCoordPointer
    .get()
    .unsafe_into()
  fp(size, type_, stride, @pointer.Pointer::unsafe_from_int64(offset))
}

///|
let d_glTexCoordPointerEXT : Dispatch = Dispatch::new("glTexCoordPointerEXT")

///|
pub fn gl_tex_coord_pointer_ext(
  size : Int,
  type_ : UInt,
  stride : Int,
  count : Int,
  pointer : Bytes,
) -> Unit {
  let fp : FuncRef[(Int, UInt, Int, Int, @pointer.Pointer[Byte]) -> Unit] = d_glTexCoordPointerEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(pointer, fn(pointer_p) {
    fp(size, type_, stride, count, pointer_p)
  })
}

///|
let d_glTexEnvf : Dispatch = Dispatch::new("glTexEnvf")

///|
pub fn gl_tex_envf(target : UInt, pname : UInt, param : Float) -> Unit {
  let fp : FuncRef[(UInt, UInt, Float) -> Unit] = d_glTexEnvf
    .get()
    .unsafe_into()
  fp(target, pname, param)
}

///|
let d_glTexEnvfv : Dispatch = Dispatch::new("glTexEnvfv")

///|
pub fn gl_tex_envfv(
  target : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glTexEnvfv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glTexEnvi : Dispatch = Dispatch::new("glTexEnvi")

///|
pub fn gl_tex_envi(target : UInt, pname : UInt, param : Int) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int) -> Unit] = d_glTexEnvi.get().unsafe_into()
  fp(target, pname, param)
}

///|
let d_glTexEnviv : Dispatch = Dispatch::new("glTexEnviv")

///|
pub fn gl_tex_enviv(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glTexEnviv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glTexEnvx : Dispatch = Dispatch::new("glTexEnvx")

///|
pub fn gl_tex_envx(target : UInt, pname : UInt, param : Int) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int) -> Unit] = d_glTexEnvx.get().unsafe_into()
  fp(target, pname, param)
}

///|
let d_glTexEnvxOES : Dispatch = Dispatch::new("glTexEnvxOES")

///|
pub fn gl_tex_envx_oes(target : UInt, pname : UInt, param : Int) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int) -> Unit] = d_glTexEnvxOES
    .get()
    .unsafe_into()
  fp(target, pname, param)
}

///|
let d_glTexEnvxv : Dispatch = Dispatch::new("glTexEnvxv")

///|
pub fn gl_tex_envxv(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glTexEnvxv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glTexEnvxvOES : Dispatch = Dispatch::new("glTexEnvxvOES")

///|
pub fn gl_tex_envxv_oes(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glTexEnvxvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glTexEstimateMotionQCOM : Dispatch = Dispatch::new(
  "glTexEstimateMotionQCOM",
)

///|
pub fn gl_tex_estimate_motion_qcom(
  ref_ : UInt,
  target : UInt,
  output : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glTexEstimateMotionQCOM
    .get()
    .unsafe_into()
  fp(ref_, target, output)
}

///|
let d_glTexEstimateMotionRegionsQCOM : Dispatch = Dispatch::new(
  "glTexEstimateMotionRegionsQCOM",
)

///|
pub fn gl_tex_estimate_motion_regions_qcom(
  ref_ : UInt,
  target : UInt,
  output : UInt,
  mask : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt) -> Unit] = d_glTexEstimateMotionRegionsQCOM
    .get()
    .unsafe_into()
  fp(ref_, target, output, mask)
}

///|
let d_glExtrapolateTex2DQCOM : Dispatch = Dispatch::new(
  "glExtrapolateTex2DQCOM",
)

///|
pub fn gl_extrapolate_tex2_dqcom(
  src1 : UInt,
  src2 : UInt,
  output : UInt,
  scaleFactor : Float,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Float) -> Unit] = d_glExtrapolateTex2DQCOM
    .get()
    .unsafe_into()
  fp(src1, src2, output, scaleFactor)
}

///|
let d_glTexFilterFuncSGIS : Dispatch = Dispatch::new("glTexFilterFuncSGIS")

///|
pub fn gl_tex_filter_func_sgis(
  target : UInt,
  filter : UInt,
  n : Int,
  weights : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, @pointer.Pointer[Float]) -> Unit] = d_glTexFilterFuncSGIS
    .get()
    .unsafe_into()
  @pointer.borrow_array(weights, fn(weights_p) {
    fp(target, filter, n, weights_p)
  })
}

///|
let d_glTexGend : Dispatch = Dispatch::new("glTexGend")

///|
pub fn gl_tex_gend(coord : UInt, pname : UInt, param : Double) -> Unit {
  let fp : FuncRef[(UInt, UInt, Double) -> Unit] = d_glTexGend
    .get()
    .unsafe_into()
  fp(coord, pname, param)
}

///|
let d_glTexGendv : Dispatch = Dispatch::new("glTexGendv")

///|
pub fn gl_tex_gendv(
  coord : UInt,
  pname : UInt,
  params : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Double]) -> Unit] = d_glTexGendv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(coord, pname, params_p) })
}

///|
let d_glTexGenf : Dispatch = Dispatch::new("glTexGenf")

///|
pub fn gl_tex_genf(coord : UInt, pname : UInt, param : Float) -> Unit {
  let fp : FuncRef[(UInt, UInt, Float) -> Unit] = d_glTexGenf
    .get()
    .unsafe_into()
  fp(coord, pname, param)
}

///|
let d_glTexGenfOES : Dispatch = Dispatch::new("glTexGenfOES")

///|
pub fn gl_tex_genf_oes(coord : UInt, pname : UInt, param : Float) -> Unit {
  let fp : FuncRef[(UInt, UInt, Float) -> Unit] = d_glTexGenfOES
    .get()
    .unsafe_into()
  fp(coord, pname, param)
}

///|
let d_glTexGenfv : Dispatch = Dispatch::new("glTexGenfv")

///|
pub fn gl_tex_genfv(
  coord : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glTexGenfv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(coord, pname, params_p) })
}

///|
let d_glTexGenfvOES : Dispatch = Dispatch::new("glTexGenfvOES")

///|
pub fn gl_tex_genfv_oes(
  coord : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glTexGenfvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(coord, pname, params_p) })
}

///|
let d_glTexGeni : Dispatch = Dispatch::new("glTexGeni")

///|
pub fn gl_tex_geni(coord : UInt, pname : UInt, param : Int) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int) -> Unit] = d_glTexGeni.get().unsafe_into()
  fp(coord, pname, param)
}

///|
let d_glTexGeniOES : Dispatch = Dispatch::new("glTexGeniOES")

///|
pub fn gl_tex_geni_oes(coord : UInt, pname : UInt, param : Int) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int) -> Unit] = d_glTexGeniOES
    .get()
    .unsafe_into()
  fp(coord, pname, param)
}

///|
let d_glTexGeniv : Dispatch = Dispatch::new("glTexGeniv")

///|
pub fn gl_tex_geniv(
  coord : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glTexGeniv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(coord, pname, params_p) })
}

///|
let d_glTexGenivOES : Dispatch = Dispatch::new("glTexGenivOES")

///|
pub fn gl_tex_geniv_oes(
  coord : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glTexGenivOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(coord, pname, params_p) })
}

///|
let d_glTexGenxOES : Dispatch = Dispatch::new("glTexGenxOES")

///|
pub fn gl_tex_genx_oes(coord : UInt, pname : UInt, param : Int) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int) -> Unit] = d_glTexGenxOES
    .get()
    .unsafe_into()
  fp(coord, pname, param)
}

///|
let d_glTexGenxvOES : Dispatch = Dispatch::new("glTexGenxvOES")

///|
pub fn gl_tex_genxv_oes(
  coord : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glTexGenxvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(coord, pname, params_p) })
}

///|
let d_glTexImage1D : Dispatch = Dispatch::new("glTexImage1D")

///|
pub fn gl_tex_image1_d(
  target : UInt,
  level : Int,
  internalformat : Int,
  width : Int,
  border : Int,
  format : UInt,
  type_ : UInt,
  pixels : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, Int, Int, Int, UInt, UInt, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glTexImage1D.get().unsafe_into()
  @pointer.borrow_bytes(pixels, fn(pixels_p) {
    fp(target, level, internalformat, width, border, format, type_, pixels_p)
  })
}

///|
let d_glTexImage2D : Dispatch = Dispatch::new("glTexImage2D")

///|
pub fn gl_tex_image2_d(
  target : UInt,
  level : Int,
  internalformat : Int,
  width : Int,
  height : Int,
  border : Int,
  format : UInt,
  type_ : UInt,
  pixels : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, Int, Int, Int, Int, UInt, UInt, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glTexImage2D.get().unsafe_into()
  @pointer.borrow_bytes(pixels, fn(pixels_p) {
    fp(
      target, level, internalformat, width, height, border, format, type_, pixels_p,
    )
  })
}

///|
let d_glTexImage2DMultisample : Dispatch = Dispatch::new(
  "glTexImage2DMultisample",
)

///|
pub fn gl_tex_image2_d_multisample(
  target : UInt,
  samples : Int,
  internalformat : UInt,
  width : Int,
  height : Int,
  fixedsamplelocations : Bool,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int, Int, Bool) -> Unit] = d_glTexImage2DMultisample
    .get()
    .unsafe_into()
  fp(target, samples, internalformat, width, height, fixedsamplelocations)
}

///|
let d_glTexImage2DMultisampleCoverageNV : Dispatch = Dispatch::new(
  "glTexImage2DMultisampleCoverageNV",
)

///|
pub fn gl_tex_image2_d_multisample_coverage_nv(
  target : UInt,
  coverageSamples : Int,
  colorSamples : Int,
  internalFormat : Int,
  width : Int,
  height : Int,
  fixedSampleLocations : Bool,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int, Int, Bool) -> Unit] = d_glTexImage2DMultisampleCoverageNV
    .get()
    .unsafe_into()
  fp(
    target, coverageSamples, colorSamples, internalFormat, width, height, fixedSampleLocations,
  )
}

///|
let d_glTexImage3D : Dispatch = Dispatch::with_aliases("glTexImage3D", [
  "glTexImage3DEXT",
])

///|
pub fn gl_tex_image3_d(
  target : UInt,
  level : Int,
  internalformat : Int,
  width : Int,
  height : Int,
  depth : Int,
  border : Int,
  format : UInt,
  type_ : UInt,
  pixels : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, Int, Int, Int, Int, Int, UInt, UInt, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glTexImage3D.get().unsafe_into()
  @pointer.borrow_bytes(pixels, fn(pixels_p) {
    fp(
      target, level, internalformat, width, height, depth, border, format, type_,
      pixels_p,
    )
  })
}

///|
let d_glTexImage3DEXT : Dispatch = Dispatch::with_aliases("glTexImage3DEXT", [
  "glTexImage3D",
])

///|
pub fn gl_tex_image3_dext(
  target : UInt,
  level : Int,
  internalformat : UInt,
  width : Int,
  height : Int,
  depth : Int,
  border : Int,
  format : UInt,
  type_ : UInt,
  pixels : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, UInt, Int, Int, Int, Int, UInt, UInt, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glTexImage3DEXT.get().unsafe_into()
  @pointer.borrow_bytes(pixels, fn(pixels_p) {
    fp(
      target, level, internalformat, width, height, depth, border, format, type_,
      pixels_p,
    )
  })
}

///|
let d_glTexImage3DMultisample : Dispatch = Dispatch::new(
  "glTexImage3DMultisample",
)

///|
pub fn gl_tex_image3_d_multisample(
  target : UInt,
  samples : Int,
  internalformat : UInt,
  width : Int,
  height : Int,
  depth : Int,
  fixedsamplelocations : Bool,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int, Int, Int, Bool) -> Unit] = d_glTexImage3DMultisample
    .get()
    .unsafe_into()
  fp(
    target, samples, internalformat, width, height, depth, fixedsamplelocations,
  )
}

///|
let d_glTexImage3DMultisampleCoverageNV : Dispatch = Dispatch::new(
  "glTexImage3DMultisampleCoverageNV",
)

///|
pub fn gl_tex_image3_d_multisample_coverage_nv(
  target : UInt,
  coverageSamples : Int,
  colorSamples : Int,
  internalFormat : Int,
  width : Int,
  height : Int,
  depth : Int,
  fixedSampleLocations : Bool,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int, Int, Int, Bool) -> Unit] = d_glTexImage3DMultisampleCoverageNV
    .get()
    .unsafe_into()
  fp(
    target, coverageSamples, colorSamples, internalFormat, width, height, depth,
    fixedSampleLocations,
  )
}

///|
let d_glTexImage3DOES : Dispatch = Dispatch::new("glTexImage3DOES")

///|
pub fn gl_tex_image3_does(
  target : UInt,
  level : Int,
  internalformat : UInt,
  width : Int,
  height : Int,
  depth : Int,
  border : Int,
  format : UInt,
  type_ : UInt,
  pixels : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, UInt, Int, Int, Int, Int, UInt, UInt, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glTexImage3DOES.get().unsafe_into()
  @pointer.borrow_bytes(pixels, fn(pixels_p) {
    fp(
      target, level, internalformat, width, height, depth, border, format, type_,
      pixels_p,
    )
  })
}

///|
let d_glTexImage4DSGIS : Dispatch = Dispatch::new("glTexImage4DSGIS")

///|
pub fn gl_tex_image4_dsgis(
  target : UInt,
  level : Int,
  internalformat : UInt,
  width : Int,
  height : Int,
  depth : Int,
  size4d : Int,
  border : Int,
  format : UInt,
  type_ : UInt,
  pixels : Bytes,
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      Int,
      UInt,
      Int,
      Int,
      Int,
      Int,
      Int,
      UInt,
      UInt,
      @pointer.Pointer[Byte],
    ) -> Unit,
  ] = d_glTexImage4DSGIS.get().unsafe_into()
  @pointer.borrow_bytes(pixels, fn(pixels_p) {
    fp(
      target, level, internalformat, width, height, depth, size4d, border, format,
      type_, pixels_p,
    )
  })
}

///|
let d_glTexPageCommitmentARB : Dispatch = Dispatch::with_aliases(
  "glTexPageCommitmentARB",
  ["glTexPageCommitmentEXT"],
)

///|
pub fn gl_tex_page_commitment_arb(
  target : UInt,
  level : Int,
  xoffset : Int,
  yoffset : Int,
  zoffset : Int,
  width : Int,
  height : Int,
  depth : Int,
  commit : Bool,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int, Int, Int, Int, Bool) -> Unit] = d_glTexPageCommitmentARB
    .get()
    .unsafe_into()
  fp(target, level, xoffset, yoffset, zoffset, width, height, depth, commit)
}

///|
let d_glTexPageCommitmentEXT : Dispatch = Dispatch::with_aliases(
  "glTexPageCommitmentEXT",
  ["glTexPageCommitmentARB"],
)

///|
pub fn gl_tex_page_commitment_ext(
  target : UInt,
  level : Int,
  xoffset : Int,
  yoffset : Int,
  zoffset : Int,
  width : Int,
  height : Int,
  depth : Int,
  commit : Bool,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int, Int, Int, Int, Bool) -> Unit] = d_glTexPageCommitmentEXT
    .get()
    .unsafe_into()
  fp(target, level, xoffset, yoffset, zoffset, width, height, depth, commit)
}

///|
let d_glTexPageCommitmentMemNV : Dispatch = Dispatch::new(
  "glTexPageCommitmentMemNV",
)

///|
pub fn gl_tex_page_commitment_mem_nv(
  target : UInt,
  layer : Int,
  level : Int,
  xoffset : Int,
  yoffset : Int,
  zoffset : Int,
  width : Int,
  height : Int,
  depth : Int,
  memory : UInt,
  offset : UInt64,
  commit : Bool,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, Int, Int, Int, Int, Int, Int, Int, UInt, UInt64, Bool) -> Unit,
  ] = d_glTexPageCommitmentMemNV.get().unsafe_into()
  fp(
    target, layer, level, xoffset, yoffset, zoffset, width, height, depth, memory,
    offset, commit,
  )
}

///|
let d_glTexParameterIiv : Dispatch = Dispatch::with_aliases(
  "glTexParameterIiv",
  ["glTexParameterIivEXT", "glTexParameterIivOES"],
)

///|
pub fn gl_tex_parameter_iiv(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glTexParameterIiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glTexParameterIivEXT : Dispatch = Dispatch::with_aliases(
  "glTexParameterIivEXT",
  ["glTexParameterIiv", "glTexParameterIivOES"],
)

///|
pub fn gl_tex_parameter_iiv_ext(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glTexParameterIivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glTexParameterIivOES : Dispatch = Dispatch::with_aliases(
  "glTexParameterIivOES",
  ["glTexParameterIiv", "glTexParameterIivEXT"],
)

///|
pub fn gl_tex_parameter_iiv_oes(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glTexParameterIivOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glTexParameterIuiv : Dispatch = Dispatch::with_aliases(
  "glTexParameterIuiv",
  ["glTexParameterIuivEXT", "glTexParameterIuivOES"],
)

///|
pub fn gl_tex_parameter_iuiv(
  target : UInt,
  pname : UInt,
  params : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[UInt]) -> Unit] = d_glTexParameterIuiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glTexParameterIuivEXT : Dispatch = Dispatch::with_aliases(
  "glTexParameterIuivEXT",
  ["glTexParameterIuiv", "glTexParameterIuivOES"],
)

///|
pub fn gl_tex_parameter_iuiv_ext(
  target : UInt,
  pname : UInt,
  params : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[UInt]) -> Unit] = d_glTexParameterIuivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glTexParameterIuivOES : Dispatch = Dispatch::with_aliases(
  "glTexParameterIuivOES",
  ["glTexParameterIuiv", "glTexParameterIuivEXT"],
)

///|
pub fn gl_tex_parameter_iuiv_oes(
  target : UInt,
  pname : UInt,
  params : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[UInt]) -> Unit] = d_glTexParameterIuivOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glTexParameterf : Dispatch = Dispatch::new("glTexParameterf")

///|
pub fn gl_tex_parameterf(target : UInt, pname : UInt, param : Float) -> Unit {
  let fp : FuncRef[(UInt, UInt, Float) -> Unit] = d_glTexParameterf
    .get()
    .unsafe_into()
  fp(target, pname, param)
}

///|
let d_glTexParameterfv : Dispatch = Dispatch::new("glTexParameterfv")

///|
pub fn gl_tex_parameterfv(
  target : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glTexParameterfv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glTexParameteri : Dispatch = Dispatch::new("glTexParameteri")

///|
pub fn gl_tex_parameteri(target : UInt, pname : UInt, param : Int) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int) -> Unit] = d_glTexParameteri
    .get()
    .unsafe_into()
  fp(target, pname, param)
}

///|
let d_glTexParameteriv : Dispatch = Dispatch::new("glTexParameteriv")

///|
pub fn gl_tex_parameteriv(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glTexParameteriv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glTexParameterx : Dispatch = Dispatch::new("glTexParameterx")

///|
pub fn gl_tex_parameterx(target : UInt, pname : UInt, param : Int) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int) -> Unit] = d_glTexParameterx
    .get()
    .unsafe_into()
  fp(target, pname, param)
}

///|
let d_glTexParameterxOES : Dispatch = Dispatch::new("glTexParameterxOES")

///|
pub fn gl_tex_parameterx_oes(target : UInt, pname : UInt, param : Int) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int) -> Unit] = d_glTexParameterxOES
    .get()
    .unsafe_into()
  fp(target, pname, param)
}

///|
let d_glTexParameterxv : Dispatch = Dispatch::new("glTexParameterxv")

///|
pub fn gl_tex_parameterxv(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glTexParameterxv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glTexParameterxvOES : Dispatch = Dispatch::new("glTexParameterxvOES")

///|
pub fn gl_tex_parameterxv_oes(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glTexParameterxvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}

///|
let d_glTexRenderbufferNV : Dispatch = Dispatch::new("glTexRenderbufferNV")

///|
pub fn gl_tex_renderbuffer_nv(target : UInt, renderbuffer : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glTexRenderbufferNV
    .get()
    .unsafe_into()
  fp(target, renderbuffer)
}

///|
let d_glTexStorage1D : Dispatch = Dispatch::with_aliases("glTexStorage1D", [
  "glTexStorage1DEXT",
])

///|
pub fn gl_tex_storage1_d(
  target : UInt,
  levels : Int,
  internalformat : UInt,
  width : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int) -> Unit] = d_glTexStorage1D
    .get()
    .unsafe_into()
  fp(target, levels, internalformat, width)
}

///|
let d_glTexStorage1DEXT : Dispatch = Dispatch::with_aliases(
  "glTexStorage1DEXT",
  ["glTexStorage1D"],
)

///|
pub fn gl_tex_storage1_dext(
  target : UInt,
  levels : Int,
  internalformat : UInt,
  width : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int) -> Unit] = d_glTexStorage1DEXT
    .get()
    .unsafe_into()
  fp(target, levels, internalformat, width)
}

///|
let d_glTexStorage2D : Dispatch = Dispatch::with_aliases("glTexStorage2D", [
  "glTexStorage2DEXT",
])

///|
pub fn gl_tex_storage2_d(
  target : UInt,
  levels : Int,
  internalformat : UInt,
  width : Int,
  height : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int, Int) -> Unit] = d_glTexStorage2D
    .get()
    .unsafe_into()
  fp(target, levels, internalformat, width, height)
}

///|
let d_glTexStorage2DEXT : Dispatch = Dispatch::with_aliases(
  "glTexStorage2DEXT",
  ["glTexStorage2D"],
)

///|
pub fn gl_tex_storage2_dext(
  target : UInt,
  levels : Int,
  internalformat : UInt,
  width : Int,
  height : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int, Int) -> Unit] = d_glTexStorage2DEXT
    .get()
    .unsafe_into()
  fp(target, levels, internalformat, width, height)
}

///|
let d_glTexStorage2DMultisample : Dispatch = Dispatch::new(
  "glTexStorage2DMultisample",
)

///|
pub fn gl_tex_storage2_d_multisample(
  target : UInt,
  samples : Int,
  internalformat : UInt,
  width : Int,
  height : Int,
  fixedsamplelocations : Bool,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int, Int, Bool) -> Unit] = d_glTexStorage2DMultisample
    .get()
    .unsafe_into()
  fp(target, samples, internalformat, width, height, fixedsamplelocations)
}

///|
let d_glTexStorage3D : Dispatch = Dispatch::with_aliases("glTexStorage3D", [
  "glTexStorage3DEXT",
])

///|
pub fn gl_tex_storage3_d(
  target : UInt,
  levels : Int,
  internalformat : UInt,
  width : Int,
  height : Int,
  depth : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int, Int, Int) -> Unit] = d_glTexStorage3D
    .get()
    .unsafe_into()
  fp(target, levels, internalformat, width, height, depth)
}

///|
let d_glTexStorage3DEXT : Dispatch = Dispatch::with_aliases(
  "glTexStorage3DEXT",
  ["glTexStorage3D"],
)

///|
pub fn gl_tex_storage3_dext(
  target : UInt,
  levels : Int,
  internalformat : UInt,
  width : Int,
  height : Int,
  depth : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int, Int, Int) -> Unit] = d_glTexStorage3DEXT
    .get()
    .unsafe_into()
  fp(target, levels, internalformat, width, height, depth)
}

///|
let d_glTexStorage3DMultisample : Dispatch = Dispatch::with_aliases(
  "glTexStorage3DMultisample",
  ["glTexStorage3DMultisampleOES"],
)

///|
pub fn gl_tex_storage3_d_multisample(
  target : UInt,
  samples : Int,
  internalformat : UInt,
  width : Int,
  height : Int,
  depth : Int,
  fixedsamplelocations : Bool,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int, Int, Int, Bool) -> Unit] = d_glTexStorage3DMultisample
    .get()
    .unsafe_into()
  fp(
    target, samples, internalformat, width, height, depth, fixedsamplelocations,
  )
}

///|
let d_glTexStorage3DMultisampleOES : Dispatch = Dispatch::with_aliases(
  "glTexStorage3DMultisampleOES",
  ["glTexStorage3DMultisample"],
)

///|
pub fn gl_tex_storage3_d_multisample_oes(
  target : UInt,
  samples : Int,
  internalformat : UInt,
  width : Int,
  height : Int,
  depth : Int,
  fixedsamplelocations : Bool,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int, Int, Int, Bool) -> Unit] = d_glTexStorage3DMultisampleOES
    .get()
    .unsafe_into()
  fp(
    target, samples, internalformat, width, height, depth, fixedsamplelocations,
  )
}

///|
let d_glTexStorageAttribs2DEXT : Dispatch = Dispatch::new(
  "glTexStorageAttribs2DEXT",
)

///|
pub fn gl_tex_storage_attribs2_dext(
  target : UInt,
  levels : Int,
  internalformat : UInt,
  width : Int,
  height : Int,
  attrib_list : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int, Int, @pointer.Pointer[Int]) -> Unit] = d_glTexStorageAttribs2DEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(attrib_list, fn(attrib_list_p) {
    fp(target, levels, internalformat, width, height, attrib_list_p)
  })
}

///|
let d_glTexStorageAttribs3DEXT : Dispatch = Dispatch::new(
  "glTexStorageAttribs3DEXT",
)

///|
pub fn gl_tex_storage_attribs3_dext(
  target : UInt,
  levels : Int,
  internalformat : UInt,
  width : Int,
  height : Int,
  depth : Int,
  attrib_list : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, UInt, Int, Int, Int, @pointer.Pointer[Int]) -> Unit,
  ] = d_glTexStorageAttribs3DEXT.get().unsafe_into()
  @pointer.borrow_array(attrib_list, fn(attrib_list_p) {
    fp(target, levels, internalformat, width, height, depth, attrib_list_p)
  })
}

///|
let d_glTexStorageMem1DEXT : Dispatch = Dispatch::new("glTexStorageMem1DEXT")

///|
pub fn gl_tex_storage_mem1_dext(
  target : UInt,
  levels : Int,
  internalFormat : UInt,
  width : Int,
  memory : UInt,
  offset : UInt64,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int, UInt, UInt64) -> Unit] = d_glTexStorageMem1DEXT
    .get()
    .unsafe_into()
  fp(target, levels, internalFormat, width, memory, offset)
}

///|
let d_glTexStorageMem2DEXT : Dispatch = Dispatch::new("glTexStorageMem2DEXT")

///|
pub fn gl_tex_storage_mem2_dext(
  target : UInt,
  levels : Int,
  internalFormat : UInt,
  width : Int,
  height : Int,
  memory : UInt,
  offset : UInt64,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int, Int, UInt, UInt64) -> Unit] = d_glTexStorageMem2DEXT
    .get()
    .unsafe_into()
  fp(target, levels, internalFormat, width, height, memory, offset)
}

///|
let d_glTexStorageMem2DMultisampleEXT : Dispatch = Dispatch::new(
  "glTexStorageMem2DMultisampleEXT",
)

///|
pub fn gl_tex_storage_mem2_d_multisample_ext(
  target : UInt,
  samples : Int,
  internalFormat : UInt,
  width : Int,
  height : Int,
  fixedSampleLocations : Bool,
  memory : UInt,
  offset : UInt64,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int, Int, Bool, UInt, UInt64) -> Unit] = d_glTexStorageMem2DMultisampleEXT
    .get()
    .unsafe_into()
  fp(
    target, samples, internalFormat, width, height, fixedSampleLocations, memory,
    offset,
  )
}

///|
let d_glTexStorageMem3DEXT : Dispatch = Dispatch::new("glTexStorageMem3DEXT")

///|
pub fn gl_tex_storage_mem3_dext(
  target : UInt,
  levels : Int,
  internalFormat : UInt,
  width : Int,
  height : Int,
  depth : Int,
  memory : UInt,
  offset : UInt64,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int, Int, Int, UInt, UInt64) -> Unit] = d_glTexStorageMem3DEXT
    .get()
    .unsafe_into()
  fp(target, levels, internalFormat, width, height, depth, memory, offset)
}

///|
let d_glTexStorageMem3DMultisampleEXT : Dispatch = Dispatch::new(
  "glTexStorageMem3DMultisampleEXT",
)

///|
pub fn gl_tex_storage_mem3_d_multisample_ext(
  target : UInt,
  samples : Int,
  internalFormat : UInt,
  width : Int,
  height : Int,
  depth : Int,
  fixedSampleLocations : Bool,
  memory : UInt,
  offset : UInt64,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int, Int, Int, Bool, UInt, UInt64) -> Unit] = d_glTexStorageMem3DMultisampleEXT
    .get()
    .unsafe_into()
  fp(
    target, samples, internalFormat, width, height, depth, fixedSampleLocations,
    memory, offset,
  )
}

///|
let d_glTexStorageSparseAMD : Dispatch = Dispatch::new("glTexStorageSparseAMD")

///|
pub fn gl_tex_storage_sparse_amd(
  target : UInt,
  internalFormat : UInt,
  width : Int,
  height : Int,
  depth : Int,
  layers : Int,
  flags : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, Int, Int, Int, UInt) -> Unit] = d_glTexStorageSparseAMD
    .get()
    .unsafe_into()
  fp(target, internalFormat, width, height, depth, layers, flags)
}

///|
let d_glTexSubImage1D : Dispatch = Dispatch::with_aliases("glTexSubImage1D", [
  "glTexSubImage1DEXT",
])

///|
pub fn gl_tex_sub_image1_d(
  target : UInt,
  level : Int,
  xoffset : Int,
  width : Int,
  format : UInt,
  type_ : UInt,
  pixels : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, Int, Int, UInt, UInt, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glTexSubImage1D.get().unsafe_into()
  @pointer.borrow_bytes(pixels, fn(pixels_p) {
    fp(target, level, xoffset, width, format, type_, pixels_p)
  })
}

///|
let d_glTexSubImage1DEXT : Dispatch = Dispatch::with_aliases(
  "glTexSubImage1DEXT",
  ["glTexSubImage1D"],
)

///|
pub fn gl_tex_sub_image1_dext(
  target : UInt,
  level : Int,
  xoffset : Int,
  width : Int,
  format : UInt,
  type_ : UInt,
  pixels : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, Int, Int, UInt, UInt, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glTexSubImage1DEXT.get().unsafe_into()
  @pointer.borrow_bytes(pixels, fn(pixels_p) {
    fp(target, level, xoffset, width, format, type_, pixels_p)
  })
}

///|
let d_glTexSubImage2D : Dispatch = Dispatch::with_aliases("glTexSubImage2D", [
  "glTexSubImage2DEXT",
])

///|
pub fn gl_tex_sub_image2_d(
  target : UInt,
  level : Int,
  xoffset : Int,
  yoffset : Int,
  width : Int,
  height : Int,
  format : UInt,
  type_ : UInt,
  pixels : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, Int, Int, Int, Int, UInt, UInt, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glTexSubImage2D.get().unsafe_into()
  @pointer.borrow_bytes(pixels, fn(pixels_p) {
    fp(target, level, xoffset, yoffset, width, height, format, type_, pixels_p)
  })
}

///|
let d_glTexSubImage2DEXT : Dispatch = Dispatch::with_aliases(
  "glTexSubImage2DEXT",
  ["glTexSubImage2D"],
)

///|
pub fn gl_tex_sub_image2_dext(
  target : UInt,
  level : Int,
  xoffset : Int,
  yoffset : Int,
  width : Int,
  height : Int,
  format : UInt,
  type_ : UInt,
  pixels : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, Int, Int, Int, Int, UInt, UInt, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glTexSubImage2DEXT.get().unsafe_into()
  @pointer.borrow_bytes(pixels, fn(pixels_p) {
    fp(target, level, xoffset, yoffset, width, height, format, type_, pixels_p)
  })
}

///|
let d_glTexSubImage3D : Dispatch = Dispatch::with_aliases("glTexSubImage3D", [
  "glTexSubImage3DEXT",
])

///|
pub fn gl_tex_sub_image3_d(
  target : UInt,
  level : Int,
  xoffset : Int,
  yoffset : Int,
  zoffset : Int,
  width : Int,
  height : Int,
  depth : Int,
  format : UInt,
  type_ : UInt,
  pixels : Bytes,
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      Int,
      Int,
      Int,
      Int,
      Int,
      Int,
      Int,
      UInt,
      UInt,
      @pointer.Pointer[Byte],
    ) -> Unit,
  ] = d_glTexSubImage3D.get().unsafe_into()
  @pointer.borrow_bytes(pixels, fn(pixels_p) {
    fp(
      target, level, xoffset, yoffset, zoffset, width, height, depth, format, type_,
      pixels_p,
    )
  })
}

///|
let d_glTexSubImage3DEXT : Dispatch = Dispatch::with_aliases(
  "glTexSubImage3DEXT",
  ["glTexSubImage3D"],
)

///|
pub fn gl_tex_sub_image3_dext(
  target : UInt,
  level : Int,
  xoffset : Int,
  yoffset : Int,
  zoffset : Int,
  width : Int,
  height : Int,
  depth : Int,
  format : UInt,
  type_ : UInt,
  pixels : Bytes,
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      Int,
      Int,
      Int,
      Int,
      Int,
      Int,
      Int,
      UInt,
      UInt,
      @pointer.Pointer[Byte],
    ) -> Unit,
  ] = d_glTexSubImage3DEXT.get().unsafe_into()
  @pointer.borrow_bytes(pixels, fn(pixels_p) {
    fp(
      target, level, xoffset, yoffset, zoffset, width, height, depth, format, type_,
      pixels_p,
    )
  })
}

///|
let d_glTexSubImage3DOES : Dispatch = Dispatch::new("glTexSubImage3DOES")

///|
pub fn gl_tex_sub_image3_does(
  target : UInt,
  level : Int,
  xoffset : Int,
  yoffset : Int,
  zoffset : Int,
  width : Int,
  height : Int,
  depth : Int,
  format : UInt,
  type_ : UInt,
  pixels : Bytes,
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      Int,
      Int,
      Int,
      Int,
      Int,
      Int,
      Int,
      UInt,
      UInt,
      @pointer.Pointer[Byte],
    ) -> Unit,
  ] = d_glTexSubImage3DOES.get().unsafe_into()
  @pointer.borrow_bytes(pixels, fn(pixels_p) {
    fp(
      target, level, xoffset, yoffset, zoffset, width, height, depth, format, type_,
      pixels_p,
    )
  })
}

///|
let d_glTexSubImage4DSGIS : Dispatch = Dispatch::new("glTexSubImage4DSGIS")

///|
pub fn gl_tex_sub_image4_dsgis(
  target : UInt,
  level : Int,
  xoffset : Int,
  yoffset : Int,
  zoffset : Int,
  woffset : Int,
  width : Int,
  height : Int,
  depth : Int,
  size4d : Int,
  format : UInt,
  type_ : UInt,
  pixels : Bytes,
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      Int,
      Int,
      Int,
      Int,
      Int,
      Int,
      Int,
      Int,
      Int,
      UInt,
      UInt,
      @pointer.Pointer[Byte],
    ) -> Unit,
  ] = d_glTexSubImage4DSGIS.get().unsafe_into()
  @pointer.borrow_bytes(pixels, fn(pixels_p) {
    fp(
      target, level, xoffset, yoffset, zoffset, woffset, width, height, depth, size4d,
      format, type_, pixels_p,
    )
  })
}

///|
let d_glTextureAttachMemoryNV : Dispatch = Dispatch::new(
  "glTextureAttachMemoryNV",
)

///|
pub fn gl_texture_attach_memory_nv(
  texture : UInt,
  memory : UInt,
  offset : UInt64,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt64) -> Unit] = d_glTextureAttachMemoryNV
    .get()
    .unsafe_into()
  fp(texture, memory, offset)
}

///|
let d_glTextureBarrier : Dispatch = Dispatch::new("glTextureBarrier")

///|
pub fn gl_texture_barrier() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glTextureBarrier.get().unsafe_into()
  fp()
}

///|
let d_glTextureBarrierNV : Dispatch = Dispatch::new("glTextureBarrierNV")

///|
pub fn gl_texture_barrier_nv() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glTextureBarrierNV.get().unsafe_into()
  fp()
}

///|
let d_glTextureBuffer : Dispatch = Dispatch::new("glTextureBuffer")

///|
pub fn gl_texture_buffer(
  texture : UInt,
  internalformat : UInt,
  buffer : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glTextureBuffer
    .get()
    .unsafe_into()
  fp(texture, internalformat, buffer)
}

///|
let d_glTextureBufferEXT : Dispatch = Dispatch::new("glTextureBufferEXT")

///|
pub fn gl_texture_buffer_ext(
  texture : UInt,
  target : UInt,
  internalformat : UInt,
  buffer : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt) -> Unit] = d_glTextureBufferEXT
    .get()
    .unsafe_into()
  fp(texture, target, internalformat, buffer)
}

///|
let d_glTextureBufferRange : Dispatch = Dispatch::new("glTextureBufferRange")

///|
pub fn gl_texture_buffer_range(
  texture : UInt,
  internalformat : UInt,
  buffer : UInt,
  offset : Int64,
  size : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int64, Int64) -> Unit] = d_glTextureBufferRange
    .get()
    .unsafe_into()
  fp(texture, internalformat, buffer, offset, size)
}

///|
let d_glTextureBufferRangeEXT : Dispatch = Dispatch::new(
  "glTextureBufferRangeEXT",
)

///|
pub fn gl_texture_buffer_range_ext(
  texture : UInt,
  target : UInt,
  internalformat : UInt,
  buffer : UInt,
  offset : Int64,
  size : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, Int64, Int64) -> Unit] = d_glTextureBufferRangeEXT
    .get()
    .unsafe_into()
  fp(texture, target, internalformat, buffer, offset, size)
}

///|
let d_glTextureColorMaskSGIS : Dispatch = Dispatch::new(
  "glTextureColorMaskSGIS",
)

///|
pub fn gl_texture_color_mask_sgis(
  red : Bool,
  green : Bool,
  blue : Bool,
  alpha : Bool,
) -> Unit {
  let fp : FuncRef[(Bool, Bool, Bool, Bool) -> Unit] = d_glTextureColorMaskSGIS
    .get()
    .unsafe_into()
  fp(red, green, blue, alpha)
}

///|
let d_glTextureFoveationParametersQCOM : Dispatch = Dispatch::new(
  "glTextureFoveationParametersQCOM",
)

///|
pub fn gl_texture_foveation_parameters_qcom(
  texture : UInt,
  layer : UInt,
  focalPoint : UInt,
  focalX : Float,
  focalY : Float,
  gainX : Float,
  gainY : Float,
  foveaArea : Float,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, UInt, Float, Float, Float, Float, Float) -> Unit,
  ] = d_glTextureFoveationParametersQCOM.get().unsafe_into()
  fp(texture, layer, focalPoint, focalX, focalY, gainX, gainY, foveaArea)
}

///|
let d_glTextureImage1DEXT : Dispatch = Dispatch::new("glTextureImage1DEXT")

///|
pub fn gl_texture_image1_dext(
  texture : UInt,
  target : UInt,
  level : Int,
  internalformat : Int,
  width : Int,
  border : Int,
  format : UInt,
  type_ : UInt,
  pixels : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, Int, Int, Int, Int, UInt, UInt, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glTextureImage1DEXT.get().unsafe_into()
  @pointer.borrow_bytes(pixels, fn(pixels_p) {
    fp(
      texture, target, level, internalformat, width, border, format, type_, pixels_p,
    )
  })
}

///|
let d_glTextureImage2DEXT : Dispatch = Dispatch::new("glTextureImage2DEXT")

///|
pub fn gl_texture_image2_dext(
  texture : UInt,
  target : UInt,
  level : Int,
  internalformat : Int,
  width : Int,
  height : Int,
  border : Int,
  format : UInt,
  type_ : UInt,
  pixels : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, Int, Int, Int, Int, Int, UInt, UInt, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glTextureImage2DEXT.get().unsafe_into()
  @pointer.borrow_bytes(pixels, fn(pixels_p) {
    fp(
      texture, target, level, internalformat, width, height, border, format, type_,
      pixels_p,
    )
  })
}

///|
let d_glTextureImage2DMultisampleCoverageNV : Dispatch = Dispatch::new(
  "glTextureImage2DMultisampleCoverageNV",
)

///|
pub fn gl_texture_image2_d_multisample_coverage_nv(
  texture : UInt,
  target : UInt,
  coverageSamples : Int,
  colorSamples : Int,
  internalFormat : Int,
  width : Int,
  height : Int,
  fixedSampleLocations : Bool,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, Int, Int, Int, Int, Bool) -> Unit] = d_glTextureImage2DMultisampleCoverageNV
    .get()
    .unsafe_into()
  fp(
    texture, target, coverageSamples, colorSamples, internalFormat, width, height,
    fixedSampleLocations,
  )
}

///|
let d_glTextureImage2DMultisampleNV : Dispatch = Dispatch::new(
  "glTextureImage2DMultisampleNV",
)

///|
pub fn gl_texture_image2_d_multisample_nv(
  texture : UInt,
  target : UInt,
  samples : Int,
  internalFormat : Int,
  width : Int,
  height : Int,
  fixedSampleLocations : Bool,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, Int, Int, Int, Bool) -> Unit] = d_glTextureImage2DMultisampleNV
    .get()
    .unsafe_into()
  fp(
    texture, target, samples, internalFormat, width, height, fixedSampleLocations,
  )
}

///|
let d_glTextureImage3DEXT : Dispatch = Dispatch::new("glTextureImage3DEXT")

///|
pub fn gl_texture_image3_dext(
  texture : UInt,
  target : UInt,
  level : Int,
  internalformat : Int,
  width : Int,
  height : Int,
  depth : Int,
  border : Int,
  format : UInt,
  type_ : UInt,
  pixels : Bytes,
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      UInt,
      Int,
      Int,
      Int,
      Int,
      Int,
      Int,
      UInt,
      UInt,
      @pointer.Pointer[Byte],
    ) -> Unit,
  ] = d_glTextureImage3DEXT.get().unsafe_into()
  @pointer.borrow_bytes(pixels, fn(pixels_p) {
    fp(
      texture, target, level, internalformat, width, height, depth, border, format,
      type_, pixels_p,
    )
  })
}

///|
let d_glTextureImage3DMultisampleCoverageNV : Dispatch = Dispatch::new(
  "glTextureImage3DMultisampleCoverageNV",
)

///|
pub fn gl_texture_image3_d_multisample_coverage_nv(
  texture : UInt,
  target : UInt,
  coverageSamples : Int,
  colorSamples : Int,
  internalFormat : Int,
  width : Int,
  height : Int,
  depth : Int,
  fixedSampleLocations : Bool,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, Int, Int, Int, Int, Int, Bool) -> Unit] = d_glTextureImage3DMultisampleCoverageNV
    .get()
    .unsafe_into()
  fp(
    texture, target, coverageSamples, colorSamples, internalFormat, width, height,
    depth, fixedSampleLocations,
  )
}

///|
let d_glTextureImage3DMultisampleNV : Dispatch = Dispatch::new(
  "glTextureImage3DMultisampleNV",
)

///|
pub fn gl_texture_image3_d_multisample_nv(
  texture : UInt,
  target : UInt,
  samples : Int,
  internalFormat : Int,
  width : Int,
  height : Int,
  depth : Int,
  fixedSampleLocations : Bool,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, Int, Int, Int, Int, Bool) -> Unit] = d_glTextureImage3DMultisampleNV
    .get()
    .unsafe_into()
  fp(
    texture, target, samples, internalFormat, width, height, depth, fixedSampleLocations,
  )
}

///|
let d_glTextureLightEXT : Dispatch = Dispatch::new("glTextureLightEXT")

///|
pub fn gl_texture_light_ext(pname : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glTextureLightEXT.get().unsafe_into()
  fp(pname)
}

///|
let d_glTextureMaterialEXT : Dispatch = Dispatch::new("glTextureMaterialEXT")

///|
pub fn gl_texture_material_ext(face : UInt, mode : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glTextureMaterialEXT
    .get()
    .unsafe_into()
  fp(face, mode)
}

///|
let d_glTextureNormalEXT : Dispatch = Dispatch::new("glTextureNormalEXT")

///|
pub fn gl_texture_normal_ext(mode : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glTextureNormalEXT.get().unsafe_into()
  fp(mode)
}

///|
let d_glTexturePageCommitmentEXT : Dispatch = Dispatch::new(
  "glTexturePageCommitmentEXT",
)

///|
pub fn gl_texture_page_commitment_ext(
  texture : UInt,
  level : Int,
  xoffset : Int,
  yoffset : Int,
  zoffset : Int,
  width : Int,
  height : Int,
  depth : Int,
  commit : Bool,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int, Int, Int, Int, Bool) -> Unit] = d_glTexturePageCommitmentEXT
    .get()
    .unsafe_into()
  fp(texture, level, xoffset, yoffset, zoffset, width, height, depth, commit)
}

///|
let d_glTexturePageCommitmentMemNV : Dispatch = Dispatch::new(
  "glTexturePageCommitmentMemNV",
)

///|
pub fn gl_texture_page_commitment_mem_nv(
  texture : UInt,
  layer : Int,
  level : Int,
  xoffset : Int,
  yoffset : Int,
  zoffset : Int,
  width : Int,
  height : Int,
  depth : Int,
  memory : UInt,
  offset : UInt64,
  commit : Bool,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, Int, Int, Int, Int, Int, Int, Int, UInt, UInt64, Bool) -> Unit,
  ] = d_glTexturePageCommitmentMemNV.get().unsafe_into()
  fp(
    texture, layer, level, xoffset, yoffset, zoffset, width, height, depth, memory,
    offset, commit,
  )
}

///|
let d_glTextureParameterIiv : Dispatch = Dispatch::new("glTextureParameterIiv")

///|
pub fn gl_texture_parameter_iiv(
  texture : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glTextureParameterIiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(texture, pname, params_p) })
}

///|
let d_glTextureParameterIivEXT : Dispatch = Dispatch::new(
  "glTextureParameterIivEXT",
)

///|
pub fn gl_texture_parameter_iiv_ext(
  texture : UInt,
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glTextureParameterIivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(texture, target, pname, params_p)
  })
}

///|
let d_glTextureParameterIuiv : Dispatch = Dispatch::new(
  "glTextureParameterIuiv",
)

///|
pub fn gl_texture_parameter_iuiv(
  texture : UInt,
  pname : UInt,
  params : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[UInt]) -> Unit] = d_glTextureParameterIuiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(texture, pname, params_p) })
}

///|
let d_glTextureParameterIuivEXT : Dispatch = Dispatch::new(
  "glTextureParameterIuivEXT",
)

///|
pub fn gl_texture_parameter_iuiv_ext(
  texture : UInt,
  target : UInt,
  pname : UInt,
  params : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[UInt]) -> Unit] = d_glTextureParameterIuivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(texture, target, pname, params_p)
  })
}

///|
let d_glTextureParameterf : Dispatch = Dispatch::new("glTextureParameterf")

///|
pub fn gl_texture_parameterf(
  texture : UInt,
  pname : UInt,
  param : Float,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Float) -> Unit] = d_glTextureParameterf
    .get()
    .unsafe_into()
  fp(texture, pname, param)
}

///|
let d_glTextureParameterfEXT : Dispatch = Dispatch::new(
  "glTextureParameterfEXT",
)

///|
pub fn gl_texture_parameterf_ext(
  texture : UInt,
  target : UInt,
  pname : UInt,
  param : Float,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Float) -> Unit] = d_glTextureParameterfEXT
    .get()
    .unsafe_into()
  fp(texture, target, pname, param)
}

///|
let d_glTextureParameterfv : Dispatch = Dispatch::new("glTextureParameterfv")

///|
pub fn gl_texture_parameterfv(
  texture : UInt,
  pname : UInt,
  param : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glTextureParameterfv
    .get()
    .unsafe_into()
  @pointer.borrow_array(param, fn(param_p) { fp(texture, pname, param_p) })
}

///|
let d_glTextureParameterfvEXT : Dispatch = Dispatch::new(
  "glTextureParameterfvEXT",
)

///|
pub fn gl_texture_parameterfv_ext(
  texture : UInt,
  target : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glTextureParameterfvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(texture, target, pname, params_p)
  })
}

///|
let d_glTextureParameteri : Dispatch = Dispatch::new("glTextureParameteri")

///|
pub fn gl_texture_parameteri(texture : UInt, pname : UInt, param : Int) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int) -> Unit] = d_glTextureParameteri
    .get()
    .unsafe_into()
  fp(texture, pname, param)
}

///|
let d_glTextureParameteriEXT : Dispatch = Dispatch::new(
  "glTextureParameteriEXT",
)

///|
pub fn gl_texture_parameteri_ext(
  texture : UInt,
  target : UInt,
  pname : UInt,
  param : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int) -> Unit] = d_glTextureParameteriEXT
    .get()
    .unsafe_into()
  fp(texture, target, pname, param)
}

///|
let d_glTextureParameteriv : Dispatch = Dispatch::new("glTextureParameteriv")

///|
pub fn gl_texture_parameteriv(
  texture : UInt,
  pname : UInt,
  param : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glTextureParameteriv
    .get()
    .unsafe_into()
  @pointer.borrow_array(param, fn(param_p) { fp(texture, pname, param_p) })
}

///|
let d_glTextureParameterivEXT : Dispatch = Dispatch::new(
  "glTextureParameterivEXT",
)

///|
pub fn gl_texture_parameteriv_ext(
  texture : UInt,
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glTextureParameterivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(texture, target, pname, params_p)
  })
}

///|
let d_glTextureRangeAPPLE : Dispatch = Dispatch::new("glTextureRangeAPPLE")

///|
pub fn gl_texture_range_apple(
  target : UInt,
  length : Int,
  pointer : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Byte]) -> Unit] = d_glTextureRangeAPPLE
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(pointer, fn(pointer_p) { fp(target, length, pointer_p) })
}

///|
let d_glTextureRenderbufferEXT : Dispatch = Dispatch::new(
  "glTextureRenderbufferEXT",
)

///|
pub fn gl_texture_renderbuffer_ext(
  texture : UInt,
  target : UInt,
  renderbuffer : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glTextureRenderbufferEXT
    .get()
    .unsafe_into()
  fp(texture, target, renderbuffer)
}

///|
let d_glTextureStorage1D : Dispatch = Dispatch::new("glTextureStorage1D")

///|
pub fn gl_texture_storage1_d(
  texture : UInt,
  levels : Int,
  internalformat : UInt,
  width : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int) -> Unit] = d_glTextureStorage1D
    .get()
    .unsafe_into()
  fp(texture, levels, internalformat, width)
}

///|
let d_glTextureStorage1DEXT : Dispatch = Dispatch::new("glTextureStorage1DEXT")

///|
pub fn gl_texture_storage1_dext(
  texture : UInt,
  target : UInt,
  levels : Int,
  internalformat : UInt,
  width : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, UInt, Int) -> Unit] = d_glTextureStorage1DEXT
    .get()
    .unsafe_into()
  fp(texture, target, levels, internalformat, width)
}

///|
let d_glTextureStorage2D : Dispatch = Dispatch::new("glTextureStorage2D")

///|
pub fn gl_texture_storage2_d(
  texture : UInt,
  levels : Int,
  internalformat : UInt,
  width : Int,
  height : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int, Int) -> Unit] = d_glTextureStorage2D
    .get()
    .unsafe_into()
  fp(texture, levels, internalformat, width, height)
}

///|
let d_glTextureStorage2DEXT : Dispatch = Dispatch::new("glTextureStorage2DEXT")

///|
pub fn gl_texture_storage2_dext(
  texture : UInt,
  target : UInt,
  levels : Int,
  internalformat : UInt,
  width : Int,
  height : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, UInt, Int, Int) -> Unit] = d_glTextureStorage2DEXT
    .get()
    .unsafe_into()
  fp(texture, target, levels, internalformat, width, height)
}

///|
let d_glTextureStorage2DMultisample : Dispatch = Dispatch::new(
  "glTextureStorage2DMultisample",
)

///|
pub fn gl_texture_storage2_d_multisample(
  texture : UInt,
  samples : Int,
  internalformat : UInt,
  width : Int,
  height : Int,
  fixedsamplelocations : Bool,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int, Int, Bool) -> Unit] = d_glTextureStorage2DMultisample
    .get()
    .unsafe_into()
  fp(texture, samples, internalformat, width, height, fixedsamplelocations)
}

///|
let d_glTextureStorage2DMultisampleEXT : Dispatch = Dispatch::new(
  "glTextureStorage2DMultisampleEXT",
)

///|
pub fn gl_texture_storage2_d_multisample_ext(
  texture : UInt,
  target : UInt,
  samples : Int,
  internalformat : UInt,
  width : Int,
  height : Int,
  fixedsamplelocations : Bool,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, UInt, Int, Int, Bool) -> Unit] = d_glTextureStorage2DMultisampleEXT
    .get()
    .unsafe_into()
  fp(
    texture, target, samples, internalformat, width, height, fixedsamplelocations,
  )
}

///|
let d_glTextureStorage3D : Dispatch = Dispatch::new("glTextureStorage3D")

///|
pub fn gl_texture_storage3_d(
  texture : UInt,
  levels : Int,
  internalformat : UInt,
  width : Int,
  height : Int,
  depth : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int, Int, Int) -> Unit] = d_glTextureStorage3D
    .get()
    .unsafe_into()
  fp(texture, levels, internalformat, width, height, depth)
}

///|
let d_glTextureStorage3DEXT : Dispatch = Dispatch::new("glTextureStorage3DEXT")

///|
pub fn gl_texture_storage3_dext(
  texture : UInt,
  target : UInt,
  levels : Int,
  internalformat : UInt,
  width : Int,
  height : Int,
  depth : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, UInt, Int, Int, Int) -> Unit] = d_glTextureStorage3DEXT
    .get()
    .unsafe_into()
  fp(texture, target, levels, internalformat, width, height, depth)
}

///|
let d_glTextureStorage3DMultisample : Dispatch = Dispatch::new(
  "glTextureStorage3DMultisample",
)

///|
pub fn gl_texture_storage3_d_multisample(
  texture : UInt,
  samples : Int,
  internalformat : UInt,
  width : Int,
  height : Int,
  depth : Int,
  fixedsamplelocations : Bool,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int, Int, Int, Bool) -> Unit] = d_glTextureStorage3DMultisample
    .get()
    .unsafe_into()
  fp(
    texture, samples, internalformat, width, height, depth, fixedsamplelocations,
  )
}

///|
let d_glTextureStorage3DMultisampleEXT : Dispatch = Dispatch::new(
  "glTextureStorage3DMultisampleEXT",
)

///|
pub fn gl_texture_storage3_d_multisample_ext(
  texture : UInt,
  target : UInt,
  samples : Int,
  internalformat : UInt,
  width : Int,
  height : Int,
  depth : Int,
  fixedsamplelocations : Bool,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, UInt, Int, Int, Int, Bool) -> Unit] = d_glTextureStorage3DMultisampleEXT
    .get()
    .unsafe_into()
  fp(
    texture, target, samples, internalformat, width, height, depth, fixedsamplelocations,
  )
}

///|
let d_glTextureStorageMem1DEXT : Dispatch = Dispatch::new(
  "glTextureStorageMem1DEXT",
)

///|
pub fn gl_texture_storage_mem1_dext(
  texture : UInt,
  levels : Int,
  internalFormat : UInt,
  width : Int,
  memory : UInt,
  offset : UInt64,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int, UInt, UInt64) -> Unit] = d_glTextureStorageMem1DEXT
    .get()
    .unsafe_into()
  fp(texture, levels, internalFormat, width, memory, offset)
}

///|
let d_glTextureStorageMem2DEXT : Dispatch = Dispatch::new(
  "glTextureStorageMem2DEXT",
)

///|
pub fn gl_texture_storage_mem2_dext(
  texture : UInt,
  levels : Int,
  internalFormat : UInt,
  width : Int,
  height : Int,
  memory : UInt,
  offset : UInt64,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int, Int, UInt, UInt64) -> Unit] = d_glTextureStorageMem2DEXT
    .get()
    .unsafe_into()
  fp(texture, levels, internalFormat, width, height, memory, offset)
}

///|
let d_glTextureStorageMem2DMultisampleEXT : Dispatch = Dispatch::new(
  "glTextureStorageMem2DMultisampleEXT",
)

///|
pub fn gl_texture_storage_mem2_d_multisample_ext(
  texture : UInt,
  samples : Int,
  internalFormat : UInt,
  width : Int,
  height : Int,
  fixedSampleLocations : Bool,
  memory : UInt,
  offset : UInt64,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int, Int, Bool, UInt, UInt64) -> Unit] = d_glTextureStorageMem2DMultisampleEXT
    .get()
    .unsafe_into()
  fp(
    texture, samples, internalFormat, width, height, fixedSampleLocations, memory,
    offset,
  )
}

///|
let d_glTextureStorageMem3DEXT : Dispatch = Dispatch::new(
  "glTextureStorageMem3DEXT",
)

///|
pub fn gl_texture_storage_mem3_dext(
  texture : UInt,
  levels : Int,
  internalFormat : UInt,
  width : Int,
  height : Int,
  depth : Int,
  memory : UInt,
  offset : UInt64,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int, Int, Int, UInt, UInt64) -> Unit] = d_glTextureStorageMem3DEXT
    .get()
    .unsafe_into()
  fp(texture, levels, internalFormat, width, height, depth, memory, offset)
}

///|
let d_glTextureStorageMem3DMultisampleEXT : Dispatch = Dispatch::new(
  "glTextureStorageMem3DMultisampleEXT",
)

///|
pub fn gl_texture_storage_mem3_d_multisample_ext(
  texture : UInt,
  samples : Int,
  internalFormat : UInt,
  width : Int,
  height : Int,
  depth : Int,
  fixedSampleLocations : Bool,
  memory : UInt,
  offset : UInt64,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int, Int, Int, Bool, UInt, UInt64) -> Unit] = d_glTextureStorageMem3DMultisampleEXT
    .get()
    .unsafe_into()
  fp(
    texture, samples, internalFormat, width, height, depth, fixedSampleLocations,
    memory, offset,
  )
}

///|
let d_glTextureStorageSparseAMD : Dispatch = Dispatch::new(
  "glTextureStorageSparseAMD",
)

///|
pub fn gl_texture_storage_sparse_amd(
  texture : UInt,
  target : UInt,
  internalFormat : UInt,
  width : Int,
  height : Int,
  depth : Int,
  layers : Int,
  flags : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int, Int, Int, Int, UInt) -> Unit] = d_glTextureStorageSparseAMD
    .get()
    .unsafe_into()
  fp(texture, target, internalFormat, width, height, depth, layers, flags)
}

///|
let d_glTextureSubImage1D : Dispatch = Dispatch::new("glTextureSubImage1D")

///|
pub fn gl_texture_sub_image1_d(
  texture : UInt,
  level : Int,
  xoffset : Int,
  width : Int,
  format : UInt,
  type_ : UInt,
  pixels : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, Int, Int, UInt, UInt, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glTextureSubImage1D.get().unsafe_into()
  @pointer.borrow_bytes(pixels, fn(pixels_p) {
    fp(texture, level, xoffset, width, format, type_, pixels_p)
  })
}

///|
let d_glTextureSubImage1DEXT : Dispatch = Dispatch::new(
  "glTextureSubImage1DEXT",
)

///|
pub fn gl_texture_sub_image1_dext(
  texture : UInt,
  target : UInt,
  level : Int,
  xoffset : Int,
  width : Int,
  format : UInt,
  type_ : UInt,
  pixels : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, Int, Int, Int, UInt, UInt, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glTextureSubImage1DEXT.get().unsafe_into()
  @pointer.borrow_bytes(pixels, fn(pixels_p) {
    fp(texture, target, level, xoffset, width, format, type_, pixels_p)
  })
}

///|
let d_glTextureSubImage2D : Dispatch = Dispatch::new("glTextureSubImage2D")

///|
pub fn gl_texture_sub_image2_d(
  texture : UInt,
  level : Int,
  xoffset : Int,
  yoffset : Int,
  width : Int,
  height : Int,
  format : UInt,
  type_ : UInt,
  pixels : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, Int, Int, Int, Int, UInt, UInt, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glTextureSubImage2D.get().unsafe_into()
  @pointer.borrow_bytes(pixels, fn(pixels_p) {
    fp(texture, level, xoffset, yoffset, width, height, format, type_, pixels_p)
  })
}

///|
let d_glTextureSubImage2DEXT : Dispatch = Dispatch::new(
  "glTextureSubImage2DEXT",
)

///|
pub fn gl_texture_sub_image2_dext(
  texture : UInt,
  target : UInt,
  level : Int,
  xoffset : Int,
  yoffset : Int,
  width : Int,
  height : Int,
  format : UInt,
  type_ : UInt,
  pixels : Bytes,
) -> Unit {
  let fp : FuncRef[
    (UInt, UInt, Int, Int, Int, Int, Int, UInt, UInt, @pointer.Pointer[Byte]) -> Unit,
  ] = d_glTextureSubImage2DEXT.get().unsafe_into()
  @pointer.borrow_bytes(pixels, fn(pixels_p) {
    fp(
      texture, target, level, xoffset, yoffset, width, height, format, type_, pixels_p,
    )
  })
}

///|
let d_glTextureSubImage3D : Dispatch = Dispatch::new("glTextureSubImage3D")

///|
pub fn gl_texture_sub_image3_d(
  texture : UInt,
  level : Int,
  xoffset : Int,
  yoffset : Int,
  zoffset : Int,
  width : Int,
  height : Int,
  depth : Int,
  format : UInt,
  type_ : UInt,
  pixels : Bytes,
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      Int,
      Int,
      Int,
      Int,
      Int,
      Int,
      Int,
      UInt,
      UInt,
      @pointer.Pointer[Byte],
    ) -> Unit,
  ] = d_glTextureSubImage3D.get().unsafe_into()
  @pointer.borrow_bytes(pixels, fn(pixels_p) {
    fp(
      texture, level, xoffset, yoffset, zoffset, width, height, depth, format, type_,
      pixels_p,
    )
  })
}

///|
let d_glTextureSubImage3DEXT : Dispatch = Dispatch::new(
  "glTextureSubImage3DEXT",
)

///|
pub fn gl_texture_sub_image3_dext(
  texture : UInt,
  target : UInt,
  level : Int,
  xoffset : Int,
  yoffset : Int,
  zoffset : Int,
  width : Int,
  height : Int,
  depth : Int,
  format : UInt,
  type_ : UInt,
  pixels : Bytes,
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      UInt,
      Int,
      Int,
      Int,
      Int,
      Int,
      Int,
      Int,
      UInt,
      UInt,
      @pointer.Pointer[Byte],
    ) -> Unit,
  ] = d_glTextureSubImage3DEXT.get().unsafe_into()
  @pointer.borrow_bytes(pixels, fn(pixels_p) {
    fp(
      texture, target, level, xoffset, yoffset, zoffset, width, height, depth, format,
      type_, pixels_p,
    )
  })
}

///|
let d_glTextureView : Dispatch = Dispatch::with_aliases("glTextureView", [
  "glTextureViewEXT", "glTextureViewOES",
])

///|
pub fn gl_texture_view(
  texture : UInt,
  target : UInt,
  origtexture : UInt,
  internalformat : UInt,
  minlevel : UInt,
  numlevels : UInt,
  minlayer : UInt,
  numlayers : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, UInt, UInt, UInt, UInt) -> Unit] = d_glTextureView
    .get()
    .unsafe_into()
  fp(
    texture, target, origtexture, internalformat, minlevel, numlevels, minlayer,
    numlayers,
  )
}

///|
let d_glTextureViewEXT : Dispatch = Dispatch::with_aliases("glTextureViewEXT", [
  "glTextureView", "glTextureViewOES",
])

///|
pub fn gl_texture_view_ext(
  texture : UInt,
  target : UInt,
  origtexture : UInt,
  internalformat : UInt,
  minlevel : UInt,
  numlevels : UInt,
  minlayer : UInt,
  numlayers : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, UInt, UInt, UInt, UInt) -> Unit] = d_glTextureViewEXT
    .get()
    .unsafe_into()
  fp(
    texture, target, origtexture, internalformat, minlevel, numlevels, minlayer,
    numlayers,
  )
}

///|
let d_glTextureViewOES : Dispatch = Dispatch::with_aliases("glTextureViewOES", [
  "glTextureView", "glTextureViewEXT",
])

///|
pub fn gl_texture_view_oes(
  texture : UInt,
  target : UInt,
  origtexture : UInt,
  internalformat : UInt,
  minlevel : UInt,
  numlevels : UInt,
  minlayer : UInt,
  numlayers : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, UInt, UInt, UInt, UInt) -> Unit] = d_glTextureViewOES
    .get()
    .unsafe_into()
  fp(
    texture, target, origtexture, internalformat, minlevel, numlevels, minlayer,
    numlayers,
  )
}

///|
let d_glTrackMatrixNV : Dispatch = Dispatch::new("glTrackMatrixNV")

///|
pub fn gl_track_matrix_nv(
  target : UInt,
  address : UInt,
  matrix : UInt,
  transform : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt) -> Unit] = d_glTrackMatrixNV
    .get()
    .unsafe_into()
  fp(target, address, matrix, transform)
}

///|
let d_glTransformFeedbackAttribsNV : Dispatch = Dispatch::new(
  "glTransformFeedbackAttribsNV",
)

///|
pub fn gl_transform_feedback_attribs_nv(
  count : Int,
  attribs : FixedArray[Int],
  bufferMode : UInt,
) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[Int], UInt) -> Unit] = d_glTransformFeedbackAttribsNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(attribs, fn(attribs_p) {
    fp(count, attribs_p, bufferMode)
  })
}

///|
let d_glTransformFeedbackBufferBase : Dispatch = Dispatch::new(
  "glTransformFeedbackBufferBase",
)

///|
pub fn gl_transform_feedback_buffer_base(
  xfb : UInt,
  index : UInt,
  buffer : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glTransformFeedbackBufferBase
    .get()
    .unsafe_into()
  fp(xfb, index, buffer)
}

///|
let d_glTransformFeedbackBufferRange : Dispatch = Dispatch::new(
  "glTransformFeedbackBufferRange",
)

///|
pub fn gl_transform_feedback_buffer_range(
  xfb : UInt,
  index : UInt,
  buffer : UInt,
  offset : Int64,
  size : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int64, Int64) -> Unit] = d_glTransformFeedbackBufferRange
    .get()
    .unsafe_into()
  fp(xfb, index, buffer, offset, size)
}

///|
let d_glTransformFeedbackStreamAttribsNV : Dispatch = Dispatch::new(
  "glTransformFeedbackStreamAttribsNV",
)

///|
pub fn gl_transform_feedback_stream_attribs_nv(
  count : Int,
  attribs : FixedArray[Int],
  nbuffers : Int,
  bufstreams : FixedArray[Int],
  bufferMode : UInt,
) -> Unit {
  let fp : FuncRef[
    (Int, @pointer.Pointer[Int], Int, @pointer.Pointer[Int], UInt) -> Unit,
  ] = d_glTransformFeedbackStreamAttribsNV.get().unsafe_into()
  @pointer.borrow_array(attribs, fn(attribs_p) {
    @pointer.borrow_array(bufstreams, fn(bufstreams_p) {
      fp(count, attribs_p, nbuffers, bufstreams_p, bufferMode)
    })
  })
}

///|
let d_glTransformFeedbackVaryings : Dispatch = Dispatch::with_aliases(
  "glTransformFeedbackVaryings",
  ["glTransformFeedbackVaryingsEXT"],
)

///|
pub fn gl_transform_feedback_varyings(
  program : UInt,
  count : Int,
  varyings : FixedArray[Bytes],
  bufferMode : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Bytes], UInt) -> Unit] = d_glTransformFeedbackVaryings
    .get()
    .unsafe_into()
  @pointer.borrow_array(varyings, fn(varyings_p) {
    fp(program, count, varyings_p, bufferMode)
  })
}

///|
let d_glTransformFeedbackVaryingsEXT : Dispatch = Dispatch::with_aliases(
  "glTransformFeedbackVaryingsEXT",
  ["glTransformFeedbackVaryings"],
)

///|
pub fn gl_transform_feedback_varyings_ext(
  program : UInt,
  count : Int,
  varyings : FixedArray[Bytes],
  bufferMode : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Bytes], UInt) -> Unit] = d_glTransformFeedbackVaryingsEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(varyings, fn(varyings_p) {
    fp(program, count, varyings_p, bufferMode)
  })
}

///|
let d_glTransformFeedbackVaryingsNV : Dispatch = Dispatch::new(
  "glTransformFeedbackVaryingsNV",
)

///|
pub fn gl_transform_feedback_varyings_nv(
  program : UInt,
  count : Int,
  locations : FixedArray[Int],
  bufferMode : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Int], UInt) -> Unit] = d_glTransformFeedbackVaryingsNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(locations, fn(locations_p) {
    fp(program, count, locations_p, bufferMode)
  })
}

///|
let d_glTransformPathNV : Dispatch = Dispatch::new("glTransformPathNV")

///|
pub fn gl_transform_path_nv(
  resultPath : UInt,
  srcPath : UInt,
  transformType : UInt,
  transformValues : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glTransformPathNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(transformValues, fn(transformValues_p) {
    fp(resultPath, srcPath, transformType, transformValues_p)
  })
}

///|
let d_glTranslated : Dispatch = Dispatch::new("glTranslated")

///|
pub fn gl_translated(x : Double, y : Double, z : Double) -> Unit {
  let fp : FuncRef[(Double, Double, Double) -> Unit] = d_glTranslated
    .get()
    .unsafe_into()
  fp(x, y, z)
}

///|
let d_glTranslatef : Dispatch = Dispatch::new("glTranslatef")

///|
pub fn gl_translatef(x : Float, y : Float, z : Float) -> Unit {
  let fp : FuncRef[(Float, Float, Float) -> Unit] = d_glTranslatef
    .get()
    .unsafe_into()
  fp(x, y, z)
}

///|
let d_glTranslatex : Dispatch = Dispatch::new("glTranslatex")

///|
pub fn gl_translatex(x : Int, y : Int, z : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glTranslatex.get().unsafe_into()
  fp(x, y, z)
}

///|
let d_glTranslatexOES : Dispatch = Dispatch::new("glTranslatexOES")

///|
pub fn gl_translatex_oes(x : Int, y : Int, z : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glTranslatexOES
    .get()
    .unsafe_into()
  fp(x, y, z)
}

///|
let d_glUniform1d : Dispatch = Dispatch::new("glUniform1d")

///|
pub fn gl_uniform1d(location : Int, x : Double) -> Unit {
  let fp : FuncRef[(Int, Double) -> Unit] = d_glUniform1d.get().unsafe_into()
  fp(location, x)
}

///|
let d_glUniform1dv : Dispatch = Dispatch::new("glUniform1dv")

///|
pub fn gl_uniform1dv(
  location : Int,
  count : Int,
  value : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[Double]) -> Unit] = d_glUniform1dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniform1f : Dispatch = Dispatch::with_aliases("glUniform1f", [
  "glUniform1fARB",
])

///|
pub fn gl_uniform1f(location : Int, v0 : Float) -> Unit {
  let fp : FuncRef[(Int, Float) -> Unit] = d_glUniform1f.get().unsafe_into()
  fp(location, v0)
}

///|
let d_glUniform1fARB : Dispatch = Dispatch::with_aliases("glUniform1fARB", [
  "glUniform1f",
])

///|
pub fn gl_uniform1f_arb(location : Int, v0 : Float) -> Unit {
  let fp : FuncRef[(Int, Float) -> Unit] = d_glUniform1fARB.get().unsafe_into()
  fp(location, v0)
}

///|
let d_glUniform1fv : Dispatch = Dispatch::with_aliases("glUniform1fv", [
  "glUniform1fvARB",
])

///|
pub fn gl_uniform1fv(
  location : Int,
  count : Int,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[Float]) -> Unit] = d_glUniform1fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniform1fvARB : Dispatch = Dispatch::with_aliases("glUniform1fvARB", [
  "glUniform1fv",
])

///|
pub fn gl_uniform1fv_arb(
  location : Int,
  count : Int,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[Float]) -> Unit] = d_glUniform1fvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniform1i : Dispatch = Dispatch::with_aliases("glUniform1i", [
  "glUniform1iARB",
])

///|
pub fn gl_uniform1i(location : Int, v0 : Int) -> Unit {
  let fp : FuncRef[(Int, Int) -> Unit] = d_glUniform1i.get().unsafe_into()
  fp(location, v0)
}

///|
let d_glUniform1i64ARB : Dispatch = Dispatch::new("glUniform1i64ARB")

///|
pub fn gl_uniform1i64_arb(location : Int, x : Int64) -> Unit {
  let fp : FuncRef[(Int, Int64) -> Unit] = d_glUniform1i64ARB
    .get()
    .unsafe_into()
  fp(location, x)
}

///|
let d_glUniform1i64NV : Dispatch = Dispatch::new("glUniform1i64NV")

///|
pub fn gl_uniform1i64_nv(location : Int, x : Int64) -> Unit {
  let fp : FuncRef[(Int, Int64) -> Unit] = d_glUniform1i64NV.get().unsafe_into()
  fp(location, x)
}

///|
let d_glUniform1i64vARB : Dispatch = Dispatch::new("glUniform1i64vARB")

///|
pub fn gl_uniform1i64v_arb(
  location : Int,
  count : Int,
  value : FixedArray[Int64],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[Int64]) -> Unit] = d_glUniform1i64vARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniform1i64vNV : Dispatch = Dispatch::new("glUniform1i64vNV")

///|
pub fn gl_uniform1i64v_nv(
  location : Int,
  count : Int,
  value : FixedArray[Int64],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[Int64]) -> Unit] = d_glUniform1i64vNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniform1iARB : Dispatch = Dispatch::with_aliases("glUniform1iARB", [
  "glUniform1i",
])

///|
pub fn gl_uniform1i_arb(location : Int, v0 : Int) -> Unit {
  let fp : FuncRef[(Int, Int) -> Unit] = d_glUniform1iARB.get().unsafe_into()
  fp(location, v0)
}

///|
let d_glUniform1iv : Dispatch = Dispatch::with_aliases("glUniform1iv", [
  "glUniform1ivARB",
])

///|
pub fn gl_uniform1iv(
  location : Int,
  count : Int,
  value : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[Int]) -> Unit] = d_glUniform1iv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniform1ivARB : Dispatch = Dispatch::with_aliases("glUniform1ivARB", [
  "glUniform1iv",
])

///|
pub fn gl_uniform1iv_arb(
  location : Int,
  count : Int,
  value : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[Int]) -> Unit] = d_glUniform1ivARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniform1ui : Dispatch = Dispatch::with_aliases("glUniform1ui", [
  "glUniform1uiEXT",
])

///|
pub fn gl_uniform1ui(location : Int, v0 : UInt) -> Unit {
  let fp : FuncRef[(Int, UInt) -> Unit] = d_glUniform1ui.get().unsafe_into()
  fp(location, v0)
}

///|
let d_glUniform1ui64ARB : Dispatch = Dispatch::new("glUniform1ui64ARB")

///|
pub fn gl_uniform1ui64_arb(location : Int, x : UInt64) -> Unit {
  let fp : FuncRef[(Int, UInt64) -> Unit] = d_glUniform1ui64ARB
    .get()
    .unsafe_into()
  fp(location, x)
}

///|
let d_glUniform1ui64NV : Dispatch = Dispatch::new("glUniform1ui64NV")

///|
pub fn gl_uniform1ui64_nv(location : Int, x : UInt64) -> Unit {
  let fp : FuncRef[(Int, UInt64) -> Unit] = d_glUniform1ui64NV
    .get()
    .unsafe_into()
  fp(location, x)
}

///|
let d_glUniform1ui64vARB : Dispatch = Dispatch::new("glUniform1ui64vARB")

///|
pub fn gl_uniform1ui64v_arb(
  location : Int,
  count : Int,
  value : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[UInt64]) -> Unit] = d_glUniform1ui64vARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniform1ui64vNV : Dispatch = Dispatch::new("glUniform1ui64vNV")

///|
pub fn gl_uniform1ui64v_nv(
  location : Int,
  count : Int,
  value : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[UInt64]) -> Unit] = d_glUniform1ui64vNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniform1uiEXT : Dispatch = Dispatch::with_aliases("glUniform1uiEXT", [
  "glUniform1ui",
])

///|
pub fn gl_uniform1ui_ext(location : Int, v0 : UInt) -> Unit {
  let fp : FuncRef[(Int, UInt) -> Unit] = d_glUniform1uiEXT.get().unsafe_into()
  fp(location, v0)
}

///|
let d_glUniform1uiv : Dispatch = Dispatch::with_aliases("glUniform1uiv", [
  "glUniform1uivEXT",
])

///|
pub fn gl_uniform1uiv(
  location : Int,
  count : Int,
  value : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[UInt]) -> Unit] = d_glUniform1uiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniform1uivEXT : Dispatch = Dispatch::with_aliases("glUniform1uivEXT", [
  "glUniform1uiv",
])

///|
pub fn gl_uniform1uiv_ext(
  location : Int,
  count : Int,
  value : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[UInt]) -> Unit] = d_glUniform1uivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniform2d : Dispatch = Dispatch::new("glUniform2d")

///|
pub fn gl_uniform2d(location : Int, x : Double, y : Double) -> Unit {
  let fp : FuncRef[(Int, Double, Double) -> Unit] = d_glUniform2d
    .get()
    .unsafe_into()
  fp(location, x, y)
}

///|
let d_glUniform2dv : Dispatch = Dispatch::new("glUniform2dv")

///|
pub fn gl_uniform2dv(
  location : Int,
  count : Int,
  value : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[Double]) -> Unit] = d_glUniform2dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniform2f : Dispatch = Dispatch::with_aliases("glUniform2f", [
  "glUniform2fARB",
])

///|
pub fn gl_uniform2f(location : Int, v0 : Float, v1 : Float) -> Unit {
  let fp : FuncRef[(Int, Float, Float) -> Unit] = d_glUniform2f
    .get()
    .unsafe_into()
  fp(location, v0, v1)
}

///|
let d_glUniform2fARB : Dispatch = Dispatch::with_aliases("glUniform2fARB", [
  "glUniform2f",
])

///|
pub fn gl_uniform2f_arb(location : Int, v0 : Float, v1 : Float) -> Unit {
  let fp : FuncRef[(Int, Float, Float) -> Unit] = d_glUniform2fARB
    .get()
    .unsafe_into()
  fp(location, v0, v1)
}

///|
let d_glUniform2fv : Dispatch = Dispatch::with_aliases("glUniform2fv", [
  "glUniform2fvARB",
])

///|
pub fn gl_uniform2fv(
  location : Int,
  count : Int,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[Float]) -> Unit] = d_glUniform2fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniform2fvARB : Dispatch = Dispatch::with_aliases("glUniform2fvARB", [
  "glUniform2fv",
])

///|
pub fn gl_uniform2fv_arb(
  location : Int,
  count : Int,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[Float]) -> Unit] = d_glUniform2fvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniform2i : Dispatch = Dispatch::with_aliases("glUniform2i", [
  "glUniform2iARB",
])

///|
pub fn gl_uniform2i(location : Int, v0 : Int, v1 : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glUniform2i.get().unsafe_into()
  fp(location, v0, v1)
}

///|
let d_glUniform2i64ARB : Dispatch = Dispatch::new("glUniform2i64ARB")

///|
pub fn gl_uniform2i64_arb(location : Int, x : Int64, y : Int64) -> Unit {
  let fp : FuncRef[(Int, Int64, Int64) -> Unit] = d_glUniform2i64ARB
    .get()
    .unsafe_into()
  fp(location, x, y)
}

///|
let d_glUniform2i64NV : Dispatch = Dispatch::new("glUniform2i64NV")

///|
pub fn gl_uniform2i64_nv(location : Int, x : Int64, y : Int64) -> Unit {
  let fp : FuncRef[(Int, Int64, Int64) -> Unit] = d_glUniform2i64NV
    .get()
    .unsafe_into()
  fp(location, x, y)
}

///|
let d_glUniform2i64vARB : Dispatch = Dispatch::new("glUniform2i64vARB")

///|
pub fn gl_uniform2i64v_arb(
  location : Int,
  count : Int,
  value : FixedArray[Int64],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[Int64]) -> Unit] = d_glUniform2i64vARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniform2i64vNV : Dispatch = Dispatch::new("glUniform2i64vNV")

///|
pub fn gl_uniform2i64v_nv(
  location : Int,
  count : Int,
  value : FixedArray[Int64],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[Int64]) -> Unit] = d_glUniform2i64vNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniform2iARB : Dispatch = Dispatch::with_aliases("glUniform2iARB", [
  "glUniform2i",
])

///|
pub fn gl_uniform2i_arb(location : Int, v0 : Int, v1 : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glUniform2iARB
    .get()
    .unsafe_into()
  fp(location, v0, v1)
}

///|
let d_glUniform2iv : Dispatch = Dispatch::with_aliases("glUniform2iv", [
  "glUniform2ivARB",
])

///|
pub fn gl_uniform2iv(
  location : Int,
  count : Int,
  value : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[Int]) -> Unit] = d_glUniform2iv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniform2ivARB : Dispatch = Dispatch::with_aliases("glUniform2ivARB", [
  "glUniform2iv",
])

///|
pub fn gl_uniform2iv_arb(
  location : Int,
  count : Int,
  value : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[Int]) -> Unit] = d_glUniform2ivARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniform2ui : Dispatch = Dispatch::with_aliases("glUniform2ui", [
  "glUniform2uiEXT",
])

///|
pub fn gl_uniform2ui(location : Int, v0 : UInt, v1 : UInt) -> Unit {
  let fp : FuncRef[(Int, UInt, UInt) -> Unit] = d_glUniform2ui
    .get()
    .unsafe_into()
  fp(location, v0, v1)
}

///|
let d_glUniform2ui64ARB : Dispatch = Dispatch::new("glUniform2ui64ARB")

///|
pub fn gl_uniform2ui64_arb(location : Int, x : UInt64, y : UInt64) -> Unit {
  let fp : FuncRef[(Int, UInt64, UInt64) -> Unit] = d_glUniform2ui64ARB
    .get()
    .unsafe_into()
  fp(location, x, y)
}

///|
let d_glUniform2ui64NV : Dispatch = Dispatch::new("glUniform2ui64NV")

///|
pub fn gl_uniform2ui64_nv(location : Int, x : UInt64, y : UInt64) -> Unit {
  let fp : FuncRef[(Int, UInt64, UInt64) -> Unit] = d_glUniform2ui64NV
    .get()
    .unsafe_into()
  fp(location, x, y)
}

///|
let d_glUniform2ui64vARB : Dispatch = Dispatch::new("glUniform2ui64vARB")

///|
pub fn gl_uniform2ui64v_arb(
  location : Int,
  count : Int,
  value : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[UInt64]) -> Unit] = d_glUniform2ui64vARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniform2ui64vNV : Dispatch = Dispatch::new("glUniform2ui64vNV")

///|
pub fn gl_uniform2ui64v_nv(
  location : Int,
  count : Int,
  value : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[UInt64]) -> Unit] = d_glUniform2ui64vNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniform2uiEXT : Dispatch = Dispatch::with_aliases("glUniform2uiEXT", [
  "glUniform2ui",
])

///|
pub fn gl_uniform2ui_ext(location : Int, v0 : UInt, v1 : UInt) -> Unit {
  let fp : FuncRef[(Int, UInt, UInt) -> Unit] = d_glUniform2uiEXT
    .get()
    .unsafe_into()
  fp(location, v0, v1)
}

///|
let d_glUniform2uiv : Dispatch = Dispatch::with_aliases("glUniform2uiv", [
  "glUniform2uivEXT",
])

///|
pub fn gl_uniform2uiv(
  location : Int,
  count : Int,
  value : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[UInt]) -> Unit] = d_glUniform2uiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniform2uivEXT : Dispatch = Dispatch::with_aliases("glUniform2uivEXT", [
  "glUniform2uiv",
])

///|
pub fn gl_uniform2uiv_ext(
  location : Int,
  count : Int,
  value : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[UInt]) -> Unit] = d_glUniform2uivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniform3d : Dispatch = Dispatch::new("glUniform3d")

///|
pub fn gl_uniform3d(location : Int, x : Double, y : Double, z : Double) -> Unit {
  let fp : FuncRef[(Int, Double, Double, Double) -> Unit] = d_glUniform3d
    .get()
    .unsafe_into()
  fp(location, x, y, z)
}

///|
let d_glUniform3dv : Dispatch = Dispatch::new("glUniform3dv")

///|
pub fn gl_uniform3dv(
  location : Int,
  count : Int,
  value : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[Double]) -> Unit] = d_glUniform3dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniform3f : Dispatch = Dispatch::with_aliases("glUniform3f", [
  "glUniform3fARB",
])

///|
pub fn gl_uniform3f(location : Int, v0 : Float, v1 : Float, v2 : Float) -> Unit {
  let fp : FuncRef[(Int, Float, Float, Float) -> Unit] = d_glUniform3f
    .get()
    .unsafe_into()
  fp(location, v0, v1, v2)
}

///|
let d_glUniform3fARB : Dispatch = Dispatch::with_aliases("glUniform3fARB", [
  "glUniform3f",
])

///|
pub fn gl_uniform3f_arb(
  location : Int,
  v0 : Float,
  v1 : Float,
  v2 : Float,
) -> Unit {
  let fp : FuncRef[(Int, Float, Float, Float) -> Unit] = d_glUniform3fARB
    .get()
    .unsafe_into()
  fp(location, v0, v1, v2)
}

///|
let d_glUniform3fv : Dispatch = Dispatch::with_aliases("glUniform3fv", [
  "glUniform3fvARB",
])

///|
pub fn gl_uniform3fv(
  location : Int,
  count : Int,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[Float]) -> Unit] = d_glUniform3fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniform3fvARB : Dispatch = Dispatch::with_aliases("glUniform3fvARB", [
  "glUniform3fv",
])

///|
pub fn gl_uniform3fv_arb(
  location : Int,
  count : Int,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[Float]) -> Unit] = d_glUniform3fvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniform3i : Dispatch = Dispatch::with_aliases("glUniform3i", [
  "glUniform3iARB",
])

///|
pub fn gl_uniform3i(location : Int, v0 : Int, v1 : Int, v2 : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int) -> Unit] = d_glUniform3i
    .get()
    .unsafe_into()
  fp(location, v0, v1, v2)
}

///|
let d_glUniform3i64ARB : Dispatch = Dispatch::new("glUniform3i64ARB")

///|
pub fn gl_uniform3i64_arb(
  location : Int,
  x : Int64,
  y : Int64,
  z : Int64,
) -> Unit {
  let fp : FuncRef[(Int, Int64, Int64, Int64) -> Unit] = d_glUniform3i64ARB
    .get()
    .unsafe_into()
  fp(location, x, y, z)
}

///|
let d_glUniform3i64NV : Dispatch = Dispatch::new("glUniform3i64NV")

///|
pub fn gl_uniform3i64_nv(
  location : Int,
  x : Int64,
  y : Int64,
  z : Int64,
) -> Unit {
  let fp : FuncRef[(Int, Int64, Int64, Int64) -> Unit] = d_glUniform3i64NV
    .get()
    .unsafe_into()
  fp(location, x, y, z)
}

///|
let d_glUniform3i64vARB : Dispatch = Dispatch::new("glUniform3i64vARB")

///|
pub fn gl_uniform3i64v_arb(
  location : Int,
  count : Int,
  value : FixedArray[Int64],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[Int64]) -> Unit] = d_glUniform3i64vARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniform3i64vNV : Dispatch = Dispatch::new("glUniform3i64vNV")

///|
pub fn gl_uniform3i64v_nv(
  location : Int,
  count : Int,
  value : FixedArray[Int64],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[Int64]) -> Unit] = d_glUniform3i64vNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniform3iARB : Dispatch = Dispatch::with_aliases("glUniform3iARB", [
  "glUniform3i",
])

///|
pub fn gl_uniform3i_arb(location : Int, v0 : Int, v1 : Int, v2 : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int) -> Unit] = d_glUniform3iARB
    .get()
    .unsafe_into()
  fp(location, v0, v1, v2)
}

///|
let d_glUniform3iv : Dispatch = Dispatch::with_aliases("glUniform3iv", [
  "glUniform3ivARB",
])

///|
pub fn gl_uniform3iv(
  location : Int,
  count : Int,
  value : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[Int]) -> Unit] = d_glUniform3iv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniform3ivARB : Dispatch = Dispatch::with_aliases("glUniform3ivARB", [
  "glUniform3iv",
])

///|
pub fn gl_uniform3iv_arb(
  location : Int,
  count : Int,
  value : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[Int]) -> Unit] = d_glUniform3ivARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniform3ui : Dispatch = Dispatch::with_aliases("glUniform3ui", [
  "glUniform3uiEXT",
])

///|
pub fn gl_uniform3ui(location : Int, v0 : UInt, v1 : UInt, v2 : UInt) -> Unit {
  let fp : FuncRef[(Int, UInt, UInt, UInt) -> Unit] = d_glUniform3ui
    .get()
    .unsafe_into()
  fp(location, v0, v1, v2)
}

///|
let d_glUniform3ui64ARB : Dispatch = Dispatch::new("glUniform3ui64ARB")

///|
pub fn gl_uniform3ui64_arb(
  location : Int,
  x : UInt64,
  y : UInt64,
  z : UInt64,
) -> Unit {
  let fp : FuncRef[(Int, UInt64, UInt64, UInt64) -> Unit] = d_glUniform3ui64ARB
    .get()
    .unsafe_into()
  fp(location, x, y, z)
}

///|
let d_glUniform3ui64NV : Dispatch = Dispatch::new("glUniform3ui64NV")

///|
pub fn gl_uniform3ui64_nv(
  location : Int,
  x : UInt64,
  y : UInt64,
  z : UInt64,
) -> Unit {
  let fp : FuncRef[(Int, UInt64, UInt64, UInt64) -> Unit] = d_glUniform3ui64NV
    .get()
    .unsafe_into()
  fp(location, x, y, z)
}

///|
let d_glUniform3ui64vARB : Dispatch = Dispatch::new("glUniform3ui64vARB")

///|
pub fn gl_uniform3ui64v_arb(
  location : Int,
  count : Int,
  value : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[UInt64]) -> Unit] = d_glUniform3ui64vARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniform3ui64vNV : Dispatch = Dispatch::new("glUniform3ui64vNV")

///|
pub fn gl_uniform3ui64v_nv(
  location : Int,
  count : Int,
  value : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[UInt64]) -> Unit] = d_glUniform3ui64vNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniform3uiEXT : Dispatch = Dispatch::with_aliases("glUniform3uiEXT", [
  "glUniform3ui",
])

///|
pub fn gl_uniform3ui_ext(
  location : Int,
  v0 : UInt,
  v1 : UInt,
  v2 : UInt,
) -> Unit {
  let fp : FuncRef[(Int, UInt, UInt, UInt) -> Unit] = d_glUniform3uiEXT
    .get()
    .unsafe_into()
  fp(location, v0, v1, v2)
}

///|
let d_glUniform3uiv : Dispatch = Dispatch::with_aliases("glUniform3uiv", [
  "glUniform3uivEXT",
])

///|
pub fn gl_uniform3uiv(
  location : Int,
  count : Int,
  value : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[UInt]) -> Unit] = d_glUniform3uiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniform3uivEXT : Dispatch = Dispatch::with_aliases("glUniform3uivEXT", [
  "glUniform3uiv",
])

///|
pub fn gl_uniform3uiv_ext(
  location : Int,
  count : Int,
  value : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[UInt]) -> Unit] = d_glUniform3uivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniform4d : Dispatch = Dispatch::new("glUniform4d")

///|
pub fn gl_uniform4d(
  location : Int,
  x : Double,
  y : Double,
  z : Double,
  w : Double,
) -> Unit {
  let fp : FuncRef[(Int, Double, Double, Double, Double) -> Unit] = d_glUniform4d
    .get()
    .unsafe_into()
  fp(location, x, y, z, w)
}

///|
let d_glUniform4dv : Dispatch = Dispatch::new("glUniform4dv")

///|
pub fn gl_uniform4dv(
  location : Int,
  count : Int,
  value : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[Double]) -> Unit] = d_glUniform4dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniform4f : Dispatch = Dispatch::with_aliases("glUniform4f", [
  "glUniform4fARB",
])

///|
pub fn gl_uniform4f(
  location : Int,
  v0 : Float,
  v1 : Float,
  v2 : Float,
  v3 : Float,
) -> Unit {
  let fp : FuncRef[(Int, Float, Float, Float, Float) -> Unit] = d_glUniform4f
    .get()
    .unsafe_into()
  fp(location, v0, v1, v2, v3)
}

///|
let d_glUniform4fARB : Dispatch = Dispatch::with_aliases("glUniform4fARB", [
  "glUniform4f",
])

///|
pub fn gl_uniform4f_arb(
  location : Int,
  v0 : Float,
  v1 : Float,
  v2 : Float,
  v3 : Float,
) -> Unit {
  let fp : FuncRef[(Int, Float, Float, Float, Float) -> Unit] = d_glUniform4fARB
    .get()
    .unsafe_into()
  fp(location, v0, v1, v2, v3)
}

///|
let d_glUniform4fv : Dispatch = Dispatch::with_aliases("glUniform4fv", [
  "glUniform4fvARB",
])

///|
pub fn gl_uniform4fv(
  location : Int,
  count : Int,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[Float]) -> Unit] = d_glUniform4fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniform4fvARB : Dispatch = Dispatch::with_aliases("glUniform4fvARB", [
  "glUniform4fv",
])

///|
pub fn gl_uniform4fv_arb(
  location : Int,
  count : Int,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[Float]) -> Unit] = d_glUniform4fvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniform4i : Dispatch = Dispatch::with_aliases("glUniform4i", [
  "glUniform4iARB",
])

///|
pub fn gl_uniform4i(
  location : Int,
  v0 : Int,
  v1 : Int,
  v2 : Int,
  v3 : Int,
) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int, Int) -> Unit] = d_glUniform4i
    .get()
    .unsafe_into()
  fp(location, v0, v1, v2, v3)
}

///|
let d_glUniform4i64ARB : Dispatch = Dispatch::new("glUniform4i64ARB")

///|
pub fn gl_uniform4i64_arb(
  location : Int,
  x : Int64,
  y : Int64,
  z : Int64,
  w : Int64,
) -> Unit {
  let fp : FuncRef[(Int, Int64, Int64, Int64, Int64) -> Unit] = d_glUniform4i64ARB
    .get()
    .unsafe_into()
  fp(location, x, y, z, w)
}

///|
let d_glUniform4i64NV : Dispatch = Dispatch::new("glUniform4i64NV")

///|
pub fn gl_uniform4i64_nv(
  location : Int,
  x : Int64,
  y : Int64,
  z : Int64,
  w : Int64,
) -> Unit {
  let fp : FuncRef[(Int, Int64, Int64, Int64, Int64) -> Unit] = d_glUniform4i64NV
    .get()
    .unsafe_into()
  fp(location, x, y, z, w)
}

///|
let d_glUniform4i64vARB : Dispatch = Dispatch::new("glUniform4i64vARB")

///|
pub fn gl_uniform4i64v_arb(
  location : Int,
  count : Int,
  value : FixedArray[Int64],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[Int64]) -> Unit] = d_glUniform4i64vARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniform4i64vNV : Dispatch = Dispatch::new("glUniform4i64vNV")

///|
pub fn gl_uniform4i64v_nv(
  location : Int,
  count : Int,
  value : FixedArray[Int64],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[Int64]) -> Unit] = d_glUniform4i64vNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniform4iARB : Dispatch = Dispatch::with_aliases("glUniform4iARB", [
  "glUniform4i",
])

///|
pub fn gl_uniform4i_arb(
  location : Int,
  v0 : Int,
  v1 : Int,
  v2 : Int,
  v3 : Int,
) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int, Int) -> Unit] = d_glUniform4iARB
    .get()
    .unsafe_into()
  fp(location, v0, v1, v2, v3)
}

///|
let d_glUniform4iv : Dispatch = Dispatch::with_aliases("glUniform4iv", [
  "glUniform4ivARB",
])

///|
pub fn gl_uniform4iv(
  location : Int,
  count : Int,
  value : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[Int]) -> Unit] = d_glUniform4iv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniform4ivARB : Dispatch = Dispatch::with_aliases("glUniform4ivARB", [
  "glUniform4iv",
])

///|
pub fn gl_uniform4iv_arb(
  location : Int,
  count : Int,
  value : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[Int]) -> Unit] = d_glUniform4ivARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniform4ui : Dispatch = Dispatch::with_aliases("glUniform4ui", [
  "glUniform4uiEXT",
])

///|
pub fn gl_uniform4ui(
  location : Int,
  v0 : UInt,
  v1 : UInt,
  v2 : UInt,
  v3 : UInt,
) -> Unit {
  let fp : FuncRef[(Int, UInt, UInt, UInt, UInt) -> Unit] = d_glUniform4ui
    .get()
    .unsafe_into()
  fp(location, v0, v1, v2, v3)
}

///|
let d_glUniform4ui64ARB : Dispatch = Dispatch::new("glUniform4ui64ARB")

///|
pub fn gl_uniform4ui64_arb(
  location : Int,
  x : UInt64,
  y : UInt64,
  z : UInt64,
  w : UInt64,
) -> Unit {
  let fp : FuncRef[(Int, UInt64, UInt64, UInt64, UInt64) -> Unit] = d_glUniform4ui64ARB
    .get()
    .unsafe_into()
  fp(location, x, y, z, w)
}

///|
let d_glUniform4ui64NV : Dispatch = Dispatch::new("glUniform4ui64NV")

///|
pub fn gl_uniform4ui64_nv(
  location : Int,
  x : UInt64,
  y : UInt64,
  z : UInt64,
  w : UInt64,
) -> Unit {
  let fp : FuncRef[(Int, UInt64, UInt64, UInt64, UInt64) -> Unit] = d_glUniform4ui64NV
    .get()
    .unsafe_into()
  fp(location, x, y, z, w)
}

///|
let d_glUniform4ui64vARB : Dispatch = Dispatch::new("glUniform4ui64vARB")

///|
pub fn gl_uniform4ui64v_arb(
  location : Int,
  count : Int,
  value : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[UInt64]) -> Unit] = d_glUniform4ui64vARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniform4ui64vNV : Dispatch = Dispatch::new("glUniform4ui64vNV")

///|
pub fn gl_uniform4ui64v_nv(
  location : Int,
  count : Int,
  value : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[UInt64]) -> Unit] = d_glUniform4ui64vNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniform4uiEXT : Dispatch = Dispatch::with_aliases("glUniform4uiEXT", [
  "glUniform4ui",
])

///|
pub fn gl_uniform4ui_ext(
  location : Int,
  v0 : UInt,
  v1 : UInt,
  v2 : UInt,
  v3 : UInt,
) -> Unit {
  let fp : FuncRef[(Int, UInt, UInt, UInt, UInt) -> Unit] = d_glUniform4uiEXT
    .get()
    .unsafe_into()
  fp(location, v0, v1, v2, v3)
}

///|
let d_glUniform4uiv : Dispatch = Dispatch::with_aliases("glUniform4uiv", [
  "glUniform4uivEXT",
])

///|
pub fn gl_uniform4uiv(
  location : Int,
  count : Int,
  value : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[UInt]) -> Unit] = d_glUniform4uiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniform4uivEXT : Dispatch = Dispatch::with_aliases("glUniform4uivEXT", [
  "glUniform4uiv",
])

///|
pub fn gl_uniform4uiv_ext(
  location : Int,
  count : Int,
  value : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[UInt]) -> Unit] = d_glUniform4uivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniformBlockBinding : Dispatch = Dispatch::new("glUniformBlockBinding")

///|
pub fn gl_uniform_block_binding(
  program : UInt,
  uniformBlockIndex : UInt,
  uniformBlockBinding : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glUniformBlockBinding
    .get()
    .unsafe_into()
  fp(program, uniformBlockIndex, uniformBlockBinding)
}

///|
let d_glUniformBufferEXT : Dispatch = Dispatch::new("glUniformBufferEXT")

///|
pub fn gl_uniform_buffer_ext(
  program : UInt,
  location : Int,
  buffer : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt) -> Unit] = d_glUniformBufferEXT
    .get()
    .unsafe_into()
  fp(program, location, buffer)
}

///|
let d_glUniformHandleui64ARB : Dispatch = Dispatch::with_aliases(
  "glUniformHandleui64ARB",
  ["glUniformHandleui64IMG"],
)

///|
pub fn gl_uniform_handleui64_arb(location : Int, value : UInt64) -> Unit {
  let fp : FuncRef[(Int, UInt64) -> Unit] = d_glUniformHandleui64ARB
    .get()
    .unsafe_into()
  fp(location, value)
}

///|
let d_glUniformHandleui64IMG : Dispatch = Dispatch::with_aliases(
  "glUniformHandleui64IMG",
  ["glUniformHandleui64ARB"],
)

///|
pub fn gl_uniform_handleui64_img(location : Int, value : UInt64) -> Unit {
  let fp : FuncRef[(Int, UInt64) -> Unit] = d_glUniformHandleui64IMG
    .get()
    .unsafe_into()
  fp(location, value)
}

///|
let d_glUniformHandleui64NV : Dispatch = Dispatch::new("glUniformHandleui64NV")

///|
pub fn gl_uniform_handleui64_nv(location : Int, value : UInt64) -> Unit {
  let fp : FuncRef[(Int, UInt64) -> Unit] = d_glUniformHandleui64NV
    .get()
    .unsafe_into()
  fp(location, value)
}

///|
let d_glUniformHandleui64vARB : Dispatch = Dispatch::with_aliases(
  "glUniformHandleui64vARB",
  ["glUniformHandleui64vIMG"],
)

///|
pub fn gl_uniform_handleui64v_arb(
  location : Int,
  count : Int,
  value : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[UInt64]) -> Unit] = d_glUniformHandleui64vARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniformHandleui64vIMG : Dispatch = Dispatch::with_aliases(
  "glUniformHandleui64vIMG",
  ["glUniformHandleui64vARB"],
)

///|
pub fn gl_uniform_handleui64v_img(
  location : Int,
  count : Int,
  value : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[UInt64]) -> Unit] = d_glUniformHandleui64vIMG
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniformHandleui64vNV : Dispatch = Dispatch::new(
  "glUniformHandleui64vNV",
)

///|
pub fn gl_uniform_handleui64v_nv(
  location : Int,
  count : Int,
  value : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[UInt64]) -> Unit] = d_glUniformHandleui64vNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUniformMatrix2dv : Dispatch = Dispatch::new("glUniformMatrix2dv")

///|
pub fn gl_uniform_matrix2dv(
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(Int, Int, Bool, @pointer.Pointer[Double]) -> Unit] = d_glUniformMatrix2dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(location, count, transpose, value_p)
  })
}

///|
let d_glUniformMatrix2fv : Dispatch = Dispatch::with_aliases(
  "glUniformMatrix2fv",
  ["glUniformMatrix2fvARB"],
)

///|
pub fn gl_uniform_matrix2fv(
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(Int, Int, Bool, @pointer.Pointer[Float]) -> Unit] = d_glUniformMatrix2fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(location, count, transpose, value_p)
  })
}

///|
let d_glUniformMatrix2fvARB : Dispatch = Dispatch::with_aliases(
  "glUniformMatrix2fvARB",
  ["glUniformMatrix2fv"],
)

///|
pub fn gl_uniform_matrix2fv_arb(
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(Int, Int, Bool, @pointer.Pointer[Float]) -> Unit] = d_glUniformMatrix2fvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(location, count, transpose, value_p)
  })
}

///|
let d_glUniformMatrix2x3dv : Dispatch = Dispatch::new("glUniformMatrix2x3dv")

///|
pub fn gl_uniform_matrix2x3dv(
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(Int, Int, Bool, @pointer.Pointer[Double]) -> Unit] = d_glUniformMatrix2x3dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(location, count, transpose, value_p)
  })
}

///|
let d_glUniformMatrix2x3fv : Dispatch = Dispatch::with_aliases(
  "glUniformMatrix2x3fv",
  ["glUniformMatrix2x3fvNV"],
)

///|
pub fn gl_uniform_matrix2x3fv(
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(Int, Int, Bool, @pointer.Pointer[Float]) -> Unit] = d_glUniformMatrix2x3fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(location, count, transpose, value_p)
  })
}

///|
let d_glUniformMatrix2x3fvNV : Dispatch = Dispatch::with_aliases(
  "glUniformMatrix2x3fvNV",
  ["glUniformMatrix2x3fv"],
)

///|
pub fn gl_uniform_matrix2x3fv_nv(
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(Int, Int, Bool, @pointer.Pointer[Float]) -> Unit] = d_glUniformMatrix2x3fvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(location, count, transpose, value_p)
  })
}

///|
let d_glUniformMatrix2x4dv : Dispatch = Dispatch::new("glUniformMatrix2x4dv")

///|
pub fn gl_uniform_matrix2x4dv(
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(Int, Int, Bool, @pointer.Pointer[Double]) -> Unit] = d_glUniformMatrix2x4dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(location, count, transpose, value_p)
  })
}

///|
let d_glUniformMatrix2x4fv : Dispatch = Dispatch::with_aliases(
  "glUniformMatrix2x4fv",
  ["glUniformMatrix2x4fvNV"],
)

///|
pub fn gl_uniform_matrix2x4fv(
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(Int, Int, Bool, @pointer.Pointer[Float]) -> Unit] = d_glUniformMatrix2x4fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(location, count, transpose, value_p)
  })
}

///|
let d_glUniformMatrix2x4fvNV : Dispatch = Dispatch::with_aliases(
  "glUniformMatrix2x4fvNV",
  ["glUniformMatrix2x4fv"],
)

///|
pub fn gl_uniform_matrix2x4fv_nv(
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(Int, Int, Bool, @pointer.Pointer[Float]) -> Unit] = d_glUniformMatrix2x4fvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(location, count, transpose, value_p)
  })
}

///|
let d_glUniformMatrix3dv : Dispatch = Dispatch::new("glUniformMatrix3dv")

///|
pub fn gl_uniform_matrix3dv(
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(Int, Int, Bool, @pointer.Pointer[Double]) -> Unit] = d_glUniformMatrix3dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(location, count, transpose, value_p)
  })
}

///|
let d_glUniformMatrix3fv : Dispatch = Dispatch::with_aliases(
  "glUniformMatrix3fv",
  ["glUniformMatrix3fvARB"],
)

///|
pub fn gl_uniform_matrix3fv(
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(Int, Int, Bool, @pointer.Pointer[Float]) -> Unit] = d_glUniformMatrix3fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(location, count, transpose, value_p)
  })
}

///|
let d_glUniformMatrix3fvARB : Dispatch = Dispatch::with_aliases(
  "glUniformMatrix3fvARB",
  ["glUniformMatrix3fv"],
)

///|
pub fn gl_uniform_matrix3fv_arb(
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(Int, Int, Bool, @pointer.Pointer[Float]) -> Unit] = d_glUniformMatrix3fvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(location, count, transpose, value_p)
  })
}

///|
let d_glUniformMatrix3x2dv : Dispatch = Dispatch::new("glUniformMatrix3x2dv")

///|
pub fn gl_uniform_matrix3x2dv(
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(Int, Int, Bool, @pointer.Pointer[Double]) -> Unit] = d_glUniformMatrix3x2dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(location, count, transpose, value_p)
  })
}

///|
let d_glUniformMatrix3x2fv : Dispatch = Dispatch::with_aliases(
  "glUniformMatrix3x2fv",
  ["glUniformMatrix3x2fvNV"],
)

///|
pub fn gl_uniform_matrix3x2fv(
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(Int, Int, Bool, @pointer.Pointer[Float]) -> Unit] = d_glUniformMatrix3x2fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(location, count, transpose, value_p)
  })
}

///|
let d_glUniformMatrix3x2fvNV : Dispatch = Dispatch::with_aliases(
  "glUniformMatrix3x2fvNV",
  ["glUniformMatrix3x2fv"],
)

///|
pub fn gl_uniform_matrix3x2fv_nv(
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(Int, Int, Bool, @pointer.Pointer[Float]) -> Unit] = d_glUniformMatrix3x2fvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(location, count, transpose, value_p)
  })
}

///|
let d_glUniformMatrix3x4dv : Dispatch = Dispatch::new("glUniformMatrix3x4dv")

///|
pub fn gl_uniform_matrix3x4dv(
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(Int, Int, Bool, @pointer.Pointer[Double]) -> Unit] = d_glUniformMatrix3x4dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(location, count, transpose, value_p)
  })
}

///|
let d_glUniformMatrix3x4fv : Dispatch = Dispatch::with_aliases(
  "glUniformMatrix3x4fv",
  ["glUniformMatrix3x4fvNV"],
)

///|
pub fn gl_uniform_matrix3x4fv(
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(Int, Int, Bool, @pointer.Pointer[Float]) -> Unit] = d_glUniformMatrix3x4fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(location, count, transpose, value_p)
  })
}

///|
let d_glUniformMatrix3x4fvNV : Dispatch = Dispatch::with_aliases(
  "glUniformMatrix3x4fvNV",
  ["glUniformMatrix3x4fv"],
)

///|
pub fn gl_uniform_matrix3x4fv_nv(
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(Int, Int, Bool, @pointer.Pointer[Float]) -> Unit] = d_glUniformMatrix3x4fvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(location, count, transpose, value_p)
  })
}

///|
let d_glUniformMatrix4dv : Dispatch = Dispatch::new("glUniformMatrix4dv")

///|
pub fn gl_uniform_matrix4dv(
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(Int, Int, Bool, @pointer.Pointer[Double]) -> Unit] = d_glUniformMatrix4dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(location, count, transpose, value_p)
  })
}

///|
let d_glUniformMatrix4fv : Dispatch = Dispatch::with_aliases(
  "glUniformMatrix4fv",
  ["glUniformMatrix4fvARB"],
)

///|
pub fn gl_uniform_matrix4fv(
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(Int, Int, Bool, @pointer.Pointer[Float]) -> Unit] = d_glUniformMatrix4fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(location, count, transpose, value_p)
  })
}

///|
let d_glUniformMatrix4fvARB : Dispatch = Dispatch::with_aliases(
  "glUniformMatrix4fvARB",
  ["glUniformMatrix4fv"],
)

///|
pub fn gl_uniform_matrix4fv_arb(
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(Int, Int, Bool, @pointer.Pointer[Float]) -> Unit] = d_glUniformMatrix4fvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(location, count, transpose, value_p)
  })
}

///|
let d_glUniformMatrix4x2dv : Dispatch = Dispatch::new("glUniformMatrix4x2dv")

///|
pub fn gl_uniform_matrix4x2dv(
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(Int, Int, Bool, @pointer.Pointer[Double]) -> Unit] = d_glUniformMatrix4x2dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(location, count, transpose, value_p)
  })
}

///|
let d_glUniformMatrix4x2fv : Dispatch = Dispatch::with_aliases(
  "glUniformMatrix4x2fv",
  ["glUniformMatrix4x2fvNV"],
)

///|
pub fn gl_uniform_matrix4x2fv(
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(Int, Int, Bool, @pointer.Pointer[Float]) -> Unit] = d_glUniformMatrix4x2fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(location, count, transpose, value_p)
  })
}

///|
let d_glUniformMatrix4x2fvNV : Dispatch = Dispatch::with_aliases(
  "glUniformMatrix4x2fvNV",
  ["glUniformMatrix4x2fv"],
)

///|
pub fn gl_uniform_matrix4x2fv_nv(
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(Int, Int, Bool, @pointer.Pointer[Float]) -> Unit] = d_glUniformMatrix4x2fvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(location, count, transpose, value_p)
  })
}

///|
let d_glUniformMatrix4x3dv : Dispatch = Dispatch::new("glUniformMatrix4x3dv")

///|
pub fn gl_uniform_matrix4x3dv(
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(Int, Int, Bool, @pointer.Pointer[Double]) -> Unit] = d_glUniformMatrix4x3dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(location, count, transpose, value_p)
  })
}

///|
let d_glUniformMatrix4x3fv : Dispatch = Dispatch::with_aliases(
  "glUniformMatrix4x3fv",
  ["glUniformMatrix4x3fvNV"],
)

///|
pub fn gl_uniform_matrix4x3fv(
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(Int, Int, Bool, @pointer.Pointer[Float]) -> Unit] = d_glUniformMatrix4x3fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(location, count, transpose, value_p)
  })
}

///|
let d_glUniformMatrix4x3fvNV : Dispatch = Dispatch::with_aliases(
  "glUniformMatrix4x3fvNV",
  ["glUniformMatrix4x3fv"],
)

///|
pub fn gl_uniform_matrix4x3fv_nv(
  location : Int,
  count : Int,
  transpose : Bool,
  value : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(Int, Int, Bool, @pointer.Pointer[Float]) -> Unit] = d_glUniformMatrix4x3fvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(location, count, transpose, value_p)
  })
}

///|
let d_glUniformSubroutinesuiv : Dispatch = Dispatch::new(
  "glUniformSubroutinesuiv",
)

///|
pub fn gl_uniform_subroutinesuiv(
  shadertype : UInt,
  count : Int,
  indices : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[UInt]) -> Unit] = d_glUniformSubroutinesuiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(indices, fn(indices_p) {
    fp(shadertype, count, indices_p)
  })
}

///|
let d_glUniformui64NV : Dispatch = Dispatch::new("glUniformui64NV")

///|
pub fn gl_uniformui64_nv(location : Int, value : UInt64) -> Unit {
  let fp : FuncRef[(Int, UInt64) -> Unit] = d_glUniformui64NV
    .get()
    .unsafe_into()
  fp(location, value)
}

///|
let d_glUniformui64vNV : Dispatch = Dispatch::new("glUniformui64vNV")

///|
pub fn gl_uniformui64v_nv(
  location : Int,
  count : Int,
  value : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[(Int, Int, @pointer.Pointer[UInt64]) -> Unit] = d_glUniformui64vNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(location, count, value_p) })
}

///|
let d_glUnlockArraysEXT : Dispatch = Dispatch::new("glUnlockArraysEXT")

///|
pub fn gl_unlock_arrays_ext() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glUnlockArraysEXT.get().unsafe_into()
  fp()
}

///|
let d_glUnmapBuffer : Dispatch = Dispatch::with_aliases("glUnmapBuffer", [
  "glUnmapBufferARB", "glUnmapBufferOES",
])

///|
pub fn gl_unmap_buffer(target : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glUnmapBuffer.get().unsafe_into()
  (fp(target) & 0xFF) != 0
}

///|
let d_glUnmapBufferARB : Dispatch = Dispatch::with_aliases("glUnmapBufferARB", [
  "glUnmapBuffer", "glUnmapBufferOES",
])

///|
pub fn gl_unmap_buffer_arb(target : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glUnmapBufferARB.get().unsafe_into()
  (fp(target) & 0xFF) != 0
}

///|
let d_glUnmapBufferOES : Dispatch = Dispatch::with_aliases("glUnmapBufferOES", [
  "glUnmapBuffer", "glUnmapBufferARB",
])

///|
pub fn gl_unmap_buffer_oes(target : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glUnmapBufferOES.get().unsafe_into()
  (fp(target) & 0xFF) != 0
}

///|
let d_glUnmapNamedBuffer : Dispatch = Dispatch::new("glUnmapNamedBuffer")

///|
pub fn gl_unmap_named_buffer(buffer : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glUnmapNamedBuffer.get().unsafe_into()
  (fp(buffer) & 0xFF) != 0
}

///|
let d_glUnmapNamedBufferEXT : Dispatch = Dispatch::new("glUnmapNamedBufferEXT")

///|
pub fn gl_unmap_named_buffer_ext(buffer : UInt) -> Bool {
  let fp : FuncRef[(UInt) -> Int] = d_glUnmapNamedBufferEXT.get().unsafe_into()
  (fp(buffer) & 0xFF) != 0
}

///|
let d_glUnmapObjectBufferATI : Dispatch = Dispatch::new(
  "glUnmapObjectBufferATI",
)

///|
pub fn gl_unmap_object_buffer_ati(buffer : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glUnmapObjectBufferATI
    .get()
    .unsafe_into()
  fp(buffer)
}

///|
let d_glUnmapTexture2DINTEL : Dispatch = Dispatch::new("glUnmapTexture2DINTEL")

///|
pub fn gl_unmap_texture2_dintel(texture : UInt, level : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glUnmapTexture2DINTEL
    .get()
    .unsafe_into()
  fp(texture, level)
}

///|
let d_glUpdateObjectBufferATI : Dispatch = Dispatch::new(
  "glUpdateObjectBufferATI",
)

///|
pub fn gl_update_object_buffer_ati(
  buffer : UInt,
  offset : UInt,
  size : Int,
  pointer : Bytes,
  preserve : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, @pointer.Pointer[Byte], UInt) -> Unit] = d_glUpdateObjectBufferATI
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(pointer, fn(pointer_p) {
    fp(buffer, offset, size, pointer_p, preserve)
  })
}

///|
let d_glUploadGpuMaskNVX : Dispatch = Dispatch::new("glUploadGpuMaskNVX")

///|
pub fn gl_upload_gpu_mask_nvx(mask : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glUploadGpuMaskNVX.get().unsafe_into()
  fp(mask)
}

///|
let d_glUseProgram : Dispatch = Dispatch::with_aliases("glUseProgram", [
  "glUseProgramObjectARB",
])

///|
pub fn gl_use_program(program : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glUseProgram.get().unsafe_into()
  fp(program)
}

///|
let d_glUseProgramStages : Dispatch = Dispatch::new("glUseProgramStages")

///|
pub fn gl_use_program_stages(
  pipeline : UInt,
  stages : UInt,
  program : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glUseProgramStages
    .get()
    .unsafe_into()
  fp(pipeline, stages, program)
}

///|
let d_glUseProgramStagesEXT : Dispatch = Dispatch::new("glUseProgramStagesEXT")

///|
pub fn gl_use_program_stages_ext(
  pipeline : UInt,
  stages : UInt,
  program : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glUseProgramStagesEXT
    .get()
    .unsafe_into()
  fp(pipeline, stages, program)
}

///|
let d_glUseShaderProgramEXT : Dispatch = Dispatch::new("glUseShaderProgramEXT")

///|
pub fn gl_use_shader_program_ext(type_ : UInt, program : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glUseShaderProgramEXT
    .get()
    .unsafe_into()
  fp(type_, program)
}

///|
let d_glVDPAUFiniNV : Dispatch = Dispatch::new("glVDPAUFiniNV")

///|
pub fn gl_vdpau_fini_nv() -> Unit {
  let fp : FuncRef[() -> Unit] = d_glVDPAUFiniNV.get().unsafe_into()
  fp()
}

///|
let d_glVDPAUGetSurfaceivNV : Dispatch = Dispatch::new("glVDPAUGetSurfaceivNV")

///|
pub fn gl_vdpau_get_surfaceiv_nv(
  surface : Int64,
  pname : UInt,
  count : Int,
  length : FixedArray[Int],
  values : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[
    (Int64, UInt, Int, @pointer.Pointer[Int], @pointer.Pointer[Int]) -> Unit,
  ] = d_glVDPAUGetSurfaceivNV.get().unsafe_into()
  @pointer.borrow_array(length, fn(length_p) {
    @pointer.borrow_array(values, fn(values_p) {
      fp(surface, pname, count, length_p, values_p)
    })
  })
}

///|
let d_glVDPAUInitNV : Dispatch = Dispatch::new("glVDPAUInitNV")

///|
pub fn gl_vdpau_init_nv(vdpDevice : Bytes, getProcAddress : Bytes) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Byte], @pointer.Pointer[Byte]) -> Unit] = d_glVDPAUInitNV
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(vdpDevice, fn(vdpDevice_p) {
    @pointer.borrow_bytes(getProcAddress, fn(getProcAddress_p) {
      fp(vdpDevice_p, getProcAddress_p)
    })
  })
}

///|
let d_glVDPAUIsSurfaceNV : Dispatch = Dispatch::new("glVDPAUIsSurfaceNV")

///|
pub fn gl_vdpau_is_surface_nv(surface : Int64) -> Bool {
  let fp : FuncRef[(Int64) -> Int] = d_glVDPAUIsSurfaceNV.get().unsafe_into()
  (fp(surface) & 0xFF) != 0
}

///|
let d_glVDPAURegisterOutputSurfaceNV : Dispatch = Dispatch::new(
  "glVDPAURegisterOutputSurfaceNV",
)

///|
pub fn gl_vdpau_register_output_surface_nv(
  vdpSurface : Bytes,
  target : UInt,
  numTextureNames : Int,
  textureNames : FixedArray[UInt],
) -> Int64 {
  let fp : FuncRef[
    (@pointer.Pointer[Byte], UInt, Int, @pointer.Pointer[UInt]) -> Int64,
  ] = d_glVDPAURegisterOutputSurfaceNV.get().unsafe_into()
  @pointer.borrow_bytes(vdpSurface, fn(vdpSurface_p) {
    @pointer.borrow_array(textureNames, fn(textureNames_p) {
      fp(vdpSurface_p, target, numTextureNames, textureNames_p)
    })
  })
}

///|
let d_glVDPAURegisterVideoSurfaceNV : Dispatch = Dispatch::new(
  "glVDPAURegisterVideoSurfaceNV",
)

///|
pub fn gl_vdpau_register_video_surface_nv(
  vdpSurface : Bytes,
  target : UInt,
  numTextureNames : Int,
  textureNames : FixedArray[UInt],
) -> Int64 {
  let fp : FuncRef[
    (@pointer.Pointer[Byte], UInt, Int, @pointer.Pointer[UInt]) -> Int64,
  ] = d_glVDPAURegisterVideoSurfaceNV.get().unsafe_into()
  @pointer.borrow_bytes(vdpSurface, fn(vdpSurface_p) {
    @pointer.borrow_array(textureNames, fn(textureNames_p) {
      fp(vdpSurface_p, target, numTextureNames, textureNames_p)
    })
  })
}

///|
let d_glVDPAURegisterVideoSurfaceWithPictureStructureNV : Dispatch = Dispatch::new(
  "glVDPAURegisterVideoSurfaceWithPictureStructureNV",
)

///|
pub fn gl_vdpau_register_video_surface_with_picture_structure_nv(
  vdpSurface : Bytes,
  target : UInt,
  numTextureNames : Int,
  textureNames : FixedArray[UInt],
  isFrameStructure : Bool,
) -> Int64 {
  let fp : FuncRef[
    (@pointer.Pointer[Byte], UInt, Int, @pointer.Pointer[UInt], Bool) -> Int64,
  ] = d_glVDPAURegisterVideoSurfaceWithPictureStructureNV.get().unsafe_into()
  @pointer.borrow_bytes(vdpSurface, fn(vdpSurface_p) {
    @pointer.borrow_array(textureNames, fn(textureNames_p) {
      fp(
        vdpSurface_p, target, numTextureNames, textureNames_p, isFrameStructure,
      )
    })
  })
}

///|
let d_glVDPAUSurfaceAccessNV : Dispatch = Dispatch::new(
  "glVDPAUSurfaceAccessNV",
)

///|
pub fn gl_vdpau_surface_access_nv(surface : Int64, access : UInt) -> Unit {
  let fp : FuncRef[(Int64, UInt) -> Unit] = d_glVDPAUSurfaceAccessNV
    .get()
    .unsafe_into()
  fp(surface, access)
}

///|
let d_glVDPAUUnregisterSurfaceNV : Dispatch = Dispatch::new(
  "glVDPAUUnregisterSurfaceNV",
)

///|
pub fn gl_vdpau_unregister_surface_nv(surface : Int64) -> Unit {
  let fp : FuncRef[(Int64) -> Unit] = d_glVDPAUUnregisterSurfaceNV
    .get()
    .unsafe_into()
  fp(surface)
}

///|
let d_glValidateProgram : Dispatch = Dispatch::with_aliases(
  "glValidateProgram",
  ["glValidateProgramARB"],
)

///|
pub fn gl_validate_program(program : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glValidateProgram.get().unsafe_into()
  fp(program)
}

///|
let d_glValidateProgramPipeline : Dispatch = Dispatch::new(
  "glValidateProgramPipeline",
)

///|
pub fn gl_validate_program_pipeline(pipeline : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glValidateProgramPipeline
    .get()
    .unsafe_into()
  fp(pipeline)
}

///|
let d_glValidateProgramPipelineEXT : Dispatch = Dispatch::new(
  "glValidateProgramPipelineEXT",
)

///|
pub fn gl_validate_program_pipeline_ext(pipeline : UInt) -> Unit {
  let fp : FuncRef[(UInt) -> Unit] = d_glValidateProgramPipelineEXT
    .get()
    .unsafe_into()
  fp(pipeline)
}

///|
let d_glVariantArrayObjectATI : Dispatch = Dispatch::new(
  "glVariantArrayObjectATI",
)

///|
pub fn gl_variant_array_object_ati(
  id : UInt,
  type_ : UInt,
  stride : Int,
  buffer : UInt,
  offset : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, UInt, UInt) -> Unit] = d_glVariantArrayObjectATI
    .get()
    .unsafe_into()
  fp(id, type_, stride, buffer, offset)
}

///|
let d_glVariantPointerEXT : Dispatch = Dispatch::new("glVariantPointerEXT")

///|
/// Configure a vertex array from the buffer currently bound to `GL_ARRAY_BUFFER`.
/// `offset` is a byte offset; client-side arrays are not accepted.
pub fn gl_variant_pointer_ext(
  id : UInt,
  type_ : UInt,
  stride : UInt,
  offset : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Unit]) -> Unit] = d_glVariantPointerEXT
    .get()
    .unsafe_into()
  fp(id, type_, stride, @pointer.Pointer::unsafe_from_int64(offset))
}

///|
let d_glVariantbvEXT : Dispatch = Dispatch::new("glVariantbvEXT")

///|
pub fn gl_variantbv_ext(id : UInt, addr : Bytes) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Byte]) -> Unit] = d_glVariantbvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(addr, fn(addr_p) { fp(id, addr_p) })
}

///|
let d_glVariantdvEXT : Dispatch = Dispatch::new("glVariantdvEXT")

///|
pub fn gl_variantdv_ext(id : UInt, addr : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Double]) -> Unit] = d_glVariantdvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(addr, fn(addr_p) { fp(id, addr_p) })
}

///|
let d_glVariantfvEXT : Dispatch = Dispatch::new("glVariantfvEXT")

///|
pub fn gl_variantfv_ext(id : UInt, addr : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glVariantfvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(addr, fn(addr_p) { fp(id, addr_p) })
}

///|
let d_glVariantivEXT : Dispatch = Dispatch::new("glVariantivEXT")

///|
pub fn gl_variantiv_ext(id : UInt, addr : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glVariantivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(addr, fn(addr_p) { fp(id, addr_p) })
}

///|
let d_glVariantsvEXT : Dispatch = Dispatch::new("glVariantsvEXT")

///|
pub fn gl_variantsv_ext(id : UInt, addr : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int16]) -> Unit] = d_glVariantsvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(addr, fn(addr_p) { fp(id, addr_p) })
}

///|
let d_glVariantubvEXT : Dispatch = Dispatch::new("glVariantubvEXT")

///|
pub fn gl_variantubv_ext(id : UInt, addr : Bytes) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Byte]) -> Unit] = d_glVariantubvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(addr, fn(addr_p) { fp(id, addr_p) })
}

///|
let d_glVariantuivEXT : Dispatch = Dispatch::new("glVariantuivEXT")

///|
pub fn gl_variantuiv_ext(id : UInt, addr : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt]) -> Unit] = d_glVariantuivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(addr, fn(addr_p) { fp(id, addr_p) })
}

///|
let d_glVariantusvEXT : Dispatch = Dispatch::new("glVariantusvEXT")

///|
pub fn gl_variantusv_ext(id : UInt, addr : FixedArray[UInt16]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt16]) -> Unit] = d_glVariantusvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(addr, fn(addr_p) { fp(id, addr_p) })
}

///|
let d_glVertex2bOES : Dispatch = Dispatch::new("glVertex2bOES")

///|
pub fn gl_vertex2b_oes(x : Int, y : Int) -> Unit {
  let fp : FuncRef[(Int, Int) -> Unit] = d_glVertex2bOES.get().unsafe_into()
  fp(x, y)
}

///|
let d_glVertex2bvOES : Dispatch = Dispatch::new("glVertex2bvOES")

///|
pub fn gl_vertex2bv_oes(coords : Bytes) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Byte]) -> Unit] = d_glVertex2bvOES
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(coords, fn(coords_p) { fp(coords_p) })
}

///|
let d_glVertex2d : Dispatch = Dispatch::new("glVertex2d")

///|
pub fn gl_vertex2d(x : Double, y : Double) -> Unit {
  let fp : FuncRef[(Double, Double) -> Unit] = d_glVertex2d.get().unsafe_into()
  fp(x, y)
}

///|
let d_glVertex2dv : Dispatch = Dispatch::new("glVertex2dv")

///|
pub fn gl_vertex2dv(v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Double]) -> Unit] = d_glVertex2dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glVertex2f : Dispatch = Dispatch::new("glVertex2f")

///|
pub fn gl_vertex2f(x : Float, y : Float) -> Unit {
  let fp : FuncRef[(Float, Float) -> Unit] = d_glVertex2f.get().unsafe_into()
  fp(x, y)
}

///|
let d_glVertex2fv : Dispatch = Dispatch::new("glVertex2fv")

///|
pub fn gl_vertex2fv(v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Float]) -> Unit] = d_glVertex2fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glVertex2hNV : Dispatch = Dispatch::new("glVertex2hNV")

///|
pub fn gl_vertex2h_nv(x : Int, y : Int) -> Unit {
  let fp : FuncRef[(Int, Int) -> Unit] = d_glVertex2hNV.get().unsafe_into()
  fp(x, y)
}

///|
let d_glVertex2hvNV : Dispatch = Dispatch::new("glVertex2hvNV")

///|
pub fn gl_vertex2hv_nv(v : FixedArray[UInt16]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[UInt16]) -> Unit] = d_glVertex2hvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glVertex2i : Dispatch = Dispatch::new("glVertex2i")

///|
pub fn gl_vertex2i(x : Int, y : Int) -> Unit {
  let fp : FuncRef[(Int, Int) -> Unit] = d_glVertex2i.get().unsafe_into()
  fp(x, y)
}

///|
let d_glVertex2iv : Dispatch = Dispatch::new("glVertex2iv")

///|
pub fn gl_vertex2iv(v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glVertex2iv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glVertex2s : Dispatch = Dispatch::new("glVertex2s")

///|
pub fn gl_vertex2s(x : Int, y : Int) -> Unit {
  let fp : FuncRef[(Int, Int) -> Unit] = d_glVertex2s.get().unsafe_into()
  fp(x, y)
}

///|
let d_glVertex2sv : Dispatch = Dispatch::new("glVertex2sv")

///|
pub fn gl_vertex2sv(v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int16]) -> Unit] = d_glVertex2sv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glVertex2xOES : Dispatch = Dispatch::new("glVertex2xOES")

///|
pub fn gl_vertex2x_oes(x : Int) -> Unit {
  let fp : FuncRef[(Int) -> Unit] = d_glVertex2xOES.get().unsafe_into()
  fp(x)
}

///|
let d_glVertex2xvOES : Dispatch = Dispatch::new("glVertex2xvOES")

///|
pub fn gl_vertex2xv_oes(coords : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glVertex2xvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(coords_p) })
}

///|
let d_glVertex3bOES : Dispatch = Dispatch::new("glVertex3bOES")

///|
pub fn gl_vertex3b_oes(x : Int, y : Int, z : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glVertex3bOES
    .get()
    .unsafe_into()
  fp(x, y, z)
}

///|
let d_glVertex3bvOES : Dispatch = Dispatch::new("glVertex3bvOES")

///|
pub fn gl_vertex3bv_oes(coords : Bytes) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Byte]) -> Unit] = d_glVertex3bvOES
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(coords, fn(coords_p) { fp(coords_p) })
}

///|
let d_glVertex3d : Dispatch = Dispatch::new("glVertex3d")

///|
pub fn gl_vertex3d(x : Double, y : Double, z : Double) -> Unit {
  let fp : FuncRef[(Double, Double, Double) -> Unit] = d_glVertex3d
    .get()
    .unsafe_into()
  fp(x, y, z)
}

///|
let d_glVertex3dv : Dispatch = Dispatch::new("glVertex3dv")

///|
pub fn gl_vertex3dv(v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Double]) -> Unit] = d_glVertex3dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glVertex3f : Dispatch = Dispatch::new("glVertex3f")

///|
pub fn gl_vertex3f(x : Float, y : Float, z : Float) -> Unit {
  let fp : FuncRef[(Float, Float, Float) -> Unit] = d_glVertex3f
    .get()
    .unsafe_into()
  fp(x, y, z)
}

///|
let d_glVertex3fv : Dispatch = Dispatch::new("glVertex3fv")

///|
pub fn gl_vertex3fv(v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Float]) -> Unit] = d_glVertex3fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glVertex3hNV : Dispatch = Dispatch::new("glVertex3hNV")

///|
pub fn gl_vertex3h_nv(x : Int, y : Int, z : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glVertex3hNV.get().unsafe_into()
  fp(x, y, z)
}

///|
let d_glVertex3hvNV : Dispatch = Dispatch::new("glVertex3hvNV")

///|
pub fn gl_vertex3hv_nv(v : FixedArray[UInt16]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[UInt16]) -> Unit] = d_glVertex3hvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glVertex3i : Dispatch = Dispatch::new("glVertex3i")

///|
pub fn gl_vertex3i(x : Int, y : Int, z : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glVertex3i.get().unsafe_into()
  fp(x, y, z)
}

///|
let d_glVertex3iv : Dispatch = Dispatch::new("glVertex3iv")

///|
pub fn gl_vertex3iv(v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glVertex3iv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glVertex3s : Dispatch = Dispatch::new("glVertex3s")

///|
pub fn gl_vertex3s(x : Int, y : Int, z : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glVertex3s.get().unsafe_into()
  fp(x, y, z)
}

///|
let d_glVertex3sv : Dispatch = Dispatch::new("glVertex3sv")

///|
pub fn gl_vertex3sv(v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int16]) -> Unit] = d_glVertex3sv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glVertex3xOES : Dispatch = Dispatch::new("glVertex3xOES")

///|
pub fn gl_vertex3x_oes(x : Int, y : Int) -> Unit {
  let fp : FuncRef[(Int, Int) -> Unit] = d_glVertex3xOES.get().unsafe_into()
  fp(x, y)
}

///|
let d_glVertex3xvOES : Dispatch = Dispatch::new("glVertex3xvOES")

///|
pub fn gl_vertex3xv_oes(coords : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glVertex3xvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(coords_p) })
}

///|
let d_glVertex4bOES : Dispatch = Dispatch::new("glVertex4bOES")

///|
pub fn gl_vertex4b_oes(x : Int, y : Int, z : Int, w : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int) -> Unit] = d_glVertex4bOES
    .get()
    .unsafe_into()
  fp(x, y, z, w)
}

///|
let d_glVertex4bvOES : Dispatch = Dispatch::new("glVertex4bvOES")

///|
pub fn gl_vertex4bv_oes(coords : Bytes) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Byte]) -> Unit] = d_glVertex4bvOES
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(coords, fn(coords_p) { fp(coords_p) })
}

///|
let d_glVertex4d : Dispatch = Dispatch::new("glVertex4d")

///|
pub fn gl_vertex4d(x : Double, y : Double, z : Double, w : Double) -> Unit {
  let fp : FuncRef[(Double, Double, Double, Double) -> Unit] = d_glVertex4d
    .get()
    .unsafe_into()
  fp(x, y, z, w)
}

///|
let d_glVertex4dv : Dispatch = Dispatch::new("glVertex4dv")

///|
pub fn gl_vertex4dv(v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Double]) -> Unit] = d_glVertex4dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glVertex4f : Dispatch = Dispatch::new("glVertex4f")

///|
pub fn gl_vertex4f(x : Float, y : Float, z : Float, w : Float) -> Unit {
  let fp : FuncRef[(Float, Float, Float, Float) -> Unit] = d_glVertex4f
    .get()
    .unsafe_into()
  fp(x, y, z, w)
}

///|
let d_glVertex4fv : Dispatch = Dispatch::new("glVertex4fv")

///|
pub fn gl_vertex4fv(v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Float]) -> Unit] = d_glVertex4fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glVertex4hNV : Dispatch = Dispatch::new("glVertex4hNV")

///|
pub fn gl_vertex4h_nv(x : Int, y : Int, z : Int, w : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int) -> Unit] = d_glVertex4hNV
    .get()
    .unsafe_into()
  fp(x, y, z, w)
}

///|
let d_glVertex4hvNV : Dispatch = Dispatch::new("glVertex4hvNV")

///|
pub fn gl_vertex4hv_nv(v : FixedArray[UInt16]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[UInt16]) -> Unit] = d_glVertex4hvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glVertex4i : Dispatch = Dispatch::new("glVertex4i")

///|
pub fn gl_vertex4i(x : Int, y : Int, z : Int, w : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int) -> Unit] = d_glVertex4i
    .get()
    .unsafe_into()
  fp(x, y, z, w)
}

///|
let d_glVertex4iv : Dispatch = Dispatch::new("glVertex4iv")

///|
pub fn gl_vertex4iv(v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glVertex4iv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glVertex4s : Dispatch = Dispatch::new("glVertex4s")

///|
pub fn gl_vertex4s(x : Int, y : Int, z : Int, w : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int) -> Unit] = d_glVertex4s
    .get()
    .unsafe_into()
  fp(x, y, z, w)
}

///|
let d_glVertex4sv : Dispatch = Dispatch::new("glVertex4sv")

///|
pub fn gl_vertex4sv(v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int16]) -> Unit] = d_glVertex4sv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glVertex4xOES : Dispatch = Dispatch::new("glVertex4xOES")

///|
pub fn gl_vertex4x_oes(x : Int, y : Int, z : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glVertex4xOES
    .get()
    .unsafe_into()
  fp(x, y, z)
}

///|
let d_glVertex4xvOES : Dispatch = Dispatch::new("glVertex4xvOES")

///|
pub fn gl_vertex4xv_oes(coords : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glVertex4xvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(coords_p) })
}

///|
let d_glVertexArrayAttribBinding : Dispatch = Dispatch::new(
  "glVertexArrayAttribBinding",
)

///|
pub fn gl_vertex_array_attrib_binding(
  vaobj : UInt,
  attribindex : UInt,
  bindingindex : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glVertexArrayAttribBinding
    .get()
    .unsafe_into()
  fp(vaobj, attribindex, bindingindex)
}

///|
let d_glVertexArrayAttribFormat : Dispatch = Dispatch::new(
  "glVertexArrayAttribFormat",
)

///|
pub fn gl_vertex_array_attrib_format(
  vaobj : UInt,
  attribindex : UInt,
  size : Int,
  type_ : UInt,
  normalized : Bool,
  relativeoffset : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, UInt, Bool, UInt) -> Unit] = d_glVertexArrayAttribFormat
    .get()
    .unsafe_into()
  fp(vaobj, attribindex, size, type_, normalized, relativeoffset)
}

///|
let d_glVertexArrayAttribIFormat : Dispatch = Dispatch::new(
  "glVertexArrayAttribIFormat",
)

///|
pub fn gl_vertex_array_attrib_i_format(
  vaobj : UInt,
  attribindex : UInt,
  size : Int,
  type_ : UInt,
  relativeoffset : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, UInt, UInt) -> Unit] = d_glVertexArrayAttribIFormat
    .get()
    .unsafe_into()
  fp(vaobj, attribindex, size, type_, relativeoffset)
}

///|
let d_glVertexArrayAttribLFormat : Dispatch = Dispatch::new(
  "glVertexArrayAttribLFormat",
)

///|
pub fn gl_vertex_array_attrib_l_format(
  vaobj : UInt,
  attribindex : UInt,
  size : Int,
  type_ : UInt,
  relativeoffset : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, UInt, UInt) -> Unit] = d_glVertexArrayAttribLFormat
    .get()
    .unsafe_into()
  fp(vaobj, attribindex, size, type_, relativeoffset)
}

///|
let d_glVertexArrayBindVertexBufferEXT : Dispatch = Dispatch::new(
  "glVertexArrayBindVertexBufferEXT",
)

///|
pub fn gl_vertex_array_bind_vertex_buffer_ext(
  vaobj : UInt,
  bindingindex : UInt,
  buffer : UInt,
  offset : Int64,
  stride : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int64, Int) -> Unit] = d_glVertexArrayBindVertexBufferEXT
    .get()
    .unsafe_into()
  fp(vaobj, bindingindex, buffer, offset, stride)
}

///|
let d_glVertexArrayBindingDivisor : Dispatch = Dispatch::new(
  "glVertexArrayBindingDivisor",
)

///|
pub fn gl_vertex_array_binding_divisor(
  vaobj : UInt,
  bindingindex : UInt,
  divisor : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glVertexArrayBindingDivisor
    .get()
    .unsafe_into()
  fp(vaobj, bindingindex, divisor)
}

///|
let d_glVertexArrayColorOffsetEXT : Dispatch = Dispatch::new(
  "glVertexArrayColorOffsetEXT",
)

///|
pub fn gl_vertex_array_color_offset_ext(
  vaobj : UInt,
  buffer : UInt,
  size : Int,
  type_ : UInt,
  stride : Int,
  offset : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, UInt, Int, Int64) -> Unit] = d_glVertexArrayColorOffsetEXT
    .get()
    .unsafe_into()
  fp(vaobj, buffer, size, type_, stride, offset)
}

///|
let d_glVertexArrayEdgeFlagOffsetEXT : Dispatch = Dispatch::new(
  "glVertexArrayEdgeFlagOffsetEXT",
)

///|
pub fn gl_vertex_array_edge_flag_offset_ext(
  vaobj : UInt,
  buffer : UInt,
  stride : Int,
  offset : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, Int64) -> Unit] = d_glVertexArrayEdgeFlagOffsetEXT
    .get()
    .unsafe_into()
  fp(vaobj, buffer, stride, offset)
}

///|
let d_glVertexArrayElementBuffer : Dispatch = Dispatch::new(
  "glVertexArrayElementBuffer",
)

///|
pub fn gl_vertex_array_element_buffer(vaobj : UInt, buffer : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glVertexArrayElementBuffer
    .get()
    .unsafe_into()
  fp(vaobj, buffer)
}

///|
let d_glVertexArrayFogCoordOffsetEXT : Dispatch = Dispatch::new(
  "glVertexArrayFogCoordOffsetEXT",
)

///|
pub fn gl_vertex_array_fog_coord_offset_ext(
  vaobj : UInt,
  buffer : UInt,
  type_ : UInt,
  stride : Int,
  offset : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int, Int64) -> Unit] = d_glVertexArrayFogCoordOffsetEXT
    .get()
    .unsafe_into()
  fp(vaobj, buffer, type_, stride, offset)
}

///|
let d_glVertexArrayIndexOffsetEXT : Dispatch = Dispatch::new(
  "glVertexArrayIndexOffsetEXT",
)

///|
pub fn gl_vertex_array_index_offset_ext(
  vaobj : UInt,
  buffer : UInt,
  type_ : UInt,
  stride : Int,
  offset : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int, Int64) -> Unit] = d_glVertexArrayIndexOffsetEXT
    .get()
    .unsafe_into()
  fp(vaobj, buffer, type_, stride, offset)
}

///|
let d_glVertexArrayMultiTexCoordOffsetEXT : Dispatch = Dispatch::new(
  "glVertexArrayMultiTexCoordOffsetEXT",
)

///|
pub fn gl_vertex_array_multi_tex_coord_offset_ext(
  vaobj : UInt,
  buffer : UInt,
  texunit : UInt,
  size : Int,
  type_ : UInt,
  stride : Int,
  offset : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int, UInt, Int, Int64) -> Unit] = d_glVertexArrayMultiTexCoordOffsetEXT
    .get()
    .unsafe_into()
  fp(vaobj, buffer, texunit, size, type_, stride, offset)
}

///|
let d_glVertexArrayNormalOffsetEXT : Dispatch = Dispatch::new(
  "glVertexArrayNormalOffsetEXT",
)

///|
pub fn gl_vertex_array_normal_offset_ext(
  vaobj : UInt,
  buffer : UInt,
  type_ : UInt,
  stride : Int,
  offset : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int, Int64) -> Unit] = d_glVertexArrayNormalOffsetEXT
    .get()
    .unsafe_into()
  fp(vaobj, buffer, type_, stride, offset)
}

///|
let d_glVertexArrayParameteriAPPLE : Dispatch = Dispatch::new(
  "glVertexArrayParameteriAPPLE",
)

///|
pub fn gl_vertex_array_parameteri_apple(pname : UInt, param : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glVertexArrayParameteriAPPLE
    .get()
    .unsafe_into()
  fp(pname, param)
}

///|
let d_glVertexArrayRangeAPPLE : Dispatch = Dispatch::new(
  "glVertexArrayRangeAPPLE",
)

///|
pub fn gl_vertex_array_range_apple(length : Int, pointer : Bytes) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[Byte]) -> Unit] = d_glVertexArrayRangeAPPLE
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(pointer, fn(pointer_p) { fp(length, pointer_p) })
}

///|
let d_glVertexArrayRangeNV : Dispatch = Dispatch::new("glVertexArrayRangeNV")

///|
pub fn gl_vertex_array_range_nv(length : Int, pointer : Bytes) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[Byte]) -> Unit] = d_glVertexArrayRangeNV
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(pointer, fn(pointer_p) { fp(length, pointer_p) })
}

///|
let d_glVertexArraySecondaryColorOffsetEXT : Dispatch = Dispatch::new(
  "glVertexArraySecondaryColorOffsetEXT",
)

///|
pub fn gl_vertex_array_secondary_color_offset_ext(
  vaobj : UInt,
  buffer : UInt,
  size : Int,
  type_ : UInt,
  stride : Int,
  offset : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, UInt, Int, Int64) -> Unit] = d_glVertexArraySecondaryColorOffsetEXT
    .get()
    .unsafe_into()
  fp(vaobj, buffer, size, type_, stride, offset)
}

///|
let d_glVertexArrayTexCoordOffsetEXT : Dispatch = Dispatch::new(
  "glVertexArrayTexCoordOffsetEXT",
)

///|
pub fn gl_vertex_array_tex_coord_offset_ext(
  vaobj : UInt,
  buffer : UInt,
  size : Int,
  type_ : UInt,
  stride : Int,
  offset : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, UInt, Int, Int64) -> Unit] = d_glVertexArrayTexCoordOffsetEXT
    .get()
    .unsafe_into()
  fp(vaobj, buffer, size, type_, stride, offset)
}

///|
let d_glVertexArrayVertexAttribBindingEXT : Dispatch = Dispatch::new(
  "glVertexArrayVertexAttribBindingEXT",
)

///|
pub fn gl_vertex_array_vertex_attrib_binding_ext(
  vaobj : UInt,
  attribindex : UInt,
  bindingindex : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glVertexArrayVertexAttribBindingEXT
    .get()
    .unsafe_into()
  fp(vaobj, attribindex, bindingindex)
}

///|
let d_glVertexArrayVertexAttribDivisorEXT : Dispatch = Dispatch::new(
  "glVertexArrayVertexAttribDivisorEXT",
)

///|
pub fn gl_vertex_array_vertex_attrib_divisor_ext(
  vaobj : UInt,
  index : UInt,
  divisor : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glVertexArrayVertexAttribDivisorEXT
    .get()
    .unsafe_into()
  fp(vaobj, index, divisor)
}

///|
let d_glVertexArrayVertexAttribFormatEXT : Dispatch = Dispatch::new(
  "glVertexArrayVertexAttribFormatEXT",
)

///|
pub fn gl_vertex_array_vertex_attrib_format_ext(
  vaobj : UInt,
  attribindex : UInt,
  size : Int,
  type_ : UInt,
  normalized : Bool,
  relativeoffset : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, UInt, Bool, UInt) -> Unit] = d_glVertexArrayVertexAttribFormatEXT
    .get()
    .unsafe_into()
  fp(vaobj, attribindex, size, type_, normalized, relativeoffset)
}

///|
let d_glVertexArrayVertexAttribIFormatEXT : Dispatch = Dispatch::new(
  "glVertexArrayVertexAttribIFormatEXT",
)

///|
pub fn gl_vertex_array_vertex_attrib_i_format_ext(
  vaobj : UInt,
  attribindex : UInt,
  size : Int,
  type_ : UInt,
  relativeoffset : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, UInt, UInt) -> Unit] = d_glVertexArrayVertexAttribIFormatEXT
    .get()
    .unsafe_into()
  fp(vaobj, attribindex, size, type_, relativeoffset)
}

///|
let d_glVertexArrayVertexAttribIOffsetEXT : Dispatch = Dispatch::new(
  "glVertexArrayVertexAttribIOffsetEXT",
)

///|
pub fn gl_vertex_array_vertex_attrib_i_offset_ext(
  vaobj : UInt,
  buffer : UInt,
  index : UInt,
  size : Int,
  type_ : UInt,
  stride : Int,
  offset : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int, UInt, Int, Int64) -> Unit] = d_glVertexArrayVertexAttribIOffsetEXT
    .get()
    .unsafe_into()
  fp(vaobj, buffer, index, size, type_, stride, offset)
}

///|
let d_glVertexArrayVertexAttribLFormatEXT : Dispatch = Dispatch::new(
  "glVertexArrayVertexAttribLFormatEXT",
)

///|
pub fn gl_vertex_array_vertex_attrib_l_format_ext(
  vaobj : UInt,
  attribindex : UInt,
  size : Int,
  type_ : UInt,
  relativeoffset : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, UInt, UInt) -> Unit] = d_glVertexArrayVertexAttribLFormatEXT
    .get()
    .unsafe_into()
  fp(vaobj, attribindex, size, type_, relativeoffset)
}

///|
let d_glVertexArrayVertexAttribLOffsetEXT : Dispatch = Dispatch::new(
  "glVertexArrayVertexAttribLOffsetEXT",
)

///|
pub fn gl_vertex_array_vertex_attrib_l_offset_ext(
  vaobj : UInt,
  buffer : UInt,
  index : UInt,
  size : Int,
  type_ : UInt,
  stride : Int,
  offset : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int, UInt, Int, Int64) -> Unit] = d_glVertexArrayVertexAttribLOffsetEXT
    .get()
    .unsafe_into()
  fp(vaobj, buffer, index, size, type_, stride, offset)
}

///|
let d_glVertexArrayVertexAttribOffsetEXT : Dispatch = Dispatch::new(
  "glVertexArrayVertexAttribOffsetEXT",
)

///|
pub fn gl_vertex_array_vertex_attrib_offset_ext(
  vaobj : UInt,
  buffer : UInt,
  index : UInt,
  size : Int,
  type_ : UInt,
  normalized : Bool,
  stride : Int,
  offset : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int, UInt, Bool, Int, Int64) -> Unit] = d_glVertexArrayVertexAttribOffsetEXT
    .get()
    .unsafe_into()
  fp(vaobj, buffer, index, size, type_, normalized, stride, offset)
}

///|
let d_glVertexArrayVertexBindingDivisorEXT : Dispatch = Dispatch::new(
  "glVertexArrayVertexBindingDivisorEXT",
)

///|
pub fn gl_vertex_array_vertex_binding_divisor_ext(
  vaobj : UInt,
  bindingindex : UInt,
  divisor : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glVertexArrayVertexBindingDivisorEXT
    .get()
    .unsafe_into()
  fp(vaobj, bindingindex, divisor)
}

///|
let d_glVertexArrayVertexBuffer : Dispatch = Dispatch::new(
  "glVertexArrayVertexBuffer",
)

///|
pub fn gl_vertex_array_vertex_buffer(
  vaobj : UInt,
  bindingindex : UInt,
  buffer : UInt,
  offset : Int64,
  stride : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, Int64, Int) -> Unit] = d_glVertexArrayVertexBuffer
    .get()
    .unsafe_into()
  fp(vaobj, bindingindex, buffer, offset, stride)
}

///|
let d_glVertexArrayVertexOffsetEXT : Dispatch = Dispatch::new(
  "glVertexArrayVertexOffsetEXT",
)

///|
pub fn gl_vertex_array_vertex_offset_ext(
  vaobj : UInt,
  buffer : UInt,
  size : Int,
  type_ : UInt,
  stride : Int,
  offset : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int, UInt, Int, Int64) -> Unit] = d_glVertexArrayVertexOffsetEXT
    .get()
    .unsafe_into()
  fp(vaobj, buffer, size, type_, stride, offset)
}

///|
let d_glVertexAttrib1d : Dispatch = Dispatch::with_aliases("glVertexAttrib1d", [
  "glVertexAttrib1dARB", "glVertexAttrib1dNV",
])

///|
pub fn gl_vertex_attrib1d(index : UInt, x : Double) -> Unit {
  let fp : FuncRef[(UInt, Double) -> Unit] = d_glVertexAttrib1d
    .get()
    .unsafe_into()
  fp(index, x)
}

///|
let d_glVertexAttrib1dARB : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib1dARB",
  ["glVertexAttrib1d", "glVertexAttrib1dNV"],
)

///|
pub fn gl_vertex_attrib1d_arb(index : UInt, x : Double) -> Unit {
  let fp : FuncRef[(UInt, Double) -> Unit] = d_glVertexAttrib1dARB
    .get()
    .unsafe_into()
  fp(index, x)
}

///|
let d_glVertexAttrib1dNV : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib1dNV",
  ["glVertexAttrib1d", "glVertexAttrib1dARB"],
)

///|
pub fn gl_vertex_attrib1d_nv(index : UInt, x : Double) -> Unit {
  let fp : FuncRef[(UInt, Double) -> Unit] = d_glVertexAttrib1dNV
    .get()
    .unsafe_into()
  fp(index, x)
}

///|
let d_glVertexAttrib1dv : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib1dv",
  ["glVertexAttrib1dvARB", "glVertexAttrib1dvNV"],
)

///|
pub fn gl_vertex_attrib1dv(index : UInt, v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Double]) -> Unit] = d_glVertexAttrib1dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib1dvARB : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib1dvARB",
  ["glVertexAttrib1dv", "glVertexAttrib1dvNV"],
)

///|
pub fn gl_vertex_attrib1dv_arb(index : UInt, v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Double]) -> Unit] = d_glVertexAttrib1dvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib1dvNV : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib1dvNV",
  ["glVertexAttrib1dv", "glVertexAttrib1dvARB"],
)

///|
pub fn gl_vertex_attrib1dv_nv(index : UInt, v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Double]) -> Unit] = d_glVertexAttrib1dvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib1f : Dispatch = Dispatch::with_aliases("glVertexAttrib1f", [
  "glVertexAttrib1fARB", "glVertexAttrib1fNV",
])

///|
pub fn gl_vertex_attrib1f(index : UInt, x : Float) -> Unit {
  let fp : FuncRef[(UInt, Float) -> Unit] = d_glVertexAttrib1f
    .get()
    .unsafe_into()
  fp(index, x)
}

///|
let d_glVertexAttrib1fARB : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib1fARB",
  ["glVertexAttrib1f", "glVertexAttrib1fNV"],
)

///|
pub fn gl_vertex_attrib1f_arb(index : UInt, x : Float) -> Unit {
  let fp : FuncRef[(UInt, Float) -> Unit] = d_glVertexAttrib1fARB
    .get()
    .unsafe_into()
  fp(index, x)
}

///|
let d_glVertexAttrib1fNV : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib1fNV",
  ["glVertexAttrib1f", "glVertexAttrib1fARB"],
)

///|
pub fn gl_vertex_attrib1f_nv(index : UInt, x : Float) -> Unit {
  let fp : FuncRef[(UInt, Float) -> Unit] = d_glVertexAttrib1fNV
    .get()
    .unsafe_into()
  fp(index, x)
}

///|
let d_glVertexAttrib1fv : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib1fv",
  ["glVertexAttrib1fvARB", "glVertexAttrib1fvNV"],
)

///|
pub fn gl_vertex_attrib1fv(index : UInt, v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glVertexAttrib1fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib1fvARB : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib1fvARB",
  ["glVertexAttrib1fv", "glVertexAttrib1fvNV"],
)

///|
pub fn gl_vertex_attrib1fv_arb(index : UInt, v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glVertexAttrib1fvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib1fvNV : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib1fvNV",
  ["glVertexAttrib1fv", "glVertexAttrib1fvARB"],
)

///|
pub fn gl_vertex_attrib1fv_nv(index : UInt, v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glVertexAttrib1fvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib1hNV : Dispatch = Dispatch::new("glVertexAttrib1hNV")

///|
pub fn gl_vertex_attrib1h_nv(index : UInt, x : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glVertexAttrib1hNV
    .get()
    .unsafe_into()
  fp(index, x)
}

///|
let d_glVertexAttrib1hvNV : Dispatch = Dispatch::new("glVertexAttrib1hvNV")

///|
pub fn gl_vertex_attrib1hv_nv(index : UInt, v : FixedArray[UInt16]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt16]) -> Unit] = d_glVertexAttrib1hvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib1s : Dispatch = Dispatch::with_aliases("glVertexAttrib1s", [
  "glVertexAttrib1sARB", "glVertexAttrib1sNV",
])

///|
pub fn gl_vertex_attrib1s(index : UInt, x : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glVertexAttrib1s.get().unsafe_into()
  fp(index, x)
}

///|
let d_glVertexAttrib1sARB : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib1sARB",
  ["glVertexAttrib1s", "glVertexAttrib1sNV"],
)

///|
pub fn gl_vertex_attrib1s_arb(index : UInt, x : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glVertexAttrib1sARB
    .get()
    .unsafe_into()
  fp(index, x)
}

///|
let d_glVertexAttrib1sNV : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib1sNV",
  ["glVertexAttrib1s", "glVertexAttrib1sARB"],
)

///|
pub fn gl_vertex_attrib1s_nv(index : UInt, x : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glVertexAttrib1sNV
    .get()
    .unsafe_into()
  fp(index, x)
}

///|
let d_glVertexAttrib1sv : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib1sv",
  ["glVertexAttrib1svARB", "glVertexAttrib1svNV"],
)

///|
pub fn gl_vertex_attrib1sv(index : UInt, v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int16]) -> Unit] = d_glVertexAttrib1sv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib1svARB : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib1svARB",
  ["glVertexAttrib1sv", "glVertexAttrib1svNV"],
)

///|
pub fn gl_vertex_attrib1sv_arb(index : UInt, v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int16]) -> Unit] = d_glVertexAttrib1svARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib1svNV : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib1svNV",
  ["glVertexAttrib1sv", "glVertexAttrib1svARB"],
)

///|
pub fn gl_vertex_attrib1sv_nv(index : UInt, v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int16]) -> Unit] = d_glVertexAttrib1svNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib2d : Dispatch = Dispatch::with_aliases("glVertexAttrib2d", [
  "glVertexAttrib2dARB", "glVertexAttrib2dNV",
])

///|
pub fn gl_vertex_attrib2d(index : UInt, x : Double, y : Double) -> Unit {
  let fp : FuncRef[(UInt, Double, Double) -> Unit] = d_glVertexAttrib2d
    .get()
    .unsafe_into()
  fp(index, x, y)
}

///|
let d_glVertexAttrib2dARB : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib2dARB",
  ["glVertexAttrib2d", "glVertexAttrib2dNV"],
)

///|
pub fn gl_vertex_attrib2d_arb(index : UInt, x : Double, y : Double) -> Unit {
  let fp : FuncRef[(UInt, Double, Double) -> Unit] = d_glVertexAttrib2dARB
    .get()
    .unsafe_into()
  fp(index, x, y)
}

///|
let d_glVertexAttrib2dNV : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib2dNV",
  ["glVertexAttrib2d", "glVertexAttrib2dARB"],
)

///|
pub fn gl_vertex_attrib2d_nv(index : UInt, x : Double, y : Double) -> Unit {
  let fp : FuncRef[(UInt, Double, Double) -> Unit] = d_glVertexAttrib2dNV
    .get()
    .unsafe_into()
  fp(index, x, y)
}

///|
let d_glVertexAttrib2dv : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib2dv",
  ["glVertexAttrib2dvARB", "glVertexAttrib2dvNV"],
)

///|
pub fn gl_vertex_attrib2dv(index : UInt, v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Double]) -> Unit] = d_glVertexAttrib2dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib2dvARB : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib2dvARB",
  ["glVertexAttrib2dv", "glVertexAttrib2dvNV"],
)

///|
pub fn gl_vertex_attrib2dv_arb(index : UInt, v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Double]) -> Unit] = d_glVertexAttrib2dvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib2dvNV : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib2dvNV",
  ["glVertexAttrib2dv", "glVertexAttrib2dvARB"],
)

///|
pub fn gl_vertex_attrib2dv_nv(index : UInt, v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Double]) -> Unit] = d_glVertexAttrib2dvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib2f : Dispatch = Dispatch::with_aliases("glVertexAttrib2f", [
  "glVertexAttrib2fARB", "glVertexAttrib2fNV",
])

///|
pub fn gl_vertex_attrib2f(index : UInt, x : Float, y : Float) -> Unit {
  let fp : FuncRef[(UInt, Float, Float) -> Unit] = d_glVertexAttrib2f
    .get()
    .unsafe_into()
  fp(index, x, y)
}

///|
let d_glVertexAttrib2fARB : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib2fARB",
  ["glVertexAttrib2f", "glVertexAttrib2fNV"],
)

///|
pub fn gl_vertex_attrib2f_arb(index : UInt, x : Float, y : Float) -> Unit {
  let fp : FuncRef[(UInt, Float, Float) -> Unit] = d_glVertexAttrib2fARB
    .get()
    .unsafe_into()
  fp(index, x, y)
}

///|
let d_glVertexAttrib2fNV : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib2fNV",
  ["glVertexAttrib2f", "glVertexAttrib2fARB"],
)

///|
pub fn gl_vertex_attrib2f_nv(index : UInt, x : Float, y : Float) -> Unit {
  let fp : FuncRef[(UInt, Float, Float) -> Unit] = d_glVertexAttrib2fNV
    .get()
    .unsafe_into()
  fp(index, x, y)
}

///|
let d_glVertexAttrib2fv : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib2fv",
  ["glVertexAttrib2fvARB", "glVertexAttrib2fvNV"],
)

///|
pub fn gl_vertex_attrib2fv(index : UInt, v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glVertexAttrib2fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib2fvARB : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib2fvARB",
  ["glVertexAttrib2fv", "glVertexAttrib2fvNV"],
)

///|
pub fn gl_vertex_attrib2fv_arb(index : UInt, v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glVertexAttrib2fvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib2fvNV : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib2fvNV",
  ["glVertexAttrib2fv", "glVertexAttrib2fvARB"],
)

///|
pub fn gl_vertex_attrib2fv_nv(index : UInt, v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glVertexAttrib2fvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib2hNV : Dispatch = Dispatch::new("glVertexAttrib2hNV")

///|
pub fn gl_vertex_attrib2h_nv(index : UInt, x : Int, y : Int) -> Unit {
  let fp : FuncRef[(UInt, Int, Int) -> Unit] = d_glVertexAttrib2hNV
    .get()
    .unsafe_into()
  fp(index, x, y)
}

///|
let d_glVertexAttrib2hvNV : Dispatch = Dispatch::new("glVertexAttrib2hvNV")

///|
pub fn gl_vertex_attrib2hv_nv(index : UInt, v : FixedArray[UInt16]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt16]) -> Unit] = d_glVertexAttrib2hvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib2s : Dispatch = Dispatch::with_aliases("glVertexAttrib2s", [
  "glVertexAttrib2sARB", "glVertexAttrib2sNV",
])

///|
pub fn gl_vertex_attrib2s(index : UInt, x : Int, y : Int) -> Unit {
  let fp : FuncRef[(UInt, Int, Int) -> Unit] = d_glVertexAttrib2s
    .get()
    .unsafe_into()
  fp(index, x, y)
}

///|
let d_glVertexAttrib2sARB : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib2sARB",
  ["glVertexAttrib2s", "glVertexAttrib2sNV"],
)

///|
pub fn gl_vertex_attrib2s_arb(index : UInt, x : Int, y : Int) -> Unit {
  let fp : FuncRef[(UInt, Int, Int) -> Unit] = d_glVertexAttrib2sARB
    .get()
    .unsafe_into()
  fp(index, x, y)
}

///|
let d_glVertexAttrib2sNV : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib2sNV",
  ["glVertexAttrib2s", "glVertexAttrib2sARB"],
)

///|
pub fn gl_vertex_attrib2s_nv(index : UInt, x : Int, y : Int) -> Unit {
  let fp : FuncRef[(UInt, Int, Int) -> Unit] = d_glVertexAttrib2sNV
    .get()
    .unsafe_into()
  fp(index, x, y)
}

///|
let d_glVertexAttrib2sv : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib2sv",
  ["glVertexAttrib2svARB", "glVertexAttrib2svNV"],
)

///|
pub fn gl_vertex_attrib2sv(index : UInt, v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int16]) -> Unit] = d_glVertexAttrib2sv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib2svARB : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib2svARB",
  ["glVertexAttrib2sv", "glVertexAttrib2svNV"],
)

///|
pub fn gl_vertex_attrib2sv_arb(index : UInt, v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int16]) -> Unit] = d_glVertexAttrib2svARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib2svNV : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib2svNV",
  ["glVertexAttrib2sv", "glVertexAttrib2svARB"],
)

///|
pub fn gl_vertex_attrib2sv_nv(index : UInt, v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int16]) -> Unit] = d_glVertexAttrib2svNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib3d : Dispatch = Dispatch::with_aliases("glVertexAttrib3d", [
  "glVertexAttrib3dARB", "glVertexAttrib3dNV",
])

///|
pub fn gl_vertex_attrib3d(
  index : UInt,
  x : Double,
  y : Double,
  z : Double,
) -> Unit {
  let fp : FuncRef[(UInt, Double, Double, Double) -> Unit] = d_glVertexAttrib3d
    .get()
    .unsafe_into()
  fp(index, x, y, z)
}

///|
let d_glVertexAttrib3dARB : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib3dARB",
  ["glVertexAttrib3d", "glVertexAttrib3dNV"],
)

///|
pub fn gl_vertex_attrib3d_arb(
  index : UInt,
  x : Double,
  y : Double,
  z : Double,
) -> Unit {
  let fp : FuncRef[(UInt, Double, Double, Double) -> Unit] = d_glVertexAttrib3dARB
    .get()
    .unsafe_into()
  fp(index, x, y, z)
}

///|
let d_glVertexAttrib3dNV : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib3dNV",
  ["glVertexAttrib3d", "glVertexAttrib3dARB"],
)

///|
pub fn gl_vertex_attrib3d_nv(
  index : UInt,
  x : Double,
  y : Double,
  z : Double,
) -> Unit {
  let fp : FuncRef[(UInt, Double, Double, Double) -> Unit] = d_glVertexAttrib3dNV
    .get()
    .unsafe_into()
  fp(index, x, y, z)
}

///|
let d_glVertexAttrib3dv : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib3dv",
  ["glVertexAttrib3dvARB", "glVertexAttrib3dvNV"],
)

///|
pub fn gl_vertex_attrib3dv(index : UInt, v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Double]) -> Unit] = d_glVertexAttrib3dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib3dvARB : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib3dvARB",
  ["glVertexAttrib3dv", "glVertexAttrib3dvNV"],
)

///|
pub fn gl_vertex_attrib3dv_arb(index : UInt, v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Double]) -> Unit] = d_glVertexAttrib3dvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib3dvNV : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib3dvNV",
  ["glVertexAttrib3dv", "glVertexAttrib3dvARB"],
)

///|
pub fn gl_vertex_attrib3dv_nv(index : UInt, v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Double]) -> Unit] = d_glVertexAttrib3dvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib3f : Dispatch = Dispatch::with_aliases("glVertexAttrib3f", [
  "glVertexAttrib3fARB", "glVertexAttrib3fNV",
])

///|
pub fn gl_vertex_attrib3f(
  index : UInt,
  x : Float,
  y : Float,
  z : Float,
) -> Unit {
  let fp : FuncRef[(UInt, Float, Float, Float) -> Unit] = d_glVertexAttrib3f
    .get()
    .unsafe_into()
  fp(index, x, y, z)
}

///|
let d_glVertexAttrib3fARB : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib3fARB",
  ["glVertexAttrib3f", "glVertexAttrib3fNV"],
)

///|
pub fn gl_vertex_attrib3f_arb(
  index : UInt,
  x : Float,
  y : Float,
  z : Float,
) -> Unit {
  let fp : FuncRef[(UInt, Float, Float, Float) -> Unit] = d_glVertexAttrib3fARB
    .get()
    .unsafe_into()
  fp(index, x, y, z)
}

///|
let d_glVertexAttrib3fNV : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib3fNV",
  ["glVertexAttrib3f", "glVertexAttrib3fARB"],
)

///|
pub fn gl_vertex_attrib3f_nv(
  index : UInt,
  x : Float,
  y : Float,
  z : Float,
) -> Unit {
  let fp : FuncRef[(UInt, Float, Float, Float) -> Unit] = d_glVertexAttrib3fNV
    .get()
    .unsafe_into()
  fp(index, x, y, z)
}

///|
let d_glVertexAttrib3fv : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib3fv",
  ["glVertexAttrib3fvARB", "glVertexAttrib3fvNV"],
)

///|
pub fn gl_vertex_attrib3fv(index : UInt, v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glVertexAttrib3fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib3fvARB : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib3fvARB",
  ["glVertexAttrib3fv", "glVertexAttrib3fvNV"],
)

///|
pub fn gl_vertex_attrib3fv_arb(index : UInt, v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glVertexAttrib3fvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib3fvNV : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib3fvNV",
  ["glVertexAttrib3fv", "glVertexAttrib3fvARB"],
)

///|
pub fn gl_vertex_attrib3fv_nv(index : UInt, v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glVertexAttrib3fvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib3hNV : Dispatch = Dispatch::new("glVertexAttrib3hNV")

///|
pub fn gl_vertex_attrib3h_nv(index : UInt, x : Int, y : Int, z : Int) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int) -> Unit] = d_glVertexAttrib3hNV
    .get()
    .unsafe_into()
  fp(index, x, y, z)
}

///|
let d_glVertexAttrib3hvNV : Dispatch = Dispatch::new("glVertexAttrib3hvNV")

///|
pub fn gl_vertex_attrib3hv_nv(index : UInt, v : FixedArray[UInt16]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt16]) -> Unit] = d_glVertexAttrib3hvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib3s : Dispatch = Dispatch::with_aliases("glVertexAttrib3s", [
  "glVertexAttrib3sARB", "glVertexAttrib3sNV",
])

///|
pub fn gl_vertex_attrib3s(index : UInt, x : Int, y : Int, z : Int) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int) -> Unit] = d_glVertexAttrib3s
    .get()
    .unsafe_into()
  fp(index, x, y, z)
}

///|
let d_glVertexAttrib3sARB : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib3sARB",
  ["glVertexAttrib3s", "glVertexAttrib3sNV"],
)

///|
pub fn gl_vertex_attrib3s_arb(index : UInt, x : Int, y : Int, z : Int) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int) -> Unit] = d_glVertexAttrib3sARB
    .get()
    .unsafe_into()
  fp(index, x, y, z)
}

///|
let d_glVertexAttrib3sNV : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib3sNV",
  ["glVertexAttrib3s", "glVertexAttrib3sARB"],
)

///|
pub fn gl_vertex_attrib3s_nv(index : UInt, x : Int, y : Int, z : Int) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int) -> Unit] = d_glVertexAttrib3sNV
    .get()
    .unsafe_into()
  fp(index, x, y, z)
}

///|
let d_glVertexAttrib3sv : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib3sv",
  ["glVertexAttrib3svARB", "glVertexAttrib3svNV"],
)

///|
pub fn gl_vertex_attrib3sv(index : UInt, v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int16]) -> Unit] = d_glVertexAttrib3sv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib3svARB : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib3svARB",
  ["glVertexAttrib3sv", "glVertexAttrib3svNV"],
)

///|
pub fn gl_vertex_attrib3sv_arb(index : UInt, v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int16]) -> Unit] = d_glVertexAttrib3svARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib3svNV : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib3svNV",
  ["glVertexAttrib3sv", "glVertexAttrib3svARB"],
)

///|
pub fn gl_vertex_attrib3sv_nv(index : UInt, v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int16]) -> Unit] = d_glVertexAttrib3svNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib4Nbv : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib4Nbv",
  ["glVertexAttrib4NbvARB"],
)

///|
pub fn gl_vertex_attrib4_nbv(index : UInt, v : Bytes) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Byte]) -> Unit] = d_glVertexAttrib4Nbv
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib4NbvARB : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib4NbvARB",
  ["glVertexAttrib4Nbv"],
)

///|
pub fn gl_vertex_attrib4_nbv_arb(index : UInt, v : Bytes) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Byte]) -> Unit] = d_glVertexAttrib4NbvARB
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib4Niv : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib4Niv",
  ["glVertexAttrib4NivARB"],
)

///|
pub fn gl_vertex_attrib4_niv(index : UInt, v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glVertexAttrib4Niv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib4NivARB : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib4NivARB",
  ["glVertexAttrib4Niv"],
)

///|
pub fn gl_vertex_attrib4_niv_arb(index : UInt, v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glVertexAttrib4NivARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib4Nsv : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib4Nsv",
  ["glVertexAttrib4NsvARB"],
)

///|
pub fn gl_vertex_attrib4_nsv(index : UInt, v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int16]) -> Unit] = d_glVertexAttrib4Nsv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib4NsvARB : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib4NsvARB",
  ["glVertexAttrib4Nsv"],
)

///|
pub fn gl_vertex_attrib4_nsv_arb(index : UInt, v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int16]) -> Unit] = d_glVertexAttrib4NsvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib4Nub : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib4Nub",
  ["glVertexAttrib4NubARB", "glVertexAttrib4ubNV"],
)

///|
pub fn gl_vertex_attrib4_nub(
  index : UInt,
  x : Int,
  y : Int,
  z : Int,
  w : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int) -> Unit] = d_glVertexAttrib4Nub
    .get()
    .unsafe_into()
  fp(index, x, y, z, w)
}

///|
let d_glVertexAttrib4NubARB : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib4NubARB",
  ["glVertexAttrib4Nub", "glVertexAttrib4ubNV"],
)

///|
pub fn gl_vertex_attrib4_nub_arb(
  index : UInt,
  x : Int,
  y : Int,
  z : Int,
  w : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int) -> Unit] = d_glVertexAttrib4NubARB
    .get()
    .unsafe_into()
  fp(index, x, y, z, w)
}

///|
let d_glVertexAttrib4Nubv : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib4Nubv",
  ["glVertexAttrib4NubvARB", "glVertexAttrib4ubvNV"],
)

///|
pub fn gl_vertex_attrib4_nubv(index : UInt, v : Bytes) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Byte]) -> Unit] = d_glVertexAttrib4Nubv
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib4NubvARB : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib4NubvARB",
  ["glVertexAttrib4Nubv", "glVertexAttrib4ubvNV"],
)

///|
pub fn gl_vertex_attrib4_nubv_arb(index : UInt, v : Bytes) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Byte]) -> Unit] = d_glVertexAttrib4NubvARB
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib4Nuiv : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib4Nuiv",
  ["glVertexAttrib4NuivARB"],
)

///|
pub fn gl_vertex_attrib4_nuiv(index : UInt, v : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt]) -> Unit] = d_glVertexAttrib4Nuiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib4NuivARB : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib4NuivARB",
  ["glVertexAttrib4Nuiv"],
)

///|
pub fn gl_vertex_attrib4_nuiv_arb(index : UInt, v : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt]) -> Unit] = d_glVertexAttrib4NuivARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib4Nusv : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib4Nusv",
  ["glVertexAttrib4NusvARB"],
)

///|
pub fn gl_vertex_attrib4_nusv(index : UInt, v : FixedArray[UInt16]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt16]) -> Unit] = d_glVertexAttrib4Nusv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib4NusvARB : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib4NusvARB",
  ["glVertexAttrib4Nusv"],
)

///|
pub fn gl_vertex_attrib4_nusv_arb(index : UInt, v : FixedArray[UInt16]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt16]) -> Unit] = d_glVertexAttrib4NusvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib4bv : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib4bv",
  ["glVertexAttrib4bvARB"],
)

///|
pub fn gl_vertex_attrib4bv(index : UInt, v : Bytes) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Byte]) -> Unit] = d_glVertexAttrib4bv
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib4bvARB : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib4bvARB",
  ["glVertexAttrib4bv"],
)

///|
pub fn gl_vertex_attrib4bv_arb(index : UInt, v : Bytes) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Byte]) -> Unit] = d_glVertexAttrib4bvARB
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib4d : Dispatch = Dispatch::with_aliases("glVertexAttrib4d", [
  "glVertexAttrib4dARB", "glVertexAttrib4dNV",
])

///|
pub fn gl_vertex_attrib4d(
  index : UInt,
  x : Double,
  y : Double,
  z : Double,
  w : Double,
) -> Unit {
  let fp : FuncRef[(UInt, Double, Double, Double, Double) -> Unit] = d_glVertexAttrib4d
    .get()
    .unsafe_into()
  fp(index, x, y, z, w)
}

///|
let d_glVertexAttrib4dARB : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib4dARB",
  ["glVertexAttrib4d", "glVertexAttrib4dNV"],
)

///|
pub fn gl_vertex_attrib4d_arb(
  index : UInt,
  x : Double,
  y : Double,
  z : Double,
  w : Double,
) -> Unit {
  let fp : FuncRef[(UInt, Double, Double, Double, Double) -> Unit] = d_glVertexAttrib4dARB
    .get()
    .unsafe_into()
  fp(index, x, y, z, w)
}

///|
let d_glVertexAttrib4dNV : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib4dNV",
  ["glVertexAttrib4d", "glVertexAttrib4dARB"],
)

///|
pub fn gl_vertex_attrib4d_nv(
  index : UInt,
  x : Double,
  y : Double,
  z : Double,
  w : Double,
) -> Unit {
  let fp : FuncRef[(UInt, Double, Double, Double, Double) -> Unit] = d_glVertexAttrib4dNV
    .get()
    .unsafe_into()
  fp(index, x, y, z, w)
}

///|
let d_glVertexAttrib4dv : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib4dv",
  ["glVertexAttrib4dvARB", "glVertexAttrib4dvNV"],
)

///|
pub fn gl_vertex_attrib4dv(index : UInt, v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Double]) -> Unit] = d_glVertexAttrib4dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib4dvARB : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib4dvARB",
  ["glVertexAttrib4dv", "glVertexAttrib4dvNV"],
)

///|
pub fn gl_vertex_attrib4dv_arb(index : UInt, v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Double]) -> Unit] = d_glVertexAttrib4dvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib4dvNV : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib4dvNV",
  ["glVertexAttrib4dv", "glVertexAttrib4dvARB"],
)

///|
pub fn gl_vertex_attrib4dv_nv(index : UInt, v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Double]) -> Unit] = d_glVertexAttrib4dvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib4f : Dispatch = Dispatch::with_aliases("glVertexAttrib4f", [
  "glVertexAttrib4fARB", "glVertexAttrib4fNV",
])

///|
pub fn gl_vertex_attrib4f(
  index : UInt,
  x : Float,
  y : Float,
  z : Float,
  w : Float,
) -> Unit {
  let fp : FuncRef[(UInt, Float, Float, Float, Float) -> Unit] = d_glVertexAttrib4f
    .get()
    .unsafe_into()
  fp(index, x, y, z, w)
}

///|
let d_glVertexAttrib4fARB : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib4fARB",
  ["glVertexAttrib4f", "glVertexAttrib4fNV"],
)

///|
pub fn gl_vertex_attrib4f_arb(
  index : UInt,
  x : Float,
  y : Float,
  z : Float,
  w : Float,
) -> Unit {
  let fp : FuncRef[(UInt, Float, Float, Float, Float) -> Unit] = d_glVertexAttrib4fARB
    .get()
    .unsafe_into()
  fp(index, x, y, z, w)
}

///|
let d_glVertexAttrib4fNV : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib4fNV",
  ["glVertexAttrib4f", "glVertexAttrib4fARB"],
)

///|
pub fn gl_vertex_attrib4f_nv(
  index : UInt,
  x : Float,
  y : Float,
  z : Float,
  w : Float,
) -> Unit {
  let fp : FuncRef[(UInt, Float, Float, Float, Float) -> Unit] = d_glVertexAttrib4fNV
    .get()
    .unsafe_into()
  fp(index, x, y, z, w)
}

///|
let d_glVertexAttrib4fv : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib4fv",
  ["glVertexAttrib4fvARB", "glVertexAttrib4fvNV"],
)

///|
pub fn gl_vertex_attrib4fv(index : UInt, v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glVertexAttrib4fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib4fvARB : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib4fvARB",
  ["glVertexAttrib4fv", "glVertexAttrib4fvNV"],
)

///|
pub fn gl_vertex_attrib4fv_arb(index : UInt, v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glVertexAttrib4fvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib4fvNV : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib4fvNV",
  ["glVertexAttrib4fv", "glVertexAttrib4fvARB"],
)

///|
pub fn gl_vertex_attrib4fv_nv(index : UInt, v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glVertexAttrib4fvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib4hNV : Dispatch = Dispatch::new("glVertexAttrib4hNV")

///|
pub fn gl_vertex_attrib4h_nv(
  index : UInt,
  x : Int,
  y : Int,
  z : Int,
  w : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int) -> Unit] = d_glVertexAttrib4hNV
    .get()
    .unsafe_into()
  fp(index, x, y, z, w)
}

///|
let d_glVertexAttrib4hvNV : Dispatch = Dispatch::new("glVertexAttrib4hvNV")

///|
pub fn gl_vertex_attrib4hv_nv(index : UInt, v : FixedArray[UInt16]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt16]) -> Unit] = d_glVertexAttrib4hvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib4iv : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib4iv",
  ["glVertexAttrib4ivARB"],
)

///|
pub fn gl_vertex_attrib4iv(index : UInt, v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glVertexAttrib4iv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib4ivARB : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib4ivARB",
  ["glVertexAttrib4iv"],
)

///|
pub fn gl_vertex_attrib4iv_arb(index : UInt, v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glVertexAttrib4ivARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib4s : Dispatch = Dispatch::with_aliases("glVertexAttrib4s", [
  "glVertexAttrib4sARB", "glVertexAttrib4sNV",
])

///|
pub fn gl_vertex_attrib4s(
  index : UInt,
  x : Int,
  y : Int,
  z : Int,
  w : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int) -> Unit] = d_glVertexAttrib4s
    .get()
    .unsafe_into()
  fp(index, x, y, z, w)
}

///|
let d_glVertexAttrib4sARB : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib4sARB",
  ["glVertexAttrib4s", "glVertexAttrib4sNV"],
)

///|
pub fn gl_vertex_attrib4s_arb(
  index : UInt,
  x : Int,
  y : Int,
  z : Int,
  w : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int) -> Unit] = d_glVertexAttrib4sARB
    .get()
    .unsafe_into()
  fp(index, x, y, z, w)
}

///|
let d_glVertexAttrib4sNV : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib4sNV",
  ["glVertexAttrib4s", "glVertexAttrib4sARB"],
)

///|
pub fn gl_vertex_attrib4s_nv(
  index : UInt,
  x : Int,
  y : Int,
  z : Int,
  w : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int) -> Unit] = d_glVertexAttrib4sNV
    .get()
    .unsafe_into()
  fp(index, x, y, z, w)
}

///|
let d_glVertexAttrib4sv : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib4sv",
  ["glVertexAttrib4svARB", "glVertexAttrib4svNV"],
)

///|
pub fn gl_vertex_attrib4sv(index : UInt, v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int16]) -> Unit] = d_glVertexAttrib4sv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib4svARB : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib4svARB",
  ["glVertexAttrib4sv", "glVertexAttrib4svNV"],
)

///|
pub fn gl_vertex_attrib4sv_arb(index : UInt, v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int16]) -> Unit] = d_glVertexAttrib4svARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib4svNV : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib4svNV",
  ["glVertexAttrib4sv", "glVertexAttrib4svARB"],
)

///|
pub fn gl_vertex_attrib4sv_nv(index : UInt, v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int16]) -> Unit] = d_glVertexAttrib4svNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib4ubNV : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib4ubNV",
  ["glVertexAttrib4Nub", "glVertexAttrib4NubARB"],
)

///|
pub fn gl_vertex_attrib4ub_nv(
  index : UInt,
  x : Int,
  y : Int,
  z : Int,
  w : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int) -> Unit] = d_glVertexAttrib4ubNV
    .get()
    .unsafe_into()
  fp(index, x, y, z, w)
}

///|
let d_glVertexAttrib4ubv : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib4ubv",
  ["glVertexAttrib4ubvARB"],
)

///|
pub fn gl_vertex_attrib4ubv(index : UInt, v : Bytes) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Byte]) -> Unit] = d_glVertexAttrib4ubv
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib4ubvARB : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib4ubvARB",
  ["glVertexAttrib4ubv"],
)

///|
pub fn gl_vertex_attrib4ubv_arb(index : UInt, v : Bytes) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Byte]) -> Unit] = d_glVertexAttrib4ubvARB
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib4ubvNV : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib4ubvNV",
  ["glVertexAttrib4Nubv", "glVertexAttrib4NubvARB"],
)

///|
pub fn gl_vertex_attrib4ubv_nv(index : UInt, v : Bytes) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Byte]) -> Unit] = d_glVertexAttrib4ubvNV
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib4uiv : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib4uiv",
  ["glVertexAttrib4uivARB"],
)

///|
pub fn gl_vertex_attrib4uiv(index : UInt, v : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt]) -> Unit] = d_glVertexAttrib4uiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib4uivARB : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib4uivARB",
  ["glVertexAttrib4uiv"],
)

///|
pub fn gl_vertex_attrib4uiv_arb(index : UInt, v : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt]) -> Unit] = d_glVertexAttrib4uivARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib4usv : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib4usv",
  ["glVertexAttrib4usvARB"],
)

///|
pub fn gl_vertex_attrib4usv(index : UInt, v : FixedArray[UInt16]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt16]) -> Unit] = d_glVertexAttrib4usv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttrib4usvARB : Dispatch = Dispatch::with_aliases(
  "glVertexAttrib4usvARB",
  ["glVertexAttrib4usv"],
)

///|
pub fn gl_vertex_attrib4usv_arb(index : UInt, v : FixedArray[UInt16]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt16]) -> Unit] = d_glVertexAttrib4usvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttribArrayObjectATI : Dispatch = Dispatch::new(
  "glVertexAttribArrayObjectATI",
)

///|
pub fn gl_vertex_attrib_array_object_ati(
  index : UInt,
  size : Int,
  type_ : UInt,
  normalized : Bool,
  stride : Int,
  buffer : UInt,
  offset : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Bool, Int, UInt, UInt) -> Unit] = d_glVertexAttribArrayObjectATI
    .get()
    .unsafe_into()
  fp(index, size, type_, normalized, stride, buffer, offset)
}

///|
let d_glVertexAttribBinding : Dispatch = Dispatch::new("glVertexAttribBinding")

///|
pub fn gl_vertex_attrib_binding(
  attribindex : UInt,
  bindingindex : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glVertexAttribBinding
    .get()
    .unsafe_into()
  fp(attribindex, bindingindex)
}

///|
let d_glVertexAttribDivisor : Dispatch = Dispatch::with_aliases(
  "glVertexAttribDivisor",
  [
    "glVertexAttribDivisorANGLE", "glVertexAttribDivisorARB", "glVertexAttribDivisorEXT",
    "glVertexAttribDivisorNV",
  ],
)

///|
pub fn gl_vertex_attrib_divisor(index : UInt, divisor : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glVertexAttribDivisor
    .get()
    .unsafe_into()
  fp(index, divisor)
}

///|
let d_glVertexAttribDivisorANGLE : Dispatch = Dispatch::with_aliases(
  "glVertexAttribDivisorANGLE",
  [
    "glVertexAttribDivisor", "glVertexAttribDivisorARB", "glVertexAttribDivisorEXT",
    "glVertexAttribDivisorNV",
  ],
)

///|
pub fn gl_vertex_attrib_divisor_angle(index : UInt, divisor : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glVertexAttribDivisorANGLE
    .get()
    .unsafe_into()
  fp(index, divisor)
}

///|
let d_glVertexAttribDivisorARB : Dispatch = Dispatch::with_aliases(
  "glVertexAttribDivisorARB",
  [
    "glVertexAttribDivisor", "glVertexAttribDivisorANGLE", "glVertexAttribDivisorEXT",
    "glVertexAttribDivisorNV",
  ],
)

///|
pub fn gl_vertex_attrib_divisor_arb(index : UInt, divisor : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glVertexAttribDivisorARB
    .get()
    .unsafe_into()
  fp(index, divisor)
}

///|
let d_glVertexAttribDivisorEXT : Dispatch = Dispatch::with_aliases(
  "glVertexAttribDivisorEXT",
  [
    "glVertexAttribDivisor", "glVertexAttribDivisorANGLE", "glVertexAttribDivisorARB",
    "glVertexAttribDivisorNV",
  ],
)

///|
pub fn gl_vertex_attrib_divisor_ext(index : UInt, divisor : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glVertexAttribDivisorEXT
    .get()
    .unsafe_into()
  fp(index, divisor)
}

///|
let d_glVertexAttribDivisorNV : Dispatch = Dispatch::with_aliases(
  "glVertexAttribDivisorNV",
  [
    "glVertexAttribDivisor", "glVertexAttribDivisorANGLE", "glVertexAttribDivisorARB",
    "glVertexAttribDivisorEXT",
  ],
)

///|
pub fn gl_vertex_attrib_divisor_nv(index : UInt, divisor : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glVertexAttribDivisorNV
    .get()
    .unsafe_into()
  fp(index, divisor)
}

///|
let d_glVertexAttribFormat : Dispatch = Dispatch::new("glVertexAttribFormat")

///|
pub fn gl_vertex_attrib_format(
  attribindex : UInt,
  size : Int,
  type_ : UInt,
  normalized : Bool,
  relativeoffset : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Bool, UInt) -> Unit] = d_glVertexAttribFormat
    .get()
    .unsafe_into()
  fp(attribindex, size, type_, normalized, relativeoffset)
}

///|
let d_glVertexAttribFormatNV : Dispatch = Dispatch::new(
  "glVertexAttribFormatNV",
)

///|
pub fn gl_vertex_attrib_format_nv(
  index : UInt,
  size : Int,
  type_ : UInt,
  normalized : Bool,
  stride : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Bool, Int) -> Unit] = d_glVertexAttribFormatNV
    .get()
    .unsafe_into()
  fp(index, size, type_, normalized, stride)
}

///|
let d_glVertexAttribI1i : Dispatch = Dispatch::with_aliases(
  "glVertexAttribI1i",
  ["glVertexAttribI1iEXT"],
)

///|
pub fn gl_vertex_attrib_i1i(index : UInt, x : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glVertexAttribI1i
    .get()
    .unsafe_into()
  fp(index, x)
}

///|
let d_glVertexAttribI1iEXT : Dispatch = Dispatch::with_aliases(
  "glVertexAttribI1iEXT",
  ["glVertexAttribI1i"],
)

///|
pub fn gl_vertex_attrib_i1i_ext(index : UInt, x : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glVertexAttribI1iEXT
    .get()
    .unsafe_into()
  fp(index, x)
}

///|
let d_glVertexAttribI1iv : Dispatch = Dispatch::with_aliases(
  "glVertexAttribI1iv",
  ["glVertexAttribI1ivEXT"],
)

///|
pub fn gl_vertex_attrib_i1iv(index : UInt, v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glVertexAttribI1iv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttribI1ivEXT : Dispatch = Dispatch::with_aliases(
  "glVertexAttribI1ivEXT",
  ["glVertexAttribI1iv"],
)

///|
pub fn gl_vertex_attrib_i1iv_ext(index : UInt, v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glVertexAttribI1ivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttribI1ui : Dispatch = Dispatch::with_aliases(
  "glVertexAttribI1ui",
  ["glVertexAttribI1uiEXT"],
)

///|
pub fn gl_vertex_attrib_i1ui(index : UInt, x : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glVertexAttribI1ui
    .get()
    .unsafe_into()
  fp(index, x)
}

///|
let d_glVertexAttribI1uiEXT : Dispatch = Dispatch::with_aliases(
  "glVertexAttribI1uiEXT",
  ["glVertexAttribI1ui"],
)

///|
pub fn gl_vertex_attrib_i1ui_ext(index : UInt, x : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glVertexAttribI1uiEXT
    .get()
    .unsafe_into()
  fp(index, x)
}

///|
let d_glVertexAttribI1uiv : Dispatch = Dispatch::with_aliases(
  "glVertexAttribI1uiv",
  ["glVertexAttribI1uivEXT"],
)

///|
pub fn gl_vertex_attrib_i1uiv(index : UInt, v : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt]) -> Unit] = d_glVertexAttribI1uiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttribI1uivEXT : Dispatch = Dispatch::with_aliases(
  "glVertexAttribI1uivEXT",
  ["glVertexAttribI1uiv"],
)

///|
pub fn gl_vertex_attrib_i1uiv_ext(index : UInt, v : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt]) -> Unit] = d_glVertexAttribI1uivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttribI2i : Dispatch = Dispatch::with_aliases(
  "glVertexAttribI2i",
  ["glVertexAttribI2iEXT"],
)

///|
pub fn gl_vertex_attrib_i2i(index : UInt, x : Int, y : Int) -> Unit {
  let fp : FuncRef[(UInt, Int, Int) -> Unit] = d_glVertexAttribI2i
    .get()
    .unsafe_into()
  fp(index, x, y)
}

///|
let d_glVertexAttribI2iEXT : Dispatch = Dispatch::with_aliases(
  "glVertexAttribI2iEXT",
  ["glVertexAttribI2i"],
)

///|
pub fn gl_vertex_attrib_i2i_ext(index : UInt, x : Int, y : Int) -> Unit {
  let fp : FuncRef[(UInt, Int, Int) -> Unit] = d_glVertexAttribI2iEXT
    .get()
    .unsafe_into()
  fp(index, x, y)
}

///|
let d_glVertexAttribI2iv : Dispatch = Dispatch::with_aliases(
  "glVertexAttribI2iv",
  ["glVertexAttribI2ivEXT"],
)

///|
pub fn gl_vertex_attrib_i2iv(index : UInt, v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glVertexAttribI2iv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttribI2ivEXT : Dispatch = Dispatch::with_aliases(
  "glVertexAttribI2ivEXT",
  ["glVertexAttribI2iv"],
)

///|
pub fn gl_vertex_attrib_i2iv_ext(index : UInt, v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glVertexAttribI2ivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttribI2ui : Dispatch = Dispatch::with_aliases(
  "glVertexAttribI2ui",
  ["glVertexAttribI2uiEXT"],
)

///|
pub fn gl_vertex_attrib_i2ui(index : UInt, x : UInt, y : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glVertexAttribI2ui
    .get()
    .unsafe_into()
  fp(index, x, y)
}

///|
let d_glVertexAttribI2uiEXT : Dispatch = Dispatch::with_aliases(
  "glVertexAttribI2uiEXT",
  ["glVertexAttribI2ui"],
)

///|
pub fn gl_vertex_attrib_i2ui_ext(index : UInt, x : UInt, y : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt) -> Unit] = d_glVertexAttribI2uiEXT
    .get()
    .unsafe_into()
  fp(index, x, y)
}

///|
let d_glVertexAttribI2uiv : Dispatch = Dispatch::with_aliases(
  "glVertexAttribI2uiv",
  ["glVertexAttribI2uivEXT"],
)

///|
pub fn gl_vertex_attrib_i2uiv(index : UInt, v : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt]) -> Unit] = d_glVertexAttribI2uiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttribI2uivEXT : Dispatch = Dispatch::with_aliases(
  "glVertexAttribI2uivEXT",
  ["glVertexAttribI2uiv"],
)

///|
pub fn gl_vertex_attrib_i2uiv_ext(index : UInt, v : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt]) -> Unit] = d_glVertexAttribI2uivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttribI3i : Dispatch = Dispatch::with_aliases(
  "glVertexAttribI3i",
  ["glVertexAttribI3iEXT"],
)

///|
pub fn gl_vertex_attrib_i3i(index : UInt, x : Int, y : Int, z : Int) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int) -> Unit] = d_glVertexAttribI3i
    .get()
    .unsafe_into()
  fp(index, x, y, z)
}

///|
let d_glVertexAttribI3iEXT : Dispatch = Dispatch::with_aliases(
  "glVertexAttribI3iEXT",
  ["glVertexAttribI3i"],
)

///|
pub fn gl_vertex_attrib_i3i_ext(
  index : UInt,
  x : Int,
  y : Int,
  z : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int) -> Unit] = d_glVertexAttribI3iEXT
    .get()
    .unsafe_into()
  fp(index, x, y, z)
}

///|
let d_glVertexAttribI3iv : Dispatch = Dispatch::with_aliases(
  "glVertexAttribI3iv",
  ["glVertexAttribI3ivEXT"],
)

///|
pub fn gl_vertex_attrib_i3iv(index : UInt, v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glVertexAttribI3iv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttribI3ivEXT : Dispatch = Dispatch::with_aliases(
  "glVertexAttribI3ivEXT",
  ["glVertexAttribI3iv"],
)

///|
pub fn gl_vertex_attrib_i3iv_ext(index : UInt, v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glVertexAttribI3ivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttribI3ui : Dispatch = Dispatch::with_aliases(
  "glVertexAttribI3ui",
  ["glVertexAttribI3uiEXT"],
)

///|
pub fn gl_vertex_attrib_i3ui(
  index : UInt,
  x : UInt,
  y : UInt,
  z : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt) -> Unit] = d_glVertexAttribI3ui
    .get()
    .unsafe_into()
  fp(index, x, y, z)
}

///|
let d_glVertexAttribI3uiEXT : Dispatch = Dispatch::with_aliases(
  "glVertexAttribI3uiEXT",
  ["glVertexAttribI3ui"],
)

///|
pub fn gl_vertex_attrib_i3ui_ext(
  index : UInt,
  x : UInt,
  y : UInt,
  z : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt) -> Unit] = d_glVertexAttribI3uiEXT
    .get()
    .unsafe_into()
  fp(index, x, y, z)
}

///|
let d_glVertexAttribI3uiv : Dispatch = Dispatch::with_aliases(
  "glVertexAttribI3uiv",
  ["glVertexAttribI3uivEXT"],
)

///|
pub fn gl_vertex_attrib_i3uiv(index : UInt, v : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt]) -> Unit] = d_glVertexAttribI3uiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttribI3uivEXT : Dispatch = Dispatch::with_aliases(
  "glVertexAttribI3uivEXT",
  ["glVertexAttribI3uiv"],
)

///|
pub fn gl_vertex_attrib_i3uiv_ext(index : UInt, v : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt]) -> Unit] = d_glVertexAttribI3uivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttribI4bv : Dispatch = Dispatch::with_aliases(
  "glVertexAttribI4bv",
  ["glVertexAttribI4bvEXT"],
)

///|
pub fn gl_vertex_attrib_i4bv(index : UInt, v : Bytes) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Byte]) -> Unit] = d_glVertexAttribI4bv
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttribI4bvEXT : Dispatch = Dispatch::with_aliases(
  "glVertexAttribI4bvEXT",
  ["glVertexAttribI4bv"],
)

///|
pub fn gl_vertex_attrib_i4bv_ext(index : UInt, v : Bytes) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Byte]) -> Unit] = d_glVertexAttribI4bvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttribI4i : Dispatch = Dispatch::with_aliases(
  "glVertexAttribI4i",
  ["glVertexAttribI4iEXT"],
)

///|
pub fn gl_vertex_attrib_i4i(
  index : UInt,
  x : Int,
  y : Int,
  z : Int,
  w : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int) -> Unit] = d_glVertexAttribI4i
    .get()
    .unsafe_into()
  fp(index, x, y, z, w)
}

///|
let d_glVertexAttribI4iEXT : Dispatch = Dispatch::with_aliases(
  "glVertexAttribI4iEXT",
  ["glVertexAttribI4i"],
)

///|
pub fn gl_vertex_attrib_i4i_ext(
  index : UInt,
  x : Int,
  y : Int,
  z : Int,
  w : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int) -> Unit] = d_glVertexAttribI4iEXT
    .get()
    .unsafe_into()
  fp(index, x, y, z, w)
}

///|
let d_glVertexAttribI4iv : Dispatch = Dispatch::with_aliases(
  "glVertexAttribI4iv",
  ["glVertexAttribI4ivEXT"],
)

///|
pub fn gl_vertex_attrib_i4iv(index : UInt, v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glVertexAttribI4iv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttribI4ivEXT : Dispatch = Dispatch::with_aliases(
  "glVertexAttribI4ivEXT",
  ["glVertexAttribI4iv"],
)

///|
pub fn gl_vertex_attrib_i4iv_ext(index : UInt, v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glVertexAttribI4ivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttribI4sv : Dispatch = Dispatch::with_aliases(
  "glVertexAttribI4sv",
  ["glVertexAttribI4svEXT"],
)

///|
pub fn gl_vertex_attrib_i4sv(index : UInt, v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int16]) -> Unit] = d_glVertexAttribI4sv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttribI4svEXT : Dispatch = Dispatch::with_aliases(
  "glVertexAttribI4svEXT",
  ["glVertexAttribI4sv"],
)

///|
pub fn gl_vertex_attrib_i4sv_ext(index : UInt, v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int16]) -> Unit] = d_glVertexAttribI4svEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttribI4ubv : Dispatch = Dispatch::with_aliases(
  "glVertexAttribI4ubv",
  ["glVertexAttribI4ubvEXT"],
)

///|
pub fn gl_vertex_attrib_i4ubv(index : UInt, v : Bytes) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Byte]) -> Unit] = d_glVertexAttribI4ubv
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttribI4ubvEXT : Dispatch = Dispatch::with_aliases(
  "glVertexAttribI4ubvEXT",
  ["glVertexAttribI4ubv"],
)

///|
pub fn gl_vertex_attrib_i4ubv_ext(index : UInt, v : Bytes) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Byte]) -> Unit] = d_glVertexAttribI4ubvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttribI4ui : Dispatch = Dispatch::with_aliases(
  "glVertexAttribI4ui",
  ["glVertexAttribI4uiEXT"],
)

///|
pub fn gl_vertex_attrib_i4ui(
  index : UInt,
  x : UInt,
  y : UInt,
  z : UInt,
  w : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, UInt) -> Unit] = d_glVertexAttribI4ui
    .get()
    .unsafe_into()
  fp(index, x, y, z, w)
}

///|
let d_glVertexAttribI4uiEXT : Dispatch = Dispatch::with_aliases(
  "glVertexAttribI4uiEXT",
  ["glVertexAttribI4ui"],
)

///|
pub fn gl_vertex_attrib_i4ui_ext(
  index : UInt,
  x : UInt,
  y : UInt,
  z : UInt,
  w : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, UInt) -> Unit] = d_glVertexAttribI4uiEXT
    .get()
    .unsafe_into()
  fp(index, x, y, z, w)
}

///|
let d_glVertexAttribI4uiv : Dispatch = Dispatch::with_aliases(
  "glVertexAttribI4uiv",
  ["glVertexAttribI4uivEXT"],
)

///|
pub fn gl_vertex_attrib_i4uiv(index : UInt, v : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt]) -> Unit] = d_glVertexAttribI4uiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttribI4uivEXT : Dispatch = Dispatch::with_aliases(
  "glVertexAttribI4uivEXT",
  ["glVertexAttribI4uiv"],
)

///|
pub fn gl_vertex_attrib_i4uiv_ext(index : UInt, v : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt]) -> Unit] = d_glVertexAttribI4uivEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttribI4usv : Dispatch = Dispatch::with_aliases(
  "glVertexAttribI4usv",
  ["glVertexAttribI4usvEXT"],
)

///|
pub fn gl_vertex_attrib_i4usv(index : UInt, v : FixedArray[UInt16]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt16]) -> Unit] = d_glVertexAttribI4usv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttribI4usvEXT : Dispatch = Dispatch::with_aliases(
  "glVertexAttribI4usvEXT",
  ["glVertexAttribI4usv"],
)

///|
pub fn gl_vertex_attrib_i4usv_ext(index : UInt, v : FixedArray[UInt16]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt16]) -> Unit] = d_glVertexAttribI4usvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttribIFormat : Dispatch = Dispatch::new("glVertexAttribIFormat")

///|
pub fn gl_vertex_attrib_i_format(
  attribindex : UInt,
  size : Int,
  type_ : UInt,
  relativeoffset : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, UInt) -> Unit] = d_glVertexAttribIFormat
    .get()
    .unsafe_into()
  fp(attribindex, size, type_, relativeoffset)
}

///|
let d_glVertexAttribIFormatNV : Dispatch = Dispatch::new(
  "glVertexAttribIFormatNV",
)

///|
pub fn gl_vertex_attrib_i_format_nv(
  index : UInt,
  size : Int,
  type_ : UInt,
  stride : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int) -> Unit] = d_glVertexAttribIFormatNV
    .get()
    .unsafe_into()
  fp(index, size, type_, stride)
}

///|
let d_glVertexAttribIPointer : Dispatch = Dispatch::with_aliases(
  "glVertexAttribIPointer",
  ["glVertexAttribIPointerEXT"],
)

///|
/// Configure a vertex array from the buffer currently bound to `GL_ARRAY_BUFFER`.
/// `offset` is a byte offset; client-side arrays are not accepted.
pub fn gl_vertex_attrib_i_pointer(
  index : UInt,
  size : Int,
  type_ : UInt,
  stride : Int,
  offset : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int, @pointer.Pointer[Unit]) -> Unit] = d_glVertexAttribIPointer
    .get()
    .unsafe_into()
  fp(index, size, type_, stride, @pointer.Pointer::unsafe_from_int64(offset))
}

///|
let d_glVertexAttribIPointerEXT : Dispatch = Dispatch::with_aliases(
  "glVertexAttribIPointerEXT",
  ["glVertexAttribIPointer"],
)

///|
/// Configure a vertex array from the buffer currently bound to `GL_ARRAY_BUFFER`.
/// `offset` is a byte offset; client-side arrays are not accepted.
pub fn gl_vertex_attrib_i_pointer_ext(
  index : UInt,
  size : Int,
  type_ : UInt,
  stride : Int,
  offset : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int, @pointer.Pointer[Unit]) -> Unit] = d_glVertexAttribIPointerEXT
    .get()
    .unsafe_into()
  fp(index, size, type_, stride, @pointer.Pointer::unsafe_from_int64(offset))
}

///|
let d_glVertexAttribL1d : Dispatch = Dispatch::with_aliases(
  "glVertexAttribL1d",
  ["glVertexAttribL1dEXT"],
)

///|
pub fn gl_vertex_attrib_l1d(index : UInt, x : Double) -> Unit {
  let fp : FuncRef[(UInt, Double) -> Unit] = d_glVertexAttribL1d
    .get()
    .unsafe_into()
  fp(index, x)
}

///|
let d_glVertexAttribL1dEXT : Dispatch = Dispatch::with_aliases(
  "glVertexAttribL1dEXT",
  ["glVertexAttribL1d"],
)

///|
pub fn gl_vertex_attrib_l1d_ext(index : UInt, x : Double) -> Unit {
  let fp : FuncRef[(UInt, Double) -> Unit] = d_glVertexAttribL1dEXT
    .get()
    .unsafe_into()
  fp(index, x)
}

///|
let d_glVertexAttribL1dv : Dispatch = Dispatch::with_aliases(
  "glVertexAttribL1dv",
  ["glVertexAttribL1dvEXT"],
)

///|
pub fn gl_vertex_attrib_l1dv(index : UInt, v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Double]) -> Unit] = d_glVertexAttribL1dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttribL1dvEXT : Dispatch = Dispatch::with_aliases(
  "glVertexAttribL1dvEXT",
  ["glVertexAttribL1dv"],
)

///|
pub fn gl_vertex_attrib_l1dv_ext(index : UInt, v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Double]) -> Unit] = d_glVertexAttribL1dvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttribL1i64NV : Dispatch = Dispatch::new("glVertexAttribL1i64NV")

///|
pub fn gl_vertex_attrib_l1i64_nv(index : UInt, x : Int64) -> Unit {
  let fp : FuncRef[(UInt, Int64) -> Unit] = d_glVertexAttribL1i64NV
    .get()
    .unsafe_into()
  fp(index, x)
}

///|
let d_glVertexAttribL1i64vNV : Dispatch = Dispatch::new(
  "glVertexAttribL1i64vNV",
)

///|
pub fn gl_vertex_attrib_l1i64v_nv(index : UInt, v : FixedArray[Int64]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int64]) -> Unit] = d_glVertexAttribL1i64vNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttribL1ui64ARB : Dispatch = Dispatch::new(
  "glVertexAttribL1ui64ARB",
)

///|
pub fn gl_vertex_attrib_l1ui64_arb(index : UInt, x : UInt64) -> Unit {
  let fp : FuncRef[(UInt, UInt64) -> Unit] = d_glVertexAttribL1ui64ARB
    .get()
    .unsafe_into()
  fp(index, x)
}

///|
let d_glVertexAttribL1ui64NV : Dispatch = Dispatch::new(
  "glVertexAttribL1ui64NV",
)

///|
pub fn gl_vertex_attrib_l1ui64_nv(index : UInt, x : UInt64) -> Unit {
  let fp : FuncRef[(UInt, UInt64) -> Unit] = d_glVertexAttribL1ui64NV
    .get()
    .unsafe_into()
  fp(index, x)
}

///|
let d_glVertexAttribL1ui64vARB : Dispatch = Dispatch::new(
  "glVertexAttribL1ui64vARB",
)

///|
pub fn gl_vertex_attrib_l1ui64v_arb(
  index : UInt,
  v : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt64]) -> Unit] = d_glVertexAttribL1ui64vARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttribL1ui64vNV : Dispatch = Dispatch::new(
  "glVertexAttribL1ui64vNV",
)

///|
pub fn gl_vertex_attrib_l1ui64v_nv(
  index : UInt,
  v : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt64]) -> Unit] = d_glVertexAttribL1ui64vNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttribL2d : Dispatch = Dispatch::with_aliases(
  "glVertexAttribL2d",
  ["glVertexAttribL2dEXT"],
)

///|
pub fn gl_vertex_attrib_l2d(index : UInt, x : Double, y : Double) -> Unit {
  let fp : FuncRef[(UInt, Double, Double) -> Unit] = d_glVertexAttribL2d
    .get()
    .unsafe_into()
  fp(index, x, y)
}

///|
let d_glVertexAttribL2dEXT : Dispatch = Dispatch::with_aliases(
  "glVertexAttribL2dEXT",
  ["glVertexAttribL2d"],
)

///|
pub fn gl_vertex_attrib_l2d_ext(index : UInt, x : Double, y : Double) -> Unit {
  let fp : FuncRef[(UInt, Double, Double) -> Unit] = d_glVertexAttribL2dEXT
    .get()
    .unsafe_into()
  fp(index, x, y)
}

///|
let d_glVertexAttribL2dv : Dispatch = Dispatch::with_aliases(
  "glVertexAttribL2dv",
  ["glVertexAttribL2dvEXT"],
)

///|
pub fn gl_vertex_attrib_l2dv(index : UInt, v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Double]) -> Unit] = d_glVertexAttribL2dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttribL2dvEXT : Dispatch = Dispatch::with_aliases(
  "glVertexAttribL2dvEXT",
  ["glVertexAttribL2dv"],
)

///|
pub fn gl_vertex_attrib_l2dv_ext(index : UInt, v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Double]) -> Unit] = d_glVertexAttribL2dvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttribL2i64NV : Dispatch = Dispatch::new("glVertexAttribL2i64NV")

///|
pub fn gl_vertex_attrib_l2i64_nv(index : UInt, x : Int64, y : Int64) -> Unit {
  let fp : FuncRef[(UInt, Int64, Int64) -> Unit] = d_glVertexAttribL2i64NV
    .get()
    .unsafe_into()
  fp(index, x, y)
}

///|
let d_glVertexAttribL2i64vNV : Dispatch = Dispatch::new(
  "glVertexAttribL2i64vNV",
)

///|
pub fn gl_vertex_attrib_l2i64v_nv(index : UInt, v : FixedArray[Int64]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int64]) -> Unit] = d_glVertexAttribL2i64vNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttribL2ui64NV : Dispatch = Dispatch::new(
  "glVertexAttribL2ui64NV",
)

///|
pub fn gl_vertex_attrib_l2ui64_nv(index : UInt, x : UInt64, y : UInt64) -> Unit {
  let fp : FuncRef[(UInt, UInt64, UInt64) -> Unit] = d_glVertexAttribL2ui64NV
    .get()
    .unsafe_into()
  fp(index, x, y)
}

///|
let d_glVertexAttribL2ui64vNV : Dispatch = Dispatch::new(
  "glVertexAttribL2ui64vNV",
)

///|
pub fn gl_vertex_attrib_l2ui64v_nv(
  index : UInt,
  v : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt64]) -> Unit] = d_glVertexAttribL2ui64vNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttribL3d : Dispatch = Dispatch::with_aliases(
  "glVertexAttribL3d",
  ["glVertexAttribL3dEXT"],
)

///|
pub fn gl_vertex_attrib_l3d(
  index : UInt,
  x : Double,
  y : Double,
  z : Double,
) -> Unit {
  let fp : FuncRef[(UInt, Double, Double, Double) -> Unit] = d_glVertexAttribL3d
    .get()
    .unsafe_into()
  fp(index, x, y, z)
}

///|
let d_glVertexAttribL3dEXT : Dispatch = Dispatch::with_aliases(
  "glVertexAttribL3dEXT",
  ["glVertexAttribL3d"],
)

///|
pub fn gl_vertex_attrib_l3d_ext(
  index : UInt,
  x : Double,
  y : Double,
  z : Double,
) -> Unit {
  let fp : FuncRef[(UInt, Double, Double, Double) -> Unit] = d_glVertexAttribL3dEXT
    .get()
    .unsafe_into()
  fp(index, x, y, z)
}

///|
let d_glVertexAttribL3dv : Dispatch = Dispatch::with_aliases(
  "glVertexAttribL3dv",
  ["glVertexAttribL3dvEXT"],
)

///|
pub fn gl_vertex_attrib_l3dv(index : UInt, v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Double]) -> Unit] = d_glVertexAttribL3dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttribL3dvEXT : Dispatch = Dispatch::with_aliases(
  "glVertexAttribL3dvEXT",
  ["glVertexAttribL3dv"],
)

///|
pub fn gl_vertex_attrib_l3dv_ext(index : UInt, v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Double]) -> Unit] = d_glVertexAttribL3dvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttribL3i64NV : Dispatch = Dispatch::new("glVertexAttribL3i64NV")

///|
pub fn gl_vertex_attrib_l3i64_nv(
  index : UInt,
  x : Int64,
  y : Int64,
  z : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, Int64, Int64, Int64) -> Unit] = d_glVertexAttribL3i64NV
    .get()
    .unsafe_into()
  fp(index, x, y, z)
}

///|
let d_glVertexAttribL3i64vNV : Dispatch = Dispatch::new(
  "glVertexAttribL3i64vNV",
)

///|
pub fn gl_vertex_attrib_l3i64v_nv(index : UInt, v : FixedArray[Int64]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int64]) -> Unit] = d_glVertexAttribL3i64vNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttribL3ui64NV : Dispatch = Dispatch::new(
  "glVertexAttribL3ui64NV",
)

///|
pub fn gl_vertex_attrib_l3ui64_nv(
  index : UInt,
  x : UInt64,
  y : UInt64,
  z : UInt64,
) -> Unit {
  let fp : FuncRef[(UInt, UInt64, UInt64, UInt64) -> Unit] = d_glVertexAttribL3ui64NV
    .get()
    .unsafe_into()
  fp(index, x, y, z)
}

///|
let d_glVertexAttribL3ui64vNV : Dispatch = Dispatch::new(
  "glVertexAttribL3ui64vNV",
)

///|
pub fn gl_vertex_attrib_l3ui64v_nv(
  index : UInt,
  v : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt64]) -> Unit] = d_glVertexAttribL3ui64vNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttribL4d : Dispatch = Dispatch::with_aliases(
  "glVertexAttribL4d",
  ["glVertexAttribL4dEXT"],
)

///|
pub fn gl_vertex_attrib_l4d(
  index : UInt,
  x : Double,
  y : Double,
  z : Double,
  w : Double,
) -> Unit {
  let fp : FuncRef[(UInt, Double, Double, Double, Double) -> Unit] = d_glVertexAttribL4d
    .get()
    .unsafe_into()
  fp(index, x, y, z, w)
}

///|
let d_glVertexAttribL4dEXT : Dispatch = Dispatch::with_aliases(
  "glVertexAttribL4dEXT",
  ["glVertexAttribL4d"],
)

///|
pub fn gl_vertex_attrib_l4d_ext(
  index : UInt,
  x : Double,
  y : Double,
  z : Double,
  w : Double,
) -> Unit {
  let fp : FuncRef[(UInt, Double, Double, Double, Double) -> Unit] = d_glVertexAttribL4dEXT
    .get()
    .unsafe_into()
  fp(index, x, y, z, w)
}

///|
let d_glVertexAttribL4dv : Dispatch = Dispatch::with_aliases(
  "glVertexAttribL4dv",
  ["glVertexAttribL4dvEXT"],
)

///|
pub fn gl_vertex_attrib_l4dv(index : UInt, v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Double]) -> Unit] = d_glVertexAttribL4dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttribL4dvEXT : Dispatch = Dispatch::with_aliases(
  "glVertexAttribL4dvEXT",
  ["glVertexAttribL4dv"],
)

///|
pub fn gl_vertex_attrib_l4dv_ext(index : UInt, v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Double]) -> Unit] = d_glVertexAttribL4dvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttribL4i64NV : Dispatch = Dispatch::new("glVertexAttribL4i64NV")

///|
pub fn gl_vertex_attrib_l4i64_nv(
  index : UInt,
  x : Int64,
  y : Int64,
  z : Int64,
  w : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, Int64, Int64, Int64, Int64) -> Unit] = d_glVertexAttribL4i64NV
    .get()
    .unsafe_into()
  fp(index, x, y, z, w)
}

///|
let d_glVertexAttribL4i64vNV : Dispatch = Dispatch::new(
  "glVertexAttribL4i64vNV",
)

///|
pub fn gl_vertex_attrib_l4i64v_nv(index : UInt, v : FixedArray[Int64]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int64]) -> Unit] = d_glVertexAttribL4i64vNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttribL4ui64NV : Dispatch = Dispatch::new(
  "glVertexAttribL4ui64NV",
)

///|
pub fn gl_vertex_attrib_l4ui64_nv(
  index : UInt,
  x : UInt64,
  y : UInt64,
  z : UInt64,
  w : UInt64,
) -> Unit {
  let fp : FuncRef[(UInt, UInt64, UInt64, UInt64, UInt64) -> Unit] = d_glVertexAttribL4ui64NV
    .get()
    .unsafe_into()
  fp(index, x, y, z, w)
}

///|
let d_glVertexAttribL4ui64vNV : Dispatch = Dispatch::new(
  "glVertexAttribL4ui64vNV",
)

///|
pub fn gl_vertex_attrib_l4ui64v_nv(
  index : UInt,
  v : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt64]) -> Unit] = d_glVertexAttribL4ui64vNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glVertexAttribLFormat : Dispatch = Dispatch::new("glVertexAttribLFormat")

///|
pub fn gl_vertex_attrib_l_format(
  attribindex : UInt,
  size : Int,
  type_ : UInt,
  relativeoffset : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, UInt) -> Unit] = d_glVertexAttribLFormat
    .get()
    .unsafe_into()
  fp(attribindex, size, type_, relativeoffset)
}

///|
let d_glVertexAttribLFormatNV : Dispatch = Dispatch::new(
  "glVertexAttribLFormatNV",
)

///|
pub fn gl_vertex_attrib_l_format_nv(
  index : UInt,
  size : Int,
  type_ : UInt,
  stride : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int) -> Unit] = d_glVertexAttribLFormatNV
    .get()
    .unsafe_into()
  fp(index, size, type_, stride)
}

///|
let d_glVertexAttribLPointer : Dispatch = Dispatch::with_aliases(
  "glVertexAttribLPointer",
  ["glVertexAttribLPointerEXT"],
)

///|
/// Configure a vertex array from the buffer currently bound to `GL_ARRAY_BUFFER`.
/// `offset` is a byte offset; client-side arrays are not accepted.
pub fn gl_vertex_attrib_l_pointer(
  index : UInt,
  size : Int,
  type_ : UInt,
  stride : Int,
  offset : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int, @pointer.Pointer[Unit]) -> Unit] = d_glVertexAttribLPointer
    .get()
    .unsafe_into()
  fp(index, size, type_, stride, @pointer.Pointer::unsafe_from_int64(offset))
}

///|
let d_glVertexAttribLPointerEXT : Dispatch = Dispatch::with_aliases(
  "glVertexAttribLPointerEXT",
  ["glVertexAttribLPointer"],
)

///|
/// Configure a vertex array from the buffer currently bound to `GL_ARRAY_BUFFER`.
/// `offset` is a byte offset; client-side arrays are not accepted.
pub fn gl_vertex_attrib_l_pointer_ext(
  index : UInt,
  size : Int,
  type_ : UInt,
  stride : Int,
  offset : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int, @pointer.Pointer[Unit]) -> Unit] = d_glVertexAttribLPointerEXT
    .get()
    .unsafe_into()
  fp(index, size, type_, stride, @pointer.Pointer::unsafe_from_int64(offset))
}

///|
let d_glVertexAttribP1ui : Dispatch = Dispatch::new("glVertexAttribP1ui")

///|
pub fn gl_vertex_attrib_p1ui(
  index : UInt,
  type_ : UInt,
  normalized : Bool,
  value : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Bool, UInt) -> Unit] = d_glVertexAttribP1ui
    .get()
    .unsafe_into()
  fp(index, type_, normalized, value)
}

///|
let d_glVertexAttribP1uiv : Dispatch = Dispatch::new("glVertexAttribP1uiv")

///|
pub fn gl_vertex_attrib_p1uiv(
  index : UInt,
  type_ : UInt,
  normalized : Bool,
  value : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Bool, @pointer.Pointer[UInt]) -> Unit] = d_glVertexAttribP1uiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(index, type_, normalized, value_p)
  })
}

///|
let d_glVertexAttribP2ui : Dispatch = Dispatch::new("glVertexAttribP2ui")

///|
pub fn gl_vertex_attrib_p2ui(
  index : UInt,
  type_ : UInt,
  normalized : Bool,
  value : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Bool, UInt) -> Unit] = d_glVertexAttribP2ui
    .get()
    .unsafe_into()
  fp(index, type_, normalized, value)
}

///|
let d_glVertexAttribP2uiv : Dispatch = Dispatch::new("glVertexAttribP2uiv")

///|
pub fn gl_vertex_attrib_p2uiv(
  index : UInt,
  type_ : UInt,
  normalized : Bool,
  value : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Bool, @pointer.Pointer[UInt]) -> Unit] = d_glVertexAttribP2uiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(index, type_, normalized, value_p)
  })
}

///|
let d_glVertexAttribP3ui : Dispatch = Dispatch::new("glVertexAttribP3ui")

///|
pub fn gl_vertex_attrib_p3ui(
  index : UInt,
  type_ : UInt,
  normalized : Bool,
  value : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Bool, UInt) -> Unit] = d_glVertexAttribP3ui
    .get()
    .unsafe_into()
  fp(index, type_, normalized, value)
}

///|
let d_glVertexAttribP3uiv : Dispatch = Dispatch::new("glVertexAttribP3uiv")

///|
pub fn gl_vertex_attrib_p3uiv(
  index : UInt,
  type_ : UInt,
  normalized : Bool,
  value : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Bool, @pointer.Pointer[UInt]) -> Unit] = d_glVertexAttribP3uiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(index, type_, normalized, value_p)
  })
}

///|
let d_glVertexAttribP4ui : Dispatch = Dispatch::new("glVertexAttribP4ui")

///|
pub fn gl_vertex_attrib_p4ui(
  index : UInt,
  type_ : UInt,
  normalized : Bool,
  value : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Bool, UInt) -> Unit] = d_glVertexAttribP4ui
    .get()
    .unsafe_into()
  fp(index, type_, normalized, value)
}

///|
let d_glVertexAttribP4uiv : Dispatch = Dispatch::new("glVertexAttribP4uiv")

///|
pub fn gl_vertex_attrib_p4uiv(
  index : UInt,
  type_ : UInt,
  normalized : Bool,
  value : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Bool, @pointer.Pointer[UInt]) -> Unit] = d_glVertexAttribP4uiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) {
    fp(index, type_, normalized, value_p)
  })
}

///|
let d_glVertexAttribParameteriAMD : Dispatch = Dispatch::new(
  "glVertexAttribParameteriAMD",
)

///|
pub fn gl_vertex_attrib_parameteri_amd(
  index : UInt,
  pname : UInt,
  param : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int) -> Unit] = d_glVertexAttribParameteriAMD
    .get()
    .unsafe_into()
  fp(index, pname, param)
}

///|
let d_glVertexAttribPointer : Dispatch = Dispatch::with_aliases(
  "glVertexAttribPointer",
  ["glVertexAttribPointerARB"],
)

///|
/// Configure a vertex array from the buffer currently bound to `GL_ARRAY_BUFFER`.
/// `offset` is a byte offset; client-side arrays are not accepted.
pub fn gl_vertex_attrib_pointer(
  index : UInt,
  size : Int,
  type_ : UInt,
  normalized : Bool,
  stride : Int,
  offset : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Bool, Int, @pointer.Pointer[Unit]) -> Unit] = d_glVertexAttribPointer
    .get()
    .unsafe_into()
  fp(
    index,
    size,
    type_,
    normalized,
    stride,
    @pointer.Pointer::unsafe_from_int64(offset),
  )
}

///|
let d_glVertexAttribPointerARB : Dispatch = Dispatch::with_aliases(
  "glVertexAttribPointerARB",
  ["glVertexAttribPointer"],
)

///|
/// Configure a vertex array from the buffer currently bound to `GL_ARRAY_BUFFER`.
/// `offset` is a byte offset; client-side arrays are not accepted.
pub fn gl_vertex_attrib_pointer_arb(
  index : UInt,
  size : Int,
  type_ : UInt,
  normalized : Bool,
  stride : Int,
  offset : Int64,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Bool, Int, @pointer.Pointer[Unit]) -> Unit] = d_glVertexAttribPointerARB
    .get()
    .unsafe_into()
  fp(
    index,
    size,
    type_,
    normalized,
    stride,
    @pointer.Pointer::unsafe_from_int64(offset),
  )
}

///|
let d_glVertexAttribPointerNV : Dispatch = Dispatch::new(
  "glVertexAttribPointerNV",
)

///|
pub fn gl_vertex_attrib_pointer_nv(
  index : UInt,
  fsize : Int,
  type_ : UInt,
  stride : Int,
  pointer : Bytes,
) -> Unit {
  let fp : FuncRef[(UInt, Int, UInt, Int, @pointer.Pointer[Byte]) -> Unit] = d_glVertexAttribPointerNV
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(pointer, fn(pointer_p) {
    fp(index, fsize, type_, stride, pointer_p)
  })
}

///|
let d_glVertexAttribs1dvNV : Dispatch = Dispatch::new("glVertexAttribs1dvNV")

///|
pub fn gl_vertex_attribs1dv_nv(
  index : UInt,
  count : Int,
  v : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Double]) -> Unit] = d_glVertexAttribs1dvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, count, v_p) })
}

///|
let d_glVertexAttribs1fvNV : Dispatch = Dispatch::new("glVertexAttribs1fvNV")

///|
pub fn gl_vertex_attribs1fv_nv(
  index : UInt,
  count : Int,
  v : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Float]) -> Unit] = d_glVertexAttribs1fvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, count, v_p) })
}

///|
let d_glVertexAttribs1hvNV : Dispatch = Dispatch::new("glVertexAttribs1hvNV")

///|
pub fn gl_vertex_attribs1hv_nv(
  index : UInt,
  n : Int,
  v : FixedArray[UInt16],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[UInt16]) -> Unit] = d_glVertexAttribs1hvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, n, v_p) })
}

///|
let d_glVertexAttribs1svNV : Dispatch = Dispatch::new("glVertexAttribs1svNV")

///|
pub fn gl_vertex_attribs1sv_nv(
  index : UInt,
  count : Int,
  v : FixedArray[Int16],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Int16]) -> Unit] = d_glVertexAttribs1svNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, count, v_p) })
}

///|
let d_glVertexAttribs2dvNV : Dispatch = Dispatch::new("glVertexAttribs2dvNV")

///|
pub fn gl_vertex_attribs2dv_nv(
  index : UInt,
  count : Int,
  v : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Double]) -> Unit] = d_glVertexAttribs2dvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, count, v_p) })
}

///|
let d_glVertexAttribs2fvNV : Dispatch = Dispatch::new("glVertexAttribs2fvNV")

///|
pub fn gl_vertex_attribs2fv_nv(
  index : UInt,
  count : Int,
  v : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Float]) -> Unit] = d_glVertexAttribs2fvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, count, v_p) })
}

///|
let d_glVertexAttribs2hvNV : Dispatch = Dispatch::new("glVertexAttribs2hvNV")

///|
pub fn gl_vertex_attribs2hv_nv(
  index : UInt,
  n : Int,
  v : FixedArray[UInt16],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[UInt16]) -> Unit] = d_glVertexAttribs2hvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, n, v_p) })
}

///|
let d_glVertexAttribs2svNV : Dispatch = Dispatch::new("glVertexAttribs2svNV")

///|
pub fn gl_vertex_attribs2sv_nv(
  index : UInt,
  count : Int,
  v : FixedArray[Int16],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Int16]) -> Unit] = d_glVertexAttribs2svNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, count, v_p) })
}

///|
let d_glVertexAttribs3dvNV : Dispatch = Dispatch::new("glVertexAttribs3dvNV")

///|
pub fn gl_vertex_attribs3dv_nv(
  index : UInt,
  count : Int,
  v : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Double]) -> Unit] = d_glVertexAttribs3dvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, count, v_p) })
}

///|
let d_glVertexAttribs3fvNV : Dispatch = Dispatch::new("glVertexAttribs3fvNV")

///|
pub fn gl_vertex_attribs3fv_nv(
  index : UInt,
  count : Int,
  v : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Float]) -> Unit] = d_glVertexAttribs3fvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, count, v_p) })
}

///|
let d_glVertexAttribs3hvNV : Dispatch = Dispatch::new("glVertexAttribs3hvNV")

///|
pub fn gl_vertex_attribs3hv_nv(
  index : UInt,
  n : Int,
  v : FixedArray[UInt16],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[UInt16]) -> Unit] = d_glVertexAttribs3hvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, n, v_p) })
}

///|
let d_glVertexAttribs3svNV : Dispatch = Dispatch::new("glVertexAttribs3svNV")

///|
pub fn gl_vertex_attribs3sv_nv(
  index : UInt,
  count : Int,
  v : FixedArray[Int16],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Int16]) -> Unit] = d_glVertexAttribs3svNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, count, v_p) })
}

///|
let d_glVertexAttribs4dvNV : Dispatch = Dispatch::new("glVertexAttribs4dvNV")

///|
pub fn gl_vertex_attribs4dv_nv(
  index : UInt,
  count : Int,
  v : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Double]) -> Unit] = d_glVertexAttribs4dvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, count, v_p) })
}

///|
let d_glVertexAttribs4fvNV : Dispatch = Dispatch::new("glVertexAttribs4fvNV")

///|
pub fn gl_vertex_attribs4fv_nv(
  index : UInt,
  count : Int,
  v : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Float]) -> Unit] = d_glVertexAttribs4fvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, count, v_p) })
}

///|
let d_glVertexAttribs4hvNV : Dispatch = Dispatch::new("glVertexAttribs4hvNV")

///|
pub fn gl_vertex_attribs4hv_nv(
  index : UInt,
  n : Int,
  v : FixedArray[UInt16],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[UInt16]) -> Unit] = d_glVertexAttribs4hvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, n, v_p) })
}

///|
let d_glVertexAttribs4svNV : Dispatch = Dispatch::new("glVertexAttribs4svNV")

///|
pub fn gl_vertex_attribs4sv_nv(
  index : UInt,
  count : Int,
  v : FixedArray[Int16],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Int16]) -> Unit] = d_glVertexAttribs4svNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, count, v_p) })
}

///|
let d_glVertexAttribs4ubvNV : Dispatch = Dispatch::new("glVertexAttribs4ubvNV")

///|
pub fn gl_vertex_attribs4ubv_nv(index : UInt, count : Int, v : Bytes) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Byte]) -> Unit] = d_glVertexAttribs4ubvNV
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(v, fn(v_p) { fp(index, count, v_p) })
}

///|
let d_glVertexBindingDivisor : Dispatch = Dispatch::new(
  "glVertexBindingDivisor",
)

///|
pub fn gl_vertex_binding_divisor(bindingindex : UInt, divisor : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glVertexBindingDivisor
    .get()
    .unsafe_into()
  fp(bindingindex, divisor)
}

///|
let d_glVertexBlendARB : Dispatch = Dispatch::new("glVertexBlendARB")

///|
pub fn gl_vertex_blend_arb(count : Int) -> Unit {
  let fp : FuncRef[(Int) -> Unit] = d_glVertexBlendARB.get().unsafe_into()
  fp(count)
}

///|
let d_glVertexBlendEnvfATI : Dispatch = Dispatch::new("glVertexBlendEnvfATI")

///|
pub fn gl_vertex_blend_envf_ati(pname : UInt, param : Float) -> Unit {
  let fp : FuncRef[(UInt, Float) -> Unit] = d_glVertexBlendEnvfATI
    .get()
    .unsafe_into()
  fp(pname, param)
}

///|
let d_glVertexBlendEnviATI : Dispatch = Dispatch::new("glVertexBlendEnviATI")

///|
pub fn gl_vertex_blend_envi_ati(pname : UInt, param : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glVertexBlendEnviATI
    .get()
    .unsafe_into()
  fp(pname, param)
}

///|
let d_glVertexFormatNV : Dispatch = Dispatch::new("glVertexFormatNV")

///|
pub fn gl_vertex_format_nv(size : Int, type_ : UInt, stride : Int) -> Unit {
  let fp : FuncRef[(Int, UInt, Int) -> Unit] = d_glVertexFormatNV
    .get()
    .unsafe_into()
  fp(size, type_, stride)
}

///|
let d_glVertexP2ui : Dispatch = Dispatch::new("glVertexP2ui")

///|
pub fn gl_vertex_p2ui(type_ : UInt, value : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glVertexP2ui.get().unsafe_into()
  fp(type_, value)
}

///|
let d_glVertexP2uiv : Dispatch = Dispatch::new("glVertexP2uiv")

///|
pub fn gl_vertex_p2uiv(type_ : UInt, value : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt]) -> Unit] = d_glVertexP2uiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(type_, value_p) })
}

///|
let d_glVertexP3ui : Dispatch = Dispatch::new("glVertexP3ui")

///|
pub fn gl_vertex_p3ui(type_ : UInt, value : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glVertexP3ui.get().unsafe_into()
  fp(type_, value)
}

///|
let d_glVertexP3uiv : Dispatch = Dispatch::new("glVertexP3uiv")

///|
pub fn gl_vertex_p3uiv(type_ : UInt, value : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt]) -> Unit] = d_glVertexP3uiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(type_, value_p) })
}

///|
let d_glVertexP4ui : Dispatch = Dispatch::new("glVertexP4ui")

///|
pub fn gl_vertex_p4ui(type_ : UInt, value : UInt) -> Unit {
  let fp : FuncRef[(UInt, UInt) -> Unit] = d_glVertexP4ui.get().unsafe_into()
  fp(type_, value)
}

///|
let d_glVertexP4uiv : Dispatch = Dispatch::new("glVertexP4uiv")

///|
pub fn gl_vertex_p4uiv(type_ : UInt, value : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[UInt]) -> Unit] = d_glVertexP4uiv
    .get()
    .unsafe_into()
  @pointer.borrow_array(value, fn(value_p) { fp(type_, value_p) })
}

///|
let d_glVertexPointer : Dispatch = Dispatch::new("glVertexPointer")

///|
/// Configure a vertex array from the buffer currently bound to `GL_ARRAY_BUFFER`.
/// `offset` is a byte offset; client-side arrays are not accepted.
pub fn gl_vertex_pointer(
  size : Int,
  type_ : UInt,
  stride : Int,
  offset : Int64,
) -> Unit {
  let fp : FuncRef[(Int, UInt, Int, @pointer.Pointer[Unit]) -> Unit] = d_glVertexPointer
    .get()
    .unsafe_into()
  fp(size, type_, stride, @pointer.Pointer::unsafe_from_int64(offset))
}

///|
let d_glVertexPointerEXT : Dispatch = Dispatch::new("glVertexPointerEXT")

///|
pub fn gl_vertex_pointer_ext(
  size : Int,
  type_ : UInt,
  stride : Int,
  count : Int,
  pointer : Bytes,
) -> Unit {
  let fp : FuncRef[(Int, UInt, Int, Int, @pointer.Pointer[Byte]) -> Unit] = d_glVertexPointerEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(pointer, fn(pointer_p) {
    fp(size, type_, stride, count, pointer_p)
  })
}

///|
let d_glVertexStream1dATI : Dispatch = Dispatch::new("glVertexStream1dATI")

///|
pub fn gl_vertex_stream1d_ati(stream : UInt, x : Double) -> Unit {
  let fp : FuncRef[(UInt, Double) -> Unit] = d_glVertexStream1dATI
    .get()
    .unsafe_into()
  fp(stream, x)
}

///|
let d_glVertexStream1dvATI : Dispatch = Dispatch::new("glVertexStream1dvATI")

///|
pub fn gl_vertex_stream1dv_ati(
  stream : UInt,
  coords : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Double]) -> Unit] = d_glVertexStream1dvATI
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(stream, coords_p) })
}

///|
let d_glVertexStream1fATI : Dispatch = Dispatch::new("glVertexStream1fATI")

///|
pub fn gl_vertex_stream1f_ati(stream : UInt, x : Float) -> Unit {
  let fp : FuncRef[(UInt, Float) -> Unit] = d_glVertexStream1fATI
    .get()
    .unsafe_into()
  fp(stream, x)
}

///|
let d_glVertexStream1fvATI : Dispatch = Dispatch::new("glVertexStream1fvATI")

///|
pub fn gl_vertex_stream1fv_ati(
  stream : UInt,
  coords : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glVertexStream1fvATI
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(stream, coords_p) })
}

///|
let d_glVertexStream1iATI : Dispatch = Dispatch::new("glVertexStream1iATI")

///|
pub fn gl_vertex_stream1i_ati(stream : UInt, x : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glVertexStream1iATI
    .get()
    .unsafe_into()
  fp(stream, x)
}

///|
let d_glVertexStream1ivATI : Dispatch = Dispatch::new("glVertexStream1ivATI")

///|
pub fn gl_vertex_stream1iv_ati(stream : UInt, coords : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glVertexStream1ivATI
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(stream, coords_p) })
}

///|
let d_glVertexStream1sATI : Dispatch = Dispatch::new("glVertexStream1sATI")

///|
pub fn gl_vertex_stream1s_ati(stream : UInt, x : Int) -> Unit {
  let fp : FuncRef[(UInt, Int) -> Unit] = d_glVertexStream1sATI
    .get()
    .unsafe_into()
  fp(stream, x)
}

///|
let d_glVertexStream1svATI : Dispatch = Dispatch::new("glVertexStream1svATI")

///|
pub fn gl_vertex_stream1sv_ati(
  stream : UInt,
  coords : FixedArray[Int16],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int16]) -> Unit] = d_glVertexStream1svATI
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(stream, coords_p) })
}

///|
let d_glVertexStream2dATI : Dispatch = Dispatch::new("glVertexStream2dATI")

///|
pub fn gl_vertex_stream2d_ati(stream : UInt, x : Double, y : Double) -> Unit {
  let fp : FuncRef[(UInt, Double, Double) -> Unit] = d_glVertexStream2dATI
    .get()
    .unsafe_into()
  fp(stream, x, y)
}

///|
let d_glVertexStream2dvATI : Dispatch = Dispatch::new("glVertexStream2dvATI")

///|
pub fn gl_vertex_stream2dv_ati(
  stream : UInt,
  coords : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Double]) -> Unit] = d_glVertexStream2dvATI
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(stream, coords_p) })
}

///|
let d_glVertexStream2fATI : Dispatch = Dispatch::new("glVertexStream2fATI")

///|
pub fn gl_vertex_stream2f_ati(stream : UInt, x : Float, y : Float) -> Unit {
  let fp : FuncRef[(UInt, Float, Float) -> Unit] = d_glVertexStream2fATI
    .get()
    .unsafe_into()
  fp(stream, x, y)
}

///|
let d_glVertexStream2fvATI : Dispatch = Dispatch::new("glVertexStream2fvATI")

///|
pub fn gl_vertex_stream2fv_ati(
  stream : UInt,
  coords : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glVertexStream2fvATI
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(stream, coords_p) })
}

///|
let d_glVertexStream2iATI : Dispatch = Dispatch::new("glVertexStream2iATI")

///|
pub fn gl_vertex_stream2i_ati(stream : UInt, x : Int, y : Int) -> Unit {
  let fp : FuncRef[(UInt, Int, Int) -> Unit] = d_glVertexStream2iATI
    .get()
    .unsafe_into()
  fp(stream, x, y)
}

///|
let d_glVertexStream2ivATI : Dispatch = Dispatch::new("glVertexStream2ivATI")

///|
pub fn gl_vertex_stream2iv_ati(stream : UInt, coords : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glVertexStream2ivATI
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(stream, coords_p) })
}

///|
let d_glVertexStream2sATI : Dispatch = Dispatch::new("glVertexStream2sATI")

///|
pub fn gl_vertex_stream2s_ati(stream : UInt, x : Int, y : Int) -> Unit {
  let fp : FuncRef[(UInt, Int, Int) -> Unit] = d_glVertexStream2sATI
    .get()
    .unsafe_into()
  fp(stream, x, y)
}

///|
let d_glVertexStream2svATI : Dispatch = Dispatch::new("glVertexStream2svATI")

///|
pub fn gl_vertex_stream2sv_ati(
  stream : UInt,
  coords : FixedArray[Int16],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int16]) -> Unit] = d_glVertexStream2svATI
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(stream, coords_p) })
}

///|
let d_glVertexStream3dATI : Dispatch = Dispatch::new("glVertexStream3dATI")

///|
pub fn gl_vertex_stream3d_ati(
  stream : UInt,
  x : Double,
  y : Double,
  z : Double,
) -> Unit {
  let fp : FuncRef[(UInt, Double, Double, Double) -> Unit] = d_glVertexStream3dATI
    .get()
    .unsafe_into()
  fp(stream, x, y, z)
}

///|
let d_glVertexStream3dvATI : Dispatch = Dispatch::new("glVertexStream3dvATI")

///|
pub fn gl_vertex_stream3dv_ati(
  stream : UInt,
  coords : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Double]) -> Unit] = d_glVertexStream3dvATI
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(stream, coords_p) })
}

///|
let d_glVertexStream3fATI : Dispatch = Dispatch::new("glVertexStream3fATI")

///|
pub fn gl_vertex_stream3f_ati(
  stream : UInt,
  x : Float,
  y : Float,
  z : Float,
) -> Unit {
  let fp : FuncRef[(UInt, Float, Float, Float) -> Unit] = d_glVertexStream3fATI
    .get()
    .unsafe_into()
  fp(stream, x, y, z)
}

///|
let d_glVertexStream3fvATI : Dispatch = Dispatch::new("glVertexStream3fvATI")

///|
pub fn gl_vertex_stream3fv_ati(
  stream : UInt,
  coords : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glVertexStream3fvATI
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(stream, coords_p) })
}

///|
let d_glVertexStream3iATI : Dispatch = Dispatch::new("glVertexStream3iATI")

///|
pub fn gl_vertex_stream3i_ati(stream : UInt, x : Int, y : Int, z : Int) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int) -> Unit] = d_glVertexStream3iATI
    .get()
    .unsafe_into()
  fp(stream, x, y, z)
}

///|
let d_glVertexStream3ivATI : Dispatch = Dispatch::new("glVertexStream3ivATI")

///|
pub fn gl_vertex_stream3iv_ati(stream : UInt, coords : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glVertexStream3ivATI
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(stream, coords_p) })
}

///|
let d_glVertexStream3sATI : Dispatch = Dispatch::new("glVertexStream3sATI")

///|
pub fn gl_vertex_stream3s_ati(stream : UInt, x : Int, y : Int, z : Int) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int) -> Unit] = d_glVertexStream3sATI
    .get()
    .unsafe_into()
  fp(stream, x, y, z)
}

///|
let d_glVertexStream3svATI : Dispatch = Dispatch::new("glVertexStream3svATI")

///|
pub fn gl_vertex_stream3sv_ati(
  stream : UInt,
  coords : FixedArray[Int16],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int16]) -> Unit] = d_glVertexStream3svATI
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(stream, coords_p) })
}

///|
let d_glVertexStream4dATI : Dispatch = Dispatch::new("glVertexStream4dATI")

///|
pub fn gl_vertex_stream4d_ati(
  stream : UInt,
  x : Double,
  y : Double,
  z : Double,
  w : Double,
) -> Unit {
  let fp : FuncRef[(UInt, Double, Double, Double, Double) -> Unit] = d_glVertexStream4dATI
    .get()
    .unsafe_into()
  fp(stream, x, y, z, w)
}

///|
let d_glVertexStream4dvATI : Dispatch = Dispatch::new("glVertexStream4dvATI")

///|
pub fn gl_vertex_stream4dv_ati(
  stream : UInt,
  coords : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Double]) -> Unit] = d_glVertexStream4dvATI
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(stream, coords_p) })
}

///|
let d_glVertexStream4fATI : Dispatch = Dispatch::new("glVertexStream4fATI")

///|
pub fn gl_vertex_stream4f_ati(
  stream : UInt,
  x : Float,
  y : Float,
  z : Float,
  w : Float,
) -> Unit {
  let fp : FuncRef[(UInt, Float, Float, Float, Float) -> Unit] = d_glVertexStream4fATI
    .get()
    .unsafe_into()
  fp(stream, x, y, z, w)
}

///|
let d_glVertexStream4fvATI : Dispatch = Dispatch::new("glVertexStream4fvATI")

///|
pub fn gl_vertex_stream4fv_ati(
  stream : UInt,
  coords : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glVertexStream4fvATI
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(stream, coords_p) })
}

///|
let d_glVertexStream4iATI : Dispatch = Dispatch::new("glVertexStream4iATI")

///|
pub fn gl_vertex_stream4i_ati(
  stream : UInt,
  x : Int,
  y : Int,
  z : Int,
  w : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int) -> Unit] = d_glVertexStream4iATI
    .get()
    .unsafe_into()
  fp(stream, x, y, z, w)
}

///|
let d_glVertexStream4ivATI : Dispatch = Dispatch::new("glVertexStream4ivATI")

///|
pub fn gl_vertex_stream4iv_ati(stream : UInt, coords : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int]) -> Unit] = d_glVertexStream4ivATI
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(stream, coords_p) })
}

///|
let d_glVertexStream4sATI : Dispatch = Dispatch::new("glVertexStream4sATI")

///|
pub fn gl_vertex_stream4s_ati(
  stream : UInt,
  x : Int,
  y : Int,
  z : Int,
  w : Int,
) -> Unit {
  let fp : FuncRef[(UInt, Int, Int, Int, Int) -> Unit] = d_glVertexStream4sATI
    .get()
    .unsafe_into()
  fp(stream, x, y, z, w)
}

///|
let d_glVertexStream4svATI : Dispatch = Dispatch::new("glVertexStream4svATI")

///|
pub fn gl_vertex_stream4sv_ati(
  stream : UInt,
  coords : FixedArray[Int16],
) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Int16]) -> Unit] = d_glVertexStream4svATI
    .get()
    .unsafe_into()
  @pointer.borrow_array(coords, fn(coords_p) { fp(stream, coords_p) })
}

///|
let d_glVertexWeightPointerEXT : Dispatch = Dispatch::new(
  "glVertexWeightPointerEXT",
)

///|
pub fn gl_vertex_weight_pointer_ext(
  size : Int,
  type_ : UInt,
  stride : Int,
  pointer : Bytes,
) -> Unit {
  let fp : FuncRef[(Int, UInt, Int, @pointer.Pointer[Byte]) -> Unit] = d_glVertexWeightPointerEXT
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(pointer, fn(pointer_p) {
    fp(size, type_, stride, pointer_p)
  })
}

///|
let d_glVertexWeightfEXT : Dispatch = Dispatch::new("glVertexWeightfEXT")

///|
pub fn gl_vertex_weightf_ext(weight : Float) -> Unit {
  let fp : FuncRef[(Float) -> Unit] = d_glVertexWeightfEXT.get().unsafe_into()
  fp(weight)
}

///|
let d_glVertexWeightfvEXT : Dispatch = Dispatch::new("glVertexWeightfvEXT")

///|
pub fn gl_vertex_weightfv_ext(weight : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Float]) -> Unit] = d_glVertexWeightfvEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(weight, fn(weight_p) { fp(weight_p) })
}

///|
let d_glVertexWeighthNV : Dispatch = Dispatch::new("glVertexWeighthNV")

///|
pub fn gl_vertex_weighth_nv(weight : Int) -> Unit {
  let fp : FuncRef[(Int) -> Unit] = d_glVertexWeighthNV.get().unsafe_into()
  fp(weight)
}

///|
let d_glVertexWeighthvNV : Dispatch = Dispatch::new("glVertexWeighthvNV")

///|
pub fn gl_vertex_weighthv_nv(weight : FixedArray[UInt16]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[UInt16]) -> Unit] = d_glVertexWeighthvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(weight, fn(weight_p) { fp(weight_p) })
}

///|
let d_glVideoCaptureNV : Dispatch = Dispatch::new("glVideoCaptureNV")

///|
pub fn gl_video_capture_nv(
  video_capture_slot : UInt,
  sequence_num : FixedArray[UInt],
  capture_time : FixedArray[UInt64],
) -> UInt {
  let fp : FuncRef[
    (UInt, @pointer.Pointer[UInt], @pointer.Pointer[UInt64]) -> UInt,
  ] = d_glVideoCaptureNV.get().unsafe_into()
  @pointer.borrow_array(sequence_num, fn(sequence_num_p) {
    @pointer.borrow_array(capture_time, fn(capture_time_p) {
      fp(video_capture_slot, sequence_num_p, capture_time_p)
    })
  })
}

///|
let d_glVideoCaptureStreamParameterdvNV : Dispatch = Dispatch::new(
  "glVideoCaptureStreamParameterdvNV",
)

///|
pub fn gl_video_capture_stream_parameterdv_nv(
  video_capture_slot : UInt,
  stream : UInt,
  pname : UInt,
  params : FixedArray[Double],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Double]) -> Unit] = d_glVideoCaptureStreamParameterdvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(video_capture_slot, stream, pname, params_p)
  })
}

///|
let d_glVideoCaptureStreamParameterfvNV : Dispatch = Dispatch::new(
  "glVideoCaptureStreamParameterfvNV",
)

///|
pub fn gl_video_capture_stream_parameterfv_nv(
  video_capture_slot : UInt,
  stream : UInt,
  pname : UInt,
  params : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Float]) -> Unit] = d_glVideoCaptureStreamParameterfvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(video_capture_slot, stream, pname, params_p)
  })
}

///|
let d_glVideoCaptureStreamParameterivNV : Dispatch = Dispatch::new(
  "glVideoCaptureStreamParameterivNV",
)

///|
pub fn gl_video_capture_stream_parameteriv_nv(
  video_capture_slot : UInt,
  stream : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glVideoCaptureStreamParameterivNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) {
    fp(video_capture_slot, stream, pname, params_p)
  })
}

///|
let d_glViewport : Dispatch = Dispatch::new("glViewport")

///|
pub fn gl_viewport(x : Int, y : Int, width : Int, height : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int) -> Unit] = d_glViewport
    .get()
    .unsafe_into()
  fp(x, y, width, height)
}

///|
let d_glViewportArrayv : Dispatch = Dispatch::with_aliases("glViewportArrayv", [
  "glViewportArrayvNV", "glViewportArrayvOES",
])

///|
pub fn gl_viewport_arrayv(
  first : UInt,
  count : Int,
  v : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Float]) -> Unit] = d_glViewportArrayv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(first, count, v_p) })
}

///|
let d_glViewportArrayvNV : Dispatch = Dispatch::with_aliases(
  "glViewportArrayvNV",
  ["glViewportArrayv", "glViewportArrayvOES"],
)

///|
pub fn gl_viewport_arrayv_nv(
  first : UInt,
  count : Int,
  v : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Float]) -> Unit] = d_glViewportArrayvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(first, count, v_p) })
}

///|
let d_glViewportArrayvOES : Dispatch = Dispatch::with_aliases(
  "glViewportArrayvOES",
  ["glViewportArrayv", "glViewportArrayvNV"],
)

///|
pub fn gl_viewport_arrayv_oes(
  first : UInt,
  count : Int,
  v : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Float]) -> Unit] = d_glViewportArrayvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(first, count, v_p) })
}

///|
let d_glViewportIndexedf : Dispatch = Dispatch::with_aliases(
  "glViewportIndexedf",
  ["glViewportIndexedfNV", "glViewportIndexedfOES"],
)

///|
pub fn gl_viewport_indexedf(
  index : UInt,
  x : Float,
  y : Float,
  w : Float,
  h : Float,
) -> Unit {
  let fp : FuncRef[(UInt, Float, Float, Float, Float) -> Unit] = d_glViewportIndexedf
    .get()
    .unsafe_into()
  fp(index, x, y, w, h)
}

///|
let d_glViewportIndexedfOES : Dispatch = Dispatch::with_aliases(
  "glViewportIndexedfOES",
  ["glViewportIndexedf", "glViewportIndexedfNV"],
)

///|
pub fn gl_viewport_indexedf_oes(
  index : UInt,
  x : Float,
  y : Float,
  w : Float,
  h : Float,
) -> Unit {
  let fp : FuncRef[(UInt, Float, Float, Float, Float) -> Unit] = d_glViewportIndexedfOES
    .get()
    .unsafe_into()
  fp(index, x, y, w, h)
}

///|
let d_glViewportIndexedfNV : Dispatch = Dispatch::with_aliases(
  "glViewportIndexedfNV",
  ["glViewportIndexedf", "glViewportIndexedfOES"],
)

///|
pub fn gl_viewport_indexedf_nv(
  index : UInt,
  x : Float,
  y : Float,
  w : Float,
  h : Float,
) -> Unit {
  let fp : FuncRef[(UInt, Float, Float, Float, Float) -> Unit] = d_glViewportIndexedfNV
    .get()
    .unsafe_into()
  fp(index, x, y, w, h)
}

///|
let d_glViewportIndexedfv : Dispatch = Dispatch::with_aliases(
  "glViewportIndexedfv",
  ["glViewportIndexedfvNV", "glViewportIndexedfvOES"],
)

///|
pub fn gl_viewport_indexedfv(index : UInt, v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glViewportIndexedfv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glViewportIndexedfvOES : Dispatch = Dispatch::with_aliases(
  "glViewportIndexedfvOES",
  ["glViewportIndexedfv", "glViewportIndexedfvNV"],
)

///|
pub fn gl_viewport_indexedfv_oes(index : UInt, v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glViewportIndexedfvOES
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glViewportIndexedfvNV : Dispatch = Dispatch::with_aliases(
  "glViewportIndexedfvNV",
  ["glViewportIndexedfv", "glViewportIndexedfvOES"],
)

///|
pub fn gl_viewport_indexedfv_nv(index : UInt, v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(UInt, @pointer.Pointer[Float]) -> Unit] = d_glViewportIndexedfvNV
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(index, v_p) })
}

///|
let d_glViewportPositionWScaleNV : Dispatch = Dispatch::new(
  "glViewportPositionWScaleNV",
)

///|
pub fn gl_viewport_position_w_scale_nv(
  index : UInt,
  xcoeff : Float,
  ycoeff : Float,
) -> Unit {
  let fp : FuncRef[(UInt, Float, Float) -> Unit] = d_glViewportPositionWScaleNV
    .get()
    .unsafe_into()
  fp(index, xcoeff, ycoeff)
}

///|
let d_glViewportSwizzleNV : Dispatch = Dispatch::new("glViewportSwizzleNV")

///|
pub fn gl_viewport_swizzle_nv(
  index : UInt,
  swizzlex : UInt,
  swizzley : UInt,
  swizzlez : UInt,
  swizzlew : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, UInt) -> Unit] = d_glViewportSwizzleNV
    .get()
    .unsafe_into()
  fp(index, swizzlex, swizzley, swizzlez, swizzlew)
}

///|
let d_glWaitSemaphoreEXT : Dispatch = Dispatch::new("glWaitSemaphoreEXT")

///|
pub fn gl_wait_semaphore_ext(
  semaphore : UInt,
  numBufferBarriers : UInt,
  buffers : FixedArray[UInt],
  numTextureBarriers : UInt,
  textures : FixedArray[UInt],
  srcLayouts : FixedArray[UInt],
) -> Unit {
  let fp : FuncRef[
    (
      UInt,
      UInt,
      @pointer.Pointer[UInt],
      UInt,
      @pointer.Pointer[UInt],
      @pointer.Pointer[UInt],
    ) -> Unit,
  ] = d_glWaitSemaphoreEXT.get().unsafe_into()
  @pointer.borrow_array(buffers, fn(buffers_p) {
    @pointer.borrow_array(textures, fn(textures_p) {
      @pointer.borrow_array(srcLayouts, fn(srcLayouts_p) {
        fp(
          semaphore, numBufferBarriers, buffers_p, numTextureBarriers, textures_p,
          srcLayouts_p,
        )
      })
    })
  })
}

///|
let d_glWaitSemaphoreui64NVX : Dispatch = Dispatch::new(
  "glWaitSemaphoreui64NVX",
)

///|
pub fn gl_wait_semaphoreui64_nvx(
  waitGpu : UInt,
  fenceObjectCount : Int,
  semaphoreArray : FixedArray[UInt],
  fenceValueArray : FixedArray[UInt64],
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, @pointer.Pointer[UInt], @pointer.Pointer[UInt64]) -> Unit,
  ] = d_glWaitSemaphoreui64NVX.get().unsafe_into()
  @pointer.borrow_array(semaphoreArray, fn(semaphoreArray_p) {
    @pointer.borrow_array(fenceValueArray, fn(fenceValueArray_p) {
      fp(waitGpu, fenceObjectCount, semaphoreArray_p, fenceValueArray_p)
    })
  })
}

///|
let d_glWaitSync : Dispatch = Dispatch::with_aliases("glWaitSync", [
  "glWaitSyncAPPLE",
])

///|
pub fn gl_wait_sync(sync : GLsync, flags : UInt, timeout : UInt64) -> Unit {
  let fp : FuncRef[(GLsync, UInt, UInt64) -> Unit] = d_glWaitSync
    .get()
    .unsafe_into()
  fp(sync, flags, timeout)
}

///|
let d_glWaitSyncAPPLE : Dispatch = Dispatch::with_aliases("glWaitSyncAPPLE", [
  "glWaitSync",
])

///|
pub fn gl_wait_sync_apple(
  sync : GLsync,
  flags : UInt,
  timeout : UInt64,
) -> Unit {
  let fp : FuncRef[(GLsync, UInt, UInt64) -> Unit] = d_glWaitSyncAPPLE
    .get()
    .unsafe_into()
  fp(sync, flags, timeout)
}

///|
let d_glWeightPathsNV : Dispatch = Dispatch::new("glWeightPathsNV")

///|
pub fn gl_weight_paths_nv(
  resultPath : UInt,
  numPaths : Int,
  paths : FixedArray[UInt],
  weights : FixedArray[Float],
) -> Unit {
  let fp : FuncRef[
    (UInt, Int, @pointer.Pointer[UInt], @pointer.Pointer[Float]) -> Unit,
  ] = d_glWeightPathsNV.get().unsafe_into()
  @pointer.borrow_array(paths, fn(paths_p) {
    @pointer.borrow_array(weights, fn(weights_p) {
      fp(resultPath, numPaths, paths_p, weights_p)
    })
  })
}

///|
let d_glWeightPointerARB : Dispatch = Dispatch::new("glWeightPointerARB")

///|
/// Configure a vertex array from the buffer currently bound to `GL_ARRAY_BUFFER`.
/// `offset` is a byte offset; client-side arrays are not accepted.
pub fn gl_weight_pointer_arb(
  size : Int,
  type_ : UInt,
  stride : Int,
  offset : Int64,
) -> Unit {
  let fp : FuncRef[(Int, UInt, Int, @pointer.Pointer[Unit]) -> Unit] = d_glWeightPointerARB
    .get()
    .unsafe_into()
  fp(size, type_, stride, @pointer.Pointer::unsafe_from_int64(offset))
}

///|
let d_glWeightPointerOES : Dispatch = Dispatch::new("glWeightPointerOES")

///|
/// Configure a vertex array from the buffer currently bound to `GL_ARRAY_BUFFER`.
/// `offset` is a byte offset; client-side arrays are not accepted.
pub fn gl_weight_pointer_oes(
  size : Int,
  type_ : UInt,
  stride : Int,
  offset : Int64,
) -> Unit {
  let fp : FuncRef[(Int, UInt, Int, @pointer.Pointer[Unit]) -> Unit] = d_glWeightPointerOES
    .get()
    .unsafe_into()
  fp(size, type_, stride, @pointer.Pointer::unsafe_from_int64(offset))
}

///|
let d_glWeightbvARB : Dispatch = Dispatch::new("glWeightbvARB")

///|
pub fn gl_weightbv_arb(size : Int, weights : Bytes) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[Byte]) -> Unit] = d_glWeightbvARB
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(weights, fn(weights_p) { fp(size, weights_p) })
}

///|
let d_glWeightdvARB : Dispatch = Dispatch::new("glWeightdvARB")

///|
pub fn gl_weightdv_arb(size : Int, weights : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[Double]) -> Unit] = d_glWeightdvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(weights, fn(weights_p) { fp(size, weights_p) })
}

///|
let d_glWeightfvARB : Dispatch = Dispatch::new("glWeightfvARB")

///|
pub fn gl_weightfv_arb(size : Int, weights : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[Float]) -> Unit] = d_glWeightfvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(weights, fn(weights_p) { fp(size, weights_p) })
}

///|
let d_glWeightivARB : Dispatch = Dispatch::new("glWeightivARB")

///|
pub fn gl_weightiv_arb(size : Int, weights : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[Int]) -> Unit] = d_glWeightivARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(weights, fn(weights_p) { fp(size, weights_p) })
}

///|
let d_glWeightsvARB : Dispatch = Dispatch::new("glWeightsvARB")

///|
pub fn gl_weightsv_arb(size : Int, weights : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[Int16]) -> Unit] = d_glWeightsvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(weights, fn(weights_p) { fp(size, weights_p) })
}

///|
let d_glWeightubvARB : Dispatch = Dispatch::new("glWeightubvARB")

///|
pub fn gl_weightubv_arb(size : Int, weights : Bytes) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[Byte]) -> Unit] = d_glWeightubvARB
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(weights, fn(weights_p) { fp(size, weights_p) })
}

///|
let d_glWeightuivARB : Dispatch = Dispatch::new("glWeightuivARB")

///|
pub fn gl_weightuiv_arb(size : Int, weights : FixedArray[UInt]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt]) -> Unit] = d_glWeightuivARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(weights, fn(weights_p) { fp(size, weights_p) })
}

///|
let d_glWeightusvARB : Dispatch = Dispatch::new("glWeightusvARB")

///|
pub fn gl_weightusv_arb(size : Int, weights : FixedArray[UInt16]) -> Unit {
  let fp : FuncRef[(Int, @pointer.Pointer[UInt16]) -> Unit] = d_glWeightusvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(weights, fn(weights_p) { fp(size, weights_p) })
}

///|
let d_glWindowPos2d : Dispatch = Dispatch::with_aliases("glWindowPos2d", [
  "glWindowPos2dARB", "glWindowPos2dMESA",
])

///|
pub fn gl_window_pos2d(x : Double, y : Double) -> Unit {
  let fp : FuncRef[(Double, Double) -> Unit] = d_glWindowPos2d
    .get()
    .unsafe_into()
  fp(x, y)
}

///|
let d_glWindowPos2dARB : Dispatch = Dispatch::with_aliases("glWindowPos2dARB", [
  "glWindowPos2d", "glWindowPos2dMESA",
])

///|
pub fn gl_window_pos2d_arb(x : Double, y : Double) -> Unit {
  let fp : FuncRef[(Double, Double) -> Unit] = d_glWindowPos2dARB
    .get()
    .unsafe_into()
  fp(x, y)
}

///|
let d_glWindowPos2dMESA : Dispatch = Dispatch::with_aliases(
  "glWindowPos2dMESA",
  ["glWindowPos2d", "glWindowPos2dARB"],
)

///|
pub fn gl_window_pos2d_mesa(x : Double, y : Double) -> Unit {
  let fp : FuncRef[(Double, Double) -> Unit] = d_glWindowPos2dMESA
    .get()
    .unsafe_into()
  fp(x, y)
}

///|
let d_glWindowPos2dv : Dispatch = Dispatch::with_aliases("glWindowPos2dv", [
  "glWindowPos2dvARB", "glWindowPos2dvMESA",
])

///|
pub fn gl_window_pos2dv(v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Double]) -> Unit] = d_glWindowPos2dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glWindowPos2dvARB : Dispatch = Dispatch::with_aliases(
  "glWindowPos2dvARB",
  ["glWindowPos2dv", "glWindowPos2dvMESA"],
)

///|
pub fn gl_window_pos2dv_arb(v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Double]) -> Unit] = d_glWindowPos2dvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glWindowPos2dvMESA : Dispatch = Dispatch::with_aliases(
  "glWindowPos2dvMESA",
  ["glWindowPos2dv", "glWindowPos2dvARB"],
)

///|
pub fn gl_window_pos2dv_mesa(v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Double]) -> Unit] = d_glWindowPos2dvMESA
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glWindowPos2f : Dispatch = Dispatch::with_aliases("glWindowPos2f", [
  "glWindowPos2fARB", "glWindowPos2fMESA",
])

///|
pub fn gl_window_pos2f(x : Float, y : Float) -> Unit {
  let fp : FuncRef[(Float, Float) -> Unit] = d_glWindowPos2f.get().unsafe_into()
  fp(x, y)
}

///|
let d_glWindowPos2fARB : Dispatch = Dispatch::with_aliases("glWindowPos2fARB", [
  "glWindowPos2f", "glWindowPos2fMESA",
])

///|
pub fn gl_window_pos2f_arb(x : Float, y : Float) -> Unit {
  let fp : FuncRef[(Float, Float) -> Unit] = d_glWindowPos2fARB
    .get()
    .unsafe_into()
  fp(x, y)
}

///|
let d_glWindowPos2fMESA : Dispatch = Dispatch::with_aliases(
  "glWindowPos2fMESA",
  ["glWindowPos2f", "glWindowPos2fARB"],
)

///|
pub fn gl_window_pos2f_mesa(x : Float, y : Float) -> Unit {
  let fp : FuncRef[(Float, Float) -> Unit] = d_glWindowPos2fMESA
    .get()
    .unsafe_into()
  fp(x, y)
}

///|
let d_glWindowPos2fv : Dispatch = Dispatch::with_aliases("glWindowPos2fv", [
  "glWindowPos2fvARB", "glWindowPos2fvMESA",
])

///|
pub fn gl_window_pos2fv(v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Float]) -> Unit] = d_glWindowPos2fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glWindowPos2fvARB : Dispatch = Dispatch::with_aliases(
  "glWindowPos2fvARB",
  ["glWindowPos2fv", "glWindowPos2fvMESA"],
)

///|
pub fn gl_window_pos2fv_arb(v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Float]) -> Unit] = d_glWindowPos2fvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glWindowPos2fvMESA : Dispatch = Dispatch::with_aliases(
  "glWindowPos2fvMESA",
  ["glWindowPos2fv", "glWindowPos2fvARB"],
)

///|
pub fn gl_window_pos2fv_mesa(v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Float]) -> Unit] = d_glWindowPos2fvMESA
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glWindowPos2i : Dispatch = Dispatch::with_aliases("glWindowPos2i", [
  "glWindowPos2iARB", "glWindowPos2iMESA",
])

///|
pub fn gl_window_pos2i(x : Int, y : Int) -> Unit {
  let fp : FuncRef[(Int, Int) -> Unit] = d_glWindowPos2i.get().unsafe_into()
  fp(x, y)
}

///|
let d_glWindowPos2iARB : Dispatch = Dispatch::with_aliases("glWindowPos2iARB", [
  "glWindowPos2i", "glWindowPos2iMESA",
])

///|
pub fn gl_window_pos2i_arb(x : Int, y : Int) -> Unit {
  let fp : FuncRef[(Int, Int) -> Unit] = d_glWindowPos2iARB.get().unsafe_into()
  fp(x, y)
}

///|
let d_glWindowPos2iMESA : Dispatch = Dispatch::with_aliases(
  "glWindowPos2iMESA",
  ["glWindowPos2i", "glWindowPos2iARB"],
)

///|
pub fn gl_window_pos2i_mesa(x : Int, y : Int) -> Unit {
  let fp : FuncRef[(Int, Int) -> Unit] = d_glWindowPos2iMESA.get().unsafe_into()
  fp(x, y)
}

///|
let d_glWindowPos2iv : Dispatch = Dispatch::with_aliases("glWindowPos2iv", [
  "glWindowPos2ivARB", "glWindowPos2ivMESA",
])

///|
pub fn gl_window_pos2iv(v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glWindowPos2iv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glWindowPos2ivARB : Dispatch = Dispatch::with_aliases(
  "glWindowPos2ivARB",
  ["glWindowPos2iv", "glWindowPos2ivMESA"],
)

///|
pub fn gl_window_pos2iv_arb(v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glWindowPos2ivARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glWindowPos2ivMESA : Dispatch = Dispatch::with_aliases(
  "glWindowPos2ivMESA",
  ["glWindowPos2iv", "glWindowPos2ivARB"],
)

///|
pub fn gl_window_pos2iv_mesa(v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glWindowPos2ivMESA
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glWindowPos2s : Dispatch = Dispatch::with_aliases("glWindowPos2s", [
  "glWindowPos2sARB", "glWindowPos2sMESA",
])

///|
pub fn gl_window_pos2s(x : Int, y : Int) -> Unit {
  let fp : FuncRef[(Int, Int) -> Unit] = d_glWindowPos2s.get().unsafe_into()
  fp(x, y)
}

///|
let d_glWindowPos2sARB : Dispatch = Dispatch::with_aliases("glWindowPos2sARB", [
  "glWindowPos2s", "glWindowPos2sMESA",
])

///|
pub fn gl_window_pos2s_arb(x : Int, y : Int) -> Unit {
  let fp : FuncRef[(Int, Int) -> Unit] = d_glWindowPos2sARB.get().unsafe_into()
  fp(x, y)
}

///|
let d_glWindowPos2sMESA : Dispatch = Dispatch::with_aliases(
  "glWindowPos2sMESA",
  ["glWindowPos2s", "glWindowPos2sARB"],
)

///|
pub fn gl_window_pos2s_mesa(x : Int, y : Int) -> Unit {
  let fp : FuncRef[(Int, Int) -> Unit] = d_glWindowPos2sMESA.get().unsafe_into()
  fp(x, y)
}

///|
let d_glWindowPos2sv : Dispatch = Dispatch::with_aliases("glWindowPos2sv", [
  "glWindowPos2svARB", "glWindowPos2svMESA",
])

///|
pub fn gl_window_pos2sv(v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int16]) -> Unit] = d_glWindowPos2sv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glWindowPos2svARB : Dispatch = Dispatch::with_aliases(
  "glWindowPos2svARB",
  ["glWindowPos2sv", "glWindowPos2svMESA"],
)

///|
pub fn gl_window_pos2sv_arb(v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int16]) -> Unit] = d_glWindowPos2svARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glWindowPos2svMESA : Dispatch = Dispatch::with_aliases(
  "glWindowPos2svMESA",
  ["glWindowPos2sv", "glWindowPos2svARB"],
)

///|
pub fn gl_window_pos2sv_mesa(v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int16]) -> Unit] = d_glWindowPos2svMESA
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glWindowPos3d : Dispatch = Dispatch::with_aliases("glWindowPos3d", [
  "glWindowPos3dARB", "glWindowPos3dMESA",
])

///|
pub fn gl_window_pos3d(x : Double, y : Double, z : Double) -> Unit {
  let fp : FuncRef[(Double, Double, Double) -> Unit] = d_glWindowPos3d
    .get()
    .unsafe_into()
  fp(x, y, z)
}

///|
let d_glWindowPos3dARB : Dispatch = Dispatch::with_aliases("glWindowPos3dARB", [
  "glWindowPos3d", "glWindowPos3dMESA",
])

///|
pub fn gl_window_pos3d_arb(x : Double, y : Double, z : Double) -> Unit {
  let fp : FuncRef[(Double, Double, Double) -> Unit] = d_glWindowPos3dARB
    .get()
    .unsafe_into()
  fp(x, y, z)
}

///|
let d_glWindowPos3dMESA : Dispatch = Dispatch::with_aliases(
  "glWindowPos3dMESA",
  ["glWindowPos3d", "glWindowPos3dARB"],
)

///|
pub fn gl_window_pos3d_mesa(x : Double, y : Double, z : Double) -> Unit {
  let fp : FuncRef[(Double, Double, Double) -> Unit] = d_glWindowPos3dMESA
    .get()
    .unsafe_into()
  fp(x, y, z)
}

///|
let d_glWindowPos3dv : Dispatch = Dispatch::with_aliases("glWindowPos3dv", [
  "glWindowPos3dvARB", "glWindowPos3dvMESA",
])

///|
pub fn gl_window_pos3dv(v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Double]) -> Unit] = d_glWindowPos3dv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glWindowPos3dvARB : Dispatch = Dispatch::with_aliases(
  "glWindowPos3dvARB",
  ["glWindowPos3dv", "glWindowPos3dvMESA"],
)

///|
pub fn gl_window_pos3dv_arb(v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Double]) -> Unit] = d_glWindowPos3dvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glWindowPos3dvMESA : Dispatch = Dispatch::with_aliases(
  "glWindowPos3dvMESA",
  ["glWindowPos3dv", "glWindowPos3dvARB"],
)

///|
pub fn gl_window_pos3dv_mesa(v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Double]) -> Unit] = d_glWindowPos3dvMESA
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glWindowPos3f : Dispatch = Dispatch::with_aliases("glWindowPos3f", [
  "glWindowPos3fARB", "glWindowPos3fMESA",
])

///|
pub fn gl_window_pos3f(x : Float, y : Float, z : Float) -> Unit {
  let fp : FuncRef[(Float, Float, Float) -> Unit] = d_glWindowPos3f
    .get()
    .unsafe_into()
  fp(x, y, z)
}

///|
let d_glWindowPos3fARB : Dispatch = Dispatch::with_aliases("glWindowPos3fARB", [
  "glWindowPos3f", "glWindowPos3fMESA",
])

///|
pub fn gl_window_pos3f_arb(x : Float, y : Float, z : Float) -> Unit {
  let fp : FuncRef[(Float, Float, Float) -> Unit] = d_glWindowPos3fARB
    .get()
    .unsafe_into()
  fp(x, y, z)
}

///|
let d_glWindowPos3fMESA : Dispatch = Dispatch::with_aliases(
  "glWindowPos3fMESA",
  ["glWindowPos3f", "glWindowPos3fARB"],
)

///|
pub fn gl_window_pos3f_mesa(x : Float, y : Float, z : Float) -> Unit {
  let fp : FuncRef[(Float, Float, Float) -> Unit] = d_glWindowPos3fMESA
    .get()
    .unsafe_into()
  fp(x, y, z)
}

///|
let d_glWindowPos3fv : Dispatch = Dispatch::with_aliases("glWindowPos3fv", [
  "glWindowPos3fvARB", "glWindowPos3fvMESA",
])

///|
pub fn gl_window_pos3fv(v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Float]) -> Unit] = d_glWindowPos3fv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glWindowPos3fvARB : Dispatch = Dispatch::with_aliases(
  "glWindowPos3fvARB",
  ["glWindowPos3fv", "glWindowPos3fvMESA"],
)

///|
pub fn gl_window_pos3fv_arb(v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Float]) -> Unit] = d_glWindowPos3fvARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glWindowPos3fvMESA : Dispatch = Dispatch::with_aliases(
  "glWindowPos3fvMESA",
  ["glWindowPos3fv", "glWindowPos3fvARB"],
)

///|
pub fn gl_window_pos3fv_mesa(v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Float]) -> Unit] = d_glWindowPos3fvMESA
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glWindowPos3i : Dispatch = Dispatch::with_aliases("glWindowPos3i", [
  "glWindowPos3iARB", "glWindowPos3iMESA",
])

///|
pub fn gl_window_pos3i(x : Int, y : Int, z : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glWindowPos3i
    .get()
    .unsafe_into()
  fp(x, y, z)
}

///|
let d_glWindowPos3iARB : Dispatch = Dispatch::with_aliases("glWindowPos3iARB", [
  "glWindowPos3i", "glWindowPos3iMESA",
])

///|
pub fn gl_window_pos3i_arb(x : Int, y : Int, z : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glWindowPos3iARB
    .get()
    .unsafe_into()
  fp(x, y, z)
}

///|
let d_glWindowPos3iMESA : Dispatch = Dispatch::with_aliases(
  "glWindowPos3iMESA",
  ["glWindowPos3i", "glWindowPos3iARB"],
)

///|
pub fn gl_window_pos3i_mesa(x : Int, y : Int, z : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glWindowPos3iMESA
    .get()
    .unsafe_into()
  fp(x, y, z)
}

///|
let d_glWindowPos3iv : Dispatch = Dispatch::with_aliases("glWindowPos3iv", [
  "glWindowPos3ivARB", "glWindowPos3ivMESA",
])

///|
pub fn gl_window_pos3iv(v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glWindowPos3iv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glWindowPos3ivARB : Dispatch = Dispatch::with_aliases(
  "glWindowPos3ivARB",
  ["glWindowPos3iv", "glWindowPos3ivMESA"],
)

///|
pub fn gl_window_pos3iv_arb(v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glWindowPos3ivARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glWindowPos3ivMESA : Dispatch = Dispatch::with_aliases(
  "glWindowPos3ivMESA",
  ["glWindowPos3iv", "glWindowPos3ivARB"],
)

///|
pub fn gl_window_pos3iv_mesa(v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glWindowPos3ivMESA
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glWindowPos3s : Dispatch = Dispatch::with_aliases("glWindowPos3s", [
  "glWindowPos3sARB", "glWindowPos3sMESA",
])

///|
pub fn gl_window_pos3s(x : Int, y : Int, z : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glWindowPos3s
    .get()
    .unsafe_into()
  fp(x, y, z)
}

///|
let d_glWindowPos3sARB : Dispatch = Dispatch::with_aliases("glWindowPos3sARB", [
  "glWindowPos3s", "glWindowPos3sMESA",
])

///|
pub fn gl_window_pos3s_arb(x : Int, y : Int, z : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glWindowPos3sARB
    .get()
    .unsafe_into()
  fp(x, y, z)
}

///|
let d_glWindowPos3sMESA : Dispatch = Dispatch::with_aliases(
  "glWindowPos3sMESA",
  ["glWindowPos3s", "glWindowPos3sARB"],
)

///|
pub fn gl_window_pos3s_mesa(x : Int, y : Int, z : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int) -> Unit] = d_glWindowPos3sMESA
    .get()
    .unsafe_into()
  fp(x, y, z)
}

///|
let d_glWindowPos3sv : Dispatch = Dispatch::with_aliases("glWindowPos3sv", [
  "glWindowPos3svARB", "glWindowPos3svMESA",
])

///|
pub fn gl_window_pos3sv(v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int16]) -> Unit] = d_glWindowPos3sv
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glWindowPos3svARB : Dispatch = Dispatch::with_aliases(
  "glWindowPos3svARB",
  ["glWindowPos3sv", "glWindowPos3svMESA"],
)

///|
pub fn gl_window_pos3sv_arb(v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int16]) -> Unit] = d_glWindowPos3svARB
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glWindowPos3svMESA : Dispatch = Dispatch::with_aliases(
  "glWindowPos3svMESA",
  ["glWindowPos3sv", "glWindowPos3svARB"],
)

///|
pub fn gl_window_pos3sv_mesa(v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int16]) -> Unit] = d_glWindowPos3svMESA
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glWindowPos4dMESA : Dispatch = Dispatch::new("glWindowPos4dMESA")

///|
pub fn gl_window_pos4d_mesa(
  x : Double,
  y : Double,
  z : Double,
  w : Double,
) -> Unit {
  let fp : FuncRef[(Double, Double, Double, Double) -> Unit] = d_glWindowPos4dMESA
    .get()
    .unsafe_into()
  fp(x, y, z, w)
}

///|
let d_glWindowPos4dvMESA : Dispatch = Dispatch::new("glWindowPos4dvMESA")

///|
pub fn gl_window_pos4dv_mesa(v : FixedArray[Double]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Double]) -> Unit] = d_glWindowPos4dvMESA
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glWindowPos4fMESA : Dispatch = Dispatch::new("glWindowPos4fMESA")

///|
pub fn gl_window_pos4f_mesa(x : Float, y : Float, z : Float, w : Float) -> Unit {
  let fp : FuncRef[(Float, Float, Float, Float) -> Unit] = d_glWindowPos4fMESA
    .get()
    .unsafe_into()
  fp(x, y, z, w)
}

///|
let d_glWindowPos4fvMESA : Dispatch = Dispatch::new("glWindowPos4fvMESA")

///|
pub fn gl_window_pos4fv_mesa(v : FixedArray[Float]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Float]) -> Unit] = d_glWindowPos4fvMESA
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glWindowPos4iMESA : Dispatch = Dispatch::new("glWindowPos4iMESA")

///|
pub fn gl_window_pos4i_mesa(x : Int, y : Int, z : Int, w : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int) -> Unit] = d_glWindowPos4iMESA
    .get()
    .unsafe_into()
  fp(x, y, z, w)
}

///|
let d_glWindowPos4ivMESA : Dispatch = Dispatch::new("glWindowPos4ivMESA")

///|
pub fn gl_window_pos4iv_mesa(v : FixedArray[Int]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int]) -> Unit] = d_glWindowPos4ivMESA
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glWindowPos4sMESA : Dispatch = Dispatch::new("glWindowPos4sMESA")

///|
pub fn gl_window_pos4s_mesa(x : Int, y : Int, z : Int, w : Int) -> Unit {
  let fp : FuncRef[(Int, Int, Int, Int) -> Unit] = d_glWindowPos4sMESA
    .get()
    .unsafe_into()
  fp(x, y, z, w)
}

///|
let d_glWindowPos4svMESA : Dispatch = Dispatch::new("glWindowPos4svMESA")

///|
pub fn gl_window_pos4sv_mesa(v : FixedArray[Int16]) -> Unit {
  let fp : FuncRef[(@pointer.Pointer[Int16]) -> Unit] = d_glWindowPos4svMESA
    .get()
    .unsafe_into()
  @pointer.borrow_array(v, fn(v_p) { fp(v_p) })
}

///|
let d_glWindowRectanglesEXT : Dispatch = Dispatch::new("glWindowRectanglesEXT")

///|
pub fn gl_window_rectangles_ext(
  mode : UInt,
  count : Int,
  box : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, Int, @pointer.Pointer[Int]) -> Unit] = d_glWindowRectanglesEXT
    .get()
    .unsafe_into()
  @pointer.borrow_array(box, fn(box_p) { fp(mode, count, box_p) })
}

///|
let d_glWriteMaskEXT : Dispatch = Dispatch::new("glWriteMaskEXT")

///|
pub fn gl_write_mask_ext(
  res : UInt,
  in_ : UInt,
  outX : UInt,
  outY : UInt,
  outZ : UInt,
  outW : UInt,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, UInt, UInt, UInt, UInt) -> Unit] = d_glWriteMaskEXT
    .get()
    .unsafe_into()
  fp(res, in_, outX, outY, outZ, outW)
}

///|
let d_glDrawVkImageNV : Dispatch = Dispatch::new("glDrawVkImageNV")

///|
pub fn gl_draw_vk_image_nv(
  vkImage : UInt64,
  sampler : UInt,
  x0 : Float,
  y0 : Float,
  x1 : Float,
  y1 : Float,
  z : Float,
  s0 : Float,
  t0 : Float,
  s1 : Float,
  t1 : Float,
) -> Unit {
  let fp : FuncRef[
    (
      UInt64,
      UInt,
      Float,
      Float,
      Float,
      Float,
      Float,
      Float,
      Float,
      Float,
      Float,
    ) -> Unit,
  ] = d_glDrawVkImageNV.get().unsafe_into()
  fp(vkImage, sampler, x0, y0, x1, y1, z, s0, t0, s1, t1)
}

///|
let d_glGetVkProcAddrNV : Dispatch = Dispatch::new("glGetVkProcAddrNV")

///|
pub fn gl_get_vk_proc_addr_nv(name : Bytes) -> GLVULKANPROCNV {
  let fp : FuncRef[(@pointer.Pointer[Byte]) -> GLVULKANPROCNV] = d_glGetVkProcAddrNV
    .get()
    .unsafe_into()
  @pointer.borrow_bytes(name, fn(name_p) { fp(name_p) })
}

///|
let d_glWaitVkSemaphoreNV : Dispatch = Dispatch::new("glWaitVkSemaphoreNV")

///|
pub fn gl_wait_vk_semaphore_nv(vkSemaphore : UInt64) -> Unit {
  let fp : FuncRef[(UInt64) -> Unit] = d_glWaitVkSemaphoreNV.get().unsafe_into()
  fp(vkSemaphore)
}

///|
let d_glSignalVkSemaphoreNV : Dispatch = Dispatch::new("glSignalVkSemaphoreNV")

///|
pub fn gl_signal_vk_semaphore_nv(vkSemaphore : UInt64) -> Unit {
  let fp : FuncRef[(UInt64) -> Unit] = d_glSignalVkSemaphoreNV
    .get()
    .unsafe_into()
  fp(vkSemaphore)
}

///|
let d_glSignalVkFenceNV : Dispatch = Dispatch::new("glSignalVkFenceNV")

///|
pub fn gl_signal_vk_fence_nv(vkFence : UInt64) -> Unit {
  let fp : FuncRef[(UInt64) -> Unit] = d_glSignalVkFenceNV.get().unsafe_into()
  fp(vkFence)
}

///|
let d_glFramebufferParameteriMESA : Dispatch = Dispatch::new(
  "glFramebufferParameteriMESA",
)

///|
pub fn gl_framebuffer_parameteri_mesa(
  target : UInt,
  pname : UInt,
  param : Int,
) -> Unit {
  let fp : FuncRef[(UInt, UInt, Int) -> Unit] = d_glFramebufferParameteriMESA
    .get()
    .unsafe_into()
  fp(target, pname, param)
}

///|
let d_glGetFramebufferParameterivMESA : Dispatch = Dispatch::new(
  "glGetFramebufferParameterivMESA",
)

///|
pub fn gl_get_framebuffer_parameteriv_mesa(
  target : UInt,
  pname : UInt,
  params : FixedArray[Int],
) -> Unit {
  let fp : FuncRef[(UInt, UInt, @pointer.Pointer[Int]) -> Unit] = d_glGetFramebufferParameterivMESA
    .get()
    .unsafe_into()
  @pointer.borrow_array(params, fn(params_p) { fp(target, pname, params_p) })
}