sig
  type client_state =
      GL_COLOR_ARRAY
    | GL_EDGE_FLAG_ARRAY
    | GL_FOG_COORD_ARRAY
    | GL_INDEX_ARRAY
    | GL_NORMAL_ARRAY
    | GL_SECONDARY_COLOR_ARRAY
    | GL_TEXTURE_COORD_ARRAY
    | GL_VERTEX_ARRAY
  external glEnableClientState : client_state:VertArray.client_state -> unit
    = "ml_glenableclientstate"
  external glDisableClientState : client_state:VertArray.client_state -> unit
    = "ml_gldisableclientstate"
  external glDrawArrays : mode:GL.primitive -> first:int -> count:int -> unit
    = "ml_gldrawarrays"
  external glMultiDrawArrays : mode:int -> arr:(int * int) array -> unit
    = "ml_glmultidrawarrays"
  external glArrayElement : i:int -> unit = "ml_glarrayelement"
  module Elem :
    sig
      type elem_data_type =
          GL_UNSIGNED_BYTE
        | GL_UNSIGNED_SHORT
        | GL_UNSIGNED_INT
    end
  external glDrawElements :
    mode:GL.primitive ->
    count:int ->
    data_type:VertArray.Elem.elem_data_type ->
    data:('a, 'b, Bigarray.c_layout) Bigarray.Array1.t -> unit
    = "ml_gldrawelements"
  external glDrawRangeElements :
    mode:GL.primitive ->
    start:int ->
    end_:int ->
    count:int ->
    data_type:VertArray.Elem.elem_data_type ->
    data:('a, 'b, Bigarray.c_layout) Bigarray.Array1.t -> unit
    = "ml_gldrawrangeelements_bytecode" "ml_gldrawrangeelements_native"
  type interleaved_format =
      GL_V2F
    | GL_V3F
    | GL_C4UB_V2F
    | GL_C4UB_V3F
    | GL_C3F_V3F
    | GL_N3F_V3F
    | GL_C4F_N3F_V3F
    | GL_T2F_V3F
    | GL_T4F_V4F
    | GL_T2F_C4UB_V3F
    | GL_T2F_C3F_V3F
    | GL_T2F_N3F_V3F
    | GL_T2F_C4F_N3F_V3F
    | GL_T4F_C4F_N3F_V4F
  external glInterleavedArrays :
    fmt:VertArray.interleaved_format ->
    stride:int ->
    pointer:('a, 'b, Bigarray.c_layout) Bigarray.Array1.t -> unit
    = "ml_glinterleavedarrays"
  module Coord :
    sig type coord_data_type = GL_SHORT | GL_INT | GL_FLOAT | GL_DOUBLE end
  external glVertexPointer :
    size:int ->
    data_type:VertArray.Coord.coord_data_type ->
    stride:int -> data:('a, 'b, Bigarray.c_layout) Bigarray.Array1.t -> unit
    = "ml_glvertexpointer"
  external glTexCoordPointer :
    size:int ->
    data_type:VertArray.Coord.coord_data_type ->
    stride:int -> data:('a, 'b, Bigarray.c_layout) Bigarray.Array1.t -> unit
    = "ml_gltexcoordpointer"
  module Norm :
    sig
      type norm_data_type =
          GL_BYTE
        | GL_SHORT
        | GL_INT
        | GL_FLOAT
        | GL_DOUBLE
    end
  external glNormalPointer :
    data_type:VertArray.Norm.norm_data_type ->
    stride:int -> data:('a, 'b, Bigarray.c_layout) Bigarray.Array1.t -> unit
    = "ml_glnormalpointer"
  module Index :
    sig
      type index_data_type =
          GL_UNSIGNED_BYTE
        | GL_SHORT
        | GL_INT
        | GL_FLOAT
        | GL_DOUBLE
    end
  external glIndexPointer :
    data_type:VertArray.Index.index_data_type ->
    stride:int -> data:('a, 'b, Bigarray.c_layout) Bigarray.Array1.t -> unit
    = "ml_glindexpointer"
  module Color :
    sig
      type color_data_type =
          GL_BYTE
        | GL_UNSIGNED_BYTE
        | GL_SHORT
        | GL_UNSIGNED_SHORT
        | GL_INT
        | GL_UNSIGNED_INT
        | GL_FLOAT
        | GL_DOUBLE
    end
  external glColorPointer :
    size:int ->
    data_type:VertArray.Color.color_data_type ->
    stride:int -> data:('a, 'b, Bigarray.c_layout) Bigarray.Array1.t -> unit
    = "ml_glcolorpointer"
  external glEdgeFlagPointer :
    stride:int ->
    data:('a, Bigarray.int8_unsigned_elt, Bigarray.c_layout)
         Bigarray.Array1.t ->
    unit = "ml_gledgeflagpointer"
  external glSecondaryColorPointer :
    size:int ->
    data_type:VertArray.Color.color_data_type ->
    stride:int -> data:('a, 'b, Bigarray.c_layout) Bigarray.Array1.t -> unit
    = "ml_glsecondarycolorpointer"
  module VAttr :
    sig
      type vertattr_data_type =
          GL_BYTE
        | GL_UNSIGNED_BYTE
        | GL_SHORT
        | GL_UNSIGNED_SHORT
        | GL_INT
        | GL_UNSIGNED_INT
        | GL_FLOAT
        | GL_DOUBLE
    end
  external glVertexAttribPointer :
    index:int ->
    size:int ->
    data_type:VertArray.VAttr.vertattr_data_type ->
    normalized:bool ->
    stride:int -> data:('a, 'b, Bigarray.c_layout) Bigarray.Array1.t -> unit
    = "ml_glvertexattribpointer_bytecode" "ml_glvertexattribpointer_native"
  external glVertexPointer0 :
    size:int ->
    data_type:VertArray.Coord.coord_data_type -> stride:int -> unit
    = "ml_glvertexpointer0"
  external glTexCoordPointer0 :
    size:int ->
    data_type:VertArray.Coord.coord_data_type -> stride:int -> unit
    = "ml_gltexcoordpointer0"
  external glColorPointer0 :
    size:int ->
    data_type:VertArray.Color.color_data_type -> stride:int -> unit
    = "ml_glcolorpointer0"
  external glSecondaryColorPointer0 :
    size:int ->
    data_type:VertArray.Color.color_data_type -> stride:int -> unit
    = "ml_glsecondarycolorpointer0"
  external glIndexPointer0 :
    data_type:VertArray.Index.index_data_type -> stride:int -> unit
    = "ml_glindexpointer0"
  external glNormalPointer0 :
    data_type:VertArray.Norm.norm_data_type -> stride:int -> unit
    = "ml_glnormalpointer0"
  external glEdgeFlagPointer0 : stride:int -> unit = "ml_gledgeflagpointer0"
  external glVertexAttribPointer0 :
    index:int ->
    size:int ->
    data_type:VertArray.VAttr.vertattr_data_type ->
    normalized:bool -> stride:int -> unit = "ml_glvertexattribpointer0"
  external glDrawElements0 :
    mode:GL.primitive ->
    count:int -> data_type:VertArray.Elem.elem_data_type -> unit
    = "ml_gldrawelements0"
  external glVertexPointerOfs8 :
    size:int ->
    data_type:VertArray.Coord.coord_data_type ->
    stride:int -> ofs:int -> unit = "ml_glvertexpointer_ofs8"
  external glVertexPointerOfs16 :
    size:int ->
    data_type:VertArray.Coord.coord_data_type ->
    stride:int -> ofs:int -> unit = "ml_glvertexpointer_ofs16"
  external glVertexPointerOfs32 :
    size:int ->
    data_type:VertArray.Coord.coord_data_type ->
    stride:int -> ofs:int -> unit = "ml_glvertexpointer_ofs32"
  external glIndexPointerOfs8 :
    data_type:VertArray.Index.index_data_type ->
    stride:int -> ofs:int -> unit = "ml_glindexpointer_ofs8"
  external glIndexPointerOfs16 :
    data_type:VertArray.Index.index_data_type ->
    stride:int -> ofs:int -> unit = "ml_glindexpointer_ofs16"
  external glIndexPointerOfs32 :
    data_type:VertArray.Index.index_data_type ->
    stride:int -> ofs:int -> unit = "ml_glindexpointer_ofs32"
  external glTexCoordPointerOfs8 :
    size:int ->
    data_type:VertArray.Coord.coord_data_type ->
    stride:int -> ofs:int -> unit = "ml_gltexcoordpointer_ofs8"
  external glTexCoordPointerOfs16 :
    size:int ->
    data_type:VertArray.Coord.coord_data_type ->
    stride:int -> ofs:int -> unit = "ml_gltexcoordpointer_ofs16"
  external glTexCoordPointerOfs32 :
    size:int ->
    data_type:VertArray.Coord.coord_data_type ->
    stride:int -> ofs:int -> unit = "ml_gltexcoordpointer_ofs32"
  external glColorPointerOfs8 :
    size:int ->
    data_type:VertArray.Color.color_data_type ->
    stride:int -> ofs:int -> unit = "ml_glcolorpointer_ofs8"
  external glColorPointerOfs16 :
    size:int ->
    data_type:VertArray.Color.color_data_type ->
    stride:int -> ofs:int -> unit = "ml_glcolorpointer_ofs16"
  external glColorPointerOfs32 :
    size:int ->
    data_type:VertArray.Color.color_data_type ->
    stride:int -> ofs:int -> unit = "ml_glcolorpointer_ofs32"
  external glSecondaryColorPointerOfs8 :
    size:int ->
    data_type:VertArray.Color.color_data_type -> stride:int -> unit
    = "ml_glsecondarycolorpointer_ofs8"
  external glSecondaryColorPointerOfs16 :
    size:int ->
    data_type:VertArray.Color.color_data_type -> stride:int -> unit
    = "ml_glsecondarycolorpointer_ofs16"
  external glSecondaryColorPointerOfs32 :
    size:int ->
    data_type:VertArray.Color.color_data_type -> stride:int -> unit
    = "ml_glsecondarycolorpointer_ofs32"
  external glNormalPointerOfs8 :
    data_type:VertArray.Norm.norm_data_type -> stride:int -> ofs:int -> unit
    = "ml_glnormalpointer_ofs8"
  external glNormalPointerOfs16 :
    data_type:VertArray.Norm.norm_data_type -> stride:int -> ofs:int -> unit
    = "ml_glnormalpointer_ofs16"
  external glNormalPointerOfs32 :
    data_type:VertArray.Norm.norm_data_type -> stride:int -> ofs:int -> unit
    = "ml_glnormalpointer_ofs32"
  external glEdgeFlagPointerOfs8 : stride:int -> ofs:int -> unit
    = "ml_gledgeflagpointer_ofs8"
  external glEdgeFlagPointerOfs16 : stride:int -> ofs:int -> unit
    = "ml_gledgeflagpointer_ofs16"
  external glEdgeFlagPointerOfs32 : stride:int -> ofs:int -> unit
    = "ml_gledgeflagpointer_ofs32"
  external glVertexAttribPointerOfs8 :
    index:int ->
    size:int ->
    data_type:VertArray.VAttr.vertattr_data_type ->
    normalized:bool -> stride:int -> ofs:int -> unit
    = "ml_glvertexattribpointer_ofs8_bytecode"
    "ml_glvertexattribpointer_ofs8_native"
  external glVertexAttribPointerOfs16 :
    index:int ->
    size:int ->
    data_type:VertArray.VAttr.vertattr_data_type ->
    normalized:bool -> stride:int -> ofs:int -> unit
    = "ml_glvertexattribpointer_ofs16_bytecode"
    "ml_glvertexattribpointer_ofs16_native"
  external glVertexAttribPointerOfs32 :
    index:int ->
    size:int ->
    data_type:VertArray.VAttr.vertattr_data_type ->
    normalized:bool -> stride:int -> ofs:int -> unit
    = "ml_glvertexattribpointer_ofs32_bytecode"
    "ml_glvertexattribpointer_ofs32_native"
  external glDrawElementsOfs8 :
    mode:GL.primitive ->
    count:int -> data_type:VertArray.Elem.elem_data_type -> ofs:int -> unit
    = "ml_gldrawelements_ofs8"
  external glDrawElementsOfs16 :
    mode:GL.primitive ->
    count:int -> data_type:VertArray.Elem.elem_data_type -> ofs:int -> unit
    = "ml_gldrawelements_ofs16"
  external glDrawElementsOfs32 :
    mode:GL.primitive ->
    count:int -> data_type:VertArray.Elem.elem_data_type -> ofs:int -> unit
    = "ml_gldrawelements_ofs32"
  external glGenVertexArray : unit -> int = "ml_glgenvertexarray"
  external glBindVertexArray : int -> unit = "ml_glbindvertexarray"
  external glDeleteVertexArray : int -> unit = "ml_gldeletevertexarray"
  external glIsVertexArray : int -> bool = "ml_glisvertexarray"
end