diff --git a/doc/function/fill_image.txt b/doc/function/fill_image.txt new file mode 100644 index 00000000..8f232cc5 --- /dev/null +++ b/doc/function/fill_image.txt @@ -0,0 +1,14 @@ +Function: fill_image + +DOC_MSE_VERSION: since 2.6.0 + +--Usage-- +> fill_image(input: image, color: color) + +Fill an image with a single color, but keep the alpha channel unchanged. + + +--Parameters-- +! Parameter Type Description +| @input@ [[type:image]] Image to fill. +| @color@ [[type:color]] Color to fill with. diff --git a/doc/function/index.txt b/doc/function/index.txt index b3c8d935..d41e3a93 100644 --- a/doc/function/index.txt +++ b/doc/function/index.txt @@ -86,6 +86,7 @@ These functions are built into the program, other [[type:function]]s can be defi | [[fun:set_mask]] Set the transparancy mask of an image. | [[fun:set_alpha]] Change the transparency of an image. | [[fun:set_combine]] Change how the image should be combined with the background. +| [[fun:fill_image]] Fill an image with a single color. | [[fun:saturate_image]] Saturate/desaturate an image. | [[fun:brighten_image]] Brighten/darken an image. | [[fun:invert_image]] Invert the colors of an image. diff --git a/src/gfx/combine_image.cpp b/src/gfx/combine_image.cpp index 0ff06c62..99b3bbc5 100644 --- a/src/gfx/combine_image.cpp +++ b/src/gfx/combine_image.cpp @@ -42,7 +42,8 @@ String combine_to_string(const ImageCombine& combine) { case COMBINE_OR: return "or"; case COMBINE_XOR: return "xor"; case COMBINE_SHADOW: return "shadow"; - case COMBINE_OFFSET: return "offset"; + case COMBINE_LIGHTMAP_ABSOLUTE: return "lightmap absolute"; + case COMBINE_LIGHTMAP_RELATIVE: return "lightmap relative"; case COMBINE_SYMMETRIC_OVERLAY: return "symmetric overlay"; case COMBINE_BRIGHTNESS_TO_ALPHA: return "brightness to alpha"; case COMBINE_DARKNESS_TO_ALPHA: return "darkness to alpha"; @@ -175,7 +176,8 @@ IMPLEMENT_REFLECTION_ENUM(ImageCombine) { VALUE_N("or", COMBINE_OR); VALUE_N("xor", COMBINE_XOR); VALUE_N("shadow", COMBINE_SHADOW); - VALUE_N("offset", COMBINE_OFFSET); + VALUE_N("lightmap absolute", COMBINE_LIGHTMAP_ABSOLUTE); + VALUE_N("lightmap relative", COMBINE_LIGHTMAP_RELATIVE); VALUE_N("symmetric overlay", COMBINE_SYMMETRIC_OVERLAY); VALUE_N("brightness to alpha", COMBINE_BRIGHTNESS_TO_ALPHA); VALUE_N("darkness to alpha", COMBINE_DARKNESS_TO_ALPHA); @@ -295,138 +297,141 @@ template struct Combine { // Based on // http://www.pegtop.net/delphi/articles/blendmodes/ -COMBINE_FUN(COMBINE_NORMAL, b) -COMBINE_FUN(COMBINE_ADD, top(a + b)) -COMBINE_FUN(COMBINE_SUBTRACT, bot(a - b)) -COMBINE_FUN(COMBINE_AVERAGE, (a + b) / 2) -COMBINE_FUN(COMBINE_STAMP, col(a - 2 * b + 256)) -COMBINE_FUN(COMBINE_DIFFERENCE, abs(a - b)) -COMBINE_FUN(COMBINE_NEGATION, 255 - abs(255 - a - b)) -COMBINE_FUN(COMBINE_MULTIPLY, (a * b) / 255) -COMBINE_FUN(COMBINE_DARKEN, min(a, b)) -COMBINE_FUN(COMBINE_LIGHTEN, max(a, b)) -COMBINE_FUN(COMBINE_COLOR_DODGE, b == 255 ? 255 : top(a * 255 / (255 - b))) -COMBINE_FUN(COMBINE_COLOR_BURN, b == 0 ? 0 : bot(255 - (255-a) * 255 / b)) -COMBINE_FUN(COMBINE_SCREEN, 255 - (((255 - a) * (255 - b)) / 255)) -COMBINE_FUN(COMBINE_OVERLAY, a < 128 - ? (a * b) >> 7 - : 255 - (((255 - a) * (255 - b)) >> 7)) -COMBINE_FUN(COMBINE_HARD_LIGHT, b < 128 - ? (a * b) >> 7 - : 255 - (((255 - a) * (255 - b)) >> 7)) -COMBINE_FUN(COMBINE_SOFT_LIGHT, b) -COMBINE_FUN(COMBINE_REFLECT, b == 255 ? 255 : top(a * a / (255 - b))) -COMBINE_FUN(COMBINE_GLOW, a == 255 ? 255 : top(b * b / (255 - a))) -COMBINE_FUN(COMBINE_FREEZE, b == 0 ? 0 : bot(255 - (255 - a) * (255 - a) / b)) -COMBINE_FUN(COMBINE_HEAT, a == 0 ? 0 : bot(255 - (255 - b) * (255 - b) / a)) -COMBINE_FUN(COMBINE_AND, a & b) -COMBINE_FUN(COMBINE_OR, a | b) -COMBINE_FUN(COMBINE_XOR, a ^ b) -COMBINE_FUN(COMBINE_SHADOW, (b * a * a) / (255 * 255)) -COMBINE_FUN(COMBINE_OFFSET, col(a + b - 128)) -COMBINE_FUN(COMBINE_SYMMETRIC_OVERLAY, (Combine::f(a, b) + Combine::f(b, a)) / 2) +COMBINE_FUN(COMBINE_NORMAL, b) +COMBINE_FUN(COMBINE_ADD, top(a + b)) +COMBINE_FUN(COMBINE_SUBTRACT, bot(a - b)) +COMBINE_FUN(COMBINE_AVERAGE, (a + b) / 2) +COMBINE_FUN(COMBINE_STAMP, col(a - 2 * b + 256)) +COMBINE_FUN(COMBINE_DIFFERENCE, abs(a - b)) +COMBINE_FUN(COMBINE_NEGATION, 255 - abs(255 - a - b)) +COMBINE_FUN(COMBINE_MULTIPLY, (a * b) / 255) +COMBINE_FUN(COMBINE_DARKEN, min(a, b)) +COMBINE_FUN(COMBINE_LIGHTEN, max(a, b)) +COMBINE_FUN(COMBINE_COLOR_DODGE, b == 255 ? 255 : top(a * 255 / (255 - b))) +COMBINE_FUN(COMBINE_COLOR_BURN, b == 0 ? 0 : bot(255 - (255-a) * 255 / b)) +COMBINE_FUN(COMBINE_SCREEN, 255 - (((255 - a) * (255 - b)) / 255)) +COMBINE_FUN(COMBINE_OVERLAY, a < 128 ? + (a * b) >> 7 : + 255 - (((255 - a) * (255 - b)) >> 7)) +COMBINE_FUN(COMBINE_HARD_LIGHT, b < 128 ? + (a * b) >> 7 : + 255 - (((255 - a) * (255 - b)) >> 7)) +COMBINE_FUN(COMBINE_SOFT_LIGHT, b) +COMBINE_FUN(COMBINE_REFLECT, b == 255 ? 255 : top(a * a / (255 - b))) +COMBINE_FUN(COMBINE_GLOW, a == 255 ? 255 : top(b * b / (255 - a))) +COMBINE_FUN(COMBINE_FREEZE, b == 0 ? 0 : bot(255 - (255 - a) * (255 - a) / b)) +COMBINE_FUN(COMBINE_HEAT, a == 0 ? 0 : bot(255 - (255 - b) * (255 - b) / a)) +COMBINE_FUN(COMBINE_AND, a & b) +COMBINE_FUN(COMBINE_OR, a | b) +COMBINE_FUN(COMBINE_XOR, a ^ b) +COMBINE_FUN(COMBINE_SHADOW, (b * a * a) / (255 * 255)) +COMBINE_FUN(COMBINE_LIGHTMAP_ABSOLUTE, col(a + b - 128)) +COMBINE_FUN(COMBINE_LIGHTMAP_RELATIVE, b < 128 ? + a * b / 128 : + a + (255 - a) * (b - 128) / 128) +COMBINE_FUN(COMBINE_SYMMETRIC_OVERLAY, (Combine::f(a, b) + Combine::f(b, a)) / 2) COMBINE_FUN(COMBINE_BRIGHTNESS_TO_ALPHA, ((255 - a) * a + a * b) / 255) -COMBINE_FUN(COMBINE_DARKNESS_TO_ALPHA, (255 * a + (255 - a) * b) / 255) -COMBINE_FUN(COMBINE_GREATER_THAN_5, a > 5 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_10, a > 10 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_15, a > 15 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_20, a > 20 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_25, a > 25 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_30, a > 30 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_35, a > 35 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_40, a > 40 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_45, a > 45 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_50, a > 50 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_55, a > 55 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_60, a > 60 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_65, a > 65 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_70, a > 70 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_75, a > 75 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_80, a > 80 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_85, a > 85 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_90, a > 90 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_95, a > 95 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_100, a > 100 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_105, a > 105 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_110, a > 110 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_115, a > 115 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_120, a > 120 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_125, a > 125 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_130, a > 130 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_135, a > 135 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_140, a > 140 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_145, a > 145 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_150, a > 150 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_155, a > 155 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_160, a > 160 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_165, a > 165 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_170, a > 170 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_175, a > 175 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_180, a > 180 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_185, a > 185 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_190, a > 190 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_195, a > 195 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_200, a > 200 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_205, a > 205 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_210, a > 210 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_215, a > 215 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_220, a > 220 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_225, a > 225 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_230, a > 230 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_235, a > 235 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_240, a > 240 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_245, a > 245 ? b : a) -COMBINE_FUN(COMBINE_GREATER_THAN_250, a > 250 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_5, a < 5 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_10, a < 10 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_15, a < 15 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_20, a < 20 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_25, a < 25 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_30, a < 30 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_35, a < 35 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_40, a < 40 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_45, a < 45 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_50, a < 50 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_55, a < 55 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_60, a < 60 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_65, a < 65 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_70, a < 70 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_75, a < 75 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_80, a < 80 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_85, a < 85 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_90, a < 90 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_95, a < 95 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_100, a < 100 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_105, a < 105 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_110, a < 110 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_115, a < 115 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_120, a < 120 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_125, a < 125 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_130, a < 130 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_135, a < 135 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_140, a < 140 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_145, a < 145 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_150, a < 150 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_155, a < 155 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_160, a < 160 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_165, a < 165 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_170, a < 170 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_175, a < 175 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_180, a < 180 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_185, a < 185 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_190, a < 190 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_195, a < 195 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_200, a < 200 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_205, a < 205 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_210, a < 210 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_215, a < 215 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_220, a < 220 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_225, a < 225 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_230, a < 230 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_235, a < 235 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_240, a < 240 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_245, a < 245 ? b : a) -COMBINE_FUN(COMBINE_SMALLER_THAN_250, a < 250 ? b : a) +COMBINE_FUN(COMBINE_DARKNESS_TO_ALPHA, (255 * a + (255 - a) * b) / 255) +COMBINE_FUN(COMBINE_GREATER_THAN_5, a > 5 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_10, a > 10 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_15, a > 15 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_20, a > 20 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_25, a > 25 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_30, a > 30 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_35, a > 35 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_40, a > 40 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_45, a > 45 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_50, a > 50 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_55, a > 55 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_60, a > 60 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_65, a > 65 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_70, a > 70 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_75, a > 75 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_80, a > 80 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_85, a > 85 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_90, a > 90 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_95, a > 95 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_100, a > 100 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_105, a > 105 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_110, a > 110 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_115, a > 115 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_120, a > 120 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_125, a > 125 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_130, a > 130 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_135, a > 135 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_140, a > 140 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_145, a > 145 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_150, a > 150 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_155, a > 155 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_160, a > 160 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_165, a > 165 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_170, a > 170 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_175, a > 175 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_180, a > 180 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_185, a > 185 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_190, a > 190 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_195, a > 195 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_200, a > 200 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_205, a > 205 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_210, a > 210 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_215, a > 215 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_220, a > 220 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_225, a > 225 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_230, a > 230 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_235, a > 235 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_240, a > 240 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_245, a > 245 ? b : a) +COMBINE_FUN(COMBINE_GREATER_THAN_250, a > 250 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_5, a < 5 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_10, a < 10 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_15, a < 15 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_20, a < 20 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_25, a < 25 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_30, a < 30 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_35, a < 35 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_40, a < 40 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_45, a < 45 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_50, a < 50 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_55, a < 55 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_60, a < 60 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_65, a < 65 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_70, a < 70 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_75, a < 75 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_80, a < 80 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_85, a < 85 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_90, a < 90 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_95, a < 95 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_100, a < 100 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_105, a < 105 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_110, a < 110 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_115, a < 115 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_120, a < 120 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_125, a < 125 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_130, a < 130 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_135, a < 135 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_140, a < 140 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_145, a < 145 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_150, a < 150 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_155, a < 155 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_160, a < 160 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_165, a < 165 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_170, a < 170 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_175, a < 175 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_180, a < 180 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_185, a < 185 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_190, a < 190 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_195, a < 195 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_200, a < 200 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_205, a < 205 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_210, a < 210 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_215, a < 215 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_220, a < 220 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_225, a < 225 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_230, a < 230 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_235, a < 235 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_240, a < 240 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_245, a < 245 ? b : a) +COMBINE_FUN(COMBINE_SMALLER_THAN_250, a < 250 ? b : a) // ----------------------------------------------------------------------------- : Combining @@ -480,7 +485,8 @@ void combine_image(Image& a, const Image& b, ImageCombine combine) { DISPATCH(COMBINE_OR); DISPATCH(COMBINE_XOR); DISPATCH(COMBINE_SHADOW); - DISPATCH(COMBINE_OFFSET); + DISPATCH(COMBINE_LIGHTMAP_ABSOLUTE); + DISPATCH(COMBINE_LIGHTMAP_RELATIVE); DISPATCH(COMBINE_SYMMETRIC_OVERLAY); DISPATCH(COMBINE_BRIGHTNESS_TO_ALPHA); DISPATCH(COMBINE_DARKNESS_TO_ALPHA); diff --git a/src/gfx/generated_image.cpp b/src/gfx/generated_image.cpp index 02f47de8..a821446e 100644 --- a/src/gfx/generated_image.cpp +++ b/src/gfx/generated_image.cpp @@ -188,6 +188,19 @@ bool SetCombineImage::operator == (const GeneratedImage& that) const { && image_combine == that2->image_combine; } +// ----------------------------------------------------------------------------- : FillImage + +Image FillImage::generate(const Options& opt) { + Image img = image->generate(opt); + fill_image(img, color); + return img; +} +bool FillImage::operator == (const GeneratedImage& that) const { + const FillImage* that2 = dynamic_cast(&that); + return that2 && *image == *that2->image + && color == that2->color; +} + // ----------------------------------------------------------------------------- : SaturateImage Image SaturateImage::generate(const Options& opt) { diff --git a/src/gfx/generated_image.hpp b/src/gfx/generated_image.hpp index a6074e63..2cd0daba 100644 --- a/src/gfx/generated_image.hpp +++ b/src/gfx/generated_image.hpp @@ -189,6 +189,20 @@ private: ImageCombine image_combine; }; +// ----------------------------------------------------------------------------- : FillImage + +/// Fill an image with a given color, without touching the alpha channel +class FillImage : public SimpleFilterImage { +public: + inline FillImage(const GeneratedImageP& image, Color color) + : SimpleFilterImage(image), color(color) + {} + Image generate(const Options& opt) override; + bool operator == (const GeneratedImage& that) const override; +private: + Color color; +}; + // ----------------------------------------------------------------------------- : SaturateImage /// Saturate/desaturate an image diff --git a/src/gfx/gfx.hpp b/src/gfx/gfx.hpp index ba62955e..e8407977 100644 --- a/src/gfx/gfx.hpp +++ b/src/gfx/gfx.hpp @@ -144,7 +144,8 @@ enum ImageCombine , COMBINE_OR , COMBINE_XOR , COMBINE_SHADOW -, COMBINE_OFFSET +, COMBINE_LIGHTMAP_ABSOLUTE +, COMBINE_LIGHTMAP_RELATIVE , COMBINE_SYMMETRIC_OVERLAY , COMBINE_BRIGHTNESS_TO_ALPHA , COMBINE_DARKNESS_TO_ALPHA diff --git a/src/script/functions/image.cpp b/src/script/functions/image.cpp index 57e98258..3143c7ef 100644 --- a/src/script/functions/image.cpp +++ b/src/script/functions/image.cpp @@ -162,6 +162,12 @@ SCRIPT_FUNCTION(set_combine) { return make_intrusive(input, image_combine); } +SCRIPT_FUNCTION(fill_image) { + SCRIPT_PARAM_C(GeneratedImageP, input); + SCRIPT_PARAM(Color, color); + return make_intrusive(input,color); +} + SCRIPT_FUNCTION(saturate) { SCRIPT_PARAM_C(GeneratedImageP, input); SCRIPT_PARAM(double, amount); @@ -349,6 +355,7 @@ void init_script_image_functions(Context& ctx) { ctx.setVariable(_("set_mask"), script_set_mask); ctx.setVariable(_("set_alpha"), script_set_alpha); ctx.setVariable(_("set_combine"), script_set_combine); + ctx.setVariable(_("fill_image"), script_fill_image); ctx.setVariable(_("saturate"), script_saturate); ctx.setVariable(_("saturate_image"), script_saturate); ctx.setVariable(_("brighten_image"), script_brighten_image);