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()
|
ColorSpace GlRenderer::colorSpace()
|
||||||
{
|
{
|
||||||
return ColorSpace::Unknown;
|
return ColorSpace::Unknown;
|
||||||
|
|
|
@ -90,6 +90,7 @@ public:
|
||||||
void prepare(RenderEffect* effect, const Matrix& transform) override;
|
void prepare(RenderEffect* effect, const Matrix& transform) override;
|
||||||
bool region(RenderEffect* effect) override;
|
bool region(RenderEffect* effect) override;
|
||||||
bool render(RenderCompositor* cmp, const RenderEffect* effect, bool direct) override;
|
bool render(RenderCompositor* cmp, const RenderEffect* effect, bool direct) override;
|
||||||
|
void dispose(TVG_UNUSED RenderEffect* effect) override;
|
||||||
|
|
||||||
static GlRenderer* gen();
|
static GlRenderer* gen();
|
||||||
static int init(TVG_UNUSED uint32_t threads);
|
static int init(TVG_UNUSED uint32_t threads);
|
||||||
|
|
|
@ -691,7 +691,7 @@ bool SwRenderer::render(RenderCompositor* cmp, const RenderEffect* effect, bool
|
||||||
TVGERR("SW_ENGINE", "Not supported grayscale Gaussian Blur!");
|
TVGERR("SW_ENGINE", "Not supported grayscale Gaussian Blur!");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (effect->type) {
|
switch (effect->type) {
|
||||||
case SceneEffect::GaussianBlur: {
|
case SceneEffect::GaussianBlur: {
|
||||||
return effectGaussianBlur(p, request(surface->channelSize, true), static_cast<const RenderEffectGaussianBlur*>(effect));
|
return effectGaussianBlur(p, request(surface->channelSize, true), static_cast<const RenderEffectGaussianBlur*>(effect));
|
||||||
|
@ -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()
|
ColorSpace SwRenderer::colorSpace()
|
||||||
{
|
{
|
||||||
if (surface) return surface->cs;
|
if (surface) return surface->cs;
|
||||||
|
|
|
@ -65,6 +65,7 @@ public:
|
||||||
void prepare(RenderEffect* effect, const Matrix& transform) override;
|
void prepare(RenderEffect* effect, const Matrix& transform) override;
|
||||||
bool region(RenderEffect* effect) override;
|
bool region(RenderEffect* effect) override;
|
||||||
bool render(RenderCompositor* cmp, const RenderEffect* effect, bool direct) override;
|
bool render(RenderCompositor* cmp, const RenderEffect* effect, bool direct) override;
|
||||||
|
void dispose(RenderEffect* effect) override;
|
||||||
|
|
||||||
static SwRenderer* gen();
|
static SwRenderer* gen();
|
||||||
static bool init(uint32_t threads);
|
static bool init(uint32_t threads);
|
||||||
|
|
|
@ -263,10 +263,7 @@ struct RenderEffect
|
||||||
SceneEffect type;
|
SceneEffect type;
|
||||||
bool valid = false;
|
bool valid = false;
|
||||||
|
|
||||||
virtual ~RenderEffect()
|
virtual ~RenderEffect() {}
|
||||||
{
|
|
||||||
free(rd);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct RenderEffectGaussianBlur : RenderEffect
|
struct RenderEffectGaussianBlur : RenderEffect
|
||||||
|
@ -409,6 +406,7 @@ public:
|
||||||
virtual void prepare(RenderEffect* effect, const Matrix& transform) = 0;
|
virtual void prepare(RenderEffect* effect, const Matrix& transform) = 0;
|
||||||
virtual bool region(RenderEffect* effect) = 0;
|
virtual bool region(RenderEffect* effect) = 0;
|
||||||
virtual bool render(RenderCompositor* cmp, const RenderEffect* effect, bool direct) = 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)
|
static inline bool MASK_REGION_MERGING(MaskMethod method)
|
||||||
|
|
|
@ -299,7 +299,10 @@ struct Scene::Impl : Paint::Impl
|
||||||
Result resetEffects()
|
Result resetEffects()
|
||||||
{
|
{
|
||||||
if (effects) {
|
if (effects) {
|
||||||
ARRAY_FOREACH(p, *effects) delete(*p);
|
ARRAY_FOREACH(p, *effects) {
|
||||||
|
renderer->dispose(*p);
|
||||||
|
delete(*p);
|
||||||
|
}
|
||||||
delete(effects);
|
delete(effects);
|
||||||
effects = nullptr;
|
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()
|
bool WgRenderer::preUpdate()
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -56,6 +56,7 @@ public:
|
||||||
void prepare(TVG_UNUSED RenderEffect* effect, TVG_UNUSED const Matrix& transform) override;
|
void prepare(TVG_UNUSED RenderEffect* effect, TVG_UNUSED const Matrix& transform) override;
|
||||||
bool region(RenderEffect* effect) override;
|
bool region(RenderEffect* effect) override;
|
||||||
bool render(RenderCompositor* cmp, const RenderEffect* effect, bool direct) override;
|
bool render(RenderCompositor* cmp, const RenderEffect* effect, bool direct) override;
|
||||||
|
void dispose(TVG_UNUSED RenderEffect* effect) override;
|
||||||
|
|
||||||
static WgRenderer* gen();
|
static WgRenderer* gen();
|
||||||
static bool init(uint32_t threads);
|
static bool init(uint32_t threads);
|
||||||
|
|
Loading…
Add table
Reference in a new issue