Releases: thorvg/thorvg
ThorVG 1.0.0-pre6
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
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
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
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
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
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
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
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
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
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::Accessorto access elements using the id attribute in SVG. - [Web] Increased WebGPU stack size to 4MB for improved stability.
- [Infra] Removed the
betatag 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)