Merge pull request #43404 from akien-mga/color-fix-clamp-uint32_t-warning
Color: Fix -Wtype-limits GCC warning after refactoring
This commit is contained in:
commit
8a318fe1dd
|
@ -159,7 +159,7 @@ void Color::set_hsv(float p_h, float p_s, float p_v, float p_alpha) {
|
||||||
a = p_alpha;
|
a = p_alpha;
|
||||||
|
|
||||||
if (p_s == 0) {
|
if (p_s == 0) {
|
||||||
// acp_hromatic (grey)
|
// Achromatic (grey)
|
||||||
r = g = b = p_v;
|
r = g = b = p_v;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -489,6 +489,13 @@ Color Color::operator+(const Color &p_color) const {
|
||||||
a + p_color.a);
|
a + p_color.a);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Color::operator+=(const Color &p_color) {
|
||||||
|
r = r + p_color.r;
|
||||||
|
g = g + p_color.g;
|
||||||
|
b = b + p_color.b;
|
||||||
|
a = a + p_color.a;
|
||||||
|
}
|
||||||
|
|
||||||
Color Color::operator-(const Color &p_color) const {
|
Color Color::operator-(const Color &p_color) const {
|
||||||
return Color(
|
return Color(
|
||||||
r - p_color.r,
|
r - p_color.r,
|
||||||
|
@ -512,12 +519,12 @@ Color Color::operator*(const Color &p_color) const {
|
||||||
a * p_color.a);
|
a * p_color.a);
|
||||||
}
|
}
|
||||||
|
|
||||||
Color Color::operator*(real_t rvalue) const {
|
Color Color::operator*(real_t p_rvalue) const {
|
||||||
return Color(
|
return Color(
|
||||||
r * rvalue,
|
r * p_rvalue,
|
||||||
g * rvalue,
|
g * p_rvalue,
|
||||||
b * rvalue,
|
b * p_rvalue,
|
||||||
a * rvalue);
|
a * p_rvalue);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Color::operator*=(const Color &p_color) {
|
void Color::operator*=(const Color &p_color) {
|
||||||
|
@ -527,11 +534,11 @@ void Color::operator*=(const Color &p_color) {
|
||||||
a = a * p_color.a;
|
a = a * p_color.a;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Color::operator*=(real_t rvalue) {
|
void Color::operator*=(real_t p_rvalue) {
|
||||||
r = r * rvalue;
|
r = r * p_rvalue;
|
||||||
g = g * rvalue;
|
g = g * p_rvalue;
|
||||||
b = b * rvalue;
|
b = b * p_rvalue;
|
||||||
a = a * rvalue;
|
a = a * p_rvalue;
|
||||||
}
|
}
|
||||||
|
|
||||||
Color Color::operator/(const Color &p_color) const {
|
Color Color::operator/(const Color &p_color) const {
|
||||||
|
@ -542,12 +549,12 @@ Color Color::operator/(const Color &p_color) const {
|
||||||
a / p_color.a);
|
a / p_color.a);
|
||||||
}
|
}
|
||||||
|
|
||||||
Color Color::operator/(real_t rvalue) const {
|
Color Color::operator/(real_t p_rvalue) const {
|
||||||
return Color(
|
return Color(
|
||||||
r / rvalue,
|
r / p_rvalue,
|
||||||
g / rvalue,
|
g / p_rvalue,
|
||||||
b / rvalue,
|
b / p_rvalue,
|
||||||
a / rvalue);
|
a / p_rvalue);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Color::operator/=(const Color &p_color) {
|
void Color::operator/=(const Color &p_color) {
|
||||||
|
@ -557,17 +564,17 @@ void Color::operator/=(const Color &p_color) {
|
||||||
a = a / p_color.a;
|
a = a / p_color.a;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Color::operator/=(real_t rvalue) {
|
void Color::operator/=(real_t p_rvalue) {
|
||||||
if (rvalue == 0) {
|
if (p_rvalue == 0) {
|
||||||
r = 1.0;
|
r = 1.0;
|
||||||
g = 1.0;
|
g = 1.0;
|
||||||
b = 1.0;
|
b = 1.0;
|
||||||
a = 1.0;
|
a = 1.0;
|
||||||
} else {
|
} else {
|
||||||
r = r / rvalue;
|
r = r / p_rvalue;
|
||||||
g = g / rvalue;
|
g = g / p_rvalue;
|
||||||
b = b / rvalue;
|
b = b / p_rvalue;
|
||||||
a = a / rvalue;
|
a = a / p_rvalue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -45,9 +45,6 @@ struct Color {
|
||||||
float components[4] = { 0, 0, 0, 1.0 };
|
float components[4] = { 0, 0, 0, 1.0 };
|
||||||
};
|
};
|
||||||
|
|
||||||
bool operator==(const Color &p_color) const { return (r == p_color.r && g == p_color.g && b == p_color.b && a == p_color.a); }
|
|
||||||
bool operator!=(const Color &p_color) const { return (r != p_color.r || g != p_color.g || b != p_color.b || a != p_color.a); }
|
|
||||||
|
|
||||||
uint32_t to_rgba32() const;
|
uint32_t to_rgba32() const;
|
||||||
uint32_t to_argb32() const;
|
uint32_t to_argb32() const;
|
||||||
uint32_t to_abgr32() const;
|
uint32_t to_abgr32() const;
|
||||||
|
@ -59,34 +56,36 @@ struct Color {
|
||||||
float get_v() const;
|
float get_v() const;
|
||||||
void set_hsv(float p_h, float p_s, float p_v, float p_alpha = 1.0);
|
void set_hsv(float p_h, float p_s, float p_v, float p_alpha = 1.0);
|
||||||
|
|
||||||
_FORCE_INLINE_ float &operator[](int idx) {
|
_FORCE_INLINE_ float &operator[](int p_idx) {
|
||||||
return components[idx];
|
return components[p_idx];
|
||||||
}
|
}
|
||||||
_FORCE_INLINE_ const float &operator[](int idx) const {
|
_FORCE_INLINE_ const float &operator[](int p_idx) const {
|
||||||
return components[idx];
|
return components[p_idx];
|
||||||
|
}
|
||||||
|
|
||||||
|
bool operator==(const Color &p_color) const {
|
||||||
|
return (r == p_color.r && g == p_color.g && b == p_color.b && a == p_color.a);
|
||||||
|
}
|
||||||
|
bool operator!=(const Color &p_color) const {
|
||||||
|
return (r != p_color.r || g != p_color.g || b != p_color.b || a != p_color.a);
|
||||||
}
|
}
|
||||||
|
|
||||||
Color operator+(const Color &p_color) const;
|
Color operator+(const Color &p_color) const;
|
||||||
_FORCE_INLINE_ void operator+=(const Color &p_color) {
|
void operator+=(const Color &p_color);
|
||||||
r = r + p_color.r;
|
|
||||||
g = g + p_color.g;
|
|
||||||
b = b + p_color.b;
|
|
||||||
a = a + p_color.a;
|
|
||||||
}
|
|
||||||
|
|
||||||
Color operator-() const;
|
Color operator-() const;
|
||||||
Color operator-(const Color &p_color) const;
|
Color operator-(const Color &p_color) const;
|
||||||
void operator-=(const Color &p_color);
|
void operator-=(const Color &p_color);
|
||||||
|
|
||||||
Color operator*(const Color &p_color) const;
|
Color operator*(const Color &p_color) const;
|
||||||
Color operator*(real_t rvalue) const;
|
Color operator*(real_t p_rvalue) const;
|
||||||
void operator*=(const Color &p_color);
|
void operator*=(const Color &p_color);
|
||||||
void operator*=(real_t rvalue);
|
void operator*=(real_t p_rvalue);
|
||||||
|
|
||||||
Color operator/(const Color &p_color) const;
|
Color operator/(const Color &p_color) const;
|
||||||
Color operator/(real_t rvalue) const;
|
Color operator/(real_t p_rvalue) const;
|
||||||
void operator/=(const Color &p_color);
|
void operator/=(const Color &p_color);
|
||||||
void operator/=(real_t rvalue);
|
void operator/=(real_t p_rvalue);
|
||||||
|
|
||||||
bool is_equal_approx(const Color &p_color) const;
|
bool is_equal_approx(const Color &p_color) const;
|
||||||
|
|
||||||
|
@ -123,10 +122,9 @@ struct Color {
|
||||||
_FORCE_INLINE_ uint32_t to_rgbe9995() const {
|
_FORCE_INLINE_ uint32_t to_rgbe9995() const {
|
||||||
const float pow2to9 = 512.0f;
|
const float pow2to9 = 512.0f;
|
||||||
const float B = 15.0f;
|
const float B = 15.0f;
|
||||||
//const float Emax = 31.0f;
|
|
||||||
const float N = 9.0f;
|
const float N = 9.0f;
|
||||||
|
|
||||||
float sharedexp = 65408.000f; //(( pow2to9 - 1.0f)/ pow2to9)*powf( 2.0f, 31.0f - 15.0f);
|
float sharedexp = 65408.000f; // Result of: ((pow2to9 - 1.0f) / pow2to9) * powf(2.0f, 31.0f - 15.0f)
|
||||||
|
|
||||||
float cRed = MAX(0.0f, MIN(sharedexp, r));
|
float cRed = MAX(0.0f, MIN(sharedexp, r));
|
||||||
float cGreen = MAX(0.0f, MIN(sharedexp, g));
|
float cGreen = MAX(0.0f, MIN(sharedexp, g));
|
||||||
|
@ -134,8 +132,6 @@ struct Color {
|
||||||
|
|
||||||
float cMax = MAX(cRed, MAX(cGreen, cBlue));
|
float cMax = MAX(cRed, MAX(cGreen, cBlue));
|
||||||
|
|
||||||
// expp = MAX(-B - 1, log2(maxc)) + 1 + B
|
|
||||||
|
|
||||||
float expp = MAX(-B - 1.0f, floor(Math::log(cMax) / Math_LN2)) + 1.0f + B;
|
float expp = MAX(-B - 1.0f, floor(Math::log(cMax) / Math_LN2)) + 1.0f + B;
|
||||||
|
|
||||||
float sMax = (float)floor((cMax / Math::pow(2.0f, expp - B - N)) + 0.5f);
|
float sMax = (float)floor((cMax / Math::pow(2.0f, expp - B - N)) + 0.5f);
|
||||||
|
@ -196,19 +192,19 @@ struct Color {
|
||||||
_FORCE_INLINE_ bool operator<(const Color &p_color) const; //used in set keys
|
_FORCE_INLINE_ bool operator<(const Color &p_color) const; //used in set keys
|
||||||
operator String() const;
|
operator String() const;
|
||||||
|
|
||||||
//for binder
|
// For the binder.
|
||||||
_FORCE_INLINE_ void set_r8(int32_t r8) { r = (CLAMP(r8, 0, 255) / 255.0); }
|
_FORCE_INLINE_ void set_r8(int32_t r8) { r = (CLAMP(r8, 0, 255) / 255.0); }
|
||||||
_FORCE_INLINE_ int32_t get_r8() const { return CLAMP(uint32_t(r * 255.0), 0, 255); }
|
_FORCE_INLINE_ int32_t get_r8() const { return int32_t(CLAMP(r * 255.0, 0.0, 255.0)); }
|
||||||
_FORCE_INLINE_ void set_g8(int32_t g8) { g = (CLAMP(g8, 0, 255) / 255.0); }
|
_FORCE_INLINE_ void set_g8(int32_t g8) { g = (CLAMP(g8, 0, 255) / 255.0); }
|
||||||
_FORCE_INLINE_ int32_t get_g8() const { return CLAMP(uint32_t(g * 255.0), 0, 255); }
|
_FORCE_INLINE_ int32_t get_g8() const { return int32_t(CLAMP(g * 255.0, 0.0, 255.0)); }
|
||||||
_FORCE_INLINE_ void set_b8(int32_t b8) { b = (CLAMP(b8, 0, 255) / 255.0); }
|
_FORCE_INLINE_ void set_b8(int32_t b8) { b = (CLAMP(b8, 0, 255) / 255.0); }
|
||||||
_FORCE_INLINE_ int32_t get_b8() const { return CLAMP(uint32_t(b * 255.0), 0, 255); }
|
_FORCE_INLINE_ int32_t get_b8() const { return int32_t(CLAMP(b * 255.0, 0.0, 255.0)); }
|
||||||
_FORCE_INLINE_ void set_a8(int32_t a8) { a = (CLAMP(a8, 0, 255) / 255.0); }
|
_FORCE_INLINE_ void set_a8(int32_t a8) { a = (CLAMP(a8, 0, 255) / 255.0); }
|
||||||
_FORCE_INLINE_ int32_t get_a8() const { return CLAMP(uint32_t(a * 255.0), 0, 255); }
|
_FORCE_INLINE_ int32_t get_a8() const { return int32_t(CLAMP(a * 255.0, 0.0, 255.0)); }
|
||||||
|
|
||||||
_FORCE_INLINE_ void set_h(float h) { set_hsv(h, get_s(), get_v()); }
|
_FORCE_INLINE_ void set_h(float p_h) { set_hsv(p_h, get_s(), get_v()); }
|
||||||
_FORCE_INLINE_ void set_s(float s) { set_hsv(get_h(), s, get_v()); }
|
_FORCE_INLINE_ void set_s(float p_s) { set_hsv(get_h(), p_s, get_v()); }
|
||||||
_FORCE_INLINE_ void set_v(float v) { set_hsv(get_h(), get_s(), v); }
|
_FORCE_INLINE_ void set_v(float p_v) { set_hsv(get_h(), get_s(), p_v); }
|
||||||
|
|
||||||
_FORCE_INLINE_ Color() {}
|
_FORCE_INLINE_ Color() {}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue