diff --git a/src/renderer/gl_engine/tvgGlRenderTask.cpp b/src/renderer/gl_engine/tvgGlRenderTask.cpp index 93fb8d00..4e0902d9 100644 --- a/src/renderer/gl_engine/tvgGlRenderTask.cpp +++ b/src/renderer/gl_engine/tvgGlRenderTask.cpp @@ -259,6 +259,12 @@ void GlDrawBlitTask::run() GlClipTask::GlClipTask(GlRenderTask* clip, GlRenderTask* mask) :GlRenderTask(nullptr), mClipTask(clip), mMaskTask(mask) {} +GlClipTask::~GlClipTask() +{ + delete mClipTask; + delete mMaskTask; +} + void GlClipTask::run() { GL_CHECK(glEnable(GL_STENCIL_TEST)); diff --git a/src/renderer/gl_engine/tvgGlRenderTask.h b/src/renderer/gl_engine/tvgGlRenderTask.h index f22e6590..caedc74b 100644 --- a/src/renderer/gl_engine/tvgGlRenderTask.h +++ b/src/renderer/gl_engine/tvgGlRenderTask.h @@ -169,7 +169,7 @@ class GlClipTask : public GlRenderTask { public: GlClipTask(GlRenderTask* clip, GlRenderTask* mask); - ~GlClipTask() override = default; + ~GlClipTask() override; void run() override; diff --git a/src/renderer/gl_engine/tvgGlRenderer.cpp b/src/renderer/gl_engine/tvgGlRenderer.cpp index ef168d98..ca9bb327 100644 --- a/src/renderer/gl_engine/tvgGlRenderer.cpp +++ b/src/renderer/gl_engine/tvgGlRenderer.cpp @@ -567,7 +567,10 @@ void GlRenderer::drawPrimitive(GlShape& sdata, uint8_t r, uint8_t g, uint8_t b, auto task = new GlRenderTask(mPrograms[RT_Color].get()); task->setDrawDepth(depth); - if (!sdata.geometry->draw(task, mGpuBuffer.get(), flag)) return; + if (!sdata.geometry->draw(task, mGpuBuffer.get(), flag)) { + delete task; + return; + } GlRenderTask* stencilTask = nullptr;