vello_cpu 0.0.8's clip_color, shared by the nonseparable blend modes, divided 0 by 0 when a gray's equal components were rounded just below 0 or above 1 after set_lum. The NaN drew the pixel black at the source's alpha whatever the backdrop: nine gray levels under /BM /Color in an empty isolated group (0.96 g among them) rendered (0, 0, 0), and two more at half opacity came out wrong. Vendor vello_cpu 0.0.8 (Apache-2.0 OR MIT) with a backport of linebender/vello#2000, which clips only when the denominator is positive. No vello_cpu release carries the fix yet; drop the copy when one does. Tests in it::nonseparable_gray run every gray level. The two Color ramps fail with the unpatched blend.rs. The Luminosity ramp (black over each opaque gray, upstream's other case) passes either way here: pages use the u8 pipeline, and that case only failed in the f32 one; it stays as a guard. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SqmHYx8FiWM5PcsoiErgp9
9.7 KiB
Changelog
Unreleased
This release has an MSRV of 1.88.
0.0.8 - 2026-05-15
This release has an MSRV of 1.88.
Added
render_decorationon glyph run builders for rendering text decorations with skip-ink behavior. (#1592 by @taj-p)- Support for rendering VARC glyphs in text paths. (#1594 by @nicoburns, @oscargus)
- Support for synthetic font emboldening in text glyph runs via
GlyphRunBuilder::font_emboldenandglifo::FontEmbolden. (#1628 by @jrmoulton)
Changed
- Migrated text rendering to
glifo; rendering, glyph, and image APIs now use an explicitResourcesobject for persistent image and glyph caches.RenderContext::render_to_buffer,RenderContext::render_to_pixmap,RenderContext::composite_to_pixmap_at_offset, andRenderContext::glyph_runnow take resources, and image registration moved fromRenderContexttoResources. (#1562 by @LaurenzV) - Renamed image transparency hint APIs from
may_have_opacitiesand*_opacity_hinttomay_have_transparencyand*_transparency_hint. (#1613 by @upsuper)
Removed
- Experimental
vello_apiintegration andapimodule. (#1602 by @waywardmonkeys) - Support for recordings. This decision was made due to a number of downsides that came with the implementation. See the corresponding PR and Zulip thread for more information. (#1611 by @LaurenzV)
Fixed
- Rendering of rare degenerate radial gradients with undefined regions, which should render those regions transparent. (#1529 by @LaurenzV)
- Incorrect rendering of filter layers containing nested clip layers. (#1541 by @LaurenzV)
- x86 artifacts in bicubic image rendering caused by negative interpolated color values wrapping during SIMD
f32tou8conversion. (#1563 by @LaurenzV) - Stroked glyph rendering when scaled glyph runs absorb the transform into the font size, preserving the expected stroke width. (#1576 by @LaurenzV)
- COLR glyph rendering, including glyphs using non-default blend modes. (#1584 by @LaurenzV)
- Rendering of inverted rectangles, including blurred rounded rectangles. (#1589 by @LaurenzV)
Optimized
0.0.7 - 2026-03-24
This release has an MSRV of 1.92.
Added
composite_to_pixmap_at_offsetmethod toRenderContextfor compositing at specific offsets within a larger pixmap. (#1416 by @grebmeg)ImageResolverfor resolving opaque image IDs at rasterization time. (#1451 by @grebmeg)- Support for image tinting. (#1460 by @grebmeg)
Fixed
- Rendering of blurred rounded rectangles with zero or very small blur standard deviations. (#1422 by @tomcur)
- Off-by-one error in gaussian blur decimation filter. (#1488 by @LaurenzV)
- Filter layers with zero clips. (#1437 by @LaurenzV)
Optimized
0.0.6 - 2026-01-15
This release has an MSRV of 1.88.
Added
- Support for the "offset" filter. (#1351 by @waywardmonkeys)
Changed
- Breaking change: Updated Peniko to v0.6.0. (#1349 by @DJMcNab)
- This also updates Kurbo to v0.13.0.
- Upgraded Skrifa to v0.40.0. (#1353 by @waywardmonkeys)
- Upgraded Hashbrown to v0.16.1. (#1354 by @waywardmonkeys)
- Optimized image rendering for axis-aligned images. (#1335 by @grebmeg)
See also the vello_hybrid 0.0.6 and vello_common 0.0.6 releases.
0.0.5 - 2026-01-08
This release has an MSRV of 1.88.
Added
- The
RenderContextnow has aset_blend_mode(and a correspondingblend_modegetter method) that can be used to support non-isolated blending. (#1159 by @LaurenzV) - The
RenderContextnow contains apush_clip_pathandpop_clip_pathmethod for performing non-isolated clipping. (#1203 by @LaurenzV) - Experimental support for image filter effects: (#1286 by @grebmeg)
- New filter API methods on
RenderContext:set_filter_effect()- Set a filter to be applied to subsequent drawing operations.push_filter_layer()- Create a new layer with a filter effect.
FilterEffecttrait providing both u8 and f32 precision variants for rendering across different backends.- Gaussian Blur filter with configurable standard deviation and edge modes (
None,Mirror,Wrap,Duplicate). Uses an optimized decimated blur algorithm with automatic downsampling for performance. - Drop Shadow filter with customizable offset, blur radius, and shadow color.
- Flood filter for solid color fills.
- New filter API methods on
- A
set_maskmethod to make it possible to mask rendered paths without inducing layer isolation. (#1237 by @LaurenzV) - Support for conditionally disabling the u8 or f32 pipeline. (#1294 by @nicoburns)
Changed
Known Limitations
- Filter effects currently support only single-primitive filters; filter graphs with multiple chained primitives are not yet supported.
- Multithreaded rendering is not supported for filter effects; filters are only applied in single-threaded mode.
See also the vello_hybrid 0.0.5 and vello_common 0.0.5 releases.
0.0.4 - 2025-10-17
This release has an MSRV of 1.86.
No changelog was kept for this release.
See also the vello_hybrid 0.0.4 and vello_common 0.0.4 releases.
0.0.3 - 2025-10-04
This release has an MSRV of 1.86.
No changelog was kept for this release.
See also the vello_common 0.0.3 release.
0.0.2 - 2025-09-22
This release has an MSRV of 1.85.
No changelog was kept for this release.
See also the vello_common 0.0.2 release.
0.0.1 - 2025-05-10
This release has an MSRV of 1.85.
This is the initial release. No changelog was kept for this release.
See also the vello_common 0.0.1 release.