Skip to content

Releases: thorvg/thorvg

ThorVG 1.0.0-pre6

21 Nov 17:05

Choose a tag to compare

ThorVG 1.0.0-pre6 Pre-release
Pre-release

In preparation for the ThorVG 1.0.0 release, we are conducting a pre-release for ThorVG v1.0. Please carefully review the release notes, as there may be API/ABI breaks included. Also, this release includes several improvements and minor bug fixes since v1.0.0-pre5.

  • [Renderer] Introduced reference counter features for paint objects. #1372 #2598
  • [Renderer] Prevented dangling instances in failure scenarios by leveraging the reference counter.
  • [Renderer] Fixed an issue where paint transformations were omitted during scene changes. #2958
  • [WgEngine] Added support for radial gradient focal functions, enabling more versatile gradient designs. #2728 #2936
  • [WgEngine] Improved anti-aliased drawing for radial gradient fills using anisotropy filtering. #2931
  • [WgEngine] Fixed invalid memory access issues. #2922
  • [GlEngine] Added support for radial gradient focal functions, enabling more versatile gradient designs. #2728 #2936
  • [GlEngine] Resolved a memory leak in the IndexBuffer object, introduced in version 1.0-pre5.
  • [GlEngine] Fixed performance degradation caused by repeated clipping operations.
  • [SwEngine] Enhanced stability to improve the user experience.
  • [Lottie] Added support for overriding default slots. #2915
  • [Lottie] Improved slot behavior to correctly override solid fill opacity and image attributes. #2591
  • [Lottie] Introduced text alignment options for greater text layout flexibility. #2178
  • [Lottie] Enabled smoothness and maxAmount specifications for text range selectors. #2178
  • [Lottie] Added support for min/max easing and shapes for text range selectors. #2178
  • [Lottie] Enhanced gradient fill data parsing by supporting the color stop count (p) parameter in slot data. #2795
  • [Lottie] Fixed minor memory leaks for improved resource handling.
  • [SVG] Improved gradient support by properly handling the currentColor attribute. #2960
  • [Web] Optimized GIF saving by eliminating unnecessary data copies.
  • [C++ API] Modifications:
Result GlCanvas::target(int32_t id, uint32_t w, uint32_t h)
 -> Result GlCanvas::target(int32_t id, uint32_t w, uint32_t h, ColorSpace cs)
Result Paint::mask(std::unique_ptr<Paint> target, MaskMethod method)
 -> Result Paint::mask(Paint* target, MaskMethod method)
Result Paint::clip(std::unique_ptr<Paint> clipper)
 -> Result Paint::clip(Paint* clipper)
virtual Result Canvas::push(std::unique_ptr<Paint> paint)
 -> virtual Result Canvas::push(Paint* paint)
std::unique_ptr<LinearGradient> LinearGradient::gen()
 -> LinearGradient* LinearGradient::gen()
std::unique_ptr<RadialGradient> RadialGradient::gen()
 -> RadialGradient* RadialGradient::gen()
Result Shape::strokeFill(std::unique_ptr<Fill> f)
 -> Result Shape::strokeFill(Fill* f)
Result Shape::fill(std::unique_ptr<Fill> f)
 -> Result Shape::fill(Fill* f)
std::unique_ptr<Shape> Shape::gen()
 -> Shape* Shape::gen()
std::unique_ptr<Picture> Picture::gen()
 -> Result Picture::push(Paint* paint)
std::unique_ptr<Scene> Scene::gen()
 -> Scene* Scene::gen()
Result Text::fill(std::unique_ptr<Fill> f)
 -> Result Text::fill(Fill* f)
std::unique_ptr<Text> Text::gen()
 -> Text* Text::gen()
std::unique_ptr<SwCanvas> SwCanvas::gen()
 -> SwCanvas* SwCanvas::gen()
std::unique_ptr<GlCanvas> GlCanvas::gen()
 -> GlCanvas* GlCanvas::gen()
std::unique_ptr<Animation> Animation::gen()
 -> Animation* Animation::gen()
Result Saver::background(std::unique_ptr<Paint> paint)
 -> Result Saver::background(Paint* paint)
Result Saver::save(std::unique_ptr<Paint> paint, const char* filename, uint32_t quality = 100)
 -> Result Saver::save(Paint* paint, const char* filename, uint32_t quality = 100)
std::unique_ptr<Saver> Saver::gen()
 -> Saver* Saver::gen()
std::unique_ptr<Accessor> Accessor::gen()
 -> Accessor* Accessor::gen()
  • [C++ API] Addition:
uint8_t Paint::ref()
uint8_t Paint::unref(bool free = true)
uint8_t Paint::refCnt() const
  • [C++ API] Removal:
template<typename T = tvg::Paint> std::unique_ptr<T> cast(Paint* paint)
template<typename T = tvg::Paint> std::unique_ptr<T> cast(Paint* paint)    
  • [CAPI] Modification:
Tvg_Result tvg_glcanvas_set_target(Tvg_Canvas* canvas, int32_t id, uint32_t w, uint32_t h)
 -> Tvg_Result tvg_glcanvas_set_target(Tvg_Canvas* canvas, int32_t id, uint32_t w, uint32_t h, Tvg_Colorspace cs)
  • [C API] Addition:
Tvg_Result tvg_shape_set_stroke_gradient(Tvg_Paint* paint, Tvg_Gradient* grad)
Tvg_Result tvg_shape_set_shape_gradient(Tvg_Paint* paint, Tvg_Gradient* grad)
uint8_t tvg_paint_ref(Tvg_Paint* paint)
uint8_t tvg_paint_unref(Tvg_Paint* paint, bool free)
uint8_t tvg_paint_get_ref(const Tvg_Paint* paint)
  • [C API] Removal:
Tvg_Result tvg_shape_set_stroke_linear_gradient(Tvg_Paint* paint, Tvg_Gradient* grad)
Tvg_Result tvg_shape_set_stroke_radial_gradient(Tvg_Paint* paint, Tvg_Gradient* grad)
Tvg_Result tvg_shape_set_shape_linear_gradient(Tvg_Paint* paint, Tvg_Gradient* grad)
Tvg_Result tvg_shape_set_shape_radial_gradient(Tvg_Paint* paint, Tvg_Gradient* grad)

ThorVG 0.15.4

18 Nov 16:51

Choose a tag to compare

This release includes several improvements and minor bug fixes:

  • [SwEngine] Enhanced minor stability for a smoother user experience.
  • [GlEngine] Introduced support for radial gradient focal functions, enabling more versatile gradient designs. #2936
  • [GlEngine] Resolved performance degradation caused by repeated clip drawing operations.
  • [Lottie] Revised gradient fill data parsing by adding support for the color stop count (p) parameter in slot data. #2795
  • [Lottie] Implemented support for overriding default slots. #2915
  • [Lottie] Enhanced slots to correctly override solid fill opacity and image attributes. #2591
  • [Lottie] Added support for text alignment options, improving text layout flexibility. #2178
  • [Lottie] Enabled smoothness and maxAmount specification for text range selectors. #2178
  • [Lottie] Fixed minor memory leaks to ensure better resource handling.

Full Changelog: v0.15.3...v0.15.4

ThorVG 1.0.0-pre5

07 Nov 16:03

Choose a tag to compare

ThorVG 1.0.0-pre5 Pre-release
Pre-release

In preparation for the ThorVG 1.0.0 release, we are conducting a pre-release for ThorVG v1.0. Please carefully review the release notes, as there may be API/ABI breaks included. Also, this release includes several improvements and minor bug fixes since v1.0.0-pre4.

  • [Renderer] Added support for the SceneEffect DropShadow feature, enhancing visual depth with shadow effects. #2718
  • [WgEngine] Fixed an issue with the close command logic that previously caused rendering errors. #2923
  • [WgEngine] Improved stroke dash offset logic to ensure more accurate rendering of dashed lines. #2592
  • [WgEngine] Corrected a blending operation issue in the Scene rendering process for improved visual consistency. #2592
  • [Lottie] Fixed a keyframe data copy bug that caused slot fill data to incorrectly override other values. #2797
  • [Lottie] Introduced support for text alignment options, allowing for greater text layout flexibility. #2178
  • [Lottie] Enhanced gradient fill customization by allowing slot overrides to define the number of colors. #2795
  • [Lottie] Added support for the DropShadow layer effect, enhancing Lottie animations with shadow options. #2153 #2718
  • [C API] Added new APIs to support GL and WG canvas types, expanding rendering options. #2855
Tvg_Canvas* tvg_glcanvas_create(void)
Tvg_Result tvg_glcanvas_set_target(Tvg_Canvas* canvas, int32_t id, uint32_t w, uint32_t h)
Tvg_Canvas* tvg_wgcanvas_create(void)
Tvg_Result tvg_wgcanvas_set_target(Tvg_Canvas* canvas, void* instance, void* surface, uint32_t w, uint32_t h, void* device)
  • [API] Modifications:
Result Picture::load(const std::string& path) -> Result Picture::load(const char* filename)
Result Picture::load(const char* data, uint32_t size, const std::string& mimeType, const std::string& rpath = "", bool copy = false) -> Result Picture::load(const char* data, uint32_t size, const char* mimeType, const char* rpath = "", bool copy = false)
Result Text::load(const std::string& path) -> Result Text::load(const char* filename)
Result Text::load(const char* name, const char* data, uint32_t size, const std::string& mimeType = "ttf", bool copy = false) -> Result Text::load(const char* name, const char* data, uint32_t size, const char* mimeType = "ttf", bool copy = false)
Result Text::unload(const std::string& path) -> Result Text::unload(const char* filename)
Result Saver::save(std::unique_ptr<Paint> paint, const std::string& path, uint32_t quality = 100) -> Result Saver::save(std::unique_ptr<Paint> paint, const char* filename, uint32_t quality = 100)
Result Saver::save(std::unique_ptr<Animation> animation, const std::string& path, uint32_t quality = 100, uint32_t fps = 0) -> Result Saver::save(std::unique_ptr<Animation> animation, const char* filename, uint32_t quality = 100, uint32_t fps = 0)   

Full Changelog: v1.0-pre4...v1.0-pre5

ThorVG 0.15.3

01 Nov 09:25

Choose a tag to compare

This release includes several improvements and minor bug fixes:

  • [Renderer] Hotfixed an issue with broken SVG file sharing.
  • [SwEngine] Fixed an issue with Gaussian Blur feathering when applied in one directional filter. #2892
  • [SwEngine] Fixed a regression bug that impacted rendering regions. #2908
  • [Lottie] Adjusted Text Range Selector transformation to ensure accurate positioning.
  • [Lottie] Corrected a shallow keyframe data copy bug. #2797
  • [SVG] Enhanced runtime stability by preventing invalid memory access.

Full Changelog: v0.15.2...v0.15.3

ThorVG 1.0.0-pre4

31 Oct 16:58

Choose a tag to compare

ThorVG 1.0.0-pre4 Pre-release
Pre-release

In preparation for the ThorVG 1.0.0 release, we are conducting a pre-release for ThorVG v1.0. Please carefully review the release notes, as there may be API/ABI breaks included. Also, this release includes several improvements and minor bug fixes since v1.0.0-pre3.

  • [WgEngine] Resolved an incorrect alpha blending issue for bitmap images. #2685
  • [WgEngine] Fixed rendering artifacts caused by zero-length segments in paths. #2685
  • [WgEngine] Corrected gradient offset assignment. #2592
  • [WgEngine] Improved tessellation quality for cubic splines and circles. #2592
  • [SwEngine] Fixed a regression bug that impacted rendering regions. #2908
  • [Lottie] Adjusted Text Range Selector transformation to ensure accurate positioning.

Full Changelog: v1.0-pre3...v1.0-pre4

ThorVG 1.0.0-pre3

25 Oct 00:24

Choose a tag to compare

ThorVG 1.0.0-pre3 Pre-release
Pre-release

In preparation for the ThorVG 1.0.0 release, we are conducting a pre-release for ThorVG v1.0. Please carefully review the release notes, as there may be API/ABI breaks included. Also, this release includes several improvements and minor bug fixes since v1.0.0-pre2.

  • [Renderer] Hotfixed an issue with broken SVG file sharing.
  • [WgEngine] Applied 4x MultiSampling anti-aliasing for improving visual quality.
  • [WgEngine] Enhanced Path Clipping performance by eliminating costful context switching.
  • [GlEngine] Fixed an incorrect PNG colorspace issue. #2880
  • [GlEngine] Corrected the alpha multiplication error in Inverse Luma Masking.
  • [SwEngine] Fixed an issue with Gaussian Blur feathering when applied in one directional filter. #2892
  • [SwEngine] Resolved incorrect masking with 8-bit linear gradient filling. #2204
  • [SwEngine] Corrected blending errors in 8-bit channel data when directly drawing images.
  • [Lottie] Improved the Offset Path algorithm for more accurate shape deformation.
  • [Lottie] Adjusted the Offset Path logic to ignore path direction, following Lottie specification.
  • [SVG] Enhanced runtime stability by preventing invalid memory access.
  • [API] Modified APIs:
Result RadialGradient::radial(float cx, float cy, float radius)
 -> Result RadialGradient::radial(float cx, float cy, float r, float fx, float fy, float fr)
Result RadialGradient::radial(float* cx, float* cy, float* radius)
 -> Result RadialGradient::radial(float* cx, float* cy, float* r, float* fx = nullptr, float* fy = nullptr, float* fr = nullptr)

Full Changelog: v1.0-pre2...v1.0-pre3

ThorVG 0.15.2

21 Oct 16:29

Choose a tag to compare

This release includes several improvements and minor bug fixes:

  • [SwEngine] Optimized render region updates to minimize unnecessary rendering tasks.
  • [SwEngine] Fixed a crash by splitting long lines to prevent overflow. #2651
  • [SwEngine] Fixed incorrect 8bits linear gradient filling masking. #2204
  • [SwEngine] Rectified a wrong 8bits channel data blending in direct image drawing.
  • [GlEngine] Added support for the Path Trimming feature. #2435
  • [GlEngine] Fixed an wrong png colorspace. #2880
  • [GlEngine] Corrected a wrong masking alpha multiplication when applying the Inverse Luma Masking.
  • [Lottie] Enhanced performance for Gaussian Blur effects.
  • [Lottie] Added support for Masking Expansion (Dilate). #2832
  • [Lottie] Optimized memory management by releasing JSON data immediately after loading. #2647
  • [Lottie] Fixed regression bugs causing gradient fills to matte masked, incorrectly. #2842 #2841
  • [Lottie] Rectified Offset Path to ignore the path direction according to its Spec.

Full Changelog: v0.15.1...v0.15.2

ThorVG 1.0.0-pre2

18 Oct 02:27

Choose a tag to compare

ThorVG 1.0.0-pre2 Pre-release
Pre-release

In preparation for the ThorVG 1.0.0 release, we are conducting a pre-release for ThorVG v1.0. Please carefully review the release notes, as there may be API/ABI breaks included. Also, this release includes several improvements and minor bug fixes since v1.0-pre2

  • [Renderer] Reduced the PathCommand data size from 4 bytes to 1 byte for improved memory efficiency.
  • [GlEngine] Added support for the Path Trimming feature. #2435
  • [WgEngine] Fixed an uninitialized data access issue in AABB when handling empty shapes or long paths. #2843
  • [Lottie] Optimized memory management by releasing JSON data immediately after loading. #2647
  • [Lottie] Fixed regression bugs causing gradient fills to matte masked, incorrectly. #2842 #2841
  • [TVG] TVG binary feature support has been removed. #2721
  • [API] Modified APIs:
Result Picture::load(uint32_t* data, uint32_t w, uint32_t h, bool premultiplied, bool copy = false)
 -> Result Picture::load(uint32_t* data, uint32_t w, uint32_t h, ColorSpace cs, bool copy = false)
enum class PathCommand
 -> enum class PathCommand : uint8_t
enum class Result::Unknown (6)
 -> enum class Result::Unknown (255)
Matrix Fill::transform() const
 -> Matrix& Fill::transform() const
enum class CompositeMethod
 -> enum class MaskMethod
Result Paint::composite(std::unique_ptr target, CompositeMethod method)
 -> Result Paint::mask(std::unique_ptr target, MaskMethod method)
CompositeMethod Paint::mask(const Paint** target) const
 -> MaskMethod Paint::mask(const Paint** target) const
Tvg_Result tvg_picture_load_raw(Tvg_Paint* paint, uint32_t data, uint32_t w, uint32_t h, bool premultiplied, bool copy)
 -> Tvg_Result tvg_picture_load_raw(Tvg_Paint paint, uint32_t *data, uint32_t w, uint32_t h, Tvg_Colorspace cs, bool copy)
enum Tvg_Path_Command
 -> uint8_t Tvg_Path_Command
TVG_RESULT_UNKNOWN (6)
 -> TVG_RESULT_UNKNOWN (255)
enum Tvg_Composite_Method
 -> enum Tvg_Mask_Method
Tvg_Result tvg_paint_set_composite_method(Tvg_Paint* paint, Tvg_Paint* target, Tvg_Composite_Method method)
 -> Tvg_Result tvg_paint_set_mask_method(Tvg_Paint* paint, Tvg_Paint* target, Tvg_Mask_Method method)
Tvg_Result tvg_paint_get_composite_method(const Tvg_Paint* paint, const Tvg_Paint** target, Tvg_Composite_Method* method)
 -> Tvg_Result tvg_paint_get_mask_method(const Tvg_Paint* paint, const Tvg_Paint** target, Tvg_Mask_Method* method)
  • [API] Removed deprecated APIs:
enum class CompisiteMethod::ClipPath 
enum Tvg_Composite_Method::TVG_COMPOSITE_METHOD_CLIP_PATH

Full Changelog: v1.0-pre1...v1.0-pre2

ThorVG 0.15.1

12 Oct 03:49

Choose a tag to compare

This release includes only hotfixes for critical bugs:

  • [Lottie] Fixed a crash when the image external path is not addressed. #2733

Full Changelog: v0.15.0...v0.15.1

ThorVG 1.0.0-pre1

11 Oct 03:30
d4f8a88

Choose a tag to compare

ThorVG 1.0.0-pre1 Pre-release
Pre-release

In preparation for the ThorVG 1.0.0 release, we are conducting a pre-release for ThorVG v1.0. Please carefully review the release notes, as there may be API/ABI breaks included. Also, this release includes several improvements and minor bug fixes since v0.15.0.

  • [Lottie] Enhanced performance for Gaussian Blur effects.
  • [Lottie] Added support for Masking Expansion (Dilate). Issue #2832
  • [SwEngine] Optimized render region updates to minimize unnecessary rendering tasks.
  • [SwEngine] Fixed a crash by splitting long lines to prevent overflow. Issue #2651
  • [WgEngine] Resolved several resource leaks. Issue #2808
  • [WgEngine] Corrected the order of gradient fill color stop offsets. Issue #2435
  • [WgEngine] Fixed incorrect opacity handling during scene blending.
  • [WgEngine] Addressed a crash when processing shapes with excessively large paths.
  • [SVG] Added support for tvg::Accessor to access elements using the id attribute in SVG.
  • [Web] Increased WebGPU stack size to 4MB for improved stability.
  • [Infra] Removed the beta tag from the WebGPU engine.
  • [API] Modified APIs:
enum class StrokeCap
 -> enum class StrokeCap : uint8_t
enum class StrokeJoin
 -> enum class StrokeJoin : uint8_t
enum class FillSpread 
 -> enum class FillSpread : uint8_t
enum class FillRule
 -> enum class FillRule : uint8_t
enum class CompositeMethod
 -> enum class CompositeMethod : uint8_t
enum class CanvasEngine
 -> enum class CanvasEngine : uint8_t
enum SwCanvas::Colorspace
 ->  enum SwCanvas::Colorspace : uint8_t
enum SwCanvas::MempoolPolicy
 -> enum SwCanvas::MempoolPolicy : uint8_t
virtual Canvas::clear(bool free = true)
 -> virtual Result Canvas::clear(bool paints = true, bool buffer = true)
Result Shape::stroke(float width)
 -> Result Shape::strokeWidth(float width)
Result Shape::stroke(uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255)
 -> Result Shape::strokeFill(uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255)
Result Shape::stroke(std::unique_ptr<Fill> f)
 -> Result Shape::strokeFill(std::unique_ptr<Fill> f)
Result Shape::stroke(const float* dashPattern, uint32_t cnt)
 -> Result Shape::strokeDash(const float* dashPattern, uint32_t cnt, float offset = 0.0f)
Result Shape::stroke(StrokeCap cap)
 -> Result Shape::strokeCap(StrokeCap cap)
Result Shape::stroke(StrokeJoin join)
 ->  Result strokeJoin(StrokeJoin join)
Result Shape::strokeColor(uint8_t* r, uint8_t* g, uint8_t* b, uint8_t* a = nullptr) const
 -> Result Shape::strokeFill(uint8_t* r, uint8_t* g, uint8_t* b, uint8_t* a = nullptr) const
uint32_t Shape::strokeDash(const float** dashPattern) const
 -> uint32_t Shape::strokeDash(const float** dashPattern, float* offset = nullptr) const
Result Picture::load(const char* data, uint32_t size, const std::string& mimeType, bool copy = false)
 -> Result Picture::load(const char* data, 
Result Picture::load(uint32_t* data, uint32_t w, uint32_t h, bool copy)
 -> Result load(uint32_t* data, uint32_t w, uint32_t h, bool premultiplied, bool copy = false)
static Result Initializer::init(CanvasEngine engine, uint32_t threads)
 ->  static Result Initializer::init(uint32_t threads, CanvasEngine engine = tvg::CanvasEngine::All)
Result Saver::save(std::unique_ptr<Paint> paint, const std::string& path, bool compress = true)
 -> Result Saver::save(std::unique_ptr<Paint> paint, const std::string& path, uint8_t quality = 100) 
Tvg_Result tvg_canvas_clear(Tvg_Canvas* canvas, bool free)
 -> Tvg_Result tvg_canvas_clear(Tvg_Canvas* canvas, bool paints, bool buffer)
Tvg_Result tvg_shape_set_stroke_dash(Tvg_Paint* paint, const float* dashPattern, uint32_t cnt)
 -> Tvg_Result tvg_shape_set_stroke_dash(Tvg_Paint* paint, const float* dashPattern, uint32_t cnt, float offset)
Result tvg_shape_get_stroke_dash(const Tvg_Paint* paint, const float** dashPattern, uint32_t* cnt)
 -> Tvg_Result tvg_shape_get_stroke_dash(const Tvg_Paint* paint, const float** dashPattern, uint32_t* cnt, float* offset)
Tvg_Result tvg_picture_load_raw(Tvg_Paint* paint, uint32_t *data, uint32_t w, uint32_t h, bool copy)
 -> tvg_picture_load_raw(Tvg_Paint* paint, uint32_t *data, uint32_t w, uint32_t h, bool premultiplied, bool copy)
Tvg_Result tvg_picture_load_data(Tvg_Paint* paint, const char *data, uint32_t size, const char *mimetype, bool copy)
 -> Tvg_Result tvg_picture_load_data(Tvg_Paint* paint, const char *data, uint32_t size, const char *mimetype, const char* rpath, bool copy)
Tvg_Result tvg_saver_save(Tvg_Saver* saver, Tvg_Paint* paint, const char* path, bool compress)
 -> Tvg_Result tvg_saver_save(Tvg_Saver* saver, Tvg_Paint* paint, const char* path, uint32_t quality)
  • [API] Removed deprecated APIs:
Result Paint::bounds(float* x, float* y, float* w, float* h) const
uint32_t Paint::identifier() const
Result Canvas::reserve(uint32_t n)
uint32_t Fill::identifier() const
static uint32_t LinearGradient::identifier()
static uint32_t RadialGradient::identifier()
static uint32_t Shape::identifier()
Result Shape::appendArc(float cx, float cy, float radius, float startAngle, float sweep, bool pie)
static uint32_t Picture::identifier()
Result Picture::load(const char* data, uint32_t size, bool copy = false)
uint32_t size, const std::string& mimeType, const std::string& rpath = "", bool copy = false)
static uint32_t Scene::identifier()
Result Scene::reserve(uint32_t size)
std::unique_ptr<Picture> Accessor::set(std::unique_ptr<Picture> picture, std::function<bool(const Paint* paint)> func)
Tvg_Result tvg_canvas_reserve(Tvg_Canvas* canvas, uint32_t n)
Tvg_Result tvg_paint_get_identifier(const Tvg_Paint* paint, Tvg_Identifier* identifier)
Tvg_Result tvg_shape_append_arc(Tvg_Paint* paint, float cx, float cy, float radius, float startAngle, float sweep, uint8_t pie)
Tvg_Result tvg_gradient_get_identifier(const Tvg_Gradient* grad, Tvg_Identifier* identifier)
Tvg_Result tvg_scene_reserve(Tvg_Paint* scene, uint32_t size)
Tvg_Result tvg_canvas_reserve(Tvg_Canvas* canvas, uint32_t n)
Tvg_Result tvg_paint_get_identifier(const Tvg_Paint* paint, Tvg_Identifier* identifier)
Tvg_Result tvg_shape_append_arc(Tvg_Paint* paint, float cx, float cy, float radius, float startAngle, float sweep, uint8_t pie)
Tvg_Result tvg_gradient_get_identifier(const Tvg_Gradient* grad, Tvg_Identifier* identifier)
Tvg_Result tvg_scene_reserve(Tvg_Paint* scene, uint32_t size)