AgateLib is built with a driver architecture. A project developed with AgateLib needs only to link to AgateLib.dll. When Agate is initialized, it will search for available drivers in the working directory. These drivers are placed in other .NET assemblies and are loaded dynamically at run-time. This allows an application to switch from using, say, DirectX to OpenGL just by placing the correct file in the folder with the executable, without recompiling the program.
There are three types of drivers currently. Display drivers are used to render graphics, audio drivers are used to play sound and music, and input drivers are used to interface with a joystick.
AgateDrawing.dll is a driver which does all rendering through the classes in the System.Drawing namespace. This is a platform independent implementation of the 2D graphical features supported by AgateLib. It actually performs reasonably well if there's not a whole lot going on. Rotations, coloring and alpha blend probably cause a large performance hit for this driver. Lighting is completely unsupported. This driver is mostly for testing purposes and should not be used in production builds.
To use AgateDrawing.dll, you only need to include it with your application. If any other display driver is present, AgateDrawing will not be chosen to do rendering.
The AgateFMOD driver uses FMOD for cross-platform audio support on Windows and Linux. FMOD also supports playing MIDI files using provided soundbanks. The use of FMOD carries license restrictions, so be sure to pay attention to the FMOD license if you distribute AgateFMOD.dll.
In order to use AgateFMOD.dll in Windows, the fmodex.dll file from the deps directory must be copied to the application directory or the c:\windows\system32 directory. It is recommended to copy it to the application directory, as this simplifies distribution.
In order to use AgateFMOD.dll in Linux, the libfmodex.so.4.04.43 and AgateFMOD.dll.config files must be placed in the same directory as AgateFMOD.dll. Separate distributions for Linux and Windows do not need to be created; you can include the Linux and Windows dependencies in the same directory with no problems, other than a startup warning message on Linux, but this is only seen when running the application through a terminal window.
AgateMDX.dll contains a complete set of drivers, video, audio and input using Managed DirectX. Obviously, this is a Windows specific implementation. All drawing calls are done through Direct3D, so hardware acceleration is available for rotations, coloring, alpha blending and lighting. Performance with this driver is quite good, especially compared to AgateDrawing.dll.
Audio support is provided through Managed DirectSound and the DirectX.AudioVideoPlayback class. These to not provide very fine-grained control over how sounds play, so the AgateFMOD.dll driver is preferred.
Managed DirectInput provides Joystick support. There is currently no support for force feedback, either through the driver or the AgateLib interface, mainly because I do not have a force feedback joystick to test it with.
AgateMDX requires an up-to-date installation of DirectX on whatever target machines an Agate application is being run on, as well as an installation of the appropriate Managed DirectX assemblies. These are not included with a typical DirectX install that most end-users would have performed when they installed their video drivers. An installation for the DirectX runtime files is included in the Agate download. So, if you use AgateMDX.dll then you will require an extra installation step for most anyone who uses your program.
AgateMDX may perform slightly better than AgateOTK.dll as it's more mature. In what tests I have done, I have not seen a significant difference in performance between the two except under specific circumstances.
AgateOTK.dll is display driver using OpenGL through the OpenTK interop library. OpenTK provides some nifty features such as automatic context creation for Windows, Linux and Mac OS X, so AgateOTK provides hardware-accelerated OpenGL support for these operating systems. The framerate in both Windows and Linux is comparable to the framerate obtained using AgateMDX on Windows.
In order to use AgateOTK.dll, the OpenTK.dll and OpenTK.Utilities.dll files must be included. In order to support running on Mono on non-Windows platforms, the OpenTK.dll.config file must be manually copied into the same directory as the OpenTK.dll file. This config file provides mapping from the dll names used in Windows to the dynamic libraries (.so or .dylib) used in Linux and Mac OS.
The AgateSDL driver uses Simple DirectMedia Layer for sound and joystick input. SDL is LGPL licensed, operates on Windows, Linux and MacOS X, and (in most cases) should support playing Ogg Vorbis and midi files.