sig
  type t
  external loadFromFile :
    ?vertexShaderFilename:string ->
    ?fragmentShaderFilename:string -> unit -> SFShader.t
    = "caml_sfShader_loadFromFile"
  external loadFromMemory :
    ?vertexShader:string -> ?fragmentShader:string -> unit -> SFShader.t
    = "caml_sfShader_loadFromMemory"
  type input = [ `Buffer of string | `Filename of string ]
  val load :
    ?vertexShader:SFShader.input ->
    ?fragmentShader:SFShader.input -> unit -> SFShader.t
  external destroy : shader:SFShader.t -> unit = "caml_sfShader_destroy"
  external bind : shader:SFShader.t -> unit = "caml_sfShader_bind"
  external isAvailable : unit -> bool = "caml_sfShader_isAvailable"
  external setFloatParameter :
    shader:SFShader.t -> name:string -> x:float -> unit
    = "caml_sfShader_setFloatParameter"
  external setFloat2Parameter :
    shader:SFShader.t -> name:string -> x:float -> y:float -> unit
    = "caml_sfShader_setFloat2Parameter"
  external setFloat3Parameter :
    shader:SFShader.t -> name:string -> x:float -> y:float -> z:float -> unit
    = "caml_sfShader_setFloat3Parameter"
  external setFloat4Parameter :
    shader:SFShader.t ->
    name:string -> x:float -> y:float -> z:float -> w:float -> unit
    = "caml_sfShader_setFloat4Parameter_bytecode"
    "caml_sfShader_setFloat4Parameter_native"
end