diff --git a/src/renderer/gl_engine/tvgGlRenderTask.cpp b/src/renderer/gl_engine/tvgGlRenderTask.cpp index c978febf..9cd206e2 100644 --- a/src/renderer/gl_engine/tvgGlRenderTask.cpp +++ b/src/renderer/gl_engine/tvgGlRenderTask.cpp @@ -195,23 +195,20 @@ void GlComposeTask::run() { GL_CHECK(glBindFramebuffer(GL_FRAMEBUFFER, getSelfFbo())); - // clear this fbo - if (mClearBuffer) { - // we must clear all area of fbo - GL_CHECK(glViewport(0, 0, mFbo->getWidth(), mFbo->getHeight())); - GL_CHECK(glScissor(0, 0, mFbo->getWidth(), mFbo->getHeight())); - GL_CHECK(glClearColor(0, 0, 0, 0)); - GL_CHECK(glClearStencil(0)); - #ifdef THORVG_GL_TARGET_GLES - GL_CHECK(glClearDepthf(0.0)); - #else - GL_CHECK(glClearDepth(0.0)); - #endif - GL_CHECK(glDepthMask(1)); + // we must clear all area of fbo + GL_CHECK(glViewport(0, 0, mFbo->getWidth(), mFbo->getHeight())); + GL_CHECK(glScissor(0, 0, mFbo->getWidth(), mFbo->getHeight())); + GL_CHECK(glClearColor(0, 0, 0, 0)); + GL_CHECK(glClearStencil(0)); +#ifdef THORVG_GL_TARGET_GLES + GL_CHECK(glClearDepthf(0.0)); +#else + GL_CHECK(glClearDepth(0.0)); +#endif + GL_CHECK(glDepthMask(1)); - GL_CHECK(glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)); - GL_CHECK(glDepthMask(0)); - } + GL_CHECK(glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)); + GL_CHECK(glDepthMask(0)); GL_CHECK(glViewport(0, 0, mRenderWidth, mRenderHeight)); GL_CHECK(glScissor(0, 0, mRenderWidth, mRenderHeight)); diff --git a/src/renderer/gl_engine/tvgGlRenderTask.h b/src/renderer/gl_engine/tvgGlRenderTask.h index 6254292a..4c20f9cb 100644 --- a/src/renderer/gl_engine/tvgGlRenderTask.h +++ b/src/renderer/gl_engine/tvgGlRenderTask.h @@ -125,8 +125,8 @@ public: void run() override; void setRenderSize(uint32_t width, uint32_t height) { mRenderWidth = width; mRenderHeight = height; } + void setClearBuffer(bool clearBuffer) { mClearBuffer = clearBuffer; } - bool mClearBuffer = true; protected: GLuint getTargetFbo() { return mTargetFbo; } @@ -134,6 +134,8 @@ protected: GLuint getResolveFboId(); void onResolve(); + bool mClearBuffer = false; + private: GLuint mTargetFbo; GlRenderTarget* mFbo; diff --git a/src/renderer/gl_engine/tvgGlRenderer.cpp b/src/renderer/gl_engine/tvgGlRenderer.cpp index c9148145..0cac512a 100644 --- a/src/renderer/gl_engine/tvgGlRenderer.cpp +++ b/src/renderer/gl_engine/tvgGlRenderer.cpp @@ -839,7 +839,7 @@ bool GlRenderer::sync() prepareBlitTask(task); - task->mClearBuffer = mClearBuffer; + task->setClearBuffer(mClearBuffer); task->setTargetViewport({{0, 0}, {int32_t(surface.w), int32_t(surface.h)}}); if (mGpuBuffer.flushToGPU()) { @@ -853,6 +853,9 @@ bool GlRenderer::sync() clearDisposes(); + // Reset clear buffer flag to default (false) after use. + mClearBuffer = false; + delete task; return true; diff --git a/src/renderer/gl_engine/tvgGlRenderer.h b/src/renderer/gl_engine/tvgGlRenderer.h index 7ab1e901..1f29c5fa 100644 --- a/src/renderer/gl_engine/tvgGlRenderer.h +++ b/src/renderer/gl_engine/tvgGlRenderer.h @@ -153,7 +153,7 @@ private: } mDisposed; BlendMethod mBlendMethod = BlendMethod::Normal; - bool mClearBuffer = true; //FIXME: clear buffer should be optional (default is false) + bool mClearBuffer = false; }; #endif /* _TVG_GL_RENDERER_H_ */