Vello CPU: Add public API to render with offset/stride#1597
Open
nicoburns wants to merge 1 commit into
Open
Conversation
Signed-off-by: Nico Burns <nico@nicoburns.com>
994c886 to
9a1d24f
Compare
nicoburns
commented
Apr 25, 2026
Comment on lines
234
to
235
| let mut regions = | ||
| Regions::new(bbox_width, bbox_height, pixmap.data_as_u8_slice_mut()); |
Contributor
Author
There was a problem hiding this comment.
I did not update this instance of Regions::new, as I think it's rendering into an intermediate layer and not the output buffer. Does that seems correct?
3 tasks
Collaborator
|
I think I might have a better idea now how to implement this and consolidate it with exsting APIs. Need to try it out, but if it works out I will open a PR soon. |
pull Bot
pushed a commit
to Mu-L/vello
that referenced
this pull request
Jun 10, 2026
Supersedes linebender#1597, closes linebender#1382. # Motivation Right now, we have two rendering APIs: `render_to_pixmap` and `composite_to_pixmap_at_offset`. We are about to add a third one in linebender#1597. Having this many APIs is very confusing, and after thinking about this more closely I realized that really, what we have been doing is adding methods that do similar things but just with different knobs enabled/disabled. I think it would be much cleaner if we had _one single_ API entry point for rendering to a pixmap, and instead expose the available knobs as a simple settings struct. # Implementation Therefore, this PR proposes to: 1) Expose **one single** `render` method that can be used to render the contents of a `RenderContext` into `Pixmap`-like struct. 2) Introduce a `PixmapMut` struct to allow constructing a render target from a mutable borrowed byte slice. Let `render` always take a ` PixmapMut`, allowing to pass both, a custom buffer or an owned pixmap as the render target. 3) Introduce a `CompositeMode` enum that defines whether the contents of a pixmap should be completely replaced (by default), or whether source-over compositing should be used. 4) Also introduce a `PixelFormat` struct, to possibly allow `Bgra8` in the future, which is useful for MacOS. 5) `RenderMode` has been moved from being stored in `RenderContext` to instead being a setting during rasterization. I initially stored this in `RenderContext` because I thought it might happen that the setting will also be needed during scene construction, but this turned out to not be the case in the end. 5) Previously, the implicit assumption was that `RenderContext` and `Pixmap` always need to have the same size, although it "accidentally" was possible for them to _not_ have the same size, and some people have made use of that. This PR relaxes the conditions imposed on the size, explicitly allowing size mismatches and also documents what the intended semantics are for each. # Testing I've added some new tests for the expected behavior. Existing tests pass. I've also ran `vello_cpu_winit` with the different scenes and didn't notice any regressions. **TODO: I still want to run this version against my PDF test suite, but this shouldn't block a review.**
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
PixmapMut<'_>and stride invello_cpu? #1382This PR is pretty simple as the logic for doing this already existed (I think added for
RenderContext::composite_to_pixmap_at_offset, and this just plumbing through 4 extrau16parameters in a bunch of places.Todo
The logic in this PR is unfortunately not quite right as things stand. Testing shows the stride not being accounted for even when using the new method)(looks like I'd just missed a method that needed to be updated)