Let effects declare whether they need source images
Whether an effect works from the loaded photographs is now part of the declarative plug-in contract, next to params(): Effect::needsSources() defaults to true, and blur — which only softens what it is handed — says no and blurs an empty canvas when given nothing. Only the first stage of a cascade ever sees the sources, so chainNeedsSources() just asks the first stage. Both front-ends gate on that instead of on "are there any images": the CLI only refuses an empty batch when the chain wants one, and the interface renders a blur-led chain with no images loaded, saying whichever thing is actually missing. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -26,6 +26,11 @@ Image renderChain(const std::vector<ChainStage>& stages, const std::vector<Image
|
||||
return image;
|
||||
}
|
||||
|
||||
bool chainNeedsSources(const std::vector<ChainStage>& stages) {
|
||||
if (stages.empty() || !stages.front().effect) return false;
|
||||
return stages.front().effect->needsSources();
|
||||
}
|
||||
|
||||
std::string chainTitle(const std::vector<ChainStage>& stages) {
|
||||
std::string text;
|
||||
for (const auto& stage : stages) {
|
||||
|
||||
@@ -25,6 +25,11 @@ struct ChainStage {
|
||||
Image renderChain(const std::vector<ChainStage>& stages, const std::vector<Image>& sources,
|
||||
int width, int height, Rng& rng);
|
||||
|
||||
// Whether the chain has to be given source images. Only the first stage ever
|
||||
// sees them — every later one works on the stage before it — so this is simply
|
||||
// whether the first effect declares that it needs them.
|
||||
bool chainNeedsSources(const std::vector<ChainStage>& stages);
|
||||
|
||||
// "Scanlines → Blur", for window titles and status lines.
|
||||
std::string chainTitle(const std::vector<ChainStage>& stages);
|
||||
|
||||
|
||||
@@ -27,6 +27,11 @@ public:
|
||||
virtual std::string description() const = 0;
|
||||
virtual const std::vector<ParamSpec>& params() const = 0;
|
||||
|
||||
// Whether the effect builds its image out of the loaded source images.
|
||||
// Effects that only transform what they are handed (blur) say no, and a
|
||||
// chain that starts with one of them needs no sources at all.
|
||||
virtual bool needsSources() const { return true; }
|
||||
|
||||
virtual Image render(const std::vector<Image>& sources, int width, int height, Rng& rng,
|
||||
const ParamValues& values) const = 0;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user