canvas: migrate render target clear call into draw(); 60/232360/3
authorHermet Park <chuneon.park@samsung.com>
Sat, 2 May 2020 08:28:18 +0000 (17:28 +0900)
committerHermet Park <chuneon.park@samsung.com>
Sat, 2 May 2020 08:33:41 +0000 (17:33 +0900)
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
src/lib/gl_engine/tvgGlRenderer.cpp
src/lib/tvgCanvas.cpp
src/lib/tvgSwCanvas.cpp

index 40f38ac..8708695 100644 (file)
@@ -92,7 +92,7 @@ public:
 
     int reserve(size_t n) noexcept;
     virtual int push(std::unique_ptr<PaintNode> 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;
index 8cf84da..ca319ed 100644 (file)
@@ -37,6 +37,8 @@ struct GlShape
 
 bool GlRenderer::clear()
 {
+    //TODO: (Request) to clear target
+
     return true;
 }
 
index e1f41b7..d9bf176 100644 (file)
@@ -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<SceneNode *>(node)) {
                 cout << "TODO: " <<  scene << endl;
@@ -139,14 +134,11 @@ int Canvas::push(unique_ptr<PaintNode> 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();
 }
 
 
index f75d79c..a4e49dd 100644 (file)
@@ -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;
 }