From 4bc0b584f3a50540042ddaec39f930e3e52575db Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Tue, 30 Jun 2020 12:38:01 +0900 Subject: [PATCH] sw_engine: flush all processing data when clear() is requested. there was a missing point which occured corrupted data in multi-processing. Change-Id: Ifb28ee82852e488d23d45b4b75f0a6c70bb428b2 --- src/lib/sw_engine/tvgSwRenderer.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/lib/sw_engine/tvgSwRenderer.cpp b/src/lib/sw_engine/tvgSwRenderer.cpp index ac5464e..4f09c60 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; } -- 2.7.4