Releases: linebender/vello
sparse-strips-v0.0.4
The 4th alpha version of the Vello Sparse Strips renderers (version 0.0.4) has been released.
We expect to follow-up with v0.1.0 in the near future.
You can track this in #vello > Vello CPU v0.1 release.
This release has an MSRV of 1.86.
Here’s the roadmap for Vello Sparse Strips.
We’ve added CHANGELOG.md files to all the crates listed below. There’s no changelog for this release, but we’ll start keeping detailed logs from the next one onward.
Vello Common
This release contains Vello Common, a support crate used by Vello CPU and Vello Hybrid.
Crates.io | Docs
Vello Common itself does not currently have any stable API surface, as it is only an implementation detail of Vello CPU and Vello Hybrid.
Vello CPU
This release contains only minor updates to Vello CPU, which runs entirely on the CPU. The imaging model exposed by Vello CPU is very similar to that of current Vello.
Crates.io | Docs
This implementation is now broadly usable, with a reasonably complete imaging model and competitive performance.
It does not however have any API stability guarantees, as we intend to redesign the API to be consistent across the Vello renderers.
Performance information can be seen at https://laurenzv.github.io/vello_chart/ (although note that this URL is not "time-locked", so might shows results from a slightly newer or older version than this tag).
Vello Hybrid
This release is the initial release of Vello Hybrid, which uses the CPU for preprocessing and the GPU for rasterization. The imaging model exposed by Vello Hybrid is very similar to that of current Vello.
Crates.io | Docs
This implementation is in its early stages and does not yet provide any API stability guarantees (see the roadmap for more details). It also doesn’t have feature parity with Vello CPU. A few known issues remain, which we plan to address soon.
Full Changelog: sparse-strips-v0.0.3...sparse-strips-v0.0.4
v0.6.0
This release has an MSRV of 1.85.
Added
register_texture, a helper for usingwgputextures in a VelloRenderer. (#1161 by @DJMcNab)push_luminance_mask_layer, content within which is used as a luminance mask. (#1183 by @DJMcNab).
This is a breaking change to Vello Encoding.push_clip_layer, which replaces the previouspush_layerusingMix::Clip, and has fewer footguns. (#1192 by @DJMcNab)
This is not a breaking change, asMix::Clipis still supported (although it is deprecated).- Support for BGRA format images (as input). (#1173 by @sagudev)
Changed
- Breaking change: wgpu has been updated to wgpu 26. (#1096 by @waywardmonkeys)
This has been chosen to match the version used by Bevy 0.17.
(Note that we do not guarantee that our latest release will always match Bevy's wgpu version.) - Breaking change: Put
wgpu's default features behind awgpu_defaultfeature flag. (#1229 by @StT191)
If you're using Vello with default features enabled, then no change is needed. - Breaking change: Updated Peniko to v0.5.0. (#1224 by @DJMcNab)
This brings several important changes which allow Vello to be used in more use cases:- Breaking change: Gradients must have their alpha interpolation space specified. For this, you should use
InterpolationAlphaSpace::Premultiplied, unless you are implementing a specification which indicates otherwise.
Currently, onlyInterpolationAlphaSpace::Premultipliedis supported. - Breaking change:
Gradientkinds now have a corresponding struct. For example,GradientKind::Linear {...}is nowLinearGradientPosition {...}.into().
This makes it possible to pass individual gradient kinds between functions. GradientKind::Sweep's defined semantics now match those which Vello previously implemented.- Breaking change:
Imagehas been renamed toImageBrush, consisting of anImageDataand anImageSampler.
The equivalent to the oldImage::new($data, $format, $width, $height)isImageBrush::new(ImageData { data: $data, format: $format, width: $width, height: $height, alpha_type: ImageAlphaType::Alpha })
(orImageData { ... }.into()if you don't need to set sampler parameters). - Breaking change:
vello::peniko::Fontis now calledvello::peniko::FontData.
This type is also now provided by Linebender Resource Handle.
- Breaking change: Gradients must have their alpha interpolation space specified. For this, you should use
- We now treat Vello's shaders as trusted for memory safety purposes. (#1093 by @sagudev)
If you're using Vello in a security critical environment with user-controlled content, you should audit these shaders yourself, or open an issue to request that these bounds checks are re-enabled.
Linebender Resource Handle
The vello::peniko::Font type used in Vello used to be provided by the Peniko crate, and this was used as vocabulary types for font resources between crates.
However, this means that when Peniko made semver-incompatible releases, crates which used this type could no longer (easily) interoperate.
To resolve this, vello::peniko::FontData (which is the same type but renamed) is now a re-export from a new crate called Linebender Resource Handle.
These types have identical API as in previous releases, but will now be the same type across Peniko versions.
Fixed
- Examples crashing when window is resized to zero. (#1182 by @xStrom)
- Correct flattening tolerance calculation from 2D affine transforms. (#1187 by @tomcur)
- Zero-width strokes were previously treated as fills. (#785 by @DJMcNab)
- Vello no longer writes to the console, instead outputting to
log. (#1017 by @DJMcNab)
This release also coincides with the release of v0.6.0 of Vello Shaders:
and Vello Encoding:
New Contributors
Full Changelog: v0.5.0...v0.6.0
sparse-strips-v0.0.3
The third alpha version of the Vello Sparse Strips renderers (version 0.0.3) has been released.
We expect to follow-up with v0.1.0 in the near future.
You can track this in #vello > Vello CPU v0.1 release.
This release has an MSRV of 1.86.
Vello CPU
This release contains only Vello CPU, which runs entirely on the CPU. The imaging model exposed by Vello CPU is very similar to that of current Vello.
Crates.io | Docs
This implementation is now broadly usable, with a reasonably complete imaging model and competitive performance.
It does not however have any API stability guarantees, as we intend to redesign the API to be consistent across the Vello renderers.
Performance information can be seen at https://laurenzv.github.io/vello_chart/ (although note that this URL is not "time-locked", so might shows results from a slightly newer or older version than this tag).
Vello Common
This release also coincides with the release of Vello Common, a support crate used by Vello CPU:
Crates.io | Docs
Vello Common itself does not currently have any stable API surface, as it is only an implementation detail of Vello CPU.
We have not been maintaining a CHANGELOG for the sparse strips packages whilst they are in alpha, but you can follow the roadmap, or follow progress on Zulip.
Full Changelog: sparse-stips-v0.0.2...sparse-strips-v0.0.3
Sparse Strips v0.0.2
The second alpha version of the Vello Sparse Strips renderers (version 0.0.2) has been released.
We expect this to be the last release in the v0.0.x series, and expect to follow-up with v0.1.0 in the near future.
You can track this in #vello > Vello CPU v0.1 release.
This release has an MSRV of 1.86.
Vello CPU
This release contains only Vello CPU, which runs entirely on the CPU. The imaging model exposed by Vello CPU is very similar to that of current Vello.
Crates.io | Docs
This implementation is now broadly usable, with a reasonably complete imaging model and competitive performance.
It does not however have any API stability guarantees, as we intend to redesign the API to be consistent across the Vello renderers.
Performance information can be seen at https://laurenzv.github.io/vello_chart/ (although note that this URL is not "time-locked", so shows results from a slightly newer version than this tag).
Vello Common
This release also coincides with the release of Vello Common, a support crate used by Vello CPU:
Crates.io | Docs
Vello Common itself does not currently have any stable API surface, as it is only an implementation detail of Vello CPU.
We have not been maintaining a CHANGELOG for the sparse strips packages whilst they are in alpha, but you can follow the roadmap, or follow progress on Zulip.
Full Changelog: sparse-strips-v0.0.1...sparse-strips-v0.0.2
v0.5.1
Sparse Strips v0.0.1
The first alpha version of the Vello Sparse Strips renderers (version 0.0.1) has been released. This is a new implementation strategy for Vello which has wider hardware compatibility, and resolves some performance cliffs.
This release has an MSRV of 1.85.
Vello CPU
This initial release contains only Vello CPU, which runs entirely on the CPU. The imaging model exposed by Vello CPU is very similar to that of current Vello.
Crates.io | Docs
This implementation is in very early stages, and does not have any API stability guarantees.
Vello Common
This release also coincides with the release of Vello Common, a support crate used by Vello CPU:
Crates.io | Docs
Vello Common itself does not currently have any stable API surface, as it is only an implementation detail of Vello CPU.
We will not be maintaining a CHANGELOG for the sparse strips packages whilst they are in alpha, but you can follow the roadmap, or follow progress on Zulip.
v0.5.0
This release has an MSRV of 1.85.
Added
- Breaking: Support for pipeline caches. (#524 by @DJMcNab)
- Implement
DefaultforRendererOptions. (#524 by @DJMcNab)
RendererOptions {
// ...
+ ..Default::default()
}Removed
- Breaking:
Renderer::render_to_surfacehas been removed. (#803 by @DJMcNab)
This API was not fit for purpose, as it assumed that you would only ever use a single window.
The new recommended way to use Vello to render to a surface is to useRenderer::render_to_textureto render to an
intermediate texture, then blit from that to the surface yourself.
We suggest using theTextureBlitterutility fromwgpu.
For users of theutilmodule, it has been updated to create a suitable blit pipeline and intermediate texture for each surface.
+let target_view = /* cached: device.create_texture(/* size of surface*/).create_view(...) */;
- device.render_to_surface(..., &surface_texture, ...);
+ device.render_to_texture(..., &target_view, ...);
+let mut encoder = device.create_command_encoder(&wgpu::CommandEncoderDescriptor {
+ label: Some("Surface Blit"),
+});
+blitter.copy(
+ &device,
+ &mut encoder,
+ &target_view,
+ &surface_texture.create_view(&wgpu::TextureViewDescriptor::default()),
+);
+queue.submit([encoder.finish()]);Changed
- Breaking: wgpu has been updated to wgpu 24. (#791 by @songhuaixu)
This has been chosen to match the version used by Bevy 0.16.
(Note that we do not guarantee that our latest release will always match Bevy's wgpu version) - Breaking:
override_imagehas been updated to remove its use ofArc, aswgpu::Textures are now internally reference counted. (#802 by @DJMcNab)
This release also coincides with the release of v0.5.0 of Vello Shaders:
and Vello Encoding:
New Contributors
- @songhuaixu made their first contribution in #791
- @grebmeg made their first contribution in #826
- @LaurenzV made their first contribution in #827
- @taj-p made their first contribution in #864
- @spirali made their first contribution in #892
- @sagudev made their first contribution in #973
Full Changelog: v0.4.0...v0.5.0
v0.4.1
This release has an MSRV of 1.82.
Fixed
This release also coincides with the release of v0.4.1 of Vello Shaders and Vello Encoding.
Full Changelog: v0.4.0...v0.4.1
v0.4.0
This release has an MSRV of 1.82.
Highlights
As part of an initiative to improve color handling across the ecosystem (and especially within Linebender crates), Vello is now using the new color crate.
This is the first step towards providing richer color functionality, better handling of color interpolation, and more.
This release intentionally uses wgpu 23.0.1 rather than 24.0.0 so that it can match the version used in Bevy 0.15.
Changed
- Breaking: Updated
wgputo 23.0.1 (#735, #743 by @waywardmonkeys) - Breaking: Updated to new
penikoandcoloris now used for all colors (#742 by @waywardmonkeys) - Breaking: As part of the update to
color, the byte order ofvello_encoding::DrawColoris changed (#758 by @waywardmonkeys, #796 by @tomcur). - Breaking: The
fullfeature is no longer present as the full pipeline is now always built (#754 by @waywardmonkeys) - The
r8permutation of the shaders is no longer available (#756 by @waywardmonkeys) - Breaking: The
buffer_labelsfeature is no longer present as the labels are always configured (#757 by @waywardmonkeys) - Breaking: Use a type alias for
i16rather thanskrifa::NormalizedCoordin the public API (#747 by @nicoburns)
Fixed
- Offset in image rendering, and sampling outside correct atlas area (#722 by @dfrg)
- Inference conflict when using Kurbo's
schemarsfeature (#733 by @ratmice) - Detection of PNG format bitmap fonts, primarily for Apple systems (#740 by @LaurenzV)
- Support image extend modes, nearest-neighbor sampling and alpha (#766 by @dfrg)
- Correct vertical offset for Apple Color Emoji (#792 by @dfrg)
New Contributors
This release also coincides with the release of v0.4.0 of Vello Shaders and Vello Encoding.
Full Changelog: v0.3.0...v0.4.0
Vello 0.3.0
Vello v0.3.0 is here!
Highlights
- Support for most Emoji (#615, #641 by @DJMcNab)
- GPU Friendly Stroke Expansion, which documents key parts of how Vello works, was released (by @raphlinus, @armansito)
- Blurred rounded rectangles are now supported, which can be used for box shadows (#665 by @msiglreith)
- Vello is no longer considered experimental 🎉 (#691 by @waywardmonkeys)
Note that Vello is still an alpha, but we believe that the direction has been proven.
Read the changelog for full details.
This release also coincides with the release of v0.3.0 of Vello Shaders and Vello Encoding.