sig
  type vertex3 = float * float * float
  type rgb = float * float * float
  type uv = float * float
  type characterised_vertices =
      PlainColor3_Vertices3 of Ogl_draw.rgb * Ogl_draw.vertex3 array
    | Vertices3 of Ogl_draw.vertex3 array
    | RGB_Vertices3 of (Ogl_draw.rgb * Ogl_draw.vertex3) array
    | UV_Vertices3 of (Ogl_draw.uv * Ogl_draw.vertex3) array
    | UV_RGB_Vertices3 of
        (Ogl_draw.uv * Ogl_draw.rgb * Ogl_draw.vertex3) array
  type mesh
  val make_mesh_unsafe :
    indices:(int * int * int) array ->
    vertices:Ogl_draw.characterised_vertices -> Ogl_draw.mesh
  val make_mesh :
    indices:(int * int * int) array ->
    vertices:Ogl_draw.characterised_vertices -> Ogl_draw.mesh
  type texenv = MODULATE | DECAL | ADD | ADD_SIGNED | SUBTRACT
  val draw_mesh :
    float array ->
    ?color:Ogl_draw.rgb -> ?texenv:Ogl_draw.texenv -> Ogl_draw.mesh -> unit
  val delete_mesh : Ogl_draw.mesh -> unit
  val tris_of_quads :
    (int * int * int * int) array -> (int * int * int) array
  type face = Tri of (int * int * int) | Quad of (int * int * int * int)
  val tris_of_mixed : Ogl_draw.face array -> (int * int * int) array
end