From 47ec94641b0d67cd3aa4fc2efcb11dfbb43e1094 Mon Sep 17 00:00:00 2001 From: lisyarus Date: Wed, 7 Aug 2024 18:48:29 +0300 Subject: [PATCH] Support filter in vecr renderer --- libs/vecr/include/psemek/vecr/full.hpp | 26 ++++++++++++++++++++++ libs/vecr/include/psemek/vecr/renderer.hpp | 2 ++ libs/vecr/source/renderer.cpp | 4 ++++ 3 files changed, 32 insertions(+) create mode 100644 libs/vecr/include/psemek/vecr/full.hpp diff --git a/libs/vecr/include/psemek/vecr/full.hpp b/libs/vecr/include/psemek/vecr/full.hpp new file mode 100644 index 00000000..15e76698 --- /dev/null +++ b/libs/vecr/include/psemek/vecr/full.hpp @@ -0,0 +1,26 @@ +#pragma once + +#include +#include +#include + +namespace psemek::vecr +{ + + struct full + {}; + + inline sdf_sample sdf(full const &, geom::point const &) + { + return { + .value = 0.f, + .gradient = {0.f, 0.f}, + }; + } + + inline geom::box bbox(full const &) + { + return geom::box::full(); + } + +} diff --git a/libs/vecr/include/psemek/vecr/renderer.hpp b/libs/vecr/include/psemek/vecr/renderer.hpp index 6fcfc49b..037bd948 100644 --- a/libs/vecr/include/psemek/vecr/renderer.hpp +++ b/libs/vecr/include/psemek/vecr/renderer.hpp @@ -2,6 +2,7 @@ #include #include +#include #include #include #include @@ -12,6 +13,7 @@ namespace psemek::vecr struct primitive { any mask = {}; + any filter = full{}; float blur = 1.f; float alpha = 1.f; any_colorizer colorizer = {}; diff --git a/libs/vecr/source/renderer.cpp b/libs/vecr/source/renderer.cpp index 4015e79e..7214443c 100644 --- a/libs/vecr/source/renderer.cpp +++ b/libs/vecr/source/renderer.cpp @@ -71,6 +71,10 @@ namespace psemek::vecr { geom::point const center{(x + 0.5f) / samples_, (y + 0.5f) / samples_}; + auto const filter_sample = sdf(primitive.filter, center); + + if (filter_sample.value > aa) continue; + auto const sample = sdf(primitive.mask, center); if (sample.value > aa) continue;