Currently valora uses lyon for tessellation. Lyon does not handle complex self intersecting polygons well, especially small ones. It often crashes, returns an error, or enters infinite loops. It is not just lyon; I tested libtess2 as well. My understanding is that tessellation necessarily struggles with these inputs especially if it the vertices have small values.
The amicola branch implements a replacement for the tessellator. It is a rasterizer that generates boundary segments and fill spans from flat paths which the GPU can rasterize instead of triangles. This algorithm is more robust against complex input and can eventually be migrated entirely to the GPU.
Currently valora uses lyon for tessellation. Lyon does not handle complex self intersecting polygons well, especially small ones. It often crashes, returns an error, or enters infinite loops. It is not just lyon; I tested libtess2 as well. My understanding is that tessellation necessarily struggles with these inputs especially if it the vertices have small values.
The
amicolabranch implements a replacement for the tessellator. It is a rasterizer that generates boundary segments and fill spans from flat paths which the GPU can rasterize instead of triangles. This algorithm is more robust against complex input and can eventually be migrated entirely to the GPU.