diff options
author | Kim Woelders <kim@woelders.dk> | 2021-11-22 20:46:46 +0100 |
---|---|---|
committer | Kim Woelders <kim@woelders.dk> | 2021-12-04 06:55:11 +0100 |
commit | 8f28d7d7066a7358440553eb30cb5814e9a6c6ef (patch) | |
tree | cfee9c16cdbf7e8559a395cf66f31e993fae6bf6 | |
parent | 152366c87e9cd4b16ab91ed0777846ed35057eb9 (diff) | |
download | imlib2-8f28d7d7066a7358440553eb30cb5814e9a6c6ef.tar.gz |
blend.c: Tweaks, cleanups
-rw-r--r-- | src/lib/blend.c | 21 | ||||
-rw-r--r-- | src/lib/blend.h | 1 |
2 files changed, 12 insertions, 10 deletions
diff --git a/src/lib/blend.c b/src/lib/blend.c index 76b6d04..648caea 100644 --- a/src/lib/blend.c +++ b/src/lib/blend.c @@ -20,17 +20,18 @@ RESHADE_COLOR(G_VAL(dest), g, G_VAL(dest)); \ RESHADE_COLOR(B_VAL(dest), b, B_VAL(dest)); -int pow_lut_initialized = 0; DATA8 pow_lut[256][256]; void __imlib_build_pow_lut(void) { + static char _pow_lut_initialized = 0; int i, j; - if (pow_lut_initialized) + if (_pow_lut_initialized) return; - pow_lut_initialized = 1; + _pow_lut_initialized = 1; + for (i = 0; i < 256; i++) { for (j = 0; j < 256; j++) @@ -1515,7 +1516,7 @@ __imlib_GetBlendFunction(ImlibOp op, char blend, char merge_alpha, char rgb_src, ImlibColorModifier * cm) { /*\ [ mmx ][ operation ][ cmod ][ merge_alpha ][ rgb_src ][ blend ] \ */ - static ImlibBlendFunction ibfuncs[][4][2][2][2][2] = { + static const ImlibBlendFunction ibfuncs[][4][2][2][2][2] = { /*\ OP_COPY \ */ {{{{{__imlib_CopyRGBAToRGB, __imlib_BlendRGBAToRGB}, {__imlib_CopyRGBToRGB, __imlib_BlendRGBToRGB}}, @@ -1714,12 +1715,10 @@ __imlib_GetBlendFunction(ImlibOp op, char blend, char merge_alpha, char rgb_src, #endif }; - int opi = (op == OP_COPY) ? 0 - : (op == OP_ADD) ? 1 - : (op == OP_SUBTRACT) ? 2 : (op == OP_RESHADE) ? 3 : -1; + ImlibBlendFunction bfun; int do_mmx = 0; - if (opi == -1) + if (op < OP_COPY || op > OP_RESHADE) return NULL; #ifdef DO_MMX_ASM @@ -1727,11 +1726,15 @@ __imlib_GetBlendFunction(ImlibOp op, char blend, char merge_alpha, char rgb_src, #elif DO_AMD64_ASM do_mmx = 1; // instruction set is always present #endif + if (cm && rgb_src && (A_CMOD(cm, 0xff) == 0xff)) blend = 0; if (blend && cm && rgb_src && (A_CMOD(cm, 0xff) == 0)) return NULL; - return ibfuncs[!!do_mmx][opi][!!cm][!!merge_alpha][!!rgb_src][!!blend]; + + bfun = ibfuncs[!!do_mmx][op][!!cm][!!merge_alpha][!!rgb_src][!!blend]; + + return bfun; } void diff --git a/src/lib/blend.h b/src/lib/blend.h index d589833..ecc57fa 100644 --- a/src/lib/blend.h +++ b/src/lib/blend.h @@ -315,7 +315,6 @@ nc = (tmp | (-(tmp >> 8))) & (~(tmp >> 9)); tmp = (cc) + (((c) - 127) << 1); \ nc = (tmp | (-(tmp >> 8))) & (~(tmp >> 9)); -extern int pow_lut_initialized; extern DATA8 pow_lut[256][256]; #define BLEND_DST_ALPHA(r1, g1, b1, a1, dest) \ |