sig
  type t = Sdltype.renderer
  external create_window_and_renderer :
    width:int ->
    height:int ->
    flags:Sdlwindow.window_flags list -> Sdlwindow.t * Sdlrender.t
    = "caml_SDL_CreateWindowAndRenderer"
  type renderer_flags = Software | Accelerated | PresentVSync | TargetTexture
  val string_of_renderer_flags : Sdlrender.renderer_flags -> string
  val renderer_flags_of_string : string -> Sdlrender.renderer_flags
  external create_renderer :
    win:Sdlwindow.t ->
    index:int -> flags:Sdlrender.renderer_flags list -> Sdlrender.t
    = "caml_SDL_CreateRenderer"
  external get_output_size : Sdlrender.t -> int * int
    = "caml_SDL_GetRendererOutputSize"
  external set_logical_size : Sdlrender.t -> int * int -> unit
    = "caml_SDL_RenderSetLogicalSize"
  external set_logical_size2 : Sdlrender.t -> width:int -> height:int -> unit
    = "caml_SDL_RenderSetLogicalSize2"
  external set_viewport : Sdlrender.t -> Sdlrect.t -> unit
    = "caml_SDL_RenderSetViewport"
  external set_clip_rect : Sdlrender.t -> Sdlrect.t -> unit
    = "caml_SDL_RenderSetClipRect"
  external set_draw_color :
    Sdlrender.t -> rgb:int * int * int -> a:int -> unit
    = "caml_SDL_SetRenderDrawColor"
  external set_draw_color3 :
    Sdlrender.t -> r:int -> g:int -> b:int -> a:int -> unit
    = "caml_SDL_SetRenderDrawColor3"
  external set_draw_blend_mode : Sdlrender.t -> SdlblendMode.t -> unit
    = "caml_SDL_SetRenderDrawBlendMode"
  external draw_point : Sdlrender.t -> int * int -> unit
    = "caml_SDL_RenderDrawPoint"
  external draw_point2 : Sdlrender.t -> x:int -> y:int -> unit
    = "caml_SDL_RenderDrawPoint2"
  external draw_points : Sdlrender.t -> points:(int * int) array -> unit
    = "caml_SDL_RenderDrawPoints"
  external draw_line : Sdlrender.t -> (int * int) * (int * int) -> unit
    = "caml_SDL_RenderDrawLine"
  external draw_line2 : Sdlrender.t -> p1:int * int -> p2:int * int -> unit
    = "caml_SDL_RenderDrawLine2"
  external draw_lines : Sdlrender.t -> (int * int) array -> unit
    = "caml_SDL_RenderDrawLines"
  external draw_rect : Sdlrender.t -> Sdlrect.t -> unit
    = "caml_SDL_RenderDrawRect"
  external draw_rects : Sdlrender.t -> Sdlrect.t array -> unit
    = "caml_SDL_RenderDrawRects"
  external fill_rect : Sdlrender.t -> Sdlrect.t -> unit
    = "caml_SDL_RenderFillRect"
  external fill_rects : Sdlrender.t -> Sdlrect.t array -> unit
    = "caml_SDL_RenderFillRects"
  external copy :
    Sdlrender.t ->
    texture:Sdltexture.t ->
    ?src_rect:Sdlrect.t -> ?dst_rect:Sdlrect.t -> unit -> unit
    = "caml_SDL_RenderCopy"
  type renderer_flip = Flip_None | Flip_Horizontal | Flip_Vertical
  external copyEx :
    Sdlrender.t ->
    texture:Sdltexture.t ->
    ?src_rect:Sdlrect.t ->
    ?dst_rect:Sdlrect.t ->
    ?angle:float ->
    ?center:int * int -> ?flip:Sdlrender.renderer_flip -> unit -> unit
    = "caml_SDL_RenderCopyEx_bc" "caml_SDL_RenderCopyEx"
  external set_scale : Sdlrender.t -> float * float -> unit
    = "caml_SDL_RenderSetScale"
  external render_present : Sdlrender.t -> unit = "caml_SDL_RenderPresent"
  external clear : Sdlrender.t -> unit = "caml_SDL_RenderClear"
  type renderer_info = {
    name : string;
    max_texture_width : int;
    max_texture_height : int;
  }
  external get_render_drivers : unit -> Sdlrender.renderer_info array
    = "caml_SDL_GetRenderDrivers"
  external read_pixels :
    Sdlrender.t -> ?rect:Sdlrect.t -> Sdlsurface.t -> unit
    = "caml_SDL_RenderReadPixels"
  external set_render_target : Sdlrender.t -> Sdltexture.t option -> unit
    = "caml_SDL_SetRenderTarget"
end