sig
  type t
  type window_flags =
      FullScreen
    | OpenGL
    | Shown
    | Hidden
    | Borderless
    | Resizable
    | Minimized
    | Maximized
    | Input_Grabbed
    | Input_Focus
    | Mouse_Focus
    | FullScreen_Desktop
    | Foreign
    | Allow_HighDPI
  type window_pos = [ `centered | `pos of int | `undefined ]
  external create :
    title:string ->
    pos:Sdlwindow.window_pos * Sdlwindow.window_pos ->
    dims:int * int -> flags:Sdlwindow.window_flags list -> Sdlwindow.t
    = "caml_SDL_CreateWindow"
  external create2 :
    title:string ->
    x:Sdlwindow.window_pos ->
    y:Sdlwindow.window_pos ->
    width:int ->
    height:int -> flags:Sdlwindow.window_flags list -> Sdlwindow.t
    = "caml_SDL_CreateWindow2_bc" "caml_SDL_CreateWindow2"
  external set_title : window:Sdlwindow.t -> title:string -> unit
    = "caml_SDL_SetWindowTitle"
  external show : Sdlwindow.t -> unit = "caml_SDL_ShowWindow"
  external hide : Sdlwindow.t -> unit = "caml_SDL_HideWindow"
  external raise_win : Sdlwindow.t -> unit = "caml_SDL_RaiseWindow"
  external maximize : Sdlwindow.t -> unit = "caml_SDL_MaximizeWindow"
  external minimize : Sdlwindow.t -> unit = "caml_SDL_MinimizeWindow"
  external restore : Sdlwindow.t -> unit = "caml_SDL_RestoreWindow"
  external get_surface : Sdlwindow.t -> Sdlsurface.t
    = "caml_SDL_GetWindowSurface"
  external update_surface : Sdlwindow.t -> unit
    = "caml_SDL_UpdateWindowSurface"
  external set_brightness : Sdlwindow.t -> brightness:float -> unit
    = "caml_SDL_SetWindowBrightness"
  external get_brightness : Sdlwindow.t -> float
    = "caml_SDL_GetWindowBrightness"
  external destroy : Sdlwindow.t -> unit = "caml_SDL_DestroyWindow"
  external get_size : Sdlwindow.t -> int * int = "caml_SDL_GetWindowSize"
end