From 229fbe2b3fbfa05c91f9693d6dfb8144f9d89bbe Mon Sep 17 00:00:00 2001 From: Ed_ Date: Fri, 13 Mar 2026 12:43:54 -0400 Subject: [PATCH] feat(gui): Implement live shader editor panel --- src/gui_2.py | 13 +++++++++++++ tests/test_shader_live_editor.py | 14 ++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 tests/test_shader_live_editor.py diff --git a/src/gui_2.py b/src/gui_2.py index 02eafc4..7acacc8 100644 --- a/src/gui_2.py +++ b/src/gui_2.py @@ -187,6 +187,7 @@ class App: self.show_windows.setdefault("Tier 3: Workers", False) self.show_windows.setdefault("Tier 4: QA", False) self.show_windows.setdefault('External Tools', False) + self.show_windows.setdefault('Shader Editor', False) self.ui_multi_viewport = gui_cfg.get("multi_viewport", False) self.layout_presets = self.config.get("layout_presets", {}) self._new_preset_name = "" @@ -205,6 +206,7 @@ class App: self._nerv_flicker = theme_fx.StatusFlicker() self.ui_tool_filter_category = "All" self.ui_discussion_split_h = 300.0 + self.shader_uniforms = {'crt': 1.0, 'scanline': 0.5, 'bloom': 0.8} def _handle_approve_tool(self, user_data=None) -> None: """UI-level wrapper for approving a pending tool execution ask.""" @@ -398,8 +400,19 @@ class App: imgui.end() imgui.pop_style_var(3) + def _render_shader_live_editor(self) -> None: + if self.show_windows.get('Shader Editor', False): + exp, opened = imgui.begin('Shader Editor', self.show_windows['Shader Editor']) + self.show_windows['Shader Editor'] = bool(opened) + if exp: + changed_crt, self.shader_uniforms['crt'] = imgui.slider_float('CRT Curvature', self.shader_uniforms['crt'], 0.0, 2.0) + changed_scan, self.shader_uniforms['scanline'] = imgui.slider_float('Scanline Intensity', self.shader_uniforms['scanline'], 0.0, 1.0) + changed_bloom, self.shader_uniforms['bloom'] = imgui.slider_float('Bloom Threshold', self.shader_uniforms['bloom'], 0.0, 1.0) + imgui.end() + def _gui_func(self) -> None: self._render_custom_title_bar() + self._render_shader_live_editor() pushed_prior_tint = False # Render background shader bg = bg_shader.get_bg() diff --git a/tests/test_shader_live_editor.py b/tests/test_shader_live_editor.py new file mode 100644 index 0000000..3da9cb3 --- /dev/null +++ b/tests/test_shader_live_editor.py @@ -0,0 +1,14 @@ +import pytest +from unittest.mock import patch, MagicMock + +def test_shader_live_editor_renders(): + from src.gui_2 import App + app = App() + app.show_windows["Shader Editor"] = True + + with patch("src.gui_2.imgui") as mock_imgui: + mock_imgui.begin.return_value = (True, True) + mock_imgui.slider_float.return_value = (False, 1.0) + app._render_shader_live_editor() + assert mock_imgui.begin.called + assert mock_imgui.end.called