This commit is contained in:
2026-03-13 19:46:23 -04:00
parent 3a0d388502
commit 11eb69449d
5 changed files with 70 additions and 51 deletions

View File

@@ -1,34 +1,30 @@
# Specification: Frosted Glass Background Effect
# Specification: Frosted Glass Background Effect (REPAIR - TRUE GPU)
## Overview
Implement a high-fidelity "frosted glass" (acrylic) background effect for all GUI panels and popups within the Manual Slop interface. This effect will use a GPU-resident shader to blur the content behind active windows, improving readability and visual depth while preventing background text from clashing with foreground UI elements.
Implement a high-fidelity "frosted glass" (acrylic) background effect using a dedicated OpenGL pipeline. This implementation follows professional rendering patterns (downsampling, multi-pass blurring, and screen-space sampling) to ensure a smooth, milky look that remains performant on high-DPI displays.
## Functional Requirements
- **GPU-Accelerated Blur:**
- Implement a GLSL fragment shader (e.g., Gaussian or Kawase blur) within the existing `ShaderManager` pipeline.
- The shader must sample the current frame buffer background and render a blurred version behind the active window's background.
- **Global Integration:**
- The effect must automatically apply to all standard ImGui panels and popups.
- Integrate with `imgui.begin()` and `imgui.begin_popup()` (or via a reusable wrapper helper).
- **Real-Time Tuning:**
- Add controls to the **Live Shader Editor** to adjust the following parameters:
- **Blur Radius:** Control the intensity of the Gaussian blur.
- **Tint Intensity:** Control the strength of the "frost" overlay color.
- **Base Opacity:** Control the overall transparency of the frosted layer.
- **Persistence:**
- Save frosted glass parameters to `config.toml` under the `theme` or `shader` section.
- **Dedicated Background Pipeline:**
- Render the animated "Deep Sea" background shader to an off-screen `SceneFBO` once per frame.
- **Multi-Scale Downsampled Blur:**
- Downsample the `SceneFBO` texture to 1/4 or 1/8 resolution.
- Perform 2-pass Gaussian blurring on the downsampled texture to achieve a creamy "milky" aesthetic.
- **ImGui Panel Integration:**
- Each ImGui panel must sample its background from the blurred texture using screen-space UV coordinates.
- Automatically force window transparency (`alpha 0.0`) when the effect is active.
- **Real-Time Shader Tuning:**
- Control blur radius, tint intensity, and opacity via the Live Shader Editor.
- **Stability:**
- Balanced style-stack management to prevent ImGui assertion crashes.
- Strict 1-space indentation and class scope protection.
## Technical Implementation
- **Shader Pipeline:** Use `PyOpenGL` to manage a dedicated background texture/FBO for sampling.
- **Coordinate Mapping:** Ensure the blur shader correctly maps screen coordinates to the region behind the current ImGui window.
- **State Integration:** Store tuning parameters in `App.shader_uniforms` and ensure they are updated every frame.
- **FBO Management:** Persistent FBOs for scene, temp, and blur textures.
- **UV Math:** `(window_pos / screen_res)` mapping to handle high-DPI scaling and vertical flipping.
- **DrawList Callbacks:** (If necessary) use callbacks to ensure the background is ready before panels draw.
## Acceptance Criteria
- [ ] Panels and popups have a distinct, blurred background that clearly separates them from the content behind them.
- [ ] Changing the "Blur Radius" slider in the Shader Editor immediately updates the visual frostiness.
- [ ] The effect remains stable during window dragging and resizing.
- [ ] No significant performance degradation (maintaining target FPS).
## Out of Scope
- Implementing different blur types (e.g., motion blur, radial blur).
- Per-panel unique blur settings (initially global only).
- [ ] Toggling the effect does not crash the app.
- [ ] Windows show a deep, high-quality blur of the background shader.
- [ ] Blur follows windows perfectly during drag/resize.
- [ ] The "Milky" look is highly visible even at low radii.