Sounds great! This is an item in my TODO list, also as "thin" bindings via ctypes. I agree with leaving the nice abstraction to a higher level layer -- that generally happens anyway in a nontrivial project. I have a controller and joystick, but no force. And some apps to port to SDL2 to test with. Most of my use is the event system. Aside from that I just set up a window for OpenGL. Setting things up and installing once I send this email... :) On Mon, Dec 16, 2013 at 11:11 PM, Daniel Bünzli wrote: > Hello, > > I have written thin bindings to SDL 2 using ocaml-ctypes. The binding > is finished but should be considered unstable: it was not thoroughly > tested and may still change as it has not been *used* yet. The purpose > of this unstable release is to: > > 1) Iron out the install procedure and test on a variety of platforms. > 2) Get feedback about the design of the binding (see below). > > More precisely, apart from the eventual bugs, I'm interested in > getting feedback in the following areas: > > * I used an 'a result = [ `Error | `Ok of 'a ] rather than an exception > for functions that return error codes/null is error. I tend to lean > on exceptionless designs but I'm still unsure whether it is a good > idea that case. One of the problems is that SDL doesn't make a clear > distinction (at the signature level *and* in the documentation) > between programming errors (invalid_arg), exceptional errors > (e.g. out of memory) and non-exceptional errors (e.g. could not > access/setup a resource). > > * The signature/approach of certain binding functions may be disputable > or may need change to achieve reasonable performance. > > * Testing the binding to the joystick/game controller/force feedback api, > I have none of these things in my hands. > > I welcome discussions/ideas about these points and the general design > of the binding on github's issue tracker (http://github.com/dbuenzli/tsdl) > > Note that the philosophy of the binding is to be "thin", that is a > mostly type-safe(r), minimal, hopefully efficient, one-to-one > binding. This means that I'm not interested in prettyfing the C API > like OCamlSDL does. I expect tsdl code to look like C SDL code > (including the inconsistent naming schemes) and the binding to be used > by programmers to build higher-level, more OCaml friendly, abstractions. > > To install (only tested on osx and linux so far) you'll need at least SDL > 2.0.1 > installed on your system. Then: > > opam repo add erratique-u http://erratique.ch/software/opam/unreleased > opam update && opam install tsdl > > On osx 10.8.5 with OCaml 4.01.0 there's a heisenbug I couldn't track so far > (see [1] for more info). Use 4.00.1 instead for now but note that the > binding > takes a long time to compile (~8 min on my machine) with that. > > If you want to hack the sources: > > git clone http://github.com/dbuenzli/tsdl > cd tsdl && ./build test.native && ./test.native > > The documentation of the binding is here: > > http://erratique.ch/software/tsdl/doc/Tsdl > > Best, > > Daniel > > [1] http://lists.ocaml.org/pipermail/ctypes/2013-December/000027.html > > P.S. If anyone wonders, the existing OCamlSDL is a very good binding > to SDL 1.X, but SDL 2.0 is an entirely new, incompatible, API. Besides > SDL 2.0 changed to a zlib license, tsdl is under BSD3, OCamlSDL is > LGPL. > > > -- > Caml-list mailing list. Subscription management and archives: > https://sympa.inria.fr/sympa/arc/caml-list > Beginner's list: http://groups.yahoo.com/group/ocaml_beginners > Bug reports: http://caml.inria.fr/bin/caml-bugs >