Result reserve(uint32_t n) noexcept;
virtual Result push(std::unique_ptr<Paint> paint) noexcept;
virtual Result clear() noexcept;
- virtual Result update() noexcept;
virtual Result update(Paint* paint) noexcept;
- virtual Result draw(bool async = true) noexcept;
+ virtual Result draw() noexcept;
virtual Result sync() noexcept;
_TVG_DECLARE_ACCESSOR(Scene);
TVG_EXPORT Tvg_Result tvg_canvas_clear(Tvg_Canvas* canvas);
TVG_EXPORT Tvg_Result tvg_canvas_update(Tvg_Canvas* canvas);
TVG_EXPORT Tvg_Result tvg_canvas_update_paint(Tvg_Canvas* canvas, Tvg_Paint* paint);
-TVG_EXPORT Tvg_Result tvg_canvas_draw(Tvg_Canvas* canvas, unsigned char async);
+TVG_EXPORT Tvg_Result tvg_canvas_draw(Tvg_Canvas* canvas);
TVG_EXPORT Tvg_Result tvg_canvas_sync(Tvg_Canvas* canvas);
TVG_EXPORT Tvg_Result tvg_canvas_update(Tvg_Canvas* canvas)
{
- return (Tvg_Result) reinterpret_cast<Canvas*>(canvas)->update();
+ return (Tvg_Result) reinterpret_cast<Canvas*>(canvas)->update(nullptr);
}
}
-TVG_EXPORT Tvg_Result tvg_canvas_draw(Tvg_Canvas* canvas, unsigned char async)
+TVG_EXPORT Tvg_Result tvg_canvas_draw(Tvg_Canvas* canvas)
{
- return (Tvg_Result) reinterpret_cast<Canvas*>(canvas)->draw(async);
+ return (Tvg_Result) reinterpret_cast<Canvas*>(canvas)->draw();
}
}
-Result Canvas::draw(bool async) noexcept
+Result Canvas::draw() noexcept
{
return IMPL->draw();
}
-Result Canvas::update() noexcept
-{
- return IMPL->update();
-}
-
-
Result Canvas::update(Paint* paint) noexcept
{
return IMPL->update(paint);
return Result::Success;
}
- Result update()
+ Result update(Paint* paint)
{
if (!renderer) return Result::InsufficientCondition;
- for(auto paint: paints) {
+ //Update single paint node
+ if (paint) {
if (paint->id() == PAINT_ID_SCENE) {
//We know renderer type, avoid dynamic_cast for performance.
auto scene = static_cast<Scene*>(paint);
auto shape = static_cast<Shape*>(paint);
if (!SHAPE_IMPL->update(*renderer, nullptr, RenderUpdateFlag::None)) return Result::InsufficientCondition;
}
- }
- return Result::Success;
- }
-
- Result update(Paint* paint)
- {
- if (!renderer) return Result::InsufficientCondition;
-
- if (paint->id() == PAINT_ID_SCENE) {
- //We know renderer type, avoid dynamic_cast for performance.
- auto scene = static_cast<Scene*>(paint);
- if (!SCENE_IMPL->update(*renderer, nullptr, RenderUpdateFlag::None)) return Result::InsufficientCondition;
+ //Update retained all paint nodes
} else {
- auto shape = static_cast<Shape*>(paint);
- if (!SHAPE_IMPL->update(*renderer, nullptr, RenderUpdateFlag::None)) return Result::InsufficientCondition;
+ for(auto paint: paints) {
+ if (paint->id() == PAINT_ID_SCENE) {
+ //We know renderer type, avoid dynamic_cast for performance.
+ auto scene = static_cast<Scene*>(paint);
+ if (!SCENE_IMPL->update(*renderer, nullptr, RenderUpdateFlag::None)) return Result::InsufficientCondition;
+ } else {
+ auto shape = static_cast<Shape*>(paint);
+ if (!SHAPE_IMPL->update(*renderer, nullptr, RenderUpdateFlag::None)) return Result::InsufficientCondition;
+ }
+ }
}
return Result::Success;
}
tvg_shape_fill_color(shape, 255, 255, 0, 255);\r
tvg_canvas_push(canvas, shape);\r
\r
- tvg_canvas_draw(canvas, 1);\r
+ tvg_canvas_draw(canvas);\r
tvg_canvas_sync(canvas);\r
\r
tvg_canvas_destroy(canvas);\r