Release Notes

Here will be a catalog of the release notes for each version of AgateLib.

Version 0.1.8

AgateLib 0.1.8 Release Notes
======================================

Requires .NET 2.0 or Mono.

Deployment procedure, with respect to DirectX runtime files is unknown at the moment. I
have included what I think is the minimum required files for the DirectX runtime distributable
to work with the AgateMDX library in the dxredist directory of the archives.

Known Issues:
* VSync is not properly supported in the Direct3D driver.
* There's a problem with Display.PackAllSurfaces where it does not copy surfaces correctly.
* Direct3D driver does not work with Mono. If you are running in Mono, delete AgateMDX.dll from your application directory.

Version 0.2.1

AgateLib 0.2.1 Release Notes
======================================

AgateLib applications should run under Linux now. I have successfully tested them using the Mono VMWare SuSE image on my computer. Unfortunately, this is the limit to my ability to test on Linux at the moment. The serious development of an OpenGL driver is postponed until the next version of Tao, so hardware support under Linux will not be available until then. Windows platform-specific P/Invoke methods have been moved to the AgateWindows.dll assembly. This was required for Linux support. Using AgateWindows.dll should provide a speed-up and greater memory efficiency by providing access to PeekMessage and high-resolution timers. This benefit may be negligible; more testing needs to be done. The source code has been restructured a bit.

In the version 0.2.2 the System.Drawing replacement structures Color, Point, PointF, Rectangle, RectangleF, Size, SizeF will be moved to the ERY.AgateLib.Geometry namespace. You can prepare for this by adding a using statement for this namespace now. This change will help prevent naming conflicts which occur when mixing Windows.Forms components with AgateLib. This should not be an issue for game applications, but it is an issue for tools. The resource classes ResourceManager and Resource have been moved to the ERY.AgateLib.Resources namespace. Display.DeltaTime will now never return zero, so it's safe to divide by it. However, due to the nature of this hack, if a high resolution platform-dependent timer is unavailable (such as the one in AgateWindows), this will cap your framerate at whatever the resolution of System.Environment.GetTickCount() is. On my test machine, this is 64 fps.

Known Issues:
* No hardware acceleration support in Mono.
* Playing .mid files as music won't play more than one. In the future, the implementation will probably switch to FMOD instead of DirectX.AudioVideoPlayback.

Changes:
* Restructured storage for registered drivers in Registrar class to allow easier addition of new types of drivers.
* Added platform specific drivers to provide P/Invoke methods to increase speed and memory efficiency.
* Agate applications should run under Linux with a proper Mono installation now.
* Added debug messages when non-cross-platform paths are used, in particular when the backslash (\) is used as a path separator.
* Organized some of the source code in different directories.
* Registrar.Initialize is now internal instead of public. If you are calling it, use Core.Initialize instead.
* Added a hack to make sure the Display.DeltaTime never returns zero.
* Fixed a Sprite bug where if a Clone'd sprite was Dispose'd, the shared surface data would also be disposed. Now SpriteFrames are reference counted to resolve this.
* Fixed a bug in Sound and Music objects where they might not respond to StopAllSounds/Music.

Version 0.2.5

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.

Version 0.3.0

AgateLib 0.3.0 Release Notes
======================================

There are several major additions to this version of AgateLib, the most notable
is support for MacOS X without running through X11. To have support for MacOS
and Linux use the AgateOTK driver, which uses OpenGL as a backend. This driver
also works on Windows, so there really is little reason to use AgateMDX any
more.

Support for using SDL for audio and joystick input has been implemented. This
is the recommended means of getting audio and joystick support under Linux and
MacOS. In fact, for creating a cross-platform distribution using AgateOTK and
AgateSDL probably creates the least amount of headache.

Several parts of the API have been reorganized into separate namespaces. For
the most part this means adding statements like "using AgateLib.DisplayLib" to
your source files. A lot of things have been deprecated in this release, and
shortly following the release of 0.3.0 there will be a release of 0.3.1 which
removes all deprecated features.

Most of the testing on Linux and Mac OS X for this release has been done under
Mono 2.0 and 2.2. Everything should probably work on older versions of Mono,
down to 1.2.6 maybe. Ubuntu includes Mono 1.9.1 which seems to work well but
has not been thoroughly tested.