From 0be7e0cf539dccc962153c7ba106d9858a2e72a0 Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Sat, 2 May 2020 17:28:18 +0900 Subject: [PATCH] canvas: migrate render target clear call into draw(); Obivously, we need to clear target before drawing. Thus canvas request to renderers to clear buffer. the implementation is upto backend engines. Change-Id: Ib80da7f2260b021bcfed9fa13fb91c20218f9da0 --- inc/tizenvg.h | 2 +- src/lib/gl_engine/tvgGlRenderer.cpp | 2 ++ src/lib/tvgCanvas.cpp | 26 +++++++++----------------- src/lib/tvgSwCanvas.cpp | 1 - 4 files changed, 12 insertions(+), 19 deletions(-) diff --git a/inc/tizenvg.h b/inc/tizenvg.h index 40f38ac..8708695 100644 --- a/inc/tizenvg.h +++ b/inc/tizenvg.h @@ -92,7 +92,7 @@ public: int reserve(size_t n) noexcept; virtual int push(std::unique_ptr paint) noexcept; - virtual int clear(bool clearPaints = true) noexcept; + virtual int clear() noexcept; virtual int update() noexcept; virtual int draw(bool async = true) noexcept; virtual int sync() = 0; diff --git a/src/lib/gl_engine/tvgGlRenderer.cpp b/src/lib/gl_engine/tvgGlRenderer.cpp index 8cf84da..ca319ed 100644 --- a/src/lib/gl_engine/tvgGlRenderer.cpp +++ b/src/lib/gl_engine/tvgGlRenderer.cpp @@ -37,6 +37,8 @@ struct GlShape bool GlRenderer::clear() { + //TODO: (Request) to clear target + return true; } diff --git a/src/lib/tvgCanvas.cpp b/src/lib/tvgCanvas.cpp index e1f41b7..d9bf176 100644 --- a/src/lib/tvgCanvas.cpp +++ b/src/lib/tvgCanvas.cpp @@ -36,7 +36,7 @@ struct Canvas::Impl ~Impl() { - clearPaints(); + clear(); renderer->unref(); } @@ -55,13 +55,7 @@ struct Canvas::Impl return node->update(renderer); } - bool clearRender() - { - assert(renderer); - return renderer->clear()); - } - - int clearPaints() + int clear() { assert(renderer); @@ -82,19 +76,20 @@ struct Canvas::Impl { assert(renderer); - auto ret = 0; - for(auto node: nodes) { - ret |= node->update(renderer); + if (!node->update(renderer)) return -1; } - return ret; + return 0; } int draw() { assert(renderer); + //Clear render target before drawing + if (!renderer->clear()) return -1; + for(auto node: nodes) { if (SceneNode *scene = dynamic_cast(node)) { cout << "TODO: " << scene << endl; @@ -139,14 +134,11 @@ int Canvas::push(unique_ptr paint) noexcept } -int Canvas::clear(bool clearPaints) noexcept +int Canvas::clear() noexcept { auto impl = pImpl.get(); assert(impl); - auto ret = 0; - if (clearPaints) ret |= impl->clearPaints(); - ret |= impl->clearRender(); - return ret; + return impl->clear(); } diff --git a/src/lib/tvgSwCanvas.cpp b/src/lib/tvgSwCanvas.cpp index f75d79c..a4e49dd 100644 --- a/src/lib/tvgSwCanvas.cpp +++ b/src/lib/tvgSwCanvas.cpp @@ -50,7 +50,6 @@ int SwCanvas::target(uint32_t* buffer, size_t stride, size_t w, size_t h) noexce assert(renderer); if (!renderer->target(buffer, stride, w, h)) return -1; - if (!renderer->clear()) return -1; return 0; } -- 2.7.4