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
This commit is contained in:
Hermet Park 2020-05-02 17:28:18 +09:00
parent a8864390e2
commit 0be7e0cf53
4 changed files with 12 additions and 19 deletions

View file

@ -92,7 +92,7 @@ public:
int reserve(size_t n) noexcept; int reserve(size_t n) noexcept;
virtual int push(std::unique_ptr<PaintNode> paint) 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 update() noexcept;
virtual int draw(bool async = true) noexcept; virtual int draw(bool async = true) noexcept;
virtual int sync() = 0; virtual int sync() = 0;

View file

@ -37,6 +37,8 @@ struct GlShape
bool GlRenderer::clear() bool GlRenderer::clear()
{ {
//TODO: (Request) to clear target
return true; return true;
} }

View file

@ -36,7 +36,7 @@ struct Canvas::Impl
~Impl() ~Impl()
{ {
clearPaints(); clear();
renderer->unref(); renderer->unref();
} }
@ -55,13 +55,7 @@ struct Canvas::Impl
return node->update(renderer); return node->update(renderer);
} }
bool clearRender() int clear()
{
assert(renderer);
return renderer->clear());
}
int clearPaints()
{ {
assert(renderer); assert(renderer);
@ -82,19 +76,20 @@ struct Canvas::Impl
{ {
assert(renderer); assert(renderer);
auto ret = 0;
for(auto node: nodes) { for(auto node: nodes) {
ret |= node->update(renderer); if (!node->update(renderer)) return -1;
} }
return ret; return 0;
} }
int draw() int draw()
{ {
assert(renderer); assert(renderer);
//Clear render target before drawing
if (!renderer->clear()) return -1;
for(auto node: nodes) { for(auto node: nodes) {
if (SceneNode *scene = dynamic_cast<SceneNode *>(node)) { if (SceneNode *scene = dynamic_cast<SceneNode *>(node)) {
cout << "TODO: " << scene << endl; 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(); auto impl = pImpl.get();
assert(impl); assert(impl);
auto ret = 0; return impl->clear();
if (clearPaints) ret |= impl->clearPaints();
ret |= impl->clearRender();
return ret;
} }

View file

@ -50,7 +50,6 @@ int SwCanvas::target(uint32_t* buffer, size_t stride, size_t w, size_t h) noexce
assert(renderer); assert(renderer);
if (!renderer->target(buffer, stride, w, h)) return -1; if (!renderer->target(buffer, stride, w, h)) return -1;
if (!renderer->clear()) return -1;
return 0; return 0;
} }