fix(gui): Guard against invalid display_size in blur pipeline init

- Remove _init_blur_pipeline call from _post_init (display_size not valid yet)
- Add dimension validation in _init_blur_pipeline (ws.x > 0 and ws.y > 0)
- Add fb_scale validation (default to 1.0 if <= 0)
- Lazy init only happens when frosted glass is enabled and dimensions are valid
- Fixes GLError 1281 'invalid value' crash on startup
This commit is contained in:
2026-03-13 21:07:09 -04:00
parent a862119922
commit db00fba836

View File

@@ -4039,24 +4039,33 @@ def hello():
def _post_init(self) -> None:
theme.apply_current()
self._init_blur_pipeline()
def _init_blur_pipeline(self):
if self._blur_pipeline is None:
self._blur_pipeline = BlurPipeline()
ws = imgui.get_io().display_size
fb_scale = imgui.get_io().display_framebuffer_scale.x
if ws.x <= 0 or ws.y <= 0:
return False
if fb_scale <= 0:
fb_scale = 1.0
self._blur_pipeline.setup_fbos(int(ws.x), int(ws.y), fb_scale)
self._blur_pipeline.compile_deepsea_shader()
self._blur_pipeline.compile_blur_shaders()
return True
def _pre_new_frame(self) -> None:
if not self.ui_frosted_glass_enabled:
return
if self._blur_pipeline is None:
self._init_blur_pipeline()
ws = imgui.get_io().display_size
fb_scale = imgui.get_io().display_framebuffer_scale.x
if ws.x <= 0 or ws.y <= 0:
return
if fb_scale <= 0:
fb_scale = 1.0
if self._blur_pipeline is None:
if not self._init_blur_pipeline():
return
import time
t = time.time()
self._blur_pipeline.prepare_global_blur(int(ws.x), int(ws.y), t, fb_scale)