diff --git a/src/renderer/wg_engine/tvgWgRenderer.cpp b/src/renderer/wg_engine/tvgWgRenderer.cpp index 7effac65..f13a306a 100644 --- a/src/renderer/wg_engine/tvgWgRenderer.cpp +++ b/src/renderer/wg_engine/tvgWgRenderer.cpp @@ -24,6 +24,10 @@ #define WG_SSAA_SAMPLES (2) +/************************************************************************/ +/* Internal Class Implementation */ +/************************************************************************/ + WgRenderer::WgRenderer() { } @@ -69,6 +73,25 @@ void WgRenderer::release() } +void WgRenderer::clearDisposes() +{ + if (mDisposed.renderDatas.count == 0) return; + + for (auto p = mDisposed.renderDatas.begin(); p < mDisposed.renderDatas.end(); p++) { + auto renderData = (WgRenderDataPaint*)(*p); + if (renderData->type() == Type::Shape) { + mRenderDataShapePool.free(mContext, (WgRenderDataShape*)renderData); + } else { + renderData->release(mContext); + } + } + mDisposed.renderDatas.clear(); +} + +/************************************************************************/ +/* External Class Implementation */ +/************************************************************************/ + RenderData WgRenderer::prepare(const RenderShape& rshape, RenderData data, const RenderTransform* transform, Array& clips, uint8_t opacity, RenderUpdateFlag flags, bool clipper) { // get or create render data shape @@ -231,19 +254,6 @@ void WgRenderer::dispose(RenderData data) { } -void WgRenderer::clearDisposes() -{ - for (uint32_t i = 0; i < mDisposed.renderDatas.count; i++) { - auto renderData = (WgRenderDataPaint*)mDisposed.renderDatas[i]; - if (renderData->type() == Type::Shape) - mRenderDataShapePool.free(mContext, (WgRenderDataShape*)renderData); - else - renderData->release(mContext); - } - mDisposed.renderDatas.clear(); -} - - RenderRegion WgRenderer::region(TVG_UNUSED RenderData data) { return { 0, 0, INT32_MAX, INT32_MAX }; diff --git a/src/renderer/wg_engine/tvgWgRenderer.h b/src/renderer/wg_engine/tvgWgRenderer.h index 708d5263..f7ec78fe 100644 --- a/src/renderer/wg_engine/tvgWgRenderer.h +++ b/src/renderer/wg_engine/tvgWgRenderer.h @@ -27,11 +27,6 @@ class WgRenderer : public RenderMethod { -private: - WgRenderer(); - ~WgRenderer(); - void initialize(); - void release(); public: RenderData prepare(const RenderShape& rshape, RenderData data, const RenderTransform* transform, Array& clips, uint8_t opacity, RenderUpdateFlag flags, bool clipper) override; RenderData prepare(const Array& scene, RenderData data, const RenderTransform* transform, Array& clips, uint8_t opacity, RenderUpdateFlag flags) override; @@ -60,41 +55,39 @@ public: static WgRenderer* gen(); static bool init(uint32_t threads); static bool term(); + private: - // render handles - WGPUCommandEncoder mCommandEncoder{}; - // intermidiate buffer to render - WgRenderStorage mRenderStorageInterm; - // root render storage - WgRenderStorage mRenderStorageRoot; - // storage with data after antializing - WgRenderStorage mRenderStorageScreen; - // pool to hold render tree storages - WgRenderStoragePool mRenderStoragePool; - // opacity, blend methods and composite methods pool - WgBindGroupOpacityPool mOpacityPool; + WgRenderer(); + ~WgRenderer(); + void initialize(); + void release(); + void clearDisposes(); + + WGPUCommandEncoder mCommandEncoder{}; // render handles + WgRenderStorage mRenderStorageInterm; // intermidiate buffer to render + WgRenderStorage mRenderStorageRoot; // root render storage + WgRenderStorage mRenderStorageScreen; // storage with data after antializing + WgRenderStoragePool mRenderStoragePool; // pool to hold render tree storages + WgBindGroupOpacityPool mOpacityPool; // opacity, blend methods and composite methods pool WgBindGroupBlendMethodPool mBlendMethodPool; WgBindGroupCompositeMethodPool mCompositeMethodPool; - // render data shpes pool - WgRenderDataShapePool mRenderDataShapePool; + WgRenderDataShapePool mRenderDataShapePool; // render data shpes pool // render tree stacks Array mCompositorStack; Array mRenderStorageStack; - // native window handles WgContext mContext; WgPipelines mPipelines; Surface mTargetSurface; - // current blend method - BlendMethod mBlendMethod{}; + + BlendMethod mBlendMethod{}; // current blend method // disposed resources, they should be released on synced call. struct { Array renderDatas{}; Key key; } mDisposed; - void clearDisposes(); }; #endif /* _TVG_WG_RENDERER_H_ */