# Module GlLight

    module GlLight: sig .. end

    type color_material = [ `ambient | `ambient_and_diffuse | `diffuse | `emission | `specular ]

    val color_material : face:Gl.face -> 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 : 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 -> 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 -> material_param -> unit