sig
  type t
  type mode = LINEAR | EXP | EXP2
  type fog_coordinate_source = FOG_COORDINATE | FRAGMENT_DEPTH
  external create' : unit -> Osg.Fog.t = "fog_create"
  external to_state_attribute : Osg.Fog.t -> Osg.State_attribute.t
    = "fog_to_state_attribute"
  external set_mode : Osg.Fog.t -> Osg.Fog.mode -> unit = "fog_set_mode"
  external set_fog_coordinate_source :
    Osg.Fog.t -> Osg.Fog.fog_coordinate_source -> unit
    = "fog_set_fog_coordinate_source"
  external set_density : Osg.Fog.t -> float -> unit = "fog_set_density"
  external set_start : Osg.Fog.t -> float -> unit = "fog_set_start"
  external set_end : Osg.Fog.t -> float -> unit = "fog_set_end"
  external set_color : Osg.Fog.t -> Osg.Vec4.t -> unit = "fog_set_color"
  val create_internal :
    (Osg.Fog.t -> 'a) ->
    ?mode:Osg.Fog.mode ->
    ?fog_coordinate_source:Osg.Fog.fog_coordinate_source ->
    ?density:float ->
    ?start:float -> ?end_:float -> ?color:Osg.Vec4.t -> unit -> 'a
  val create :
    ?mode:Osg.Fog.mode ->
    ?fog_coordinate_source:Osg.Fog.fog_coordinate_source ->
    ?density:float ->
    ?start:float ->
    ?end_:float -> ?color:Osg.Vec4.t -> unit -> Osg.State_attribute.t
  val labl_create :
    ?mode:Osg.Fog.mode ->
    ?fog_coordinate_source:Osg.Fog.fog_coordinate_source ->
    ?density:float ->
    ?start:float -> ?end_:float -> ?color:Osg.Vec4.t -> unit -> Osg.Fog.t
end