diff --git a/src/renderer/gl_engine/tvgGlRenderer.cpp b/src/renderer/gl_engine/tvgGlRenderer.cpp index 375a33cc..0d0115bb 100644 --- a/src/renderer/gl_engine/tvgGlRenderer.cpp +++ b/src/renderer/gl_engine/tvgGlRenderer.cpp @@ -106,7 +106,6 @@ bool GlRenderer::sync() GL_CHECK(glDisable(GL_SCISSOR_TEST)); mRenderPassStack.clear(); - mPoolIndex = 0; mClearBuffer = false; delete task; @@ -154,17 +153,19 @@ bool GlRenderer::beginComposite(Compositor* cmp, CompositeMethod method, uint8_t cmp->method = method; cmp->opacity = opacity; - if (mPoolIndex >= mComposePool.size()) { - mComposePool.emplace_back(make_unique(surface.w, surface.h)); - mComposePool.back()->init(mTargetFboId); + uint32_t index = mRenderPassStack.size() - 1; + + if (index >= mComposePool.count) { + mComposePool.push( new GlRenderTarget(surface.w, surface.h)); + mComposePool[index]->init(mTargetFboId); } - mRenderPassStack.emplace_back(GlRenderPass(mComposePool[mPoolIndex++].get())); + mRenderPassStack.emplace_back(GlRenderPass(mComposePool[index])); return true; } -bool GlRenderer::endComposite(TVG_UNUSED Compositor* cmp) +bool GlRenderer::endComposite(Compositor* cmp) { if (mComposeStack.empty()) return false; if (mComposeStack.back().get() != cmp) return false; @@ -441,12 +442,16 @@ GlRenderer* GlRenderer::gen() return new GlRenderer(); } -GlRenderer::GlRenderer() :mViewport() ,mGpuBuffer(new GlStageBuffer), mPrograms() +GlRenderer::GlRenderer() :mViewport() ,mGpuBuffer(new GlStageBuffer), mPrograms(), mComposePool() { } GlRenderer::~GlRenderer() { + for (auto i = 0; i < mComposePool.count; i++) { + if (mComposePool[i]) delete mComposePool[i]; + } + --rendererCnt; if (rendererCnt == 0 && initEngineCnt == 0) _termEngine(); diff --git a/src/renderer/gl_engine/tvgGlRenderer.h b/src/renderer/gl_engine/tvgGlRenderer.h index e974c44c..5ae0c2bc 100644 --- a/src/renderer/gl_engine/tvgGlRenderer.h +++ b/src/renderer/gl_engine/tvgGlRenderer.h @@ -98,8 +98,7 @@ private: unique_ptr mGpuBuffer; vector> mPrograms; unique_ptr mRootTarget = {}; - vector> mComposePool = {}; - size_t mPoolIndex = 0; + Array mComposePool = {}; vector mRenderPassStack = {}; vector> mComposeStack = {};