Yea... a Word array that was 65536 for each font you loaded. I modified it to use my sparse array instead to save a ton of memory.

DLLs
Want to bind a procedural variable to a routine in a DLL? Do this:

[code=delphi]var
proc: procedure(msg: pchar);
...
PG.DLL.Bind(proc, "myproc", "myproc.dll");
[/code]

The TPGDLL class will access the dll, see if it's already loaded, if so use it, if not load it in and bind the variable to the specified exported routine. This object can manually load a DLL, return the count and names of all loaded dlls.

Attributes
All classes in PG are derived from TPGObject and this base class implements Attributes. Each object can have up to 256 attributes associated with it. An example of use would be using it to classify enemies or subclass objects in general.

[code=delphi]Obj.Attributes[10] := True;[/code]

The actor list system allows you to act on a group of actors base on their attribute values. If you wanted to remove all the objects on the list or query just those objects you can do so by checking if the attribute is set.

Graphics
PG has many graphics related classes such as:
  • TPGRenderDevice - Manages low-level Direct3D rendering. Supports viewports, swap chains, and primitives.
  • TPGTexture - Represents a Direct3D texture. Various rendering methods, render targets, direct pixel access, copy to/from textures/surface
  • TPGSurface - Represents a Direct3D surface. Can be any size, does not support direct rendering, but bits can be copied to a texture to be rendering.
  • TPGPolygon - A multi segment polygon object. Can be scaled, rotated and transformed.
  • TPGPolyPoint - Implements the PolyPoint collision system.
  • TPGSprite - A manager for texture images. One sprite object is capable of managing all images in your project.
  • TPGImage - Allows rendering of very large images. For example want to render via hardware a 800x600 non-power of two sized image, use TPGImage.
  • TPGBezier - Implements a brazier object.
[br]Audio
A robust audio system that can play most music formats including MP3, OGG, WAV, MOD, S3M and IT. All music formats are treated in the same way, they can be loaded and played as a sound effect or streamed and played as music. So you can have compressed sound effects as ogg files rather than WAVs if you want. You can even stream music from within an archive. Since password protected zip files are supported, applying a GUID for your password to keep your resources secure, your music can be played directly from this archive. Included also is a music player that allows you to playback a list of music on disk or from an archive. If you wanted to have the option of allowing the user to play their own songs, you can do it with PG. You can control the channels, frequency, panning, volume, global volume, control if the music continues to play if the application focus is lost and even dynamically update volume, panning and frequency in real-time based on distance. The music will be updated automatically in a background thread so there is no need to manually call PG.Audio.Update for manual processing.