From 3c6a456d2c3ebeeb21c0f8026290b19c851466a6 Mon Sep 17 00:00:00 2001 From: RuiwenTang Date: Sun, 23 Jun 2024 21:53:46 +0800 Subject: [PATCH] gl_engine: Fix compose render not correct after canvas resize When canvas size changed, need to clear cached GLRenderTarget and GLCompose. --- src/renderer/gl_engine/tvgGlRenderer.cpp | 27 +++++++----------------- src/renderer/gl_engine/tvgGlRenderer.h | 1 - 2 files changed, 8 insertions(+), 20 deletions(-) diff --git a/src/renderer/gl_engine/tvgGlRenderer.cpp b/src/renderer/gl_engine/tvgGlRenderer.cpp index 0376957a..a2d5de8c 100644 --- a/src/renderer/gl_engine/tvgGlRenderer.cpp +++ b/src/renderer/gl_engine/tvgGlRenderer.cpp @@ -63,29 +63,18 @@ bool GlRenderer::target(int32_t id, uint32_t w, uint32_t h) surface.w = w; surface.h = h; - mTargetViewport.x = 0; - mTargetViewport.y = 0; - mTargetViewport.w = surface.w; - mTargetViewport.h = surface.h; - mTargetFboId = static_cast(id); - //TODO: It's not allow to draw onto the main surface. Need to confirm the policy. - if (mTargetFboId == 0) { - GL_CHECK(glGetIntegerv(GL_FRAMEBUFFER_BINDING, &mTargetFboId)); - - GLint dims[4] = {0}; - - GL_CHECK(glGetIntegerv(GL_VIEWPORT, dims)); - // If targeting on the main framebuffer ,the actual size may by adjusted by the window system. - // In case the size is different from logical size, query and set the actual viewport here - mTargetViewport.w = dims[2]; - mTargetViewport.h = dims[3]; - } - mRootTarget = make_unique(surface.w, surface.h); mRootTarget->init(mTargetFboId); + mRenderPassStack.clear(); + mComposeStack.clear(); + + for (uint32_t i = 0; i < mComposePool.count; i++) delete mComposePool[i]; + + mComposePool.clear(); + return true; } @@ -109,7 +98,7 @@ bool GlRenderer::sync() prepareBlitTask(task); task->mClearBuffer = mClearBuffer; - task->setTargetViewport(mTargetViewport); + task->setTargetViewport(RenderRegion{0, 0, static_cast(surface.w), static_cast(surface.h)}); mGpuBuffer->flushToGPU(); mGpuBuffer->bind(); diff --git a/src/renderer/gl_engine/tvgGlRenderer.h b/src/renderer/gl_engine/tvgGlRenderer.h index 763d713b..cc024d39 100644 --- a/src/renderer/gl_engine/tvgGlRenderer.h +++ b/src/renderer/gl_engine/tvgGlRenderer.h @@ -98,7 +98,6 @@ private: Surface surface; GLint mTargetFboId = 0; RenderRegion mViewport; - RenderRegion mTargetViewport; //TODO: remove all unique_ptr / replace the vector with tvg::Array unique_ptr mGpuBuffer; vector> mPrograms;