sig
  type t
  external init_with_gc_and_fullname :
    gc:CL_GraphicContext.t -> fullname:string -> CL_Sprite.t
    = "caml_CL_Sprite_init_with_gc_and_fullname"
  external init_with_gc_filename_vdir :
    gc:CL_GraphicContext.t ->
    filename:string -> dir:CL_VirtualDirectory.t -> CL_Sprite.t
    = "caml_CL_Sprite_init_with_gc_filename_vdir"
  external init_with_gc_and_io :
    gc:CL_GraphicContext.t ->
    file:'CL_IODevice.t -> image_type:string -> CL_Sprite.t
    = "caml_CL_Sprite_init_with_gc_and_io"
  type file_dir_src = { filename : string; dir : CL_VirtualDirectory.t; }
  type 'a io_src = { image_in : 'CL_IODevice.t; image_type : string; }
  type 'a sprite_src =
      [ `File_dir_src of CL_Sprite.file_dir_src
      | `Fullname of string
      | `IO of 'CL_Sprite.io_src ]
  val init_with :
    gc:CL_GraphicContext.t -> src:'CL_Sprite.sprite_src -> CL_Sprite.t
  external init : unit -> CL_Sprite.t = "caml_CL_Sprite_init"
  external delete : CL_Sprite.t -> unit = "caml_CL_Sprite_delete"
  external set_angle : CL_Sprite.t -> angle:CL_Angle.t -> unit
    = "caml_CL_Sprite_set_angle" [@@noalloc]
  external set_angle_pitch : CL_Sprite.t -> angle:CL_Angle.t -> unit
    = "caml_CL_Sprite_set_angle_pitch" [@@noalloc]
  external set_angle_yaw : CL_Sprite.t -> angle:CL_Angle.t -> unit
    = "caml_CL_Sprite_set_angle_yaw" [@@noalloc]
  external rotate : CL_Sprite.t -> angle:CL_Angle.t -> unit
    = "caml_CL_Sprite_rotate" [@@noalloc]
  external rotate_pitch : CL_Sprite.t -> angle:CL_Angle.t -> unit
    = "caml_CL_Sprite_rotate_pitch" [@@noalloc]
  external rotate_yaw : CL_Sprite.t -> angle:CL_Angle.t -> unit
    = "caml_CL_Sprite_rotate_yaw" [@@noalloc]
  external set_base_angle : CL_Sprite.t -> angle:CL_Angle.t -> unit
    = "caml_CL_Sprite_set_base_angle" [@@noalloc]
  external set_scale : CL_Sprite.t -> x:float -> y:float -> unit
    = "caml_CL_Sprite_set_scale" [@@noalloc]
  external set_alpha : CL_Sprite.t -> alpha:float -> unit
    = "caml_CL_Sprite_set_alpha" [@@noalloc]
  external set_frame : CL_Sprite.t -> frame:CL_Type.uint -> unit
    = "caml_CL_Sprite_set_frame" [@@noalloc]
  external set_delay : CL_Sprite.t -> delay_ms:int -> unit
    = "caml_CL_Sprite_set_delay" [@@noalloc]
  external set_frame_delay : CL_Sprite.t -> frame:int -> delay_ms:int -> unit
    = "caml_CL_Sprite_set_frame_delay" [@@noalloc]
  external set_frame_offset :
    CL_Sprite.t -> frame:int -> offset:CL_Point.t -> unit
    = "caml_CL_Sprite_set_frame_offset" [@@noalloc]
  external set_id : CL_Sprite.t -> id:int -> unit = "caml_CL_Sprite_set_id"
    [@@noalloc]
  external finish : CL_Sprite.t -> unit = "caml_CL_Sprite_finish" [@@noalloc]
  external restart : CL_Sprite.t -> unit = "caml_CL_Sprite_restart"
    [@@noalloc]
  external set_play_loop : CL_Sprite.t -> unit
    = "caml_CL_Sprite_set_play_loop" [@@noalloc]
  external set_play_pingpong : CL_Sprite.t -> unit
    = "caml_CL_Sprite_set_play_pingpong" [@@noalloc]
  external set_play_backward : CL_Sprite.t -> unit
    = "caml_CL_Sprite_set_play_backward" [@@noalloc]
  external unset_play_loop : CL_Sprite.t -> unit
    = "caml_CL_Sprite_unset_play_loop" [@@noalloc]
  external unset_play_pingpong : CL_Sprite.t -> unit
    = "caml_CL_Sprite_unset_play_pingpong" [@@noalloc]
  external unset_play_backward : CL_Sprite.t -> unit
    = "caml_CL_Sprite_unset_play_backward" [@@noalloc]
  external is_null : CL_Sprite.t -> bool = "caml_CL_Sprite_is_null"
  external get_angle : CL_Sprite.t -> CL_Angle.t = "caml_CL_Sprite_get_angle"
  external get_base_angle : CL_Sprite.t -> CL_Angle.t
    = "caml_CL_Sprite_get_base_angle"
  external get_alpha : CL_Sprite.t -> float = "caml_CL_Sprite_get_alpha"
  external get_color : CL_Sprite.t -> CL_Colorf.t
    = "caml_CL_Sprite_get_color"
  external get_size : CL_Sprite.t -> CL_Size.t = "caml_CL_Sprite_get_size"
  external get_current_frame : CL_Sprite.t -> int
    = "caml_CL_Sprite_get_current_frame"
  external get_frame_count : CL_Sprite.t -> int
    = "caml_CL_Sprite_get_frame_count"
  external get_id : CL_Sprite.t -> int = "caml_CL_Sprite_get_id"
  external get_width : CL_Sprite.t -> int = "caml_CL_Sprite_get_width"
  external get_height : CL_Sprite.t -> int = "caml_CL_Sprite_get_height"
  external get_linear_filter : CL_Sprite.t -> bool
    = "caml_CL_Sprite_get_linear_filter"
  external is_play_loop : CL_Sprite.t -> bool = "caml_CL_Sprite_is_play_loop"
  external is_play_backward : CL_Sprite.t -> bool
    = "caml_CL_Sprite_is_play_backward"
  external is_play_pingpong : CL_Sprite.t -> bool
    = "caml_CL_Sprite_is_play_pingpong"
  external is_finished : CL_Sprite.t -> bool = "caml_CL_Sprite_is_finished"
  external is_looping : CL_Sprite.t -> bool = "caml_CL_Sprite_is_looping"
  external get_frame_delay : CL_Sprite.t -> frame:int -> int
    = "caml_CL_Sprite_get_frame_delay"
  external get_frame_offset : CL_Sprite.t -> frame:int -> CL_Point.t
    = "caml_CL_Sprite_get_frame_offset"
  external get_frame_size : CL_Sprite.t -> frame:int -> CL_Size.t
    = "caml_CL_Sprite_get_frame_size"
end