diff --git a/src/swrenderer/drawers/r_draw_span32.h b/src/swrenderer/drawers/r_draw_span32.h index dfbfb813e..15f24ffcf 100644 --- a/src/swrenderer/drawers/r_draw_span32.h +++ b/src/swrenderer/drawers/r_draw_span32.h @@ -355,6 +355,10 @@ namespace swrenderer lit.b += (light_color.b * attenuation) >> 8; } + lit.r = MIN<uint32_t>(lit.r, 256); + lit.g = MIN<uint32_t>(lit.g, 256); + lit.b = MIN<uint32_t>(lit.b, 256); + fgcolor.r = MIN<uint32_t>(fgcolor.r + ((material.r * lit.r) >> 8), 255); fgcolor.g = MIN<uint32_t>(fgcolor.g + ((material.g * lit.g) >> 8), 255); fgcolor.b = MIN<uint32_t>(fgcolor.b + ((material.b * lit.b) >> 8), 255); diff --git a/src/swrenderer/drawers/r_draw_span32_sse2.h b/src/swrenderer/drawers/r_draw_span32_sse2.h index 8d7cc28c4..92a50f0ff 100644 --- a/src/swrenderer/drawers/r_draw_span32_sse2.h +++ b/src/swrenderer/drawers/r_draw_span32_sse2.h @@ -399,6 +399,8 @@ namespace swrenderer lit = _mm_add_epi16(lit, _mm_srli_epi16(_mm_mullo_epi16(light_color, attenuation), 8)); } + lit = _mm_min_epi16(lit, _mm_set1_epi16(256)); + fgcolor = _mm_add_epi16(fgcolor, _mm_srli_epi16(_mm_mullo_epi16(material, lit), 8)); fgcolor = _mm_min_epi16(fgcolor, _mm_set1_epi16(255)); return fgcolor; diff --git a/src/swrenderer/drawers/r_draw_wall32.h b/src/swrenderer/drawers/r_draw_wall32.h index b39379528..972d5c1da 100644 --- a/src/swrenderer/drawers/r_draw_wall32.h +++ b/src/swrenderer/drawers/r_draw_wall32.h @@ -269,6 +269,10 @@ namespace swrenderer lit.b += (light_color.b * attenuation) >> 8; } + lit.r = MIN<uint32_t>(lit.r, 256); + lit.g = MIN<uint32_t>(lit.g, 256); + lit.b = MIN<uint32_t>(lit.b, 256); + fgcolor.r = MIN<uint32_t>(fgcolor.r + ((material.r * lit.r) >> 8), 255); fgcolor.g = MIN<uint32_t>(fgcolor.g + ((material.g * lit.g) >> 8), 255); fgcolor.b = MIN<uint32_t>(fgcolor.b + ((material.b * lit.b) >> 8), 255); diff --git a/src/swrenderer/drawers/r_draw_wall32_sse2.h b/src/swrenderer/drawers/r_draw_wall32_sse2.h index 8ac116da4..e51c11165 100644 --- a/src/swrenderer/drawers/r_draw_wall32_sse2.h +++ b/src/swrenderer/drawers/r_draw_wall32_sse2.h @@ -315,6 +315,8 @@ namespace swrenderer lit = _mm_add_epi16(lit, _mm_srli_epi16(_mm_mullo_epi16(light_color, attenuation), 8)); } + lit = _mm_min_epi16(lit, _mm_set1_epi16(256)); + fgcolor = _mm_add_epi16(fgcolor, _mm_srli_epi16(_mm_mullo_epi16(material, lit), 8)); fgcolor = _mm_min_epi16(fgcolor, _mm_set1_epi16(255)); return fgcolor;