Repository navigation
Sparse Strips v0.3.0
This release has an MSRV of 1.89.
As part of this release, Vello Hybrid has been renamed to Vello GPU.
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 Vello Research.
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 this URL is not time-locked, so it might show results from a slightly newer or older version than this tag).
Added
RenderContext::push_clip_rectfor non-isolated rectangular clipping. (#1916 by @LaurenzV)- Support for
ImageSampler::alpha. (#1880 by @LaurenzV)
Changed
- Breaking change: Replaced
CompositeModewithTargetInit, adding configurable target clears. (#1866 by @LaurenzV) - Breaking change: Renamed
RenderContext::pop_clip_pathtopop_clip. (#1942 by @LaurenzV) - Breaking change:
GlyphRunBuilder::fill_glyphsandstroke_glyphsnow returnResult<(), glifo::GlyphRenderError>. (#1944 by @LaurenzV) - Breaking change: Updated
fearless_simdto v0.7.0. (#1853 by @LaurenzV) - Breaking change: Reorganized shared type re-exports and removed the crate-root
Paintre-export. (#1881 by @LaurenzV) - Root-level blend operations are now isolated from the target background. (#1865 by @LaurenzV)
- Bitmap glyphs now consistently use bilinear sampling (
ImageQuality::Medium) instead of switching to bicubic sampling when downscaled. (#1970 by @LaurenzV)
Fixed
- Image-sampling errors near texel boundaries with
Repeat,Reflect, and bilinear/bicubic filtering. (#1946, #1950 by @LaurenzV) - Scene contents being cut off when compositing over a background in the u8 pipeline. (#1933 by @LaurenzV)
- Layer opacity is now clamped to the range 0 to 1. (#1856 by @LaurenzV)
- Rendering on big-endian targets. (#1845 by @LaurenzV)
- Gradient cache collisions between premultiplied and unpremultiplied alpha interpolation. (#1932 by @LaurenzV)
- Draws with non-invertible paint transforms are now skipped. (#1949 by @grebmeg)
- Resetting a render context now also resets the aliasing threshold. (#1945 by @LaurenzV)
- Incorrect placement of non-Apple
sbixglyphs caused by the Apple Color Emoji workaround. (#1936 by @LaurenzV) - Incorrect
sbixglyph placement caused by sign errors in bearing offsets. (#1939 by @LaurenzV)
Optimized
- Rectangle rendering. (#1962 by @nicoburns)
- Rectangle rendering in multi-threaded contexts. (#1924 by @LaurenzV)
- Rectangle rendering under rectangular clips. (#1926 by @LaurenzV)
- Transparency hints for rendered pixmaps. (#1867 by @LaurenzV)
Vello GPU
This release is a minor release of Vello GPU (formerly Vello Hybrid), which uses the CPU for preprocessing and the GPU for rasterization. The imaging model exposed by Vello GPU is very similar to that of Vello Research.
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
- An
unminifiedfeature invello_gpu_shadersfor readable shader output. (#1851 by @grebmeg) - Non-blocking WebGL initialization through
WebGlRenderer::beginandbegin_with. (#1823 by @grebmeg) Scene::push_clip_rectfor non-isolated rectangular clipping. (#1916 by @LaurenzV)- Support for
ImageSampler::alpha. (#1880 by @LaurenzV)
Changed
- Breaking change: Renamed the
vello_hybridcrate tovello_gpu.HybridGlyphRunBackendis nowGpuGlyphRunBackend. (#1883 by @grebmeg, #1918 by @LaurenzV) - Breaking change: Updated
wgputo v30 andfearless_simdto v0.7.0. (#1909, #1853 by @LaurenzV) - Breaking change: External textures now use
Scene::set_paint, replacingdraw_texture_rectsand adding support for arbitrary shapes, extend modes, and transparency hints. (#1812, #1813, #1824 by @LaurenzV) - Breaking change: Depth buffering is now optional, with caller-owned depth textures in wgpu and a
use_depth_bufferargument in WebGL. (#1808, #1810 by @grebmeg) - Breaking change: Rendering now accepts configurable target clears through
TargetInitin wgpu and a clear color in WebGL. (#1869 by @LaurenzV) - Breaking change: WebGL operations now return structured
WebGlErrorresults. (#1892 by @LaurenzV, #1921 by @grebmeg) - Breaking change:
RenderSize,RenderTargetConfig, atlas configuration, and related dimensions now useu16. (#1826, #1891 by @LaurenzV) - Breaking change: Image atlases now use individual 2D textures, and
atlas_texturetakes anAtlasId. (#1859 by @LaurenzV) - Breaking change: WebGL probes now support configurable features, depth-buffer testing, and per-cell statistics. (#1900, #1901, #1908 by @LaurenzV)
- Breaking change: Renamed
Scene::pop_clip_pathtopop_clip. (#1942 by @LaurenzV) - Breaking change:
GlyphRunBuilder::fill_glyphsandstroke_glyphsnow returnResult<(), glifo::GlyphRenderError>. (#1944 by @LaurenzV) - Expanded shared type re-exports. (#1881 by @LaurenzV)
- WebGL context creation now requests
failIfMajorPerformanceCaveat. (#1806 by @LaurenzV) - Bitmap glyphs now consistently use bilinear sampling (
ImageQuality::Medium) instead of switching to bicubic sampling when downscaled. (#1970 by @LaurenzV)
Fixed
- Fully transparent draws are no longer skipped, fixing missing output from filters such as flood effects. (#1966 by @AdrianEddy, @LaurenzV)
- The
stdfeature no longer implicitly enableswgpu. (#1822 by @taj-p) - Safari 15 probe crashes and incorrect filter rendering. (#1814, #1821 by @LaurenzV)
- WebGL hangs on affected Intel GPUs. (#1830 by @LaurenzV)
- Incorrect layer rendering and probe failures on affected Apple Silicon/Chrome versions. (#1864 by @LaurenzV)
- Removed an artificial image-sampling offset. (#1878 by @LaurenzV)
- Gradient cache collisions between premultiplied and unpremultiplied alpha interpolation. (#1932 by @LaurenzV)
- Draws with non-invertible paint transforms are now skipped. (#1949 by @grebmeg)
- Resetting a scene now also resets the aliasing threshold. (#1945 by @LaurenzV)
- Incorrect placement of non-Apple
sbixglyphs caused by the Apple Color Emoji workaround. (#1936 by @LaurenzV) - Incorrect
sbixglyph placement caused by sign errors in bearing offsets. (#1939 by @LaurenzV)
Optimized
- Rectangle rendering. (#1962 by @nicoburns)
- WebGL strip rendering through indexed instanced draws and
WEBGL_provoking_vertexsupport. (#1805, #1827 by @LaurenzV) - Reduced embedded shader size through compaction and minification. (#1831 by @LaurenzV, #1833, #1846 by @grebmeg)
- Reduced WebGL state management overhead. (#1874, #1879, #1911 by @LaurenzV)
- Reduced wgpu strip-data uploads and strip-storage allocations. (#1896, #1897 by @HigherOrderLogic)
- Rectangle rendering under rectangular clips. (#1926 by @LaurenzV)
Vello Common
This release also contains Vello Common, a support crate used by Vello CPU and Vello GPU.
Vello Common itself does not currently have any stable API surface, as it is only an implementation detail of Vello CPU and Vello GPU.
Added
TargetInit<C>for configuring target clears or compositing over existing contents. (#1866 by @LaurenzV)- Public
pixmap::premultiply_rgba8andunpremultiply_rgba8helpers. (#1930 by @LaurenzV) ImageSource::external_texturefor external GPU texture paints. (#1824 by @LaurenzV)- Support for
ImageSampler::alpha. (#1880 by @LaurenzV) - Rectangular clip support in
ClipContext,ClipState, andViewportState. (#1916, #1926 by @LaurenzV)
Changed
- Breaking change: Unified pixmap construction in
Pixmap::from_parts, which now acceptsVec<u8>andPixelMetadata. (#1834 by @LaurenzV) - Breaking change: Replaced
Pixmap::takeandtake_unpremultipliedwithtake_rgba8andtry_take_rgb8, adding RGB output support. (#1855 by @LaurenzV) - Breaking change: Atlas sizes, allocation dimensions, and image-cache offsets now use
u16; theOffsetU32,SizeU32, andRectU32geometry types have been removed. (#1826 by @LaurenzV) - Breaking change: Updated
fearless_simdto v0.7.0 and adapted the SIMD utility APIs. (#1853 by @LaurenzV) - Breaking change:
ClipContext,ClipState, andViewportStaterenamepush_cliptopush_clip_path, and their clip accessors now returnClipRefinstead ofPathDataRef. (#1916, #1926 by @LaurenzV) - Breaking change: Probe APIs now support configurable features, depth-buffer testing, and per-cell statistics. (#1901, #1908 by @LaurenzV)
- Breaking change:
EncodeExt::encode_intonow returnsOption<Paint>. (#1949 by @grebmeg)
Removed
- Breaking change:
EncodedExternalTexture. (#1824 by @LaurenzV) - Breaking change:
ImageCache::allocate_excludingandMultiAtlasManager::try_allocate_excluding. (#1825 by @LaurenzV)
Fixed
- Gradient cache collisions between premultiplied and unpremultiplied alpha interpolation. (#1932 by @LaurenzV)
- Color conversions on big-endian targets. (#1845 by @LaurenzV)
Optimized
- Rectangle rendering. (#1962 by @nicoburns)
- Pixmap premultiplication and unpremultiplication. (#1834, #1839 by @LaurenzV)
- Rectangular clip intersections. (#1926 by @LaurenzV)
Full Changelog: sparse-strips-v0.2.0...sparse-strips-v0.3.0