Support filter in vecr renderer

This commit is contained in:
Nikita Lisitsa 2024-08-07 18:48:29 +03:00
parent f69657c826
commit 47ec94641b
3 changed files with 32 additions and 0 deletions

View file

@ -0,0 +1,26 @@
#pragma once
#include <psemek/vecr/sdf.hpp>
#include <psemek/geom/point.hpp>
#include <psemek/geom/box.hpp>
namespace psemek::vecr
{
struct full
{};
inline sdf_sample sdf(full const &, geom::point<float, 2> const &)
{
return {
.value = 0.f,
.gradient = {0.f, 0.f},
};
}
inline geom::box<float, 2> bbox(full const &)
{
return geom::box<float, 2>::full();
}
}

View file

@ -2,6 +2,7 @@
#include <psemek/vecr/sdf.hpp>
#include <psemek/vecr/any.hpp>
#include <psemek/vecr/full.hpp>
#include <psemek/vecr/colorizer.hpp>
#include <psemek/vecr/blend_mode.hpp>
#include <psemek/gfx/pixmap.hpp>
@ -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 = {};

View file

@ -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;