2020-10-01 13:05:04 +02:00
|
|
|
#include "Common/Data/Color/RGBAUtil.h"
|
2012-05-08 22:04:24 +02:00
|
|
|
|
2017-12-03 09:39:28 -08:00
|
|
|
template <typename T>
|
|
|
|
|
static T clamp(T f, T low, T high) {
|
|
|
|
|
if (f < low)
|
|
|
|
|
return low;
|
|
|
|
|
if (f > high)
|
|
|
|
|
return high;
|
|
|
|
|
return f;
|
|
|
|
|
}
|
|
|
|
|
|
2012-05-08 22:04:24 +02:00
|
|
|
uint32_t whiteAlpha(float alpha) {
|
2012-10-30 13:20:55 +01:00
|
|
|
if (alpha < 0.0f) alpha = 0.0f;
|
|
|
|
|
if (alpha > 1.0f) alpha = 1.0f;
|
|
|
|
|
uint32_t color = (int)(alpha*255) << 24;
|
|
|
|
|
color |= 0xFFFFFF;
|
|
|
|
|
return color;
|
2012-05-08 22:04:24 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
uint32_t blackAlpha(float alpha) {
|
2012-10-30 13:20:55 +01:00
|
|
|
if (alpha < 0.0f) alpha = 0.0f;
|
|
|
|
|
if (alpha > 1.0f) alpha = 1.0f;
|
|
|
|
|
return (int)(alpha*255)<<24;
|
2012-05-08 22:04:24 +02:00
|
|
|
}
|
|
|
|
|
|
2013-04-17 17:08:31 +02:00
|
|
|
uint32_t colorAlpha(uint32_t rgb, float alpha) {
|
2012-10-30 13:20:55 +01:00
|
|
|
if (alpha < 0.0f) alpha = 0.0f;
|
|
|
|
|
if (alpha > 1.0f) alpha = 1.0f;
|
2013-04-17 17:08:31 +02:00
|
|
|
return ((int)(alpha*255)<<24) | (rgb & 0xFFFFFF);
|
|
|
|
|
}
|
|
|
|
|
|
2017-12-03 09:39:28 -08:00
|
|
|
uint32_t colorBlend(uint32_t rgb1, uint32_t rgb2, float alpha) {
|
|
|
|
|
float invAlpha = (1.0f - alpha);
|
|
|
|
|
int r = (int)(((rgb1 >> 0) & 0xFF) * alpha + ((rgb2 >> 0) & 0xFF) * invAlpha);
|
|
|
|
|
int g = (int)(((rgb1 >> 8) & 0xFF) * alpha + ((rgb2 >> 8) & 0xFF) * invAlpha);
|
|
|
|
|
int b = (int)(((rgb1 >> 16) & 0xFF) * alpha + ((rgb2 >> 16) & 0xFF) * invAlpha);
|
|
|
|
|
int a = (int)(((rgb1 >> 24) & 0xFF) * alpha + ((rgb2 >> 24) & 0xFF) * invAlpha);
|
|
|
|
|
|
|
|
|
|
uint32_t c = clamp(a, 0, 255) << 24;
|
|
|
|
|
c |= clamp(b, 0, 255) << 16;
|
|
|
|
|
c |= clamp(g, 0, 255) << 8;
|
|
|
|
|
c |= clamp(r, 0, 255);
|
|
|
|
|
return c;
|
|
|
|
|
}
|
|
|
|
|
|
2013-04-17 17:08:31 +02:00
|
|
|
uint32_t alphaMul(uint32_t color, float alphaMul) {
|
|
|
|
|
uint32_t rgb = color & 0xFFFFFF;
|
2017-11-25 12:35:45 -08:00
|
|
|
int32_t alpha = color >> 24;
|
2020-09-29 13:06:26 +02:00
|
|
|
alpha = (int32_t)(alpha * alphaMul);
|
2017-11-25 12:35:45 -08:00
|
|
|
if (alpha < 0) alpha = 0;
|
|
|
|
|
if (alpha > 255) alpha = 255;
|
2017-03-19 14:28:24 -07:00
|
|
|
return (alpha << 24) | (rgb & 0xFFFFFF);
|
2012-05-14 22:07:40 +02:00
|
|
|
}
|
|
|
|
|
|
2012-05-08 22:04:24 +02:00
|
|
|
uint32_t rgba(float r, float g, float b, float alpha) {
|
2012-10-30 13:20:55 +01:00
|
|
|
uint32_t color = (int)(alpha*255)<<24;
|
|
|
|
|
color |= (int)(b*255)<<16;
|
|
|
|
|
color |= (int)(g*255)<<8;
|
|
|
|
|
color |= (int)(r*255);
|
|
|
|
|
return color;
|
2012-05-08 22:04:24 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
uint32_t rgba_clamp(float r, float g, float b, float a) {
|
2017-12-03 09:39:28 -08:00
|
|
|
return rgba(clamp(r, 0.0f, 1.0f), clamp(g, 0.0f, 1.0f), clamp(b, 0.0f, 1.0f), clamp(a, 0.0f, 1.0f));
|
2012-05-08 22:04:24 +02:00
|
|
|
}
|