Home

Awesome

High level SDL 3.0 shared library wrapper for Nim

nsdl3 is a high level SDL 3.0 shared library wrapper for Nim.

Features

WARNING: Keep in mind SDL3 API is not yet stable.

NOTE: Not everything is implemented yet.

NOTE: This is a mirror of my local git repository.

API

Original C SDL_ prefix is dropped:

Refer to the documentation for the complete list of changes.

Installation

git clone https://github.com/amnr/nsdl3/
cd nsdl3
nimble install

Configuration

You can disable functions you don't use. All function groups are enabled by default.

GroupDefineFunctions Defined In
Audiosdl3.audio=0<SDL3/SDL_audio.h>
Blend Modesdl3.blendmode=0<SDL3/SDL_blendmode.h>
Clipboardsdl3.clipboard=0<SDL3/SDL_clipboard.h>
Gamepadsdl3.gamepad=0<SDL3/SDL_gamepad.h>
Gesturesdl3.gesture=0<SDL3/SDL_gesture.h>
Hapticsdl3.haptic=0<SDL3/SDL_haptic.h>
HID APIsdl3.hidapi=0<SDL3/SDL_hidapi.h>
Hintssdl3.hints=0<SDL3/SDL_hints.h>
Joysticksdl3.joystick=0<SDL3/SDL_joystick.h>
Keyboardsdl3.keyboard=0<SDL3/SDL_keyboard.h>
Message Boxsdl3.messagebox=0<SDL3/SDL_messagebox.h>
Mousesdl3.mouse=0<SDL3/SDL_mouse.h>
Pensdl3.pen=0<SDL3/SDL_pen.h>
Propertiessdl3.mouse=0<SDL3/SDL_mouse.h>
Sensorsdl3.properties=0<SDL3/SDL_properties.h>
Touchsdl3.touch=0<SDL3/SDL_touch.h>
Vulkansdl3.vulkan=0<SDL3/SDL_vulkan.h>

For example if you don't need audio functions compile with:

nim c -d=sdl3.audio=0 file(s)

Basic Usage

import nsdl3

proc main() =
  # Load all symbols from SDL3 shared library.
  # This must be the first proc called.
  if not open_sdl3_library():
    echo "Failed to load SDL3 library: ", last_sdl3_error()
    quit QuitFailure
  defer:
    close_sdl3_library()

  # Initialize the library.
  if not Init INIT_VIDEO:
    echo "Error initializing SDL3: ", GetError()
    quit QuitFailure
  defer:
    Quit()

  # Create the window.
  let window = CreateWindow("Test Window", 640, 480)
  if window == nil:
    echo "Error creating window: ", GetError()
    quit QuitFailure
  defer:
    DestroyWindow window

  # Create window renderer.
  let renderer = CreateRenderer window
  if renderer == nil:
    echo "Error creating renderer: ", GetError()
    quit QuitFailure
  defer:
    DestroyRenderer renderer

  # Clear the window.
  discard RenderClear renderer
  RenderPresent renderer

  # Basic event loop.
  var event: Event
  while true:
    while PollEvent event:
      case event.typ
      of EVENT_QUIT:
        return
      else:
       discard
    Delay 100

when isMainModule:
  main()

You can find more examples here.

Author

License

nlibsdl2 is released under:

Pick the one you prefer (or all).