From 4f18b24132ebeb49f4de32a7c8a34d50d4b85caf Mon Sep 17 00:00:00 2001 From: Gleb Mazovetskiy Date: Mon, 19 Aug 2024 23:15:05 +0100 Subject: [PATCH] dun_render: Specialized FullyDark+Solid triangles Eliminates regression in the rendering speed of such triangles. --- Source/engine/render/dun_render.cpp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/Source/engine/render/dun_render.cpp b/Source/engine/render/dun_render.cpp index 309d8db3887..89480126679 100644 --- a/Source/engine/render/dun_render.cpp +++ b/Source/engine/render/dun_render.cpp @@ -495,6 +495,19 @@ DVL_ALWAYS_INLINE DVL_ATTRIBUTE_HOT void RenderTriangleLower(uint8_t *DVL_RESTRI dst -= 16 * dstLineOffset; } +template <> +DVL_ALWAYS_INLINE DVL_ATTRIBUTE_HOT void RenderTriangleLower(uint8_t *DVL_RESTRICT &dst, ptrdiff_t dstLineOffset, const uint8_t *DVL_RESTRICT &src, [[maybe_unused]] const uint8_t *DVL_RESTRICT tbl) +{ + unsigned width = XStep; + for (unsigned i = 0; i < LowerHeight; ++i) { + BlitFillDirect(dst, width, 0); + dst -= dstLineOffset; + width += XStep; + } + src += 272; + dst -= 16 * dstLineOffset; +} + template DVL_ALWAYS_INLINE DVL_ATTRIBUTE_HOT void RenderTriangleUpper(uint8_t *DVL_RESTRICT dst, ptrdiff_t dstLineOffset, const uint8_t *DVL_RESTRICT src, const uint8_t *DVL_RESTRICT tbl) { @@ -515,6 +528,17 @@ DVL_ALWAYS_INLINE DVL_ATTRIBUTE_HOT void RenderTriangleUpper(uint8_t *DVL_RESTRI RenderLineTransparentOrOpaque(dst - 14 * dstLineOffset, src + 238, 2, tbl); } +template <> +DVL_ALWAYS_INLINE DVL_ATTRIBUTE_HOT void RenderTriangleUpper(uint8_t *DVL_RESTRICT dst, ptrdiff_t dstLineOffset, [[maybe_unused]] const uint8_t *DVL_RESTRICT src, [[maybe_unused]] const uint8_t *DVL_RESTRICT tbl) +{ + unsigned width = XStep; + for (unsigned i = 0; i < LowerHeight; ++i) { + BlitFillDirect(dst, width, 0); + dst -= dstLineOffset; + width += XStep; + } +} + template DVL_ALWAYS_INLINE DVL_ATTRIBUTE_HOT void RenderLeftTriangleLower(uint8_t *DVL_RESTRICT &dst, uint16_t dstPitch, const uint8_t *DVL_RESTRICT &src, const uint8_t *DVL_RESTRICT tbl) {