sig
  type join_style =
      TUBE_JN_RAW
    | TUBE_JN_ANGLE
    | TUBE_JN_CUT
    | TUBE_JN_ROUND
    | TUBE_JN_CAP
    | TUBE_NORM_FACET
    | TUBE_NORM_EDGE
    | TUBE_NORM_PATH_EDGE
    | TUBE_CONTOUR_CLOSED
  external gleSetJoinStyle : GLE.join_style list -> unit
    = "ml_glesetjoinstyle"
  external gleGetJoinStyle : unit -> GLE.join_style list
    = "ml_glegetjoinstyle"
  external gleDestroyGC : unit -> unit = "ml_gledestroygc"
  type gle_float
  val ba2_float32_of_array :
    float array array ->
    (float, Bigarray.float32_elt, Bigarray.c_layout) Bigarray.Array2.t
  val ba2_float32_create :
    int ->
    int -> (float, Bigarray.float32_elt, Bigarray.c_layout) Bigarray.Array2.t
  val ba2_glefloat_of_array :
    float array array ->
    (float, GLE.gle_float, Bigarray.c_layout) Bigarray.Array2.t
  val ba2_glefloat_create :
    int -> int -> (float, GLE.gle_float, Bigarray.c_layout) Bigarray.Array2.t
  val ba1_glefloat_of_array :
    float array ->
    (float, GLE.gle_float, Bigarray.c_layout) Bigarray.Array1.t
  val ba1_glefloat_create :
    int -> (float, GLE.gle_float, Bigarray.c_layout) Bigarray.Array1.t
  val colors_none :
    (float, Bigarray.float32_elt, Bigarray.c_layout) Bigarray.Array2.t
  val glePolyCylinder :
    points:(float, GLE.gle_float, Bigarray.c_layout) Bigarray.Array2.t ->
    colors:(float, Bigarray.float32_elt, Bigarray.c_layout) Bigarray.Array2.t ->
    radius:float -> unit
  val glePolyCone :
    points:(float, GLE.gle_float, Bigarray.c_layout) Bigarray.Array2.t ->
    colors:(float, Bigarray.float32_elt, Bigarray.c_layout) Bigarray.Array2.t ->
    radii:(float, GLE.gle_float, Bigarray.c_layout) Bigarray.Array1.t -> unit
  val glePolyCone_c4f :
    points:(float, GLE.gle_float, Bigarray.c_layout) Bigarray.Array2.t ->
    colors:(float, Bigarray.float32_elt, Bigarray.c_layout) Bigarray.Array2.t ->
    radii:(float, GLE.gle_float, Bigarray.c_layout) Bigarray.Array1.t -> unit
  val gleExtrusion :
    contour:(float, GLE.gle_float, Bigarray.c_layout) Bigarray.Array2.t ->
    cont_normals:(float, GLE.gle_float, Bigarray.c_layout) Bigarray.Array2.t ->
    up:(float * float * float) option ->
    points:(float, GLE.gle_float, Bigarray.c_layout) Bigarray.Array2.t ->
    colors:(float, Bigarray.float32_elt, Bigarray.c_layout) Bigarray.Array2.t ->
    unit
  val gleTwistExtrusion :
    contour:(float, GLE.gle_float, Bigarray.c_layout) Bigarray.Array2.t ->
    cont_normals:(float, GLE.gle_float, Bigarray.c_layout) Bigarray.Array2.t ->
    up:(float * float * float) option ->
    points:(float, GLE.gle_float, Bigarray.c_layout) Bigarray.Array2.t ->
    colors:(float, Bigarray.float32_elt, Bigarray.c_layout) Bigarray.Array2.t ->
    twist:(float, GLE.gle_float, Bigarray.c_layout) Bigarray.Array1.t -> unit
  val gleSpiral :
    contour:(float, GLE.gle_float, Bigarray.c_layout) Bigarray.Array2.t ->
    cont_normals:(float, GLE.gle_float, Bigarray.c_layout) Bigarray.Array2.t ->
    up:(float * float * float) option ->
    start_radius:float ->
    drd_theta:float ->
    start_z:float ->
    dzd_theta:float ->
    start_xform:((float * float * float) * (float * float * float)) option ->
    dx_formd_theta:((float * float * float) * (float * float * float)) option ->
    start_theta:float -> sweep_theta:float -> unit
  val gleHelicoid :
    torus_radius:float ->
    start_radius:float ->
    drd_theta:float ->
    start_z:float ->
    dzd_theta:float ->
    start_xform:((float * float * float) * (float * float * float)) option ->
    dx_formd_theta:((float * float * float) * (float * float * float)) option ->
    start_theta:float -> sweep_theta:float -> unit
end