sig
  type t
  type face = FRONT | BACK | FRONT_AND_BACK
  type color_mode =
      AMBIENT
    | DIFFUSE
    | SPECULAR
    | EMISSION
    | AMBIENT_AND_DIFFUSE
    | OFF
  external create' : unit -> Osg.Material.t = "material_create"
  external to_state_attribute : Osg.Material.t -> Osg.State_attribute.t
    = "material_to_state_attribute"
  external set_color_mode : Osg.Material.t -> Osg.Material.color_mode -> unit
    = "material_set_color_mode"
  external set_ambient :
    Osg.Material.t -> Osg.Material.face -> Osg.Vec4.t -> unit
    = "material_set_ambient"
  external set_diffuse :
    Osg.Material.t -> Osg.Material.face -> Osg.Vec4.t -> unit
    = "material_set_diffuse"
  external set_specular :
    Osg.Material.t -> Osg.Material.face -> Osg.Vec4.t -> unit
    = "material_set_specular"
  external set_emission :
    Osg.Material.t -> Osg.Material.face -> Osg.Vec4.t -> unit
    = "material_set_emission"
  external set_shininess :
    Osg.Material.t -> Osg.Material.face -> float -> unit
    = "material_set_shininess"
  external set_transparency :
    Osg.Material.t -> Osg.Material.face -> float -> unit
    = "material_set_transparency"
  external set_alpha : Osg.Material.t -> Osg.Material.face -> float -> unit
    = "material_set_alpha"
  val create_internal :
    (Osg.Material.t -> 'a) ->
    ?color_mode:Osg.Material.color_mode ->
    ?ambient:Osg.Material.face * Osg.Vec4.t ->
    ?diffuse:Osg.Material.face * Osg.Vec4.t ->
    ?specular:Osg.Material.face * Osg.Vec4.t ->
    ?emission:Osg.Material.face * Osg.Vec4.t ->
    ?shininess:Osg.Material.face * float ->
    ?transparency:Osg.Material.face * float ->
    ?alpha:Osg.Material.face * float -> unit -> 'a
  val create :
    ?color_mode:Osg.Material.color_mode ->
    ?ambient:Osg.Material.face * Osg.Vec4.t ->
    ?diffuse:Osg.Material.face * Osg.Vec4.t ->
    ?specular:Osg.Material.face * Osg.Vec4.t ->
    ?emission:Osg.Material.face * Osg.Vec4.t ->
    ?shininess:Osg.Material.face * float ->
    ?transparency:Osg.Material.face * float ->
    ?alpha:Osg.Material.face * float -> unit -> Osg.State_attribute.t
  val labl_create :
    ?color_mode:Osg.Material.color_mode ->
    ?ambient:Osg.Material.face * Osg.Vec4.t ->
    ?diffuse:Osg.Material.face * Osg.Vec4.t ->
    ?specular:Osg.Material.face * Osg.Vec4.t ->
    ?emission:Osg.Material.face * Osg.Vec4.t ->
    ?shininess:Osg.Material.face * float ->
    ?transparency:Osg.Material.face * float ->
    ?alpha:Osg.Material.face * float -> unit -> Osg.Material.t
end