DerelictSDL
DerelictSDL is a D binding to Sam Lantinga's Simple
DirectMedia Layer, a cross-platform multimedia library designed to provide
low level access to audio, keyboard, mouse, joystick, 3D hardware via OpenGL,
and 2D video framebuffer. DerelictSDL is implemented
against the 1.2.x series of the SDL library. It will not work with the 1.3.x series,
the version which will eventually become SDL 2.
The current version of DerelictSDL requires at least SDL 1.2.13.
Building
To compile DerelictSDL only, add the DerelictSDL make target to the command line when
compiling Derelict. For example, to build DerelictSDL on Windows with DMD, you would execute
the following:
make -fwin32.mak DerelictSDL DC=DMD
For more information on compiling Derelict libraries, see Building the
Derelict Bindings.
Using
- Always make sure the DerelictSDL source modules are available on your import
path.
- In modules that make use of DerelictSDL, you will need to import the
derelict.sdl.sdl module.
- You must link your application with the DerelictSDL and DerelictUtil libraries.
- Before calling any SDL functions, you need to make a call to DerelictSDL.load().
This will load the shared library.
The following is a complete program that loads DerelictSDL:
import derelict.sdl.sdl;
void main()
{
DerelictSDL.load();
// now you can call SDL functions
}
As with other Derelict bindings, DerelictSDL will throw an exception if an error
occurs while loading the shared library. For more information on Derelict
exceptions, see the documentation for
Using the Derelict Bindings.
Finally, the method DerelictSDL.unload() is provided for convenience. In normal
practice you do not need to call this function, as Derelict will unload the library
automatically when the app exits. You generally should only use this function if
you need to unload DerelictSDL while the application is running or if you disable the
automatic unloading of shared libraries (as per the documentation for the loader module).
Things You Need To Know
- SDL_VideoInfo is defined differently in DerelictSDL than it is in SDL. This is because
the C version makes use of bitfields, which D does not support. Currently, DerelictSDL
replaces all bitfields in the structure definition with a single uint field called
flags. It is still possible to access the individual bitfield flags by using bit
manipulation operators, but unless you know what you are doing it is recommended that you
not do so. Instances of SDL_VideoInfo are created on the C side, not in D. There is
nothing in the C standard which specifies the order of the bits in the bitfield
(i.e. the first field encountered might become the low order or high order bit),
so what may work with one SDL shared library on one platform might not work with an
SDL shared library on another platform (or even on the same platform if compiled
with a different compiler). So please keep in mind that manipulating the flags
field of DerelictSDL's SDL_VideoInfo could result in unexpected consequences.