From 9d08ac13e6ef1b4aad1dfab054d2efedf2f52998 Mon Sep 17 00:00:00 2001 From: sapir Date: Sun, 12 Apr 2020 23:11:43 +0300 Subject: [PATCH] Move backdrop color read out of compose_pixel Former-commit-id: 20d5d8a35b5e7fa0ca46bea297b1b554ba98948d Former-commit-id: f50dbe6b529fef91f5cf5a0a808d93b878f2adff --- core/src/gpu/sfx.rs | 38 +++++++++++++++++++++++++++++--------- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/core/src/gpu/sfx.rs b/core/src/gpu/sfx.rs index b20705d..707e50c 100644 --- a/core/src/gpu/sfx.rs +++ b/core/src/gpu/sfx.rs @@ -73,6 +73,8 @@ impl Gpu { /// Composes the render layers into a final scanline while applying needed special effects, and render it to the frame buffer pub fn finalize_scanline(&mut self, bg_start: usize, bg_end: usize) { + let backdrop_color = Rgb15(self.palette_ram.read_16(0)); + let y = self.vcount; let output = unsafe { let ptr = self.frame_buffer[y * DISPLAY_WIDTH..].as_mut_ptr(); @@ -82,7 +84,7 @@ impl Gpu { let win = WindowInfo::new(WindowType::WinNone, WindowFlags::all()); let backgrounds = self.active_backgrounds_sorted(bg_start, bg_end, win.flags); for x in 0..DISPLAY_WIDTH { - let pixel = self.compose_pixel(x, y, &win, &backgrounds); + let pixel = self.compose_pixel(x, y, &win, &backgrounds, backdrop_color); output[x] = pixel.to_rgb24(); } } else { @@ -92,7 +94,7 @@ impl Gpu { let win = WindowInfo::new(WindowType::Win0, self.win0.flags); let backgrounds = self.active_backgrounds_sorted(bg_start, bg_end, win.flags); for x in self.win0.left()..self.win0.right() { - let pixel = self.compose_pixel(x, y, &win, &backgrounds); + let pixel = self.compose_pixel(x, y, &win, &backgrounds, backdrop_color); output[x] = pixel.to_rgb24(); occupied[x] = true; occupied_count += 1; @@ -106,7 +108,7 @@ impl Gpu { let backgrounds = self.active_backgrounds_sorted(bg_start, bg_end, win.flags); for x in self.win1.left()..self.win1.right() { if !occupied[x] { - let pixel = self.compose_pixel(x, y, &win, &backgrounds); + let pixel = self.compose_pixel(x, y, &win, &backgrounds, backdrop_color); output[x] = pixel.to_rgb24(); occupied[x] = true; occupied_count += 1; @@ -130,13 +132,25 @@ impl Gpu { let obj_entry = self.obj_buffer_get(x, y); if obj_entry.window { // WinObj - let pixel = self.compose_pixel(x, y, &win_obj, &win_obj_backgrounds); + let pixel = self.compose_pixel( + x, + y, + &win_obj, + &win_obj_backgrounds, + backdrop_color, + ); output[x] = pixel.to_rgb24(); occupied[x] = true; occupied_count += 1; } else { // WinOut - let pixel = self.compose_pixel(x, y, &win_out, &win_out_backgrounds); + let pixel = self.compose_pixel( + x, + y, + &win_out, + &win_out_backgrounds, + backdrop_color, + ); output[x] = pixel.to_rgb24(); occupied[x] = true; occupied_count += 1; @@ -147,7 +161,8 @@ impl Gpu { if occupied[x] { continue; } - let pixel = self.compose_pixel(x, y, &win_out, &win_out_backgrounds); + let pixel = + self.compose_pixel(x, y, &win_out, &win_out_backgrounds, backdrop_color); output[x] = pixel.to_rgb24(); occupied[x] = true; occupied_count += 1; @@ -156,9 +171,14 @@ impl Gpu { } } - fn compose_pixel(&self, x: usize, y: usize, win: &WindowInfo, backgrounds: &[usize]) -> Rgb15 { - let backdrop_color = Rgb15(self.palette_ram.read_16(0)); - + fn compose_pixel( + &self, + x: usize, + y: usize, + win: &WindowInfo, + backgrounds: &[usize], + backdrop_color: Rgb15, + ) -> Rgb15 { let mut layers = ArrayVec::<[_; 7]>::new(); unsafe { layers.push_unchecked(RenderLayer::backdrop(backdrop_color));