sig
  type color_material =
      [ `ambient | `ambient_and_diffuse | `diffuse | `emission | `specular ]
  val color_material : face:Gl.face -> GlLight.color_material -> unit
  type fog_param =
      [ `End of float
      | `color of Gl.rgba
      | `density of float
      | `index of float
      | `mode of [ `exp | `exp2 | `linear ]
      | `start of float ]
  val fog : GlLight.fog_param -> unit
  type light_param =
      [ `ambient of Gl.rgba
      | `constant_attenuation of float
      | `diffuse of Gl.rgba
      | `linear_attenuation of float
      | `position of Gl.point4
      | `quadratic_attenuation of float
      | `specular of Gl.rgba
      | `spot_cutoff of float
      | `spot_direction of Gl.point3
      | `spot_exponent of float ]
  val light : num:int -> GlLight.light_param -> unit
  val light_model :
    [ `ambient of Gl.rgba
    | `color_control of [ `separate_specular_color | `single_color ]
    | `local_viewer of bool
    | `two_side of bool ] -> unit
  type material_param =
      [ `ambient of Gl.rgba
      | `ambient_and_diffuse of Gl.rgba
      | `color_indexes of float * float * float
      | `diffuse of Gl.rgba
      | `emission of Gl.rgba
      | `shininess of float
      | `specular of Gl.rgba ]
  val material : face:Gl.face -> GlLight.material_param -> unit
end