Add GUI scale and glass on every version #40

Merged
selimaj-dev merged 11 commits from glass-blur into master 2026-09-28 20:02:50 +00:00
Owner

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

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)
selimaj-dev added 11 commits 2026-09-28 20:02:03 +00:00
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
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]>
Point common at its master merge commit
Check / compile (pull_request) Successful in 3m53s
06190d0ef9
Co-Authored-By: Claude Opus 5.5 <[email protected]>
selimaj-dev merged commit 18b74212ca into master 2026-09-28 20:02:50 +00:00
selimaj-dev deleted branch glass-blur 2026-09-28 20:02:52 +00:00
Sign in to join this conversation.