The Fabric side of saturnclientmc/common#8: GUI scale, and glass behind translucent menus and widgets on every version. common points at #8's merge commit. Glass was tested on 1.21.4, 1.21.5, 1.21.6, 1.21.10 and 1.21.11. The commit that skips blur work that draws nothing hasn't been run in game yet.
GUI scale
SaturnScreenFabric hands the screen its size in GUI pixels and converts the mouse with the screen's own scale, instead of a fixed 2×.
Glass
GlassRenderer makes a blurred copy of the game behind the screen for each glass blur strength in use, and glass is drawn through each panel's rounded rectangle texture as a mask. The GUI rewrites split it into three implementations:
1.21.6 to 1.21.11: the copy is taken from the main framebuffer while the screen builds its GUI, before it's drawn, and blurred by vanilla's blur rebuilt with the radius set, so it doesn't follow the animated world blur. Glass is a GUI element with its own pipeline (shaders/core/glass.fsh, which imports vanilla's transforms block because its layout changed in 1.21.11). Only 1.21.11 has samplers; older versions set a linear filter on the copy.
1.21.5: the screen draws straight into the framebuffer and blurs it first, so SaturnScreenFabric saves the game before that blur. Glass is a render layer with its own pipeline (glass_pre_1_21_6.fsh), and the blur takes its radius as it runs.
1.21.4: as 1.21.5, with the copy blitted between GL framebuffers and a shader program (glass.json) instead of a pipeline.
Performance
Nothing is copied or blurred for glass whose blur is 0 or whose background is solid. Before 1.21.6 the game is only saved when some glass can be drawn.
Each blur strength in use is blurred once a frame, however many panels use it, and the copies (and from 1.21.6 the blurs) of strengths no longer set are freed.
Before 1.21.6, a world blur of 0 no longer runs the blur.
The Fabric side of saturnclientmc/common#8: GUI scale, and glass behind translucent menus and widgets on every version. `common` points at #8's merge commit. Glass was tested on 1.21.4, 1.21.5, 1.21.6, 1.21.10 and 1.21.11. The commit that skips blur work that draws nothing hasn't been run in game yet.
## GUI scale
`SaturnScreenFabric` hands the screen its size in GUI pixels and converts the mouse with the screen's own scale, instead of a fixed 2×.
## Glass
`GlassRenderer` makes a blurred copy of the game behind the screen for each glass blur strength in use, and glass is drawn through each panel's rounded rectangle texture as a mask. The GUI rewrites split it into three implementations:
- **1.21.6 to 1.21.11:** the copy is taken from the main framebuffer while the screen builds its GUI, before it's drawn, and blurred by vanilla's blur rebuilt with the radius set, so it doesn't follow the animated world blur. Glass is a GUI element with its own pipeline (`shaders/core/glass.fsh`, which imports vanilla's transforms block because its layout changed in 1.21.11). Only 1.21.11 has samplers; older versions set a linear filter on the copy.
- **1.21.5:** the screen draws straight into the framebuffer and blurs it first, so `SaturnScreenFabric` saves the game before that blur. Glass is a render layer with its own pipeline (`glass_pre_1_21_6.fsh`), and the blur takes its radius as it runs.
- **1.21.4:** as 1.21.5, with the copy blitted between GL framebuffers and a shader program (`glass.json`) instead of a pipeline.
## Performance
- Nothing is copied or blurred for glass whose blur is 0 or whose background is solid. Before 1.21.6 the game is only saved when some glass can be drawn.
- Each blur strength in use is blurred once a frame, however many panels use it, and the copies (and from 1.21.6 the blurs) of strengths no longer set are freed.
- Before 1.21.6, a world blur of 0 no longer runs the blur.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
A copy of the game behind the screen is blurred once a frame and drawn
through each panel's rounded rectangle texture by a glass pipeline.
Older versions keep blurring the whole background.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Every blur strength in use gets its own copy of the game, blurred with
vanilla's blur at that radius instead of the animated menu blur.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
1.21.6 to 1.21.10 draw glass as 1.21.11 does, without samplers, and the
glass shader imports vanilla's transforms block, whose layout differs
between them. 1.21.4 and 1.21.5 draw straight into the framebuffer,
so the game is saved before the screen blurs it, and glass is a render
layer: with a pipeline on 1.21.5 and a shader program on 1.21.4.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Before 1.21.6 the game is only saved for glass when glass can be drawn,
and a background blur of 0 no longer runs the blur. Every version frees
the copies (and from 1.21.6 the blurs) of glass strengths no longer set,
instead of keeping one per strength ever used.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
The Fabric side of saturnclientmc/common#8: GUI scale, and glass behind translucent menus and widgets on every version.
commonpoints at #8's merge commit. Glass was tested on 1.21.4, 1.21.5, 1.21.6, 1.21.10 and 1.21.11. The commit that skips blur work that draws nothing hasn't been run in game yet.GUI scale
SaturnScreenFabrichands the screen its size in GUI pixels and converts the mouse with the screen's own scale, instead of a fixed 2×.Glass
GlassRenderermakes a blurred copy of the game behind the screen for each glass blur strength in use, and glass is drawn through each panel's rounded rectangle texture as a mask. The GUI rewrites split it into three implementations:shaders/core/glass.fsh, which imports vanilla's transforms block because its layout changed in 1.21.11). Only 1.21.11 has samplers; older versions set a linear filter on the copy.SaturnScreenFabricsaves the game before that blur. Glass is a render layer with its own pipeline (glass_pre_1_21_6.fsh), and the blur takes its radius as it runs.glass.json) instead of a pipeline.Performance
🤖 Generated with Claude Code