mirror of
https://github.com/thorvg/thorvg.git
synced 2025-07-28 09:05:52 +00:00
common: deleted paints only when they are no longer valid.
Pictures can be shared with Animation instances. The condition can now be distinguished by checking the `dispose()` return value.
This commit is contained in:
parent
c97c60b900
commit
9af89f9f18
5 changed files with 12 additions and 13 deletions
|
@ -66,9 +66,10 @@ struct Canvas::Impl
|
|||
//Free paints
|
||||
if (free) {
|
||||
for (auto paint : paints) {
|
||||
paint->pImpl->dispose(*renderer);
|
||||
if (paint->pImpl->dispose(*renderer)) {
|
||||
delete(paint);
|
||||
}
|
||||
}
|
||||
paints.clear();
|
||||
}
|
||||
drawing = false;
|
||||
|
|
|
@ -42,7 +42,7 @@ namespace tvg
|
|||
{
|
||||
virtual ~StrategyMethod() {}
|
||||
|
||||
virtual bool dispose(RenderMethod& renderer) = 0;
|
||||
virtual bool dispose(RenderMethod& renderer) = 0; //return true if the deletion is allowed.
|
||||
virtual void* update(RenderMethod& renderer, const RenderTransform* transform, Array<RenderData>& clips, uint8_t opacity, RenderUpdateFlag pFlag, bool clipper) = 0; //Return engine data if it has.
|
||||
virtual bool render(RenderMethod& renderer) = 0;
|
||||
virtual bool bounds(float* x, float* y, float* w, float* h) = 0;
|
||||
|
|
|
@ -84,12 +84,10 @@ struct Picture::Impl
|
|||
|
||||
bool dispose(RenderMethod& renderer)
|
||||
{
|
||||
bool ret = true;
|
||||
if (paint) ret = paint->pImpl->dispose(renderer);
|
||||
else if (surface) ret = renderer.dispose(rd);
|
||||
if (paint) paint->pImpl->dispose(renderer);
|
||||
else if (surface) renderer.dispose(rd);
|
||||
rd = nullptr;
|
||||
|
||||
return ret;
|
||||
return !animated;
|
||||
}
|
||||
|
||||
RenderUpdateFlag load()
|
||||
|
|
|
@ -85,11 +85,11 @@ struct Scene::Impl
|
|||
paint->pImpl->dispose(renderer);
|
||||
}
|
||||
|
||||
auto ret = renderer.dispose(rd);
|
||||
renderer.dispose(rd);
|
||||
this->renderer = nullptr;
|
||||
this->rd = nullptr;
|
||||
|
||||
return ret;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool needComposition(uint8_t opacity)
|
||||
|
@ -231,7 +231,7 @@ struct Scene::Impl
|
|||
auto dispose = renderer ? true : false;
|
||||
|
||||
for (auto paint : paints) {
|
||||
if (dispose) paint->pImpl->dispose(*renderer);
|
||||
if (dispose) free &= paint->pImpl->dispose(*renderer);
|
||||
if (free) delete(paint);
|
||||
}
|
||||
paints.clear();
|
||||
|
|
|
@ -46,9 +46,9 @@ struct Shape::Impl
|
|||
|
||||
bool dispose(RenderMethod& renderer)
|
||||
{
|
||||
auto ret = renderer.dispose(rd);
|
||||
renderer.dispose(rd);
|
||||
rd = nullptr;
|
||||
return ret;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool render(RenderMethod& renderer)
|
||||
|
|
Loading…
Add table
Reference in a new issue