From e81f8affba168d86ab8c2ab2a68ba6f341dbfdae Mon Sep 17 00:00:00 2001 From: Gleb Mazovetskiy Date: Thu, 23 Mar 2023 10:07:18 +0000 Subject: [PATCH] Fix rendering issues introduced by #5913 Fixes #5914 --- Source/engine/render/dun_render.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Source/engine/render/dun_render.cpp b/Source/engine/render/dun_render.cpp index e8d7c250d..47121ed08 100644 --- a/Source/engine/render/dun_render.cpp +++ b/Source/engine/render/dun_render.cpp @@ -241,7 +241,7 @@ DVL_ALWAYS_INLINE DVL_ATTRIBUTE_HOT void RenderLine(uint8_t *DVL_RESTRICT dst, c { if (PrefixIncrement == 0) { RenderLineTransparentOrOpaque(dst, src, n, tbl); - } else if (prefix >= n) { + } else if (prefix >= static_cast(n)) { // We clamp the prefix to (0, n] and avoid calling `RenderLineTransparent/Opaque` with width=0. if (OpaquePrefix) { RenderLineOpaque(dst, src, n, tbl); @@ -249,7 +249,14 @@ DVL_ALWAYS_INLINE DVL_ATTRIBUTE_HOT void RenderLine(uint8_t *DVL_RESTRICT dst, c if (!SkipTransparentPixels) RenderLineTransparent(dst, src, n, tbl); } - } else if (prefix > 0) { + } else if (prefix <= 0) { + if (!OpaquePrefix) { + RenderLineOpaque(dst, src, n, tbl); + } else { + if (!SkipTransparentPixels) + RenderLineTransparent(dst, src, n, tbl); + } + } else { RenderLineTransparentAndOpaque(dst, src, prefix, n, tbl); } } @@ -724,9 +731,8 @@ DVL_ALWAYS_INLINE DVL_ATTRIBUTE_HOT void RenderTrapezoidUpperHalf(uint8_t *DVL_R if (PrefixIncrement != 0) { // The first and the last line are always fully transparent/opaque (or vice-versa). // We handle them specially to avoid calling the blitter with width=0. - const uint8_t *srcEnd = src + Width * (TrapezoidUpperHeight - 1); + const uint8_t *srcEnd = src + Width * TrapezoidUpperHeight; constexpr bool FirstLineIsTransparent = OpaquePrefix ^ (PrefixIncrement < 0); - constexpr bool LastLineIsTransparent = !FirstLineIsTransparent; if (FirstLineIsTransparent) { if (!SkipTransparentPixels) RenderLineTransparent(dst, src, Width, tbl); @@ -742,12 +748,6 @@ DVL_ALWAYS_INLINE DVL_ATTRIBUTE_HOT void RenderTrapezoidUpperHalf(uint8_t *DVL_R src += Width; dst -= dstPitch; } while (src != srcEnd); - if (LastLineIsTransparent) { - if (!SkipTransparentPixels) - RenderLineTransparent(dst, src, Width, tbl); - } else { - RenderLineOpaque(dst, src, Width, tbl); - } } else { // PrefixIncrement == 0; const uint8_t *srcEnd = src + Width * TrapezoidUpperHeight; do {