mirror of
https://github.com/thorvg/thorvg.git
synced 2025-07-23 14:48:24 +00:00
engine: introduce scene effect dispose render method
to correctly remove RenderDate from effects it must be removed in the renderer a new method has been added to the RenderMethod interface
This commit is contained in:
parent
ebe4935dd0
commit
0ecd2c0fd4
8 changed files with 29 additions and 6 deletions
|
@ -968,6 +968,12 @@ bool GlRenderer::render(TVG_UNUSED RenderCompositor* cmp, TVG_UNUSED const Rende
|
|||
}
|
||||
|
||||
|
||||
void GlRenderer::dispose(TVG_UNUSED RenderEffect* effect)
|
||||
{
|
||||
//TODO: dispose the effect
|
||||
}
|
||||
|
||||
|
||||
ColorSpace GlRenderer::colorSpace()
|
||||
{
|
||||
return ColorSpace::Unknown;
|
||||
|
|
|
@ -90,6 +90,7 @@ public:
|
|||
void prepare(RenderEffect* effect, const Matrix& transform) override;
|
||||
bool region(RenderEffect* effect) override;
|
||||
bool render(RenderCompositor* cmp, const RenderEffect* effect, bool direct) override;
|
||||
void dispose(TVG_UNUSED RenderEffect* effect) override;
|
||||
|
||||
static GlRenderer* gen();
|
||||
static int init(TVG_UNUSED uint32_t threads);
|
||||
|
|
|
@ -719,6 +719,13 @@ bool SwRenderer::render(RenderCompositor* cmp, const RenderEffect* effect, bool
|
|||
}
|
||||
|
||||
|
||||
void SwRenderer::dispose(RenderEffect* effect)
|
||||
{
|
||||
free(effect->rd);
|
||||
effect->rd = nullptr;
|
||||
}
|
||||
|
||||
|
||||
ColorSpace SwRenderer::colorSpace()
|
||||
{
|
||||
if (surface) return surface->cs;
|
||||
|
|
|
@ -65,6 +65,7 @@ public:
|
|||
void prepare(RenderEffect* effect, const Matrix& transform) override;
|
||||
bool region(RenderEffect* effect) override;
|
||||
bool render(RenderCompositor* cmp, const RenderEffect* effect, bool direct) override;
|
||||
void dispose(RenderEffect* effect) override;
|
||||
|
||||
static SwRenderer* gen();
|
||||
static bool init(uint32_t threads);
|
||||
|
|
|
@ -263,10 +263,7 @@ struct RenderEffect
|
|||
SceneEffect type;
|
||||
bool valid = false;
|
||||
|
||||
virtual ~RenderEffect()
|
||||
{
|
||||
free(rd);
|
||||
}
|
||||
virtual ~RenderEffect() {}
|
||||
};
|
||||
|
||||
struct RenderEffectGaussianBlur : RenderEffect
|
||||
|
@ -409,6 +406,7 @@ public:
|
|||
virtual void prepare(RenderEffect* effect, const Matrix& transform) = 0;
|
||||
virtual bool region(RenderEffect* effect) = 0;
|
||||
virtual bool render(RenderCompositor* cmp, const RenderEffect* effect, bool direct) = 0;
|
||||
virtual void dispose(RenderEffect* effect) = 0;
|
||||
};
|
||||
|
||||
static inline bool MASK_REGION_MERGING(MaskMethod method)
|
||||
|
|
|
@ -299,7 +299,10 @@ struct Scene::Impl : Paint::Impl
|
|||
Result resetEffects()
|
||||
{
|
||||
if (effects) {
|
||||
ARRAY_FOREACH(p, *effects) delete(*p);
|
||||
ARRAY_FOREACH(p, *effects) {
|
||||
renderer->dispose(*p);
|
||||
delete(*p);
|
||||
}
|
||||
delete(effects);
|
||||
effects = nullptr;
|
||||
}
|
||||
|
|
|
@ -483,6 +483,12 @@ bool WgRenderer::render(TVG_UNUSED RenderCompositor* cmp, TVG_UNUSED const Rende
|
|||
}
|
||||
|
||||
|
||||
void WgRenderer::dispose(TVG_UNUSED RenderEffect* effect)
|
||||
{
|
||||
//TODO: dispose the effect
|
||||
}
|
||||
|
||||
|
||||
bool WgRenderer::preUpdate()
|
||||
{
|
||||
return true;
|
||||
|
|
|
@ -56,6 +56,7 @@ public:
|
|||
void prepare(TVG_UNUSED RenderEffect* effect, TVG_UNUSED const Matrix& transform) override;
|
||||
bool region(RenderEffect* effect) override;
|
||||
bool render(RenderCompositor* cmp, const RenderEffect* effect, bool direct) override;
|
||||
void dispose(TVG_UNUSED RenderEffect* effect) override;
|
||||
|
||||
static WgRenderer* gen();
|
||||
static bool init(uint32_t threads);
|
||||
|
|
Loading…
Add table
Reference in a new issue