diff --git a/src/renderer/tvgPicture.h b/src/renderer/tvgPicture.h index c6f60c8f..b177caa9 100644 --- a/src/renderer/tvgPicture.h +++ b/src/renderer/tvgPicture.h @@ -92,18 +92,19 @@ struct Picture::Impl RenderData update(RenderMethod* renderer, const RenderTransform* pTransform, Array& clips, uint8_t opacity, RenderUpdateFlag pFlag, bool clipper) { - auto flag = load(); + auto flag = static_cast(pFlag | load()); if (surface) { + if (flag == RenderUpdateFlag::None) return rd; auto transform = resizeTransform(pTransform); - rd = renderer->prepare(surface, &rm, rd, &transform, clips, opacity, static_cast(pFlag | flag)); + rd = renderer->prepare(surface, &rm, rd, &transform, clips, opacity, flag); } else if (paint) { if (resizing) { loader->resize(paint, w, h); resizing = false; } needComp = needComposition(opacity) ? true : false; - rd = paint->pImpl->update(renderer, pTransform, clips, opacity, static_cast(pFlag | flag), clipper); + rd = paint->pImpl->update(renderer, pTransform, clips, opacity, flag, clipper); } return rd; } @@ -200,6 +201,7 @@ struct Picture::Impl if (loader) { dup->loader = loader; ++dup->loader->sharing; + PP(ret)->renderFlag |= RenderUpdateFlag::Image; } dup->surface = surface; diff --git a/src/renderer/tvgShape.h b/src/renderer/tvgShape.h index 4bb8f94b..37f338ed 100644 --- a/src/renderer/tvgShape.h +++ b/src/renderer/tvgShape.h @@ -96,7 +96,9 @@ struct Shape::Impl } RenderData update(RenderMethod* renderer, const RenderTransform* transform, Array& clips, uint8_t opacity, RenderUpdateFlag pFlag, bool clipper) - { + { + if (static_cast(pFlag | flag) == RenderUpdateFlag::None) return rd; + if ((needComp = needComposition(opacity))) { /* Overriding opacity value. If this scene is half-translucent, It must do intermediate composition with that opacity value. */