fn greedy_mesh<'a, M: PartialEq, D: 'a, FA, FL, FG, FO, FS, FP, FT, A: AtlasData, Allocator: AtlasAllocator>(
    atlas: &mut Allocator,
    atlas_size: &mut Vec2<u16>,
    max_size: Vec2<u16>,
    _: GreedyConfig<D, FA, FL, FG, FO, FS, FP, FT>
) -> Box<SuspendedMesh<'a, A>>
where FA: for<'r> FnMut(&'r mut D, Vec3<i32>) -> f32 + 'a, FL: for<'r> FnMut(&'r mut D, Vec3<i32>) -> f32 + 'a, FG: for<'r> FnMut(&'r mut D, Vec3<i32>) -> f32 + 'a, FO: for<'r> FnMut(&'r mut D, Vec3<i32>) -> bool + 'a, FS: for<'r> FnMut(&'r mut D, Vec3<i32>, Vec3<i32>, Vec2<Vec3<i32>>) -> Option<(bool, M)>, FP: FnMut(Vec2<u16>, Vec2<Vec2<u16>>, Vec3<f32>, Vec2<Vec3<f32>>, Vec3<f32>, &M), FT: for<'r> FnMut(<A::SliceMut<'_> as Iterator>::Item, &'r mut D, Vec3<i32>, u8, u8, bool) + 'a,