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