sig
  type t
  type attribute_binding =
      BIND_OFF
    | BIND_OVERALL
    | BIND_PER_PRIMITIVE_SET
    | BIND_PER_PRIMITIVE
    | BIND_PER_VERTEX
  external create' : unit -> Osg.Geometry.t = "geometry_create"
  external to_drawable : Osg.Geometry.t -> Osg.Drawable.t
    = "geometry_to_drawable"
  external set_vertex_array : Osg.Geometry.t -> Osg.Osg_array.t -> unit
    = "geometry_set_vertex_array"
  external set_vertex_array_vec3 : Osg.Geometry.t -> Osg.Vec3_array.t -> unit
    = "geometry_set_vertex_array_vec3"
  external set_normal_array : Osg.Geometry.t -> Osg.Osg_array.t -> unit
    = "geometry_set_normal_array"
  external set_normal_array_vec3 : Osg.Geometry.t -> Osg.Vec3_array.t -> unit
    = "geometry_set_normal_array_vec3"
  external set_normal_binding :
    Osg.Geometry.t -> Osg.Geometry.attribute_binding -> unit
    = "geometry_set_normal_binding"
  external set_color_array : Osg.Geometry.t -> Osg.Osg_array.t -> unit
    = "geometry_set_color_array"
  external set_color_array_vec4 : Osg.Geometry.t -> Osg.Vec4_array.t -> unit
    = "geometry_set_color_array_vec4"
  external set_color_binding :
    Osg.Geometry.t -> Osg.Geometry.attribute_binding -> unit
    = "geometry_set_color_binding"
  external set_tex_coord_array :
    Osg.Geometry.t -> int -> Osg.Osg_array.t -> unit
    = "geometry_set_tex_coord_array"
  external set_tex_coord_array_vec3 :
    Osg.Geometry.t -> int -> Osg.Vec3_array.t -> unit
    = "geometry_set_tex_coord_array_vec3"
  external add_primitive_set : Osg.Geometry.t -> Osg.Primitive_set.t -> unit
    = "geometry_add_primitive_set"
  val create_internal :
    (Osg.Geometry.t -> 'a) ->
    ?vertex_array:Osg.Osg_array.t ->
    ?normal_array:Osg.Osg_array.t ->
    ?normal_binding:Osg.Geometry.attribute_binding ->
    ?color_array:Osg.Osg_array.t ->
    ?color_binding:Osg.Geometry.attribute_binding ->
    ?tex_coord_array:int * Osg.Osg_array.t ->
    ?primitive_sets:Osg.Primitive_set.t list -> unit -> 'a
  val create :
    ?vertex_array:Osg.Osg_array.t ->
    ?normal_array:Osg.Osg_array.t ->
    ?normal_binding:Osg.Geometry.attribute_binding ->
    ?color_array:Osg.Osg_array.t ->
    ?color_binding:Osg.Geometry.attribute_binding ->
    ?tex_coord_array:int * Osg.Osg_array.t ->
    ?primitive_sets:Osg.Primitive_set.t list -> unit -> Osg.Drawable.t
  val labl_create :
    ?vertex_array:Osg.Osg_array.t ->
    ?normal_array:Osg.Osg_array.t ->
    ?normal_binding:Osg.Geometry.attribute_binding ->
    ?color_array:Osg.Osg_array.t ->
    ?color_binding:Osg.Geometry.attribute_binding ->
    ?tex_coord_array:int * Osg.Osg_array.t ->
    ?primitive_sets:Osg.Primitive_set.t list -> unit -> Osg.Geometry.t
end