AgateLib 0.2.5 Release Notes
======================================
AgateLib is much more compatible with Linux now. An OpenGL driver has been written which should get
similar performance to the Direct3D driver. This driver should work on Windows and Linux with
Mono version 1.1.16 or newer. Unfortunately, Mono version 1.1.13.8 seems to be what's available
in the package managers in a lot of Linux distributions. So if your version of Mono is older than
that, you must download a newer version. I've had best luck with installing Mono as a regular user,
_not_ as root.
Some issues may not be resolved in running full-screen apps on Linux. In particular, going full-screen
depends on the presence of the XFree86 video mode extension. This doesn't appear to be installed on
all machines, or worse, it may have different names (libXxf86vm.so or libXxf86vm.so.1 so far) on
different machines. I am searching for a full-screen solution which does not rely on this extension,
as there are other minor issues as well.
Cross-platform audio is supported through the use of the FMOD library. If you wish to distribute FMOD with
your application, you must be aware that FMOD has license restrictions on distribution. A license to distribute
FMOD can be obtained from http://www.fmod.org/ . At the time of this writing, there are several license options
available for FMOD, including a special license for distributing software which is free (as in beer).
AgateLib now uses bitmap fonts. Bitmap fonts are generated from a System.Drawing.Font object. At the moment the
way these fonts look is platform dependent, and it seems that either Mono or X11 does not generate fonts which
look quite as nice as they do on Windows. However, this is still an improvement over the previous method of
creating fonts. In the future, there will be a code model for generating a bitmap font on one platform and
saving it to disk to distribute to other platforms.
Support for reading and writing surface data is included now in the PixelBuffer class. The PixelBuffer
class provides basically an array of bytes to work with. There are also several wrapper methods to help read/write
pixels as well as conversion routines to convert from one pixel format to another.
To increase compatibility for authoring-tool type applications, the System.Drawing replacement classes are
now moved to a different namespace. For updating an existing Agate application which does not use any
System.Drawing calls, you only need to insert a using statement (Imports in VB) for the ERY.AgateLib.Geometry
namespace at the top of each source file. This still doesn't have the level of compatibility I want, because
AgateLib.dll still has a reference to System.Drawing. In a future version of AgateLib, conversion routines
for working with System.Drawing classes will be moved into a separate class, in a separate assembly.
The ability to create lighting effects is now available. This is not supported by the System.Drawing driver.
You create Light objects, add them to a LightManager object, and call its DoLighting method. It can create
some neat effects.
Known Issues:
* 16-bit display formats are not supported.
* Joysticks are not supported in Linux.
* Using a surface as a render target in OpenGL is slow, because rendering occurs in the framebuffer and then
the pixels are copied to the surface.
* Mono on Windows is not supported. It hasn't been tested, so I have no idea if it works or not.
Thanks to:
* Apviper, for his diligent testing efforts when I was trying to figure out how to get this to work on other machines
* Skel1 for writing Ball: Buster in C++ in the first place and introducing me to ClanLib.
* Ravuya for help with making Agate work on Mac OS X.
ChangeLog
======================
AgateOTK has been added for OpenGL support, and AgateFMOD has been added to use the FMOD ex library to play audio.
Both are being tested on Windows with .NET and Linux with Mono.
Important Breaking Changes:
* Moved System.Drawing replacement classes (Color, Rectangle, Point, Size and floating-point versions) to ERY.AgateLib.Geometry namespace.
* Removed ERY.AgateLib.Geometry.Color.FromArgb(System.Drawing.Color) static method. To convert colors from System.Drawing structures, use the ToArgb method.
Obsolete API's:
* Display.EndFrame(bool waitVSync) - Set the Display.VSync flag to indicate whether or not the vertical blank should be waited for.
* DisplayWindow.Closed - Read the DisplayWindow.IsClosed property instead.
* DisplayWindow.ToggleFullScreen - Use SetWindowed and SetFullScreen instead (old version did not allow for changing resolutions when full screen.)
Additions:
* Created OpenGL driver using the OpenTK library to add hardware accelerated support when running under Linux.
* Created FMOD driver for audio support.
* Added PixelBuffer class for direct modification of Surface data.
* Added Licensing information to some files where it was missing.
* Added code to create bitmap fonts from fonts provided by the operating system. These are default for creating fonts in DX and OGL, because they look better than other options.
* Added the ability to introduce lighting effects. Also Surfaces now have a TesselateFactor property which automatically divides them up into smaller rectangles for better lighting effects (per-pixel lighting not supported yet).
Fixes:
* Various minor bugs fixed.
* Various issues associated with running under Mono on Linux have been fixed.
* Reorganized source tree for AgateLib, and moved stuff which is not critical for use by external programs to namespaces under ERY.AgateLib.
* Reabsorbed the platform-specific drivers back into AgateLib.dll. AgateWindows.dll will not be missed.
* Fixed Display.PackAllSurfaces bug.
Changes:
* Packing surfaces is now done entirely in managed memory spaces, so it should be much more robust than the render-to-texture method used previously.
* Is*Blank methods of the Surface class are obsolete now; instead use ReadPixels and then methods on the resulting PixelBuffer.