sig
  type vertex2 = float * float
  type vertex3 = float * float * float
  type vertex4 = float * float * float * float
  type vector = float * float * float
  type rgb = float * float * float
  type rgba = float * float * float * float
  type uv = float * float
  type matrix4x4 = float array
  val draw_translated : FunGL.vector -> (unit -> unit) -> unit
  val draw_rotated : float -> FunGL.vector -> (unit -> unit) -> unit
  val draw_scaled : FunGL.vector -> (unit -> unit) -> unit
  val draw_as_identity : (unit -> unit) -> unit
  val draw_with_matrix : FunGL.matrix4x4 -> (unit -> unit) -> unit
  val draw_with_rgb : FunGL.rgb -> (unit -> unit) -> unit
  val draw_with_rgba : FunGL.rgba -> (unit -> unit) -> unit
  val draw_with_material :
    face:GL.face_mode ->
    mode:GL.Material.material_mode -> (unit -> unit) -> unit
  val draw_with_lightModel :
    light_model:GL.light_model -> (unit -> unit) -> unit
  val draw_with_shadeModel :
    shade_mode:GL.shade_mode -> (unit -> unit) -> unit
  val draw_with_frontFace :
    orientation:GL.orientation -> (unit -> unit) -> unit
  val draw_with_cullFace : mode:GL.face_mode -> (unit -> unit) -> unit
  val draw_enabled : cap:GL.gl_capability -> (unit -> unit) -> unit
  val with_enablements : caps:GL.gl_capability list -> (unit -> unit) -> unit
  val draw_disabled : cap:GL.gl_capability -> (unit -> unit) -> unit
  val draw_with_viewport :
    viewport:int * int * int * int -> (unit -> unit) -> unit
  val draw_with_polygonMode :
    face:GL.face_mode -> mode:GL.polygon_mode -> (unit -> unit) -> unit
  val draw_with_polygonMode2 :
    front:GL.polygon_mode -> back:GL.polygon_mode -> (unit -> unit) -> unit
  val do_with_matrixMode : mode:GL.matrix_mode -> (unit -> unit) -> unit
  val draw_with_lineWidth : width:float -> (unit -> unit) -> unit
  val draw_with_pointSize : size:float -> (unit -> unit) -> unit
  val draw_using_program :
    program:GL.shader_program -> (unit -> unit) -> unit
  type qualified_vertices =
      Vertices2 of FunGL.vertex2 list
    | Vertices3 of FunGL.vertex3 list
    | Vertices4 of FunGL.vertex4 list
    | Normal_Vertices2 of (FunGL.vector * FunGL.vertex2) list
    | Normal_Vertices3 of (FunGL.vector * FunGL.vertex3) list
    | Normal_Vertices4 of (FunGL.vector * FunGL.vertex4) list
    | RGB_Vertices2 of (FunGL.rgb * FunGL.vertex2) list
    | RGB_Vertices3 of (FunGL.rgb * FunGL.vertex3) list
    | RGB_Vertices4 of (FunGL.rgb * FunGL.vertex4) list
    | RGBA_Vertices2 of (FunGL.rgba * FunGL.vertex2) list
    | RGBA_Vertices3 of (FunGL.rgba * FunGL.vertex3) list
    | RGBA_Vertices4 of (FunGL.rgba * FunGL.vertex4) list
    | Normal_RGB_Vertices2 of (FunGL.vector * FunGL.rgb * FunGL.vertex2) list
    | Normal_RGB_Vertices3 of (FunGL.vector * FunGL.rgb * FunGL.vertex3) list
    | Normal_RGB_Vertices4 of (FunGL.vector * FunGL.rgb * FunGL.vertex4) list
    | Normal_RGBA_Vertices2 of
        (FunGL.vector * FunGL.rgba * FunGL.vertex2) list
    | Normal_RGBA_Vertices3 of
        (FunGL.vector * FunGL.rgba * FunGL.vertex3) list
    | Normal_RGBA_Vertices4 of
        (FunGL.vector * FunGL.rgba * FunGL.vertex4) list
    | UV_Vertices2 of (FunGL.uv * FunGL.vertex2) list
    | UV_Vertices3 of (FunGL.uv * FunGL.vertex3) list
    | UV_Vertices4 of (FunGL.uv * FunGL.vertex4) list
    | UV_Normal_Vertices2 of (FunGL.uv * FunGL.vector * FunGL.vertex2) list
    | UV_Normal_Vertices3 of (FunGL.uv * FunGL.vector * FunGL.vertex3) list
    | UV_Normal_Vertices4 of (FunGL.uv * FunGL.vector * FunGL.vertex4) list
    | UV_RGB_Vertices2 of (FunGL.uv * FunGL.rgb * FunGL.vertex2) list
    | UV_RGB_Vertices3 of (FunGL.uv * FunGL.rgb * FunGL.vertex3) list
    | UV_RGB_Vertices4 of (FunGL.uv * FunGL.rgb * FunGL.vertex4) list
    | UV_RGBA_Vertices2 of (FunGL.uv * FunGL.rgba * FunGL.vertex2) list
    | UV_RGBA_Vertices3 of (FunGL.uv * FunGL.rgba * FunGL.vertex3) list
    | UV_RGBA_Vertices4 of (FunGL.uv * FunGL.rgba * FunGL.vertex4) list
    | UV_Normal_RGB_Vertices2 of
        (FunGL.uv * FunGL.vector * FunGL.rgb * FunGL.vertex2) list
    | UV_Normal_RGB_Vertices3 of
        (FunGL.uv * FunGL.vector * FunGL.rgb * FunGL.vertex3) list
    | UV_Normal_RGB_Vertices4 of
        (FunGL.uv * FunGL.vector * FunGL.rgb * FunGL.vertex4) list
    | UV_Normal_RGBA_Vertices2 of
        (FunGL.uv * FunGL.vector * FunGL.rgba * FunGL.vertex2) list
    | UV_Normal_RGBA_Vertices3 of
        (FunGL.uv * FunGL.vector * FunGL.rgba * FunGL.vertex3) list
    | UV_Normal_RGBA_Vertices4 of
        (FunGL.uv * FunGL.vector * FunGL.rgba * FunGL.vertex4) list
  val render_primitive : GL.primitive -> FunGL.qualified_vertices -> unit
end