software renderer, part D

This commit is contained in:
tildearrow 2024-04-08 18:07:18 -05:00
parent e97ab142ff
commit 2c3eaee513

View file

@ -66,12 +66,17 @@ union ColorInt
}; };
#pragma pack(pop) #pragma pack(pop)
uint32_t blend(const ColorInt &target, const ColorInt &source) static inline uint32_t blend(const ColorInt &target, const ColorInt &source)
{ {
if (source.a == 0) return target.u32;
if (source.a >= 255) return source.u32; if (source.a >= 255) return source.u32;
return (target.a << 24u) | (((source.b * source.a + target.b * (255 - source.a)) / 255) << 16u) const unsigned char ia=255-source.a;
| (((source.g * source.a + target.g * (255 - source.a)) / 255) << 8u) return (
| ((source.r * source.a + target.r * (255 - source.a)) / 255); (target.a << 24u) |
(((source.b * source.a + target.b * ia + 255) >> 8) << 16u) |
(((source.g * source.a + target.g * ia + 255) >> 8) << 8u) |
(((source.r * source.a + target.r * ia + 255) >> 8))
);
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------