I took a more full-feature approach in reviewing the Anti-Grain Geometry (AGG) Library used by Haiku. The AGG project is still maintained and comes with a decent amount of the project’s history and documentation.
Part of my focus is on SVG compliance. This covers compositing, animation, fonts, scripting, interactivity, clipping and masking, color, painting (filling, strokes, etc), text, gradients and patterns, filter effects, vector effects, basic shapes, styling and rendering.
Anti-Grain Geometry Library download | SourceForge.net
Anti-Grain Geometry - Wikipedia
Tested: AGG 2.7.0-r139, GNU Gnash 0.8.11-git Flash movie player, Inkscape 1.3, WonderBrush 2.1.2-11, SVG Viewer, Matplotlib 3.7.2
These are some of the results of AGG 2.7.0 examples used with a recent Haiku snapshot (i.e. Haiku R1B4 - hrev57256)
Part of the topic was addressed during the conversation:
Here’s an interesting problem I’ve come across: how do you detect invalid perspective transforms like the one shown above? Icon-O-Matic should not try rendering these shapes since AGG likes getting into infinite loops drawing them.
The shape is somewhat interesting, though. It’s the DiskUsage icon, turned into a fractal. Here’s another image showing the fractal in higher resolution.
Edit: The fractal comes from the fact that reference images tile themselves. Disabling …
There is a ticket on the subject:
#17221 (Infinite recursion in agg rasterizer) – Haiku
Haiku has its own patches and solutions, you need to test and modify patches for version 2.7 and 3 forks of AGG have patches and improvements, which are not in the SVN repository!
In addition to the SVN repository there is a ticket with old patches, which were not applied, I opened 2 tickets, I don’t know when they will be answered.
Some good news on that front: the changes were partially applied in r129.
It will be interesting to see how quickly upstream responds to the two tickets you created.
I’m upstreaming one of Haiku’s changes to the agg library at
Anti-Grain Geometry Library / Patches / #9 Fix member initialization order
Let’s see how this goes