From e96678df282e7fc72a8a74a35be210a61ccfc37e Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Tue, 17 Jun 2025 01:42:39 +0900 Subject: [PATCH] renderer: code refactoring unify the viewport methods among engines. --- src/renderer/gl_engine/tvgGlRenderer.cpp | 17 ++--------------- src/renderer/gl_engine/tvgGlRenderer.h | 3 --- src/renderer/sw_engine/tvgSwRenderer.cpp | 13 ------------- src/renderer/sw_engine/tvgSwRenderer.h | 3 --- src/renderer/tvgRender.cpp | 14 ++++++++++++++ src/renderer/tvgRender.h | 11 +++++++++-- src/renderer/wg_engine/tvgWgRenderer.cpp | 16 ++-------------- src/renderer/wg_engine/tvgWgRenderer.h | 3 --- 8 files changed, 27 insertions(+), 53 deletions(-) diff --git a/src/renderer/gl_engine/tvgGlRenderer.cpp b/src/renderer/gl_engine/tvgGlRenderer.cpp index 8a2db298..f6e0b2c1 100644 --- a/src/renderer/gl_engine/tvgGlRenderer.cpp +++ b/src/renderer/gl_engine/tvgGlRenderer.cpp @@ -1399,7 +1399,7 @@ RenderData GlRenderer::prepare(RenderSurface* image, RenderData data, const Matr } sdata->geometry.matrix = transform; - sdata->geometry.viewport = mViewport; + sdata->geometry.viewport = vport; sdata->geometry.tesselate(image, flags); @@ -1454,7 +1454,7 @@ RenderData GlRenderer::prepare(const RenderShape& rshape, RenderData data, const if (sdata->updateFlag == RenderUpdateFlag::None) return sdata; sdata->geometry.matrix = transform; - sdata->geometry.viewport = mViewport; + sdata->geometry.viewport = vport; if (sdata->updateFlag & (RenderUpdateFlag::Color | RenderUpdateFlag::Stroke | RenderUpdateFlag::Gradient | RenderUpdateFlag::GradientStroke | RenderUpdateFlag::Transform | RenderUpdateFlag::Path)) { @@ -1470,19 +1470,6 @@ RenderData GlRenderer::prepare(const RenderShape& rshape, RenderData data, const } -RenderRegion GlRenderer::viewport() -{ - return mViewport; -} - - -bool GlRenderer::viewport(const RenderRegion& vp) -{ - mViewport = vp; - return true; -} - - bool GlRenderer::preUpdate() { if (mRootTarget.invalid()) return false; diff --git a/src/renderer/gl_engine/tvgGlRenderer.h b/src/renderer/gl_engine/tvgGlRenderer.h index 1f29c5fa..347dcad2 100644 --- a/src/renderer/gl_engine/tvgGlRenderer.h +++ b/src/renderer/gl_engine/tvgGlRenderer.h @@ -80,8 +80,6 @@ public: bool postRender() override; void dispose(RenderData data) override;; RenderRegion region(RenderData data) override; - RenderRegion viewport() override; - bool viewport(const RenderRegion& vp) override; bool blend(BlendMethod method) override; ColorSpace colorSpace() override; const RenderSurface* mainSurface() override; @@ -137,7 +135,6 @@ private: void* mContext = nullptr; RenderSurface surface; GLint mTargetFboId = 0; - RenderRegion mViewport; GlStageBuffer mGpuBuffer; GlRenderTarget mRootTarget; Array mPrograms; diff --git a/src/renderer/sw_engine/tvgSwRenderer.cpp b/src/renderer/sw_engine/tvgSwRenderer.cpp index 9b8253e7..d6d8e28b 100644 --- a/src/renderer/sw_engine/tvgSwRenderer.cpp +++ b/src/renderer/sw_engine/tvgSwRenderer.cpp @@ -313,19 +313,6 @@ bool SwRenderer::sync() } -RenderRegion SwRenderer::viewport() -{ - return vport; -} - - -bool SwRenderer::viewport(const RenderRegion& vp) -{ - vport = vp; - return true; -} - - bool SwRenderer::target(pixel_t* data, uint32_t stride, uint32_t w, uint32_t h, ColorSpace cs) { if (!data || stride == 0 || w == 0 || h == 0 || w > stride) return false; diff --git a/src/renderer/sw_engine/tvgSwRenderer.h b/src/renderer/sw_engine/tvgSwRenderer.h index 40a6c428..6e21d19c 100644 --- a/src/renderer/sw_engine/tvgSwRenderer.h +++ b/src/renderer/sw_engine/tvgSwRenderer.h @@ -46,8 +46,6 @@ public: bool postRender() override; void dispose(RenderData data) override; RenderRegion region(RenderData data) override; - RenderRegion viewport() override; - bool viewport(const RenderRegion& vp) override; bool blend(BlendMethod method) override; ColorSpace colorSpace() override; const RenderSurface* mainSurface() override; @@ -76,7 +74,6 @@ private: Array tasks; //async task list Array compositors; //render targets cache list SwMpool* mpool; //private memory pool - RenderRegion vport; //viewport bool sharedMpool; //memory-pool behavior policy SwRenderer(); diff --git a/src/renderer/tvgRender.cpp b/src/renderer/tvgRender.cpp index 78d7b41a..d943b821 100644 --- a/src/renderer/tvgRender.cpp +++ b/src/renderer/tvgRender.cpp @@ -40,6 +40,20 @@ uint32_t RenderMethod::unref() return (--refCnt); } + +RenderRegion RenderMethod::viewport() +{ + return vport; +} + + +bool RenderMethod::viewport(const RenderRegion& vp) +{ + vport = vp; + return true; +} + + /************************************************************************/ /* RenderPath Class Implementation */ /************************************************************************/ diff --git a/src/renderer/tvgRender.h b/src/renderer/tvgRender.h index f45dae6e..6d802661 100644 --- a/src/renderer/tvgRender.h +++ b/src/renderer/tvgRender.h @@ -423,10 +423,17 @@ private: uint32_t refCnt = 0; //reference count Key key; +protected: + RenderRegion vport; //viewport + public: + //common implementation uint32_t ref(); uint32_t unref(); + RenderRegion viewport(); + bool viewport(const RenderRegion& vp); + //main features virtual ~RenderMethod() {} virtual bool preUpdate() = 0; virtual RenderData prepare(const RenderShape& rshape, RenderData data, const Matrix& transform, Array& clips, uint8_t opacity, RenderUpdateFlag flags, bool clipper) = 0; @@ -438,8 +445,6 @@ public: virtual bool postRender() = 0; virtual void dispose(RenderData data) = 0; virtual RenderRegion region(RenderData data) = 0; - virtual RenderRegion viewport() = 0; - virtual bool viewport(const RenderRegion& vp) = 0; virtual bool blend(BlendMethod method) = 0; virtual ColorSpace colorSpace() = 0; virtual const RenderSurface* mainSurface() = 0; @@ -447,10 +452,12 @@ public: virtual bool clear() = 0; virtual bool sync() = 0; + //compositions virtual RenderCompositor* target(const RenderRegion& region, ColorSpace cs, CompositionFlag flags) = 0; virtual bool beginComposite(RenderCompositor* cmp, MaskMethod method, uint8_t opacity) = 0; virtual bool endComposite(RenderCompositor* cmp) = 0; + //post effects 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; diff --git a/src/renderer/wg_engine/tvgWgRenderer.cpp b/src/renderer/wg_engine/tvgWgRenderer.cpp index 09248f34..66ae499a 100644 --- a/src/renderer/wg_engine/tvgWgRenderer.cpp +++ b/src/renderer/wg_engine/tvgWgRenderer.cpp @@ -146,7 +146,7 @@ RenderData WgRenderer::prepare(const RenderShape& rshape, RenderData data, const } // setup fill settings - renderDataShape->viewport = mViewport; + renderDataShape->viewport = vport; if (flags & RenderUpdateFlag::Gradient && rshape.fill) renderDataShape->renderSettingsShape.update(mContext, rshape.fill); else if (flags & RenderUpdateFlag::Color) renderDataShape->renderSettingsShape.update(mContext, rshape.color); if (rshape.stroke) { @@ -165,7 +165,7 @@ RenderData WgRenderer::prepare(RenderSurface* surface, RenderData data, const Ma auto renderDataPicture = data ? (WgRenderDataPicture*)data : mRenderDataPicturePool.allocate(mContext); // update paint settings - renderDataPicture->viewport = mViewport; + renderDataPicture->viewport = vport; if (flags & (RenderUpdateFlag::Transform | RenderUpdateFlag::Blend)) { renderDataPicture->renderSettings.update(mContext, transform, surface->cs, opacity); } @@ -280,18 +280,6 @@ RenderRegion WgRenderer::region(RenderData data) } -RenderRegion WgRenderer::viewport() { - return mViewport; -} - - -bool WgRenderer::viewport(const RenderRegion& vp) -{ - mViewport = vp; - return true; -} - - bool WgRenderer::blend(BlendMethod method) { mBlendMethod = method; diff --git a/src/renderer/wg_engine/tvgWgRenderer.h b/src/renderer/wg_engine/tvgWgRenderer.h index 50825279..dc3c5cf6 100644 --- a/src/renderer/wg_engine/tvgWgRenderer.h +++ b/src/renderer/wg_engine/tvgWgRenderer.h @@ -38,8 +38,6 @@ public: bool postRender() override; void dispose(RenderData data) override; RenderRegion region(RenderData data) override; - RenderRegion viewport() override; - bool viewport(const RenderRegion& vp) override; bool blend(BlendMethod method) override; ColorSpace colorSpace() override; const RenderSurface* mainSurface() override; @@ -95,7 +93,6 @@ private: // rendering states RenderSurface mTargetSurface; BlendMethod mBlendMethod{}; - RenderRegion mViewport{}; // disposable data list Array mDisposeRenderDatas{};