* M2: clip intersection starts its row walk at the first shared row clip::intersect in vello_common, the step every clipped path passes through, began its walk over strip rows at the earlier of the two paths' first rows. Each path therefore visited every row above it, although rows where one path has no strips produce no output. Every page is clipped (the crop box is a clip), so this ran for every stroke of every render: on the A1 engineering sample it was the hottest function in a full-page render. Start at the later first row, as vello_common 0.1 does. The strips and the pixels are unchanged; a test counts the rows the walk visits and fails without the change. vello_common 0.0.8 is vendored with that one-line PdfCraft patch (marked in the source), its unit test, the vendor/README.md row and an ATTRIBUTION.toml entry for its reference image. Cargo.lock records it as a path crate. Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com> * Refresh catalog hashes after merging main --------- Co-authored-by: Claude Haiku 5.5 <noreply@anthropic.com> Co-authored-by: Brandon Thomas <echelon@gmail.com>
12 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
TextureId, a handle for user-provided textures resolved at render-time, andEncodedExternalTexturefor encoding draws that sample from them. (#1552 by @tomcur)RectU16, a shared axis-aligned rectangle type foru16coordinate bounding boxes. (#1559 by @tomcur)
Changed
WideTilesBboxnow usesRectU16internally, itsbboxfield is private, andWideTilesBbox::newnow takes fouru16coordinates instead of a[u16; 4]. (#1559 by @tomcur)- Renamed image transparency hint APIs from
may_have_opacitiesand*_opacity_hinttomay_have_transparencyand*_transparency_hint. (#1613 by @upsuper) - Gradient LUTs no longer reserve an extra transparent entry for undefined radial-gradient regions;
EncodedGradientnow tracks whether those regions are possible. (#1529 by @LaurenzV)
Removed
- Public
glyphandcolrmodules and thetextfeature; sparse-strips text rendering now lives inglifoand the renderer crates. (#1562 by @LaurenzV) - Support for recordings, including the shared recording API. 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
- Handling of zero-area rectangles in the rectangle fast path, avoiding out-of-viewport strips and downstream assertions. (#1537 by @LaurenzV)
- Invalid gradients with NaN or out-of-range final stop offsets now fall back to the first color instead of passing validation. (#1531 by @LaurenzV)
- Implicit subpaths that continue after
ClosePathwithout an explicitMoveTo. (#1544 by @tomcur) - Negative-sized rectangles during strip generation. (#1589 by @LaurenzV)
Optimized
- Rendering performance for paths with line segments fully or partly left of the viewport by culling invisible left-of-viewport line work while preserving winding contributions. (#1368 by @b0nes164)
- Performance of clipped drawing by culling geometry outside the clip bounding box during flattening. (#1519 by @tomcur)
- Flattening and tiling performance through codegen improvements in the sparse strip pipeline. (#1600, #1616, #1634 by @LaurenzV)
0.0.7 - 2026-03-24
This release has an MSRV of 1.92.
Added
- Support for image tinting. (#1460 by @grebmeg)
RenderStateabstraction. (#1486 by @LaurenzV)- Helpers for rendering filters. (#1446 by @LaurenzV)
ImageCacheandMultiAtlasManager. (#1457 by @grebmeg)
Changed
Removed
- Process Row Incremental Macro and Perfect Bit. (#1384 by @b0nes164)
toleranceparameter from the flattening method. (#1399 by @LaurenzV)- Command annotation logic. (#1438 by @LaurenzV)
Fixed
- Double-scaling of non-hinted COLR glyphs. (#1370 by @conor-93)
- Handling of
pop_clipcommands and properly resetting wide tiles. (#1443 by @LaurenzV, #1447 by @tomcur) - Layer ranges not being updated when a wide tile is reset with a background color. (#1478 by @LaurenzV)
Optimized
- Bézier flattening performance by catching more Béziers whose chords are immediately within rendering tolerance. (#1216 by @tomcur)
- Flattening and tiling performance by culling out-of-viewport Béziers before flattening. (#1341 by @tomcur)
- Rendering performance of scenes including blend layers by ensuring no commands are generated for wide tiles without layer content. (#1403 by @tomcur)
- Scenes including blend layers by only allocating layer scratch buffers for a wide tile upon draw commands being performed in that wide tile. (#1414 by @tomcur)
- Analytic anti-aliasing. (#1426, #1442 by @tomcur)
- Filter application to layers. (#1444 by @LaurenzV)
- Rendering pixel-aligned rectangles. (#1453 by @grebmeg)
- Coarse rasterization and scheduling of scenes without layers. (#1454 by @LaurenzV)
- Resetting wide tiles. (#1484 by @LaurenzV)
0.0.6 - 2026-01-15
This release has an MSRV of 1.88.
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
See also the vello_hybrid 0.0.6 and vello_cpu 0.0.6 releases.
0.0.5 - 2026-01-08
This release has an MSRV of 1.88.
Added
- A new module
clipallowing for the possibility to intersect two strips to create a new strip representing their intersection. (#1203 by @LaurenzV) - An
extendmethod toStripStorageto extend its alphas/strips from anotherStripStorage. (#1203 by @LaurenzV) - A new trait for approximate integer division by 255. (#1203 by @LaurenzV)
- A
from_partsmethod for masks. (#1237 by @LaurenzV) - Initial support for image filters. (#1286 by @grebmeg)
Changed
WideTile::generatenow takes an additionalBlendModeas a parameter. (#1159 by @LaurenzV)CmdFillandCmdAlphaFillnow store aBlendModeinstead ofOption<BlendMode>. (#1159 by @LaurenzV)Stripnow implementsPartialEqandEq. (#1203 by @LaurenzV)Stripnow has ais_sentinelmethod. (#1203 by @LaurenzV)StripStoragenow implementsPartialEqandEq. (#1203 by @LaurenzV)- The
generate_filled_pathmethod ofStripGeneratornow takes an optional clip path as input. (#1203 by @LaurenzV) - The
generatemethod ofWidenow takes an optional mask as an additional argument. (#1237 by @LaurenzV) CmdFillandCmdAlphaFillnow store an optional mask. (#1237 by @LaurenzV)- Various changes to the logic for computing tile intersections and representation of tiles. (#1293, #1317, #1318 by @b0nes164)
- Support for computing data necessary to implement multi-sampled anti-aliasing. (#1319, by @b0nes164)
Optimized
- Gradient rendering. (#1301 by @valadaptive)
- Numerous performance and memory-efficiency improvements. (#1325 by @LaurenzV, #1327 by @grebmeg, #1336 by @tomcur, #1338 by @taj-p)
See also the vello_hybrid 0.0.5 and vello_cpu 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_cpu 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_cpu 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_cpu 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_cpu 0.0.1 release.