sig
  type raster_face_cull = [ `Back | `Front ]
  type raster =
    Effect.raster = {
    raster_face_cull : raster_face_cull option;
    raster_multisample : bool;
  }
  val raster_default : raster
  type depth_test =
      [ `Always
      | `Equal
      | `Gequal
      | `Greater
      | `Lequal
      | `Less
      | `Nequal
      | `Never ]
  type depth =
    Effect.depth = {
    depth_test : depth_test option;
    depth_write : bool;
    depth_offset : float * float;
  }
  val depth_default : depth
  type blend_mul =
      [ `Cst
      | `Cst_a
      | `Dst
      | `Dst_a
      | `One
      | `One_minus_cst
      | `One_minus_cst_a
      | `One_minus_dst
      | `One_minus_dst_a
      | `One_minus_src
      | `One_minus_src1
      | `One_minus_src1_a
      | `One_minus_src_a
      | `Src
      | `Src1
      | `Src1_a
      | `Src_a
      | `Src_a_saturate
      | `Zero ]
  type blend_eq =
      [ `Add of blend_mul * blend_mul
      | `Max
      | `Min
      | `Rev_sub of blend_mul * blend_mul
      | `Sub of blend_mul * blend_mul ]
  val blend_eq_default : blend_eq
  type blend =
    Effect.blend = {
    blend : bool;
    blend_rgb : blend_eq;
    blend_a : blend_eq;
    blend_cst : Gg.color;
  }
  val blend_default : blend
  val blend_alpha : blend
  type t = effect
  val create :
    ?raster:raster ->
    ?depth:depth -> ?blend:blend -> ?uniforms:Uniform.set -> prog -> effect
  val prog : effect -> prog
  val uniforms : effect -> Uniform.set
  val get_uniform : effect -> 'a uniform -> Uniform.value_untyped
  val set_uniform : effect -> 'a uniform -> '-> unit
  val raster : effect -> raster
  val depth : effect -> depth
  val blend : effect -> blend
  val binfo : Lit.effect -> Lit.Renderer.Private.BInfo.t
  val set_binfo : Lit.effect -> Lit.Renderer.Private.BInfo.t -> unit
end