From a2f30f050fc5cd61d1b927e3c0eea102ec8603ae Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Thu, 20 Apr 2023 16:45:38 +0200 Subject: Fix a bug with the 2bpp rendering --- src/main.c | 4 ++-- src/ppu.c | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main.c b/src/main.c index b1562ca..cdfad6c 100644 --- a/src/main.c +++ b/src/main.c @@ -45,8 +45,8 @@ #define PROF_N_FRAMES 15 #endif -#if PROF_ENABLE == 1 // Profile method 1: Average per N frames. +#if PROF_ENABLE == 1 #define TEXT_ENABLE 1 #define PROF(F,VAR) \ do { \ @@ -55,8 +55,8 @@ (VAR) += profile_measure() - __tmp_prof;\ } while (0) -#elif PROF_ENABLE == 2 // Profile method 2: Maximum in N frames. +#elif PROF_ENABLE == 2 #define TEXT_ENABLE 1 #define PROF(F,VAR) \ do { \ diff --git a/src/ppu.c b/src/ppu.c index bc6f503..adf837c 100644 --- a/src/ppu.c +++ b/src/ppu.c @@ -673,12 +673,12 @@ ppu_2bpp(u32 *layer, u16 x, u16 y, u8 *sprite, u8 clr, u8 flip_x, u8 flip_y) { col1mask &= ~col3mask; col2mask &= ~col3mask; col3mask = (color & col3mask) & 0x11111111; - u32 mask = ~(col1mask | col2mask | col3mask) & 0x11111111; + u32 mask = (col1mask | col2mask | col3mask) * 0xF; color = (clr1 * col1mask) | (clr2 * col2mask) | (clr3 * col3mask); - dst[0] = (dst[0] & (mask << shift_left)) | (color << shift_left); - dst[8] = (dst[8] & (mask >> shift_right)) | (color >> shift_right); + dst[0] = (dst[0] & ~(mask << shift_left)) | (color << shift_left); + dst[8] = (dst[8] & ~(mask >> shift_right)) | (color >> shift_right); if ((start_row + v) == 7) dst += (32 - 1) * 8; } } else { @@ -693,12 +693,12 @@ ppu_2bpp(u32 *layer, u16 x, u16 y, u8 *sprite, u8 clr, u8 flip_x, u8 flip_y) { col1mask &= ~col3mask; col2mask &= ~col3mask; col3mask = (color & col3mask) & 0x11111111; - u32 mask = ~(col1mask | col2mask | col3mask) & 0x11111111; + u32 mask = (col1mask | col2mask | col3mask) * 0xF; color = (clr1 * col1mask) | (clr2 * col2mask) | (clr3 * col3mask); - dst[0] = (dst[0] & (mask << shift_left)) | (color << shift_left); - dst[8] = (dst[8] & (mask >> shift_right)) | (color >> shift_right); + dst[0] = (dst[0] & ~(mask << shift_left)) | (color << shift_left); + dst[8] = (dst[8] & ~(mask >> shift_right)) | (color >> shift_right); if ((start_row + v) == 7) dst += (32 - 1) * 8; } } -- cgit v1.2.1