mirror of
https://github.com/thorvg/thorvg.git
synced 2025-07-27 00:26:51 +00:00
renderer: support duplicate effects
Implement effect duplication functionality for all RenderEffect types to enable proper Scene duplication with effects. issue: https://github.com/thorvg/thorvg/issues/3631
This commit is contained in:
parent
9369642642
commit
e0404b1832
2 changed files with 34 additions and 1 deletions
|
@ -419,6 +419,7 @@ struct RenderEffect
|
||||||
bool valid = false;
|
bool valid = false;
|
||||||
|
|
||||||
virtual ~RenderEffect() {}
|
virtual ~RenderEffect() {}
|
||||||
|
virtual RenderEffect* duplicate() const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct RenderEffectGaussianBlur : RenderEffect
|
struct RenderEffectGaussianBlur : RenderEffect
|
||||||
|
@ -438,6 +439,11 @@ struct RenderEffectGaussianBlur : RenderEffect
|
||||||
inst->type = SceneEffect::GaussianBlur;
|
inst->type = SceneEffect::GaussianBlur;
|
||||||
return inst;
|
return inst;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RenderEffectGaussianBlur* duplicate() const override
|
||||||
|
{
|
||||||
|
return new RenderEffectGaussianBlur(*this);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct RenderEffectDropShadow : RenderEffect
|
struct RenderEffectDropShadow : RenderEffect
|
||||||
|
@ -462,6 +468,11 @@ struct RenderEffectDropShadow : RenderEffect
|
||||||
inst->type = SceneEffect::DropShadow;
|
inst->type = SceneEffect::DropShadow;
|
||||||
return inst;
|
return inst;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RenderEffectDropShadow* duplicate() const override
|
||||||
|
{
|
||||||
|
return new RenderEffectDropShadow(*this);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct RenderEffectFill : RenderEffect
|
struct RenderEffectFill : RenderEffect
|
||||||
|
@ -478,6 +489,11 @@ struct RenderEffectFill : RenderEffect
|
||||||
inst->type = SceneEffect::Fill;
|
inst->type = SceneEffect::Fill;
|
||||||
return inst;
|
return inst;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RenderEffectFill* duplicate() const override
|
||||||
|
{
|
||||||
|
return new RenderEffectFill(*this);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct RenderEffectTint : RenderEffect
|
struct RenderEffectTint : RenderEffect
|
||||||
|
@ -499,6 +515,11 @@ struct RenderEffectTint : RenderEffect
|
||||||
inst->type = SceneEffect::Tint;
|
inst->type = SceneEffect::Tint;
|
||||||
return inst;
|
return inst;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RenderEffectTint* duplicate() const override
|
||||||
|
{
|
||||||
|
return new RenderEffectTint(*this);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct RenderEffectTritone : RenderEffect
|
struct RenderEffectTritone : RenderEffect
|
||||||
|
@ -524,6 +545,11 @@ struct RenderEffectTritone : RenderEffect
|
||||||
inst->type = SceneEffect::Tritone;
|
inst->type = SceneEffect::Tritone;
|
||||||
return inst;
|
return inst;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RenderEffectTritone* duplicate() const override
|
||||||
|
{
|
||||||
|
return new RenderEffectTritone(*this);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class RenderMethod
|
class RenderMethod
|
||||||
|
|
|
@ -272,7 +272,14 @@ struct SceneImpl : Scene
|
||||||
dup->paints.push_back(cdup);
|
dup->paints.push_back(cdup);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (effects) TVGERR("RENDERER", "TODO: Duplicate Effects?");
|
if (effects) {
|
||||||
|
dup->effects = new Array<RenderEffect*>;
|
||||||
|
|
||||||
|
ARRAY_FOREACH(effect, *effects) {
|
||||||
|
auto dupEffect = (*effect)->duplicate();
|
||||||
|
dup->effects->push(dupEffect);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return scene;
|
return scene;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue