sig
  val coord : s:float -> ?t:float -> ?r:float -> ?q:float -> unit -> unit
  val coord2 : float * float -> unit
  val coord3 : float * float * float -> unit
  val coord4 : float * float * float * float -> unit
  type env_param =
      [ `color of Gl.rgba
      | `mode of [ `blend | `decal | `modulate | `replace ] ]
  val env : GlTex.env_param -> unit
  type coord = [ `| `| `| `t ]
  type gen_param =
      [ `eye_plane of Gl.point4
      | `mode of [ `eye_linear | `object_linear | `sphere_map ]
      | `object_plane of Gl.point4 ]
  val gen : coord:GlTex.coord -> GlTex.gen_param -> unit
  type format =
      [ `alpha
      | `bgr
      | `bgra
      | `blue
      | `color_index
      | `green
      | `luminance
      | `luminance_alpha
      | `red
      | `rgb
      | `rgba ]
  val image1d :
    ?proxy:bool ->
    ?level:int ->
    ?internal:int ->
    ?border:bool -> ([< GlTex.format ], [< Gl.kind ]) GlPix.t -> unit
  val image2d :
    ?proxy:bool ->
    ?level:int ->
    ?internal:int ->
    ?border:bool -> ([< GlTex.format ], [< Gl.kind ]) GlPix.t -> unit
  type filter =
      [ `linear
      | `linear_mipmap_linear
      | `linear_mipmap_nearest
      | `nearest
      | `nearest_mipmap_linear
      | `nearest_mipmap_nearest ]
  type wrap = [ `clamp | `repeat ]
  type parameter =
      [ `border_color of Gl.rgba
      | `generate_mipmap of bool
      | `mag_filter of [ `linear | `nearest ]
      | `min_filter of GlTex.filter
      | `priority of Gl.clampf
      | `wrap_s of GlTex.wrap
      | `wrap_t of GlTex.wrap ]
  val parameter :
    target:[ `texture_1d | `texture_2d ] -> GlTex.parameter -> unit
  type texture_id
  val gen_texture : unit -> GlTex.texture_id
  val gen_textures : len:int -> GlTex.texture_id array
  val bind_texture :
    target:[ `texture_1d | `texture_2d ] -> GlTex.texture_id -> unit
  val delete_texture : GlTex.texture_id -> unit
  val delete_textures : GlTex.texture_id array -> unit
end