Repository navigation
Sparse Strips v0.0.8
Pre-releaseThe 8th alpha version of the Vello Sparse Strips renderers (version 0.0.8) has been released.
This release has an MSRV of 1.88.
You can also follow the roadmap for Vello Sparse Strips.
Vello CPU
Vello CPU is our 2d renderer which doesn't use a GPU.
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).
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
Vello Hybrid
This release is a minor 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.
Added
-
Support for sampling from external textures through
Scene::draw_texture_rects. (#1552 by @tomcur)This method can sample many regions from a texture at once, allowing the texture to be used as an atlas.
You bind the textures at render-time (as opposed to scene-construction time), allowing drawing of quickly-changing textures without interning them into the renderer.External textures are not yet supported by the
webglbackend. -
Bicubic image sampling in the sparse shader path, improving high-quality image rendering. (#1557 by @waywardmonkeys)
-
WebGlRenderer::probebehind theprobefeature to sanity-check WebGL device compatibility by rendering a small reference scene and comparing the output. (#1596 by @LaurenzV) -
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
- Updated
wgputo v29. (#1534 by @nicoburns) - Migrated text rendering to
glifo; renderer resources are now managed throughResources, which must be passed to text, image upload, and render operations such asScene::glyph_run,Renderer::render, andRenderer::upload_image. (#1562 by @LaurenzV) - Renamed image transparency hint APIs from
may_have_opacitiesand*_opacity_hinttomay_have_transparencyand*_transparency_hint. (#1613 by @upsuper) Renderer::destroy_imageandWebGlRenderer::destroy_imagenow take&mut Resourcesinstead of&mut ImageCache, allowing clients to destroy images through the public resource container. (#1580 by @LaurenzV)TextureBindingsnow ownswgpu::TextureViews, allowing bindings to be held across frames more easily.
insertnow takes aTextureViewby value andremovereturns the removed view if present. (#1639 by @tomcur)
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)
- Incorrect rendering when a background-clearing optimization ran after filter layers had been used. (#1526 by @LaurenzV)
SceneConstraints::default_blending_only()now allows non-default blend modes inside nested layers, while still rejecting them on the root layer. (#1554 by @LaurenzV)- Draw ordering for fast-path strips scheduled after nested layers when default blending constraints are enabled. (#1555 by @LaurenzV, @taj-p)
- Atlas configuration is now clamped to backend device limits, allowing
RenderSettings::default()and oversized atlas settings to work on more devices. (#1568 by @LaurenzV) wgpurender targets are cleared before drawing, fixing stale pixels in transparent or untouched regions when rendering into reused offscreen targets. (#1572 by @waywardmonkeys)- Bicubic image sampling now clamps sparse shader results correctly, avoiding invalid premultiplied color values. (#1573 by @waywardmonkeys)
- 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)
WebGlRendererconstruction no longer leaks framebuffer state, fixing a panic when creating a second WebGL renderer. (#1603 by @LaurenzV)- Blur and filter shader compatibility on some mobile GPUs. (#1601, #1612 by @LaurenzV)
- Feature gating so
probeno longer enablesstd, andstdno longer implieswgpu, preserving WebGL-only configurations. (#1614 by @LaurenzV)
Optimized
- Native WebGL rendering now avoids an intermediate framebuffer, improving performance especially for low-complexity scenes. (#1546 by @LaurenzV)
- Rectangle rendering, including large anti-aliased rectangles, clipped axis-aligned
fill_rectcalls, and blurred rounded rectangles. (#1565, #1586 by @LaurenzV, #1610 by @waywardmonkeys) - Filter rendering by applying scissor rectangles to filter passes and intermediate layers. (#1566, #1567 by @LaurenzV)
- Rendering of opaque strips by adding a front-to-back opaque pass with depth testing to reduce overdraw. (#1577 by @taj-p)
Vello Common
This release also 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 Sparse Shaders
This release also contains Vello Sparse Shaders, a support crate used by Vello Hybrid.
Crates.io | Docs
This crate also does not currently have any public API surface.
New Contributors
- @AdrianEddy made their first contribution in #1569
- @upsuper made their first contribution in #1613
- @gugutu made their first contribution in #1637
- @jrmoulton made their first contribution in #1628
Full Changelog: sparse-strips-v0.0.7...sparse-strips-v0.0.8