feat(shader): Add prepare_global_blur and high-DPI scaling support
- Add prepare_global_blur() method combining Deep Sea render + blur - Add fb_scale parameter to setup_fbos() for high-DPI display support - FBOs now created at scaled resolution (width * fb_scale, height * fb_scale) - prepare_global_blur() auto-initializes FBOs if scale changes - Add test_blur_pipeline_prepare_global_blur - Add test_blur_pipeline_high_dpi_scaling Task: Phase 2, Tasks 1-2 of frosted_glass_20260313 track
This commit is contained in:
@@ -109,6 +109,47 @@ def test_blur_pipeline_prepare_blur():
|
||||
assert mock_gl.glBindFramebuffer.called
|
||||
assert mock_gl.glUseProgram.called
|
||||
|
||||
def test_blur_pipeline_prepare_global_blur():
|
||||
with patch("src.shader_manager.gl") as mock_gl:
|
||||
tex_counter = iter([10, 20, 30])
|
||||
fbo_counter = iter([1, 2, 3])
|
||||
mock_gl.glGenTextures.side_effect = lambda n: next(tex_counter)
|
||||
mock_gl.glGenFramebuffers.side_effect = lambda n: next(fbo_counter)
|
||||
mock_gl.glCreateProgram.return_value = 100
|
||||
mock_gl.glCreateShader.return_value = 200
|
||||
mock_gl.glGetShaderiv.return_value = mock_gl.GL_TRUE
|
||||
mock_gl.glGetProgramiv.return_value = mock_gl.GL_TRUE
|
||||
from src.shader_manager import BlurPipeline
|
||||
pipeline = BlurPipeline()
|
||||
pipeline.setup_fbos(800, 600)
|
||||
pipeline.compile_deepsea_shader()
|
||||
pipeline.compile_blur_shaders()
|
||||
pipeline.prepare_global_blur(800, 600, 0.0)
|
||||
assert mock_gl.glBindFramebuffer.called
|
||||
assert mock_gl.glUseProgram.called
|
||||
assert mock_gl.glViewport.called
|
||||
blur_tex = pipeline.get_blur_texture()
|
||||
assert blur_tex is not None
|
||||
assert blur_tex == 30
|
||||
|
||||
def test_blur_pipeline_high_dpi_scaling():
|
||||
with patch("src.shader_manager.gl") as mock_gl:
|
||||
tex_counter = iter([10, 20, 30])
|
||||
fbo_counter = iter([1, 2, 3])
|
||||
mock_gl.glGenTextures.side_effect = lambda n: next(tex_counter)
|
||||
mock_gl.glGenFramebuffers.side_effect = lambda n: next(fbo_counter)
|
||||
mock_gl.glCreateProgram.return_value = 100
|
||||
mock_gl.glCreateShader.return_value = 200
|
||||
mock_gl.glGetShaderiv.return_value = mock_gl.GL_TRUE
|
||||
mock_gl.glGetProgramiv.return_value = mock_gl.GL_TRUE
|
||||
from src.shader_manager import BlurPipeline
|
||||
pipeline = BlurPipeline()
|
||||
fb_scale = 2.0
|
||||
pipeline.setup_fbos(800, 600, fb_scale)
|
||||
assert pipeline._fb_width == (800 * int(fb_scale)) // 4
|
||||
assert pipeline._fb_height == (600 * int(fb_scale)) // 4
|
||||
assert pipeline._fb_scale == int(fb_scale)
|
||||
|
||||
def test_blur_pipeline_cleanup():
|
||||
with patch("src.shader_manager.gl") as mock_gl:
|
||||
from src.shader_manager import BlurPipeline
|
||||
|
||||
Reference in New Issue
Block a user