type window type renderer type texture type surface module Scancode : sig type t = | Left | Right | Up | Down | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | N_0 | N_1 | N_2 | N_3 | N_4 | N_5 | N_6 | N_7 | N_8 | N_9 | Space | PageUp | PageDown | Escape end type event = | Unhandled_event | Key_down_event of Scancode.t | Mouse_motion_event of int * int | Mouse_button_event of int * int * bool | Quit_event val init : unit -> unit val quit : unit -> unit module Render : sig val create_window_and_renderer : int * int -> window * renderer val set_draw_color : renderer -> int * int * int -> unit val fill_rect : renderer -> int * int * int * int -> unit val draw_rect : renderer -> int * int * int * int -> unit val render_texture : renderer -> texture -> int * int * int * int -> int * int * int * int -> unit val clear : renderer -> unit val present : renderer -> unit val destroy_renderer : renderer -> unit val destroy_window : window -> unit end module Events : sig val poll_event : unit -> event option end module Timer : sig val get_ticks : unit -> int val delay : int -> unit end module Surface : sig val load_bmp : file:string -> surface val load_bmp_s : s:string -> surface val destroy : surface -> unit val set_color_key : surface -> int * int * int -> unit end module Texture : sig val create_texture_from_surface : renderer -> surface -> texture val destroy : texture -> unit end module type APP = sig type state type app_calls = { app_init : unit -> window * renderer * state; app_iterate : renderer -> state -> unit; app_event : event -> state -> state; app_quit : window -> renderer -> state -> unit; } val app : app_calls end module MakeApp : functor (App : APP) -> sig val run : unit -> unit end