Thanks for the idea though.
I'm going through lazyfoo tuts, and making a high level but also really safe
wrapper while I'm about it.
The high level wrapper builds on top of the really safe low level wrapper I was
working on before.
So eg, my lazyfoo chapter 01 port looks like this:
import ../../my_sdl2_libs/high_level_sdl2
const
SCREEN_WIDTH = 640
SCREEN_HEIGHT = 480
WHITE = (0xFF, 0xFF, 0xFF)
proc main =
var sdl2_context = initSdl2Context(initvideo=true)
var window = sdl2_context.createWindow(title="SDL Tutorial",
width=SCREEN_WIDTH,
height=SCREEN_HEIGHT,
windowShown=true)
var screenSurface = window.getSurface()
screenSurface.fillRect(color=WHITE)
window.updateSurface()
sdl2Context.delay(2.0)
main()
There's no pointers or references used there, all of those are wrapper objects
with built-in Nim destructors, so they also automatically tidy their resources
when they go out of scope.
Also not using OR-based flags, but rather bool arguments.
Nim's named and optional arguments are really awesome, you don't need to use
builder patterns nearly as much as in some other langs.