Anti-Grain Geometry (AGG) is a platform independent C++ graphic rendering library that is designed to be small
It consists of a number of classes and algorithms that allow you to render vectorial objects with
very high quality and very high performance. The core of the library is an original and efficient
algorithm of rendering Anti-Aliased polygons. The initial idea belongs to David Turner and his group -
the authors of excellent software font engine FreeType.
The algorithm is single-pass and does not use the oversampling technique.
The library has all necessary features for using it as a powerful rendering engine:
- Vector path storage with useful algorithms and methods.
- Affine transformations: Rotation, Scaling, Translation, and Skewing.
- Calculation outlines of polygons and polylines.
- Bezier curves interpolator with 1 and 2 control points (conic and cubic Bezier).
- Algorithms of drawing circles and ellipses, as well as circular and elliptical arcs
based on Bezier interpolator.
- An original concept of a pipeline of vector path converters. You can create custom pipelines using
existing algorithms as well as create your own converters and include them into the pipeline.
- Affine transformations of pixel images. All algorithms are applicable to transform pixel images.
Here image areas of any shape can be used. Images are transformed also with using
Anti-Aliasing filters. The algorithms are very efficient and give you very high quality.
- Alpha Channel. Any color value in AGG contains 4 components: Red, Green, Blue, and Alpha.
It means that you can render half-transparent polygons and pixel images. Pixel images can be
transformed with using their brightness histogram as Alpha values.
- Color and Alpha interpolation. The concept of color stencils allows you to render any
polygons with using color and alpha interpolations.
- The library is designed to be platform independent. It does not use any underlying libraries
(except the standard C Runtime Library) and does not rely on any particular architecture or
technology. The general approach to the design of the library is minimum of coupling and
minimum of dependecies. Template mechanism is used actively, but very carefully. Naming
convention is very similar to the one used in the Standard C++ Template Library.