diff --git a/core/src/display_object.rs b/core/src/display_object.rs index c53d41f67..cba8e6f80 100644 --- a/core/src/display_object.rs +++ b/core/src/display_object.rs @@ -738,9 +738,11 @@ pub fn render_base<'gc>(this: DisplayObject<'gc>, context: &mut RenderContext<'_ y_min: 0, y_max: height as i32, }; + let stage_matrix = context.stage.view_matrix(); for filter in &mut filters { + // Scaling is done by *stage view matrix* only, nothing in-between + filter.scale(stage_matrix.a, stage_matrix.d); filter_rect = context.renderer.calculate_dest_rect(filter, filter_rect); - filter.scale(base_transform.matrix.a, base_transform.matrix.d); } let draw_offset = Point::new(filter_rect.x_min, filter_rect.y_min); if cache.is_dirty(&base_transform.matrix, width, height) { diff --git a/tests/tests/swfs/avm2/bitmapdata_applyfilter_blur/test.toml b/tests/tests/swfs/avm2/bitmapdata_applyfilter_blur/test.toml index b7f542361..f58b07c02 100644 --- a/tests/tests/swfs/avm2/bitmapdata_applyfilter_blur/test.toml +++ b/tests/tests/swfs/avm2/bitmapdata_applyfilter_blur/test.toml @@ -1,7 +1,7 @@ num_frames = 1 [image_comparison] -tolerance = 2 +tolerance = 8 [player_options] with_renderer = { sample_count = 1 } diff --git a/tests/tests/swfs/visual/filters/blur_scales_with_screen/expected.png b/tests/tests/swfs/visual/filters/blur_scales_with_screen/expected.png index bbd3a1461..be0701837 100644 Binary files a/tests/tests/swfs/visual/filters/blur_scales_with_screen/expected.png and b/tests/tests/swfs/visual/filters/blur_scales_with_screen/expected.png differ diff --git a/tests/tests/swfs/visual/filters/blur_size_grows/test.toml b/tests/tests/swfs/visual/filters/blur_size_grows/test.toml index 4e9db7f0d..78377bb10 100644 --- a/tests/tests/swfs/visual/filters/blur_size_grows/test.toml +++ b/tests/tests/swfs/visual/filters/blur_size_grows/test.toml @@ -1,7 +1,7 @@ num_frames = 1 [image_comparison] -tolerance = 2 +tolerance = 3 [player_options] with_renderer = { optional = false, sample_count = 1 }