diff --git a/src/renderer/gl_engine/tvgGlRenderer.cpp b/src/renderer/gl_engine/tvgGlRenderer.cpp index 27e278dd..ef168d98 100644 --- a/src/renderer/gl_engine/tvgGlRenderer.cpp +++ b/src/renderer/gl_engine/tvgGlRenderer.cpp @@ -64,34 +64,18 @@ bool GlRenderer::target(int32_t id, uint32_t w, uint32_t h) surface.w = w; surface.h = h; - mViewport.x = 0; - mViewport.y = 0; - mViewport.w = surface.w; - mViewport.h = surface.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; } @@ -114,7 +98,7 @@ bool GlRenderer::sync() prepareBlitTask(task); - 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 f63f9f2c..a2ded5fb 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;