Files
pdfcraft/vendor/vello_common/CHANGELOG.md
572870eca8 M2: clip intersection starts its row walk at the first shared row (#2026)
* 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>
2026-10-15 02:38:54 -04:00

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, and EncodedExternalTexture for encoding draws that sample from them. (#1552 by @tomcur)
  • RectU16, a shared axis-aligned rectangle type for u16 coordinate bounding boxes. (#1559 by @tomcur)

Changed

  • WideTilesBbox now uses RectU16 internally, its bbox field is private, and WideTilesBbox::new now takes four u16 coordinates instead of a [u16; 4]. (#1559 by @tomcur)
  • Renamed image transparency hint APIs from may_have_opacities and *_opacity_hint to may_have_transparency and *_transparency_hint. (#1613 by @upsuper)
  • Gradient LUTs no longer reserve an extra transparent entry for undefined radial-gradient regions; EncodedGradient now tracks whether those regions are possible. (#1529 by @LaurenzV)

Removed

  • Public glyph and colr modules and the text feature; sparse-strips text rendering now lives in glifo and 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 ClosePath without an explicit MoveTo. (#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

Changed

  • Replaced custom blend mode representation with peniko Mix for filter effects. (#1410 by @LaurenzV)

Removed

Fixed

  • Double-scaling of non-hinted COLR glyphs. (#1370 by @conor-93)
  • Handling of pop_clip commands 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

Optimized

  • Alpha blending for fully opaque image fills. (#1329 by @grebmeg)

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 clip allowing for the possibility to intersect two strips to create a new strip representing their intersection. (#1203 by @LaurenzV)
  • An extend method to StripStorage to extend its alphas/strips from another StripStorage. (#1203 by @LaurenzV)
  • A new trait for approximate integer division by 255. (#1203 by @LaurenzV)
  • A from_parts method for masks. (#1237 by @LaurenzV)
  • Initial support for image filters. (#1286 by @grebmeg)

Changed

  • WideTile::generate now takes an additional BlendMode as a parameter. (#1159 by @LaurenzV)
  • CmdFill and CmdAlphaFill now store a BlendMode instead of Option<BlendMode>. (#1159 by @LaurenzV)
  • Strip now implements PartialEq and Eq. (#1203 by @LaurenzV)
  • Strip now has a is_sentinel method. (#1203 by @LaurenzV)
  • StripStorage now implements PartialEq and Eq. (#1203 by @LaurenzV)
  • The generate_filled_path method of StripGenerator now takes an optional clip path as input. (#1203 by @LaurenzV)
  • The generate method of Wide now takes an optional mask as an additional argument. (#1237 by @LaurenzV)
  • CmdFill and CmdAlphaFill now 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

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.