Experimental 2D rendering engine from scratch

flabbet

We've been using Skia as our rendering engine for PixiEditor since the beginning. It's an amazing piece of software, but as any general purpose framework/library, it is great until it's not.

Even though I sworn this is the last thing I am gonna reinvent from scratch, here I am. Building a 2D rendering engine on top of Vulkan. I'm gonna call it Arco

My initial goal is to explore whether we can do most of the processing on unpremultiplied surfaces, to save some precious bytes. So far it seems that yes! Maybe I am not far enough into development to see obvious problems.

Got the circles renderin!

circles.png

To my big surprise, this simple scene is rendering 3-4 times faster than Skia (well, Ganesh backend, didn't test Graphite yet). Additionally, I managed to get more pleasant anti-aliasing visuals for small circles. Here's Skia

skiaci.png

The anti aliasing is alternating in the samples, every second circle is anti-aliased.

Arco on the left, Skia on the right:

aa.png

Zoomed out:

aazoo.png

Even more:

aazoomed.png

Slight difference, yet it is visible.

I followed this fantastic blog post about analytical anti-aliasing. It's amazing, one of the best made blog posts I've read https://blog.frost.kiwi/analytical-anti-aliasing/

Long live SDFs!

Sign up for our email newsletter:
 

Comments

Comment

Currently, this renderer is a part of Drawie - rendering backend for PixiEditor. I might make a separate repo one day, but for now feel free to check the source code there!