1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-28 13:07:46 +00:00

LibGfx: Implement new antialiased filled path rasterizer

This is an implementation of the scanline edge-flag algorithm for
antialiased path filling described here:
https://mlab.taik.fi/~kkallio/antialiasing/EdgeFlagAA.pdf

The initial implementation does not try to implement every possible
optimization in favour of keeping things simple. However, it does
support:

   - Both evenodd and nonzero fill rules
   - Applying paint styles/gradients
   - A range of samples per pixel (8, 16, 32)
   - Very nice antialiasing :^)

This replaces the previous path filling code, that only really applied
antialiasing in the x-axis.

There's some very nice improvements around the web with this change,
especially for small icons. Strokes are still a bit wonky, as they don't
yet use this rasterizer, but I think it should be possible to convert
them to do so.
This commit is contained in:
MacDue 2023-05-31 19:02:00 +01:00 committed by Andreas Kling
parent e4adaa2d20
commit 48fa8f97d3
6 changed files with 536 additions and 324 deletions

View file

@ -8,7 +8,7 @@ set(SOURCES
Color.cpp
CursorParams.cpp
DeltaE.cpp
FillPathImplementation.cpp
EdgeFlagPathRasterizer.cpp
Filters/ColorBlindnessFilter.cpp
Filters/FastBoxBlurFilter.cpp
Filters/LumaFilter.cpp