module Tsdl:sig
..end
Consult the binding conventions, the binding coverage and examples of use. Given the thinness of the binding most functions are documented by linking directly to SDL's own documentation.
Open the module to use it, this defines only the module Sdl
in
your scope.
Note. The module initialization code calls SDL_SetMainReady.
References
Release 0.8.0 — SDL version 2.0.3 — Daniel Bünzli <daniel.buenzl i@erratique.ch>
module Sdl:sig
..end
C names are transformed as follows. The SDL_
is mapped to the
module name Tsdl.Sdl
, for the rest add an underscore between each
minuscule and majuscule and lower case the result
(e.g. SDL_GetError
maps to Tsdl.Sdl.get_error
). Part of the name
may also be wrapped by a module, (e.g. SDL_INIT_VIDEO becomes
Tsdl.Sdl.Init.video
). If you open Tsdl
, your code will look
mostly like SDL code but in accordance with OCaml's programming
conventions. Exceptions to the naming convention do occur for
technical reasons.
All functions that return an Tsdl.Sdl.result
have the string
returned by Sdl.get_error ()
in the `Error _
case.
Most bit fields and enumerants are not mapped to variants, they
are represented by OCaml values of a given abstract type in a
specific module with a composition operator to combine them and a
testing operator to test them. The flags for initializing SDL in the
module Tsdl.Sdl.Init
is an example of that:
match Sdl.init Sdl.Init.(video + timer + audio) with
| `Error -> ...
| `Ok () -> ...
Using variants in that case is inconvenient for the binding
function and of limited use since most of the time bit fields are
given to setup state and, as such, are less likley to be used for
pattern matching.
To use Tsdl
in the toplevel with findlib
just issue:
> #use "topfind";;
> #require "tsdl";;
This automatically loads the library and opens the Tsdl
module.
The following is the minimal you need to get a working OpenGL window with SDL.
open Tsdl
let log_err fmt =
let k msg = Sdl.log "%s: %s@." msg (Sdl.get_error ()) in
Format.ksprintf k fmt
let main () = match Sdl.init Sdl.Init.video with
| `Error -> log_err "Init error"; exit 1
| `Ok () ->
match Sdl.create_window ~w:640 ~h:480 "SDL OpenGL" Sdl.Window.opengl with
| `Error -> log_err "Create window error"; exit 1
| `Ok w ->
Sdl.delay 3000l;
Sdl.destroy_window w;
Sdl.quit ();
exit 0
let () = main ()
This can be compiled to byte and native code with:
> ocamlfind ocamlc -package tsdl -linkpkg -o min.byte min.ml > ocamlfind ocamlopt -package tsdl -linkpkg -o min.native min.ml