sig
  type t
  external init : float * float * float -> CL_Vec3f.t = "caml_CL_Vec3f_init"
  external init3 : x:float -> y:float -> z:float -> CL_Vec3f.t
    = "caml_CL_Vec3f_init3"
  external delete : CL_Vec3f.t -> unit = "caml_CL_Vec3f_delete"
  external print : CL_Vec3f.t -> unit = "caml_CL_Vec3f_print"
  external to_triplet : CL_Vec3f.t -> float * float * float
    = "caml_CL_Vec3f_to_triplet"
  external normalize : CL_Vec3f.t -> CL_Vec3f.t = "caml_CL_Vec3f_normalize"
  external dot : CL_Vec3f.t -> CL_Vec3f.t -> float = "caml_CL_Vec3f_dot"
  external cross : CL_Vec3f.t -> CL_Vec3f.t -> CL_Vec3f.t
    = "caml_CL_Vec3f_cross"
  external length : CL_Vec3f.t -> float = "caml_CL_Vec3f_length"
  external distance : CL_Vec3f.t -> CL_Vec3f.t -> float
    = "caml_CL_Vec3f_distance"
  module Infix :
    sig
      external ( + ) : CL_Vec3f.t -> CL_Vec3f.t -> CL_Vec3f.t
        = "caml_CL_Vec3f_add"
      external ( - ) : CL_Vec3f.t -> CL_Vec3f.t -> CL_Vec3f.t
        = "caml_CL_Vec3f_sub"
      external ( * ) : CL_Vec3f.t -> float -> CL_Vec3f.t
        = "caml_CL_Vec3f_mul"
      external ( / ) : CL_Vec3f.t -> float -> CL_Vec3f.t
        = "caml_CL_Vec3f_div"
    end
end