mirror of
https://github.com/thorvg/thorvg.git
synced 2025-06-14 12:04:29 +00:00
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:
parent
a8864390e2
commit
0be7e0cf53
4 changed files with 12 additions and 19 deletions
|
@ -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;
|
||||||
|
|
|
@ -37,6 +37,8 @@ struct GlShape
|
||||||
|
|
||||||
bool GlRenderer::clear()
|
bool GlRenderer::clear()
|
||||||
{
|
{
|
||||||
|
//TODO: (Request) to clear target
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue