From 4a0d17ba83824131be2d7ef349325bf569343e0b Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Mon, 14 Jul 2025 23:59:09 +0900 Subject: [PATCH] sw_engine: tint effect optimization++ skip interpolation when intensity is 1.0. since intensity adjustment is optional and computationally expensive, avoiding it in this case is worthwhile. --- src/renderer/sw_engine/tvgSwPostEffect.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/renderer/sw_engine/tvgSwPostEffect.cpp b/src/renderer/sw_engine/tvgSwPostEffect.cpp index 5150c9f4..8e47e1c4 100644 --- a/src/renderer/sw_engine/tvgSwPostEffect.cpp +++ b/src/renderer/sw_engine/tvgSwPostEffect.cpp @@ -485,7 +485,8 @@ bool effectTint(SwCompositor* cmp, const RenderEffectTint* params, bool direct) auto dst = dbuffer; auto src = sbuffer; for (size_t x = 0; x < w; ++x, ++dst, ++src) { - auto val = INTERPOLATE(INTERPOLATE(white, black, luma((uint8_t*)src)), *src, params->intensity); + auto val = INTERPOLATE(white, black, luma((uint8_t*)src)); + if (params->intensity < 255) val = INTERPOLATE(val, *src, params->intensity); *dst = INTERPOLATE(val, *dst, MULTIPLY(opacity, A(*src))); } dbuffer += cmp->image.stride; @@ -497,7 +498,8 @@ bool effectTint(SwCompositor* cmp, const RenderEffectTint* params, bool direct) for (size_t y = 0; y < h; ++y) { auto dst = dbuffer; for (size_t x = 0; x < w; ++x, ++dst) { - auto val = INTERPOLATE(INTERPOLATE(white, black, luma((uint8_t*)&dst)), *dst, params->intensity); + auto val = INTERPOLATE(white, black, luma((uint8_t*)&dst)); + if (params->intensity < 255) val = INTERPOLATE(val, *dst, params->intensity); *dst = ALPHA_BLEND(val, MULTIPLY(opacity, A(*dst))); } dbuffer += cmp->image.stride;