#pragma once #include "core/effect.hpp" namespace effector { // Pushes every pixel along a smooth random noise field: a haze at low strength, // melted paint at high. The swirl mode follows the field's contour lines, // which turns the image into eddies instead of ripples. // A pure transform: it needs no source images, and leading a chain with // sources loaded it starts from a crop of a randomly chosen one. class WarpEffect : public Effect { public: std::string name() const override { return "warp"; } std::string title() const override { return "Warp"; } std::string description() const override { return "Pushes every pixel along a smooth random noise field, from a gentle haze to " "molten eddies."; } const std::vector& params() const override; bool needsSources() const override { return false; } Image render(const std::vector& sources, int width, int height, Rng& rng, const ParamValues& values) const override; }; } // namespace effector