Difference between revisions of "BlendMode Formulas"
(Init page) |
m (Prettier titles) |
||
Line 5: | Line 5: | ||
Here's a list where the numbers are in the interval [0,1]; dst is the existing color in the buffer; src is the global color, texture color, or both of them mixed together (depending on the color mode); and res is the resulting color. | Here's a list where the numbers are in the interval [0,1]; dst is the existing color in the buffer; src is the global color, texture color, or both of them mixed together (depending on the color mode); and res is the resulting color. | ||
− | additive | + | == additive == |
res.r = dst.r + (src.r * src.a) | res.r = dst.r + (src.r * src.a) | ||
Line 12: | Line 12: | ||
res.a = dst.a + (src.a * src.a) | res.a = dst.a + (src.a * src.a) | ||
− | + | == alpha == | |
− | |||
− | alpha | ||
res.r = dst.r * (1 - src.a) + src.r * src.a | res.r = dst.r * (1 - src.a) + src.r * src.a | ||
Line 20: | Line 18: | ||
res.b = dst.b * (1 - src.a) + src.b * src.a | res.b = dst.b * (1 - src.a) + src.b * src.a | ||
res.a = dst.a * (1 - src.a) + src.a * src.a | res.a = dst.a * (1 - src.a) + src.a * src.a | ||
− | |||
0.9.0 changes it to this: | 0.9.0 changes it to this: | ||
Line 29: | Line 26: | ||
res.a = dst.a * (1 - src.a) + src.a | res.a = dst.a * (1 - src.a) + src.a | ||
− | + | == subtractive == | |
− | |||
− | subtractive | ||
res.r = dst.r - src.r * src.a | res.r = dst.r - src.r * src.a | ||
Line 38: | Line 33: | ||
res.a = dst.a - src.a * src.a | res.a = dst.a - src.a * src.a | ||
− | + | == multiplicative (up to and including 0.8.0) == | |
− | |||
− | multiplicative (up to and including 0.8.0) | ||
res.r = dst.r * (1 - src.a) + src.r * dst.r | res.r = dst.r * (1 - src.a) + src.r * dst.r | ||
Line 46: | Line 39: | ||
res.b = dst.b * (1 - src.a) + src.b * dst.b | res.b = dst.b * (1 - src.a) + src.b * dst.b | ||
res.a = dst.a * (1 - src.a) + src.a * dst.a | res.a = dst.a * (1 - src.a) + src.a * dst.a | ||
− | |||
0.9.0 changes it to this: | 0.9.0 changes it to this: | ||
Line 55: | Line 47: | ||
res.a = src.a * dst.a | res.a = src.a * dst.a | ||
+ | == premultiplied == | ||
− | |||
− | |||
− | |||
− | |||
res.r = dst.r * (1 - src.a) + src.r | res.r = dst.r * (1 - src.a) + src.r | ||
res.g = dst.g * (1 - src.a) + src.g | res.g = dst.g * (1 - src.a) + src.g | ||
Line 65: | Line 54: | ||
res.a = dst.a * (1 - src.a) + src.a | res.a = dst.a * (1 - src.a) + src.a | ||
− | + | == Notes == | |
− | |||
OpenGL clamps to [0,1] (by default) in case you're wondering if subtractive could have had negative values. | OpenGL clamps to [0,1] (by default) in case you're wondering if subtractive could have had negative values. |
Revision as of 17:23, 4 June 2013
Copied from: Forum Post
LÖVE currently uses OpenGL and exposes some of the blend equations and functions of it.
Here's a list where the numbers are in the interval [0,1]; dst is the existing color in the buffer; src is the global color, texture color, or both of them mixed together (depending on the color mode); and res is the resulting color.
Contents
additive
res.r = dst.r + (src.r * src.a) res.g = dst.g + (src.g * src.a) res.b = dst.b + (src.b * src.a) res.a = dst.a + (src.a * src.a)
alpha
res.r = dst.r * (1 - src.a) + src.r * src.a res.g = dst.g * (1 - src.a) + src.g * src.a res.b = dst.b * (1 - src.a) + src.b * src.a res.a = dst.a * (1 - src.a) + src.a * src.a
0.9.0 changes it to this:
res.r = dst.r * (1 - src.a) + src.r * src.a res.g = dst.g * (1 - src.a) + src.g * src.a res.b = dst.b * (1 - src.a) + src.b * src.a res.a = dst.a * (1 - src.a) + src.a
subtractive
res.r = dst.r - src.r * src.a res.g = dst.g - src.g * src.a res.b = dst.b - src.b * src.a res.a = dst.a - src.a * src.a
multiplicative (up to and including 0.8.0)
res.r = dst.r * (1 - src.a) + src.r * dst.r res.g = dst.g * (1 - src.a) + src.g * dst.g res.b = dst.b * (1 - src.a) + src.b * dst.b res.a = dst.a * (1 - src.a) + src.a * dst.a
0.9.0 changes it to this:
res.r = src.r * dst.r res.g = src.g * dst.g res.b = src.b * dst.b res.a = src.a * dst.a
premultiplied
res.r = dst.r * (1 - src.a) + src.r res.g = dst.g * (1 - src.a) + src.g res.b = dst.b * (1 - src.a) + src.b res.a = dst.a * (1 - src.a) + src.a
Notes
OpenGL clamps to [0,1] (by default) in case you're wondering if subtractive could have had negative values.