skunkworks-c/src/color32.c

54 lines
1.2 KiB
C

#include "color32.h"
sw_color32 sw_color32_from_rgb(u8 r, u8 g, u8 b) {
return (u32)r | ((u32)g << 8) | ((u32)b << 16) | ((u32)255 << 24);
}
sw_color32 sw_color32_from_rgba(u8 r, u8 g, u8 b, u8 a) {
return (u32)r | ((u32)g << 8) | ((u32)b << 16) | ((u32)a << 24);
}
u8 sw_color32_get_r(sw_color32 col) {
return col & 0xFF;
}
u8 sw_color32_get_g(sw_color32 col) {
return (col >> 8) & 0xFF;
}
u8 sw_color32_get_b(sw_color32 col) {
return (col >> 16) & 0xFF;
}
u8 sw_color32_get_a(sw_color32 col) {
return (col >> 24) & 0xFF;
}
f32 sw_color32_get_rf(sw_color32 col) {
return (f32)sw_color32_get_r(col) / 255.f;
}
f32 sw_color32_get_gf(sw_color32 col) {
return (f32)sw_color32_get_g(col) / 255.f;
}
f32 sw_color32_get_bf(sw_color32 col) {
return (f32)sw_color32_get_b(col) / 255.f;
}
f32 sw_color32_get_af(sw_color32 col) {
return (f32)sw_color32_get_a(col) / 255.f;
}
sw_color32 sw_color32_mix(sw_color32 a, sw_color32 b, f32 mix) {
f32 imix;
imix = 1.f - mix;
return sw_color32_from_rgba(
sw_color32_get_r(a) * imix + sw_color32_get_r(b) * mix,
sw_color32_get_g(a) * imix + sw_color32_get_g(b) * mix,
sw_color32_get_b(a) * imix + sw_color32_get_b(b) * mix,
sw_color32_get_a(a) * imix + sw_color32_get_a(b) * mix
);
}