Skip to content

Conversation

@PoignardAzur
Copy link
Contributor

This is a very unprincipled fix, but the short version is that reducing the scrollbar radius seems to stop the bug from occurring.

This is a very unprincipled fix, but the short version is that reducing the scrollbar radius seems to stop the bug from occurring.
@PoignardAzur
Copy link
Contributor Author

See also linebender/vello#1314

@DJMcNab
Copy link
Member

DJMcNab commented Dec 3, 2025

How is this related to #1128? Looking at linebender/vello#1314, that seems to be a different issue?

@PoignardAzur
Copy link
Contributor Author

AFAICT #1128 and linebender/vello#1314 describe variations of the same bug (the screenshot I posted just happens to have more spectacular rendering artifacts, but most of the times it has the same artifacts as the one shown in #1128).

In my experiments, changing the scrollbar radius was enough to stop the rendering bugs, though I'd rather not merge this until I've had independent confirmation, especially from people on Macs.

@DJMcNab DJMcNab linked an issue Dec 4, 2025 that may be closed by this pull request
@eliheuer
Copy link
Contributor

eliheuer commented Dec 4, 2025

I just tested this on a M4 Pro with macOS 15.2 and I can confirm I see the glitching on main but not the branch from this PR.

Opus 4.5 says the sparse strips stuff would fix this and make a hacky fix not needed:

The scrollbar twinkling is caused by Vello's conflation artifacts - antialiasing seams that appear when compositing rounded rectangle edges, particularly at small sizes or edge positions where the curved geometry creates overlapping winding regions. Reducing the corner radius is a workaround that minimizes the antialiased edge area where these artifacts occur, but the proper fix requires either changes to Vello's compositing (e.g., the sparse strips work) or restructuring how the scrollbar geometry is drawn to avoid overlapping antialiased paths.

@PoignardAzur
Copy link
Contributor Author

Opus 4.5 says the sparse strips stuff would fix this and make a hacky fix not needed:

For the record, I really don't find these "here's what the LLM told me" comments helpful.

@eliheuer
Copy link
Contributor

eliheuer commented Dec 5, 2025

Ok noted, but this is a really hacky fix that just sweeps the problem under the rug, so I tried to use a hacky solution. Is the LLM wrong? I think as I dig into this it is not.

As a designer being forced to design the visual form in a certain way to avoid a bug makes the software unusable.

@DJMcNab
Copy link
Member

DJMcNab commented Dec 5, 2025

Is the LLM wrong?

I firmly believe so. Conflation artifacts are only related to the pixels where two paths (or subpaths) intersect, which the screenshots in the linked issues clearly do not show. The sparse strips work doesn't fundamentally change how paths are rendered in a way which makes watertightness bugs impossible; the fact that it's a new implementation is the main reason that the sparse strips work is less likely to show this issue, but obviously it's likely to have its own issues.

Everyone agrees that we should fix the underlying bug, but I find it unlikely that stating distruths about the cause will help with that. What would help is making a reproduction from pure Vello commands, and then minimising that to the smallest geometry which still reproduces it (i.e. inlining the path segments output by Kurbo's iterator and eliminating those which aren't needed); it would also help to see whether this still happens with use_cpu set to true. As a potential point for reproducing, we think it's possible that there's an interaction with clipping/layers causing this (although I personally feel that's unlikely).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Scrollbars have visual noise at the ends

3 participants