Corrected color arithmetic
This commit is contained in:
parent
5b84b15ed2
commit
cea768fce1
1 changed files with 16 additions and 32 deletions
|
@ -96,26 +96,26 @@ namespace sdlu
|
||||||
|
|
||||||
Color operator+(const Color& left, const Color& right)
|
Color operator+(const Color& left, const Color& right)
|
||||||
{
|
{
|
||||||
return Color(left.r + right.r,
|
return Color((UINT8_MAX - left.r) < right.r ? 255 : left.r + right.r,
|
||||||
left.g + right.g,
|
(UINT8_MAX - left.g) < right.g ? 255 : left.g + right.g,
|
||||||
left.b + right.b,
|
(UINT8_MAX - left.b) < right.b ? 255 : left.b + right.b,
|
||||||
left.a + right.a);
|
(UINT8_MAX - left.a) < right.a ? 255 : left.a + right.a);
|
||||||
}
|
}
|
||||||
|
|
||||||
Color operator-(const Color& left, const Color& right)
|
Color operator-(const Color& left, const Color& right)
|
||||||
{
|
{
|
||||||
return Color(left.r - right.r,
|
return Color(left.r < right.r ? 0 : left.r - right.r,
|
||||||
left.g - right.g,
|
left.g < right.g ? 0 : left.g - right.g,
|
||||||
left.b - right.b,
|
left.b < right.b ? 0 : left.b - right.b,
|
||||||
left.a - right.a);
|
left.a < right.a ? 0 : left.a - right.a);
|
||||||
}
|
}
|
||||||
|
|
||||||
Color operator*(const Color& left, const Color& right)
|
Color operator*(const Color& left, const Color& right)
|
||||||
{
|
{
|
||||||
return Color(left.r * right.r,
|
return Color((UINT8_MAX / left.r) < right.r ? 255 : left.r * right.r,
|
||||||
left.g * right.g,
|
(UINT8_MAX / left.g) < right.g ? 255 : left.g * right.g,
|
||||||
left.b * right.b,
|
(UINT8_MAX / left.b) < right.b ? 255 : left.b * right.b,
|
||||||
left.a * right.a);
|
(UINT8_MAX / left.a) < right.a ? 255 : left.a * right.a);
|
||||||
}
|
}
|
||||||
|
|
||||||
Color operator/(const Color& left, const Color& right)
|
Color operator/(const Color& left, const Color& right)
|
||||||
|
@ -128,41 +128,25 @@ namespace sdlu
|
||||||
|
|
||||||
Color& operator+=(Color& left, const Color& right)
|
Color& operator+=(Color& left, const Color& right)
|
||||||
{
|
{
|
||||||
left.r += right.r;
|
left = left + right;
|
||||||
left.g += right.g;
|
|
||||||
left.b += right.b;
|
|
||||||
left.a += right.a;
|
|
||||||
|
|
||||||
return left;
|
return left;
|
||||||
}
|
}
|
||||||
|
|
||||||
Color& operator-=(Color& left, const Color& right)
|
Color& operator-=(Color& left, const Color& right)
|
||||||
{
|
{
|
||||||
left.r -= right.r;
|
left = left - right;
|
||||||
left.g -= right.g;
|
|
||||||
left.b -= right.b;
|
|
||||||
left.a -= right.a;
|
|
||||||
|
|
||||||
return left;
|
return left;
|
||||||
}
|
}
|
||||||
|
|
||||||
Color& operator*=(Color& left, const Color& right)
|
Color& operator*=(Color& left, const Color& right)
|
||||||
{
|
{
|
||||||
left.r *= right.r;
|
left = left * right;
|
||||||
left.g *= right.g;
|
|
||||||
left.b *= right.b;
|
|
||||||
left.a *= right.a;
|
|
||||||
|
|
||||||
return left;
|
return left;
|
||||||
}
|
}
|
||||||
|
|
||||||
Color& operator/=(Color& left, const Color& right)
|
Color& operator/=(Color& left, const Color& right)
|
||||||
{
|
{
|
||||||
left.r /= right.r;
|
left = left / right;
|
||||||
left.g /= right.g;
|
|
||||||
left.b /= right.b;
|
|
||||||
left.a /= right.a;
|
|
||||||
|
|
||||||
return left;
|
return left;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue