Driver Based Architecture
AgateLib operates through a driver or plug-in model where drivers are loaded at startup automatically based on what is available. Your application only needs a reference to AgateLib.dll. Upon initializing AgateLib, it will instantiate drivers to operate through OpenGL or Direct3D, depending on which drivers are present.
Cross Platform Support
Considerable work and testing has gone into ensuring that AgateLib runs as consistently as possible across multiple platforms. Currently supported platforms are Windows, Mac OS X, and Linux. AgateLib is regularly tested on several versions of these platforms in order to ensure that the behavior is consistent.
Ease of Deployment
An application built with AgateLib is easy to deploy. The AgateLib.dll itself has no external dependencies. The recommended drivers AgateOTK (for graphics) and AgateSDL (for audio and joysticks) operate on all platforms, provided native libraries are present. OpenGL is generally already installed on every computer, so this usually amounts to making sure that SDL and SDL_mixer are present. If SDL is not a desirable dependency, then AgateSDL can be swapped out for AgateFMOD or AgateMDX to use FMOD or DirectSound for audio.
Ease of Use
Eighty percent of users will use twenty percent of the code. AgateLib is designed to make that twenty percent of code that you will use as accessible as possibly, giving you code ends up being very readable and easy to maintain.
From day one, being able to use AgateLib to render to a control on a Form has been a goal, and that will never go away. This makes AgateLib ideal for writing game authoring tools or applications which require a complex set controls for user experience as well as smooth animations in the rendering region.
Flexible Coding Structure
With AgateLib, you have complete control over your rendering. You don't have to give up control of your render loop, where it is called, with what frequency, or even how many render loops you have. Of course, you can give up control over the render loop if you prefer, as this eases the coding effort on you and enforces some structure. With AgateLib, you have the choice.
Code - Performance Lineup
Many OOP libraries abstract away the details to the point where two lines of code which look identical can have very different performance characteristics. With AgateLib, expensive operations like copying pixel data from application memory to video memory require explicit method calls which make the intent clear. You never have to hunt for weird performance bugs where, say, you have some surfaces stored in video memory and others not.
AgateLib has been thoroughly tested and optimized. Surfaces are packed into video memory to minimize graphics accelerator state changes, and drawing calls are queued up in order to batch them. These optimizations occur behind the scenes, so all you notice is that your AgateLib game is blazing fast, even on old hardware.