diff --git a/src/renderer/tvgCanvas.h b/src/renderer/tvgCanvas.h index 25181de4..b2234b5c 100644 --- a/src/renderer/tvgCanvas.h +++ b/src/renderer/tvgCanvas.h @@ -65,7 +65,7 @@ struct Canvas::Impl if (free) { for (auto paint : paints) { P(paint)->unref(); - if (paint->pImpl->dispose(*renderer) && P(paint)->refCnt == 0) { + if (paint->pImpl->dispose(renderer) && P(paint)->refCnt == 0) { delete(paint); } } @@ -94,7 +94,7 @@ struct Canvas::Impl //Optimize Me: Can we skip the searching? for (auto paint2 : paints) { if (paint2 == paint) { - paint->pImpl->update(*renderer, nullptr, clips, 255, flag); + paint->pImpl->update(renderer, nullptr, clips, 255, flag); return Result::Success; } } @@ -102,7 +102,7 @@ struct Canvas::Impl //Update all retained paint nodes } else { for (auto paint : paints) { - paint->pImpl->update(*renderer, nullptr, clips, 255, flag); + paint->pImpl->update(renderer, nullptr, clips, 255, flag); } } @@ -117,7 +117,7 @@ struct Canvas::Impl bool rendered = false; for (auto paint : paints) { - if (paint->pImpl->render(*renderer)) rendered = true; + if (paint->pImpl->render(renderer)) rendered = true; } if (!rendered || !renderer->postRender()) return Result::InsufficientCondition; diff --git a/src/renderer/tvgPaint.cpp b/src/renderer/tvgPaint.cpp index d6cf01f3..aa82957d 100644 --- a/src/renderer/tvgPaint.cpp +++ b/src/renderer/tvgPaint.cpp @@ -106,7 +106,7 @@ static bool _compFastTrack(Paint* cmpTarget, const RenderTransform* pTransform, } -RenderRegion Paint::Impl::bounds(RenderMethod& renderer) const +RenderRegion Paint::Impl::bounds(RenderMethod* renderer) const { RenderRegion ret; PAINT_METHOD(ret, bounds(renderer)); @@ -114,7 +114,7 @@ RenderRegion Paint::Impl::bounds(RenderMethod& renderer) const } -bool Paint::Impl::dispose(RenderMethod& renderer) +bool Paint::Impl::dispose(RenderMethod* renderer) { if (compData) compData->target->pImpl->dispose(renderer); @@ -198,7 +198,7 @@ bool Paint::Impl::translate(float x, float y) } -bool Paint::Impl::render(RenderMethod& renderer) +bool Paint::Impl::render(RenderMethod* renderer) { Compositor* cmp = nullptr; @@ -210,26 +210,26 @@ bool Paint::Impl::render(RenderMethod& renderer) if (MASK_REGION_MERGING(compData->method)) region.add(P(compData->target)->bounds(renderer)); if (region.w == 0 || region.h == 0) return true; - cmp = renderer.target(region, COMPOSITE_TO_COLORSPACE(renderer, compData->method)); - if (renderer.beginComposite(cmp, CompositeMethod::None, 255)) { + cmp = renderer->target(region, COMPOSITE_TO_COLORSPACE(renderer, compData->method)); + if (renderer->beginComposite(cmp, CompositeMethod::None, 255)) { compData->target->pImpl->render(renderer); } } - if (cmp) renderer.beginComposite(cmp, compData->method, compData->target->pImpl->opacity); + if (cmp) renderer->beginComposite(cmp, compData->method, compData->target->pImpl->opacity); - renderer.blend(blendMethod); + renderer->blend(blendMethod); bool ret; PAINT_METHOD(ret, render(renderer)); - if (cmp) renderer.endComposite(cmp); + if (cmp) renderer->endComposite(cmp); return ret; } -RenderData Paint::Impl::update(RenderMethod& renderer, const RenderTransform* pTransform, Array& clips, uint8_t opacity, RenderUpdateFlag pFlag, bool clipper) +RenderData Paint::Impl::update(RenderMethod* renderer, const RenderTransform* pTransform, Array& clips, uint8_t opacity, RenderUpdateFlag pFlag, bool clipper) { if (renderFlag & RenderUpdateFlag::Transform) { if (!rTransform) return nullptr; @@ -265,9 +265,9 @@ RenderData Paint::Impl::update(RenderMethod& renderer, const RenderTransform* pT if (tryFastTrack) { RenderRegion viewport2; if ((compFastTrack = _compFastTrack(target, pTransform, target->pImpl->rTransform, viewport2))) { - viewport = renderer.viewport(); + viewport = renderer->viewport(); viewport2.intersect(viewport); - renderer.viewport(viewport2); + renderer->viewport(viewport2); target->pImpl->ctxFlag |= ContextFlag::FastTrack; } } @@ -289,7 +289,7 @@ RenderData Paint::Impl::update(RenderMethod& renderer, const RenderTransform* pT PAINT_METHOD(rd, update(renderer, &outTransform, clips, opacity, newFlag, clipper)); /* 3. Composition Post Processing */ - if (compFastTrack) renderer.viewport(viewport); + if (compFastTrack) renderer->viewport(viewport); else if (childClipper) clips.pop(); return rd; diff --git a/src/renderer/tvgPaint.h b/src/renderer/tvgPaint.h index e3f24f14..fbe4de13 100644 --- a/src/renderer/tvgPaint.h +++ b/src/renderer/tvgPaint.h @@ -131,15 +131,15 @@ namespace tvg return true; } - RenderRegion bounds(RenderMethod& renderer) const; - bool dispose(RenderMethod& renderer); + RenderRegion bounds(RenderMethod* renderer) const; + bool dispose(RenderMethod* renderer); Iterator* iterator(); bool rotate(float degree); bool scale(float factor); bool translate(float x, float y); bool bounds(float* x, float* y, float* w, float* h, bool transformed, bool stroking); - RenderData update(RenderMethod& renderer, const RenderTransform* pTransform, Array& clips, uint8_t opacity, RenderUpdateFlag pFlag, bool clipper = false); - bool render(RenderMethod& renderer); + RenderData update(RenderMethod* renderer, const RenderTransform* pTransform, Array& clips, uint8_t opacity, RenderUpdateFlag pFlag, bool clipper = false); + bool render(RenderMethod* renderer); Paint* duplicate(); }; } diff --git a/src/renderer/tvgPicture.cpp b/src/renderer/tvgPicture.cpp index 7f120593..cfa1bccd 100644 --- a/src/renderer/tvgPicture.cpp +++ b/src/renderer/tvgPicture.cpp @@ -69,18 +69,18 @@ bool Picture::Impl::needComposition(uint8_t opacity) } -bool Picture::Impl::render(RenderMethod &renderer) +bool Picture::Impl::render(RenderMethod* renderer) { bool ret = false; - if (surface) return renderer.renderImage(rd); + if (surface) return renderer->renderImage(rd); else if (paint) { Compositor* cmp = nullptr; if (needComp) { - cmp = renderer.target(bounds(renderer), renderer.colorSpace()); - renderer.beginComposite(cmp, CompositeMethod::None, 255); + cmp = renderer->target(bounds(renderer), renderer->colorSpace()); + renderer->beginComposite(cmp, CompositeMethod::None, 255); } ret = paint->pImpl->render(renderer); - if (cmp) renderer.endComposite(cmp); + if (cmp) renderer->endComposite(cmp); } return ret; } @@ -95,9 +95,9 @@ bool Picture::Impl::size(float w, float h) } -RenderRegion Picture::Impl::bounds(RenderMethod& renderer) +RenderRegion Picture::Impl::bounds(RenderMethod* renderer) { - if (rd) return renderer.region(rd); + if (rd) return renderer->region(rd); if (paint) return paint->pImpl->bounds(renderer); return {0, 0, 0, 0}; } diff --git a/src/renderer/tvgPicture.h b/src/renderer/tvgPicture.h index 26a171ba..d0a5cbad 100644 --- a/src/renderer/tvgPicture.h +++ b/src/renderer/tvgPicture.h @@ -70,9 +70,9 @@ struct Picture::Impl RenderTransform resizeTransform(const RenderTransform* pTransform); bool needComposition(uint8_t opacity); - bool render(RenderMethod &renderer); + bool render(RenderMethod* renderer); bool size(float w, float h); - RenderRegion bounds(RenderMethod& renderer); + RenderRegion bounds(RenderMethod* renderer); Result load(ImageLoader* ploader); Impl(Picture* p) : picture(p) @@ -85,21 +85,21 @@ struct Picture::Impl delete(paint); } - bool dispose(RenderMethod& renderer) + bool dispose(RenderMethod* renderer) { if (paint) paint->pImpl->dispose(renderer); - else if (surface) renderer.dispose(rd); + else if (surface) renderer->dispose(rd); rd = nullptr; return true; } - RenderData update(RenderMethod &renderer, const RenderTransform* pTransform, Array& clips, uint8_t opacity, RenderUpdateFlag pFlag, bool clipper) + RenderData update(RenderMethod* renderer, const RenderTransform* pTransform, Array& clips, uint8_t opacity, RenderUpdateFlag pFlag, bool clipper) { auto flag = load(); if (surface) { 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, static_cast(pFlag | flag)); } else if (paint) { if (resizing) { loader->resize(paint, w, h); diff --git a/src/renderer/tvgRender.h b/src/renderer/tvgRender.h index 3437f9cb..490818d3 100644 --- a/src/renderer/tvgRender.h +++ b/src/renderer/tvgRender.h @@ -322,7 +322,7 @@ static inline uint8_t CHANNEL_SIZE(ColorSpace cs) } } -static inline ColorSpace COMPOSITE_TO_COLORSPACE(RenderMethod& renderer, CompositeMethod method) +static inline ColorSpace COMPOSITE_TO_COLORSPACE(RenderMethod* renderer, CompositeMethod method) { switch(method) { case CompositeMethod::AlphaMask: @@ -335,7 +335,7 @@ static inline ColorSpace COMPOSITE_TO_COLORSPACE(RenderMethod& renderer, Composi //TODO: Optimize Luma/InvLuma colorspace to Grayscale8 case CompositeMethod::LumaMask: case CompositeMethod::InvLumaMask: - return renderer.colorSpace(); + return renderer->colorSpace(); default: TVGERR("RENDERER", "Unsupported Composite Size! = %d", (int)method); return ColorSpace::Unsupported; diff --git a/src/renderer/tvgScene.h b/src/renderer/tvgScene.h index 1a5600c2..2ee2839e 100644 --- a/src/renderer/tvgScene.h +++ b/src/renderer/tvgScene.h @@ -76,13 +76,13 @@ struct Scene::Impl } } - bool dispose(RenderMethod& renderer) + bool dispose(RenderMethod* renderer) { for (auto paint : paints) { paint->pImpl->dispose(renderer); } - renderer.dispose(rd); + renderer->dispose(rd); this->renderer = nullptr; this->rd = nullptr; @@ -111,7 +111,7 @@ struct Scene::Impl return true; } - RenderData update(RenderMethod &renderer, const RenderTransform* transform, Array& clips, uint8_t opacity, RenderUpdateFlag flag, bool clipper) + RenderData update(RenderMethod* renderer, const RenderTransform* transform, Array& clips, uint8_t opacity, RenderUpdateFlag flag, bool clipper) { if ((needComp = needComposition(opacity))) { /* Overriding opacity value. If this scene is half-translucent, @@ -120,14 +120,14 @@ struct Scene::Impl opacity = 255; } - this->renderer = &renderer; + this->renderer = renderer; if (clipper) { Array rds(paints.size()); for (auto paint : paints) { rds.push(paint->pImpl->update(renderer, transform, clips, opacity, flag, true)); } - rd = renderer.prepare(rds, rd, transform, clips, opacity, flag); + rd = renderer->prepare(rds, rd, transform, clips, opacity, flag); return rd; } else { for (auto paint : paints) { @@ -137,13 +137,13 @@ struct Scene::Impl } } - bool render(RenderMethod& renderer) + bool render(RenderMethod* renderer) { Compositor* cmp = nullptr; if (needComp) { - cmp = renderer.target(bounds(renderer), renderer.colorSpace()); - renderer.beginComposite(cmp, CompositeMethod::None, opacity); + cmp = renderer->target(bounds(renderer), renderer->colorSpace()); + renderer->beginComposite(cmp, CompositeMethod::None, opacity); needComp = false; } @@ -151,12 +151,12 @@ struct Scene::Impl if (!paint->pImpl->render(renderer)) return false; } - if (cmp) renderer.endComposite(cmp); + if (cmp) renderer->endComposite(cmp); return true; } - RenderRegion bounds(RenderMethod& renderer) const + RenderRegion bounds(RenderMethod* renderer) const { if (paints.empty()) return {0, 0, 0, 0}; @@ -229,7 +229,7 @@ struct Scene::Impl auto dispose = renderer ? true : false; for (auto paint : paints) { - if (dispose) free &= P(paint)->dispose(*renderer); + if (dispose) free &= P(paint)->dispose(renderer); if (P(paint)->unref() == 0 && free) delete(paint); } paints.clear(); diff --git a/src/renderer/tvgShape.h b/src/renderer/tvgShape.h index a7f12266..97805072 100644 --- a/src/renderer/tvgShape.h +++ b/src/renderer/tvgShape.h @@ -41,25 +41,25 @@ struct Shape::Impl { } - bool dispose(RenderMethod& renderer) + bool dispose(RenderMethod* renderer) { - renderer.dispose(rd); + renderer->dispose(rd); rd = nullptr; return true; } - bool render(RenderMethod& renderer) + bool render(RenderMethod* renderer) { Compositor* cmp = nullptr; bool ret; if (needComp) { - cmp = renderer.target(bounds(renderer), renderer.colorSpace()); - renderer.beginComposite(cmp, CompositeMethod::None, opacity); + cmp = renderer->target(bounds(renderer), renderer->colorSpace()); + renderer->beginComposite(cmp, CompositeMethod::None, opacity); needComp = false; } - ret = renderer.renderShape(rd); - if (cmp) renderer.endComposite(cmp); + ret = renderer->renderShape(rd); + if (cmp) renderer->endComposite(cmp); return ret; } @@ -83,7 +83,7 @@ struct Shape::Impl return true; } - RenderData update(RenderMethod& renderer, const RenderTransform* transform, Array& clips, uint8_t opacity, RenderUpdateFlag pFlag, bool clipper) + RenderData update(RenderMethod* renderer, const RenderTransform* transform, Array& clips, uint8_t opacity, RenderUpdateFlag pFlag, bool clipper) { if ((needComp = needComposition(opacity))) { /* Overriding opacity value. If this scene is half-translucent, @@ -92,14 +92,14 @@ struct Shape::Impl opacity = 255; } - rd = renderer.prepare(rs, rd, transform, clips, opacity, static_cast(pFlag | flag), clipper); + rd = renderer->prepare(rs, rd, transform, clips, opacity, static_cast(pFlag | flag), clipper); flag = RenderUpdateFlag::None; return rd; } - RenderRegion bounds(RenderMethod& renderer) + RenderRegion bounds(RenderMethod* renderer) { - return renderer.region(rd); + return renderer->region(rd); } bool bounds(float* x, float* y, float* w, float* h, bool stroking) diff --git a/src/renderer/tvgText.h b/src/renderer/tvgText.h index b9f7ef60..509c5d45 100644 --- a/src/renderer/tvgText.h +++ b/src/renderer/tvgText.h @@ -92,12 +92,12 @@ struct Text::Impl return Result::Success; } - RenderRegion bounds(RenderMethod& renderer) + RenderRegion bounds(RenderMethod* renderer) { - return renderer.region(rd); + return renderer->region(rd); } - bool render(RenderMethod& renderer) + bool render(RenderMethod* renderer) { if (paint) return PP(paint)->render(renderer); return false; @@ -120,7 +120,7 @@ struct Text::Impl return false; } - RenderData update(RenderMethod& renderer, const RenderTransform* transform, Array& clips, uint8_t opacity, RenderUpdateFlag pFlag, bool clipper) + RenderData update(RenderMethod* renderer, const RenderTransform* transform, Array& clips, uint8_t opacity, RenderUpdateFlag pFlag, bool clipper) { if (!load()) return nullptr; @@ -153,9 +153,9 @@ struct Text::Impl return true; } - bool dispose(RenderMethod& renderer) + bool dispose(RenderMethod* renderer) { - renderer.dispose(rd); + renderer->dispose(rd); this->rd = nullptr; return true; }