diff --git a/src/lib/sw_engine/tvgSwRenderer.cpp b/src/lib/sw_engine/tvgSwRenderer.cpp index ac5464e0..4f09c60a 100644 --- a/src/lib/sw_engine/tvgSwRenderer.cpp +++ b/src/lib/sw_engine/tvgSwRenderer.cpp @@ -47,16 +47,16 @@ static RenderInitializer renderInit; SwRenderer::~SwRenderer() { - if (progress.valid()) progress.get(); + flush(); } bool SwRenderer::clear() { - if (progress.valid()) return false; - return true; + return flush(); } + bool SwRenderer::target(uint32_t* buffer, uint32_t stride, uint32_t w, uint32_t h) { if (!buffer || stride == 0 || w == 0 || h == 0) return false; @@ -117,11 +117,15 @@ void SwRenderer::doRender() bool SwRenderer::flush() { - if (progress.valid()) { - progress.get(); - return true; + while (prepareTasks.size() > 0) { + auto task = prepareTasks.front(); + if (task->progress.valid()) task->progress.get(); + prepareTasks.pop(); } - return false; + + if (progress.valid()) progress.get(); + + return true; }