45 lines
1.2 KiB
C
45 lines
1.2 KiB
C
#ifndef COLOR_H
|
|
#define COLOR_H
|
|
|
|
struct Color {
|
|
|
|
// Components
|
|
float r, g, b;
|
|
|
|
// Enum for readability
|
|
enum Channel { R, G, B };
|
|
|
|
// Constructor
|
|
Color() : r(0), g(0), b(0) {}
|
|
Color(float r, float g, float b) : r(r), g(g), b(b) {}
|
|
|
|
// Access operators
|
|
float &operator[](int channel);
|
|
float const &operator[](int channel) const;
|
|
};
|
|
|
|
// Comparison operators
|
|
bool operator==(Color const &left, Color const &right);
|
|
bool operator!=(Color const &left, Color const &right);
|
|
|
|
// Arithmetic operators
|
|
Color operator+(Color const &left, Color const &right);
|
|
Color operator-(Color const &right);
|
|
Color operator-(Color const &left, Color const &right);
|
|
Color operator*(Color const &left, float right);
|
|
Color operator*(float left, Color const &right);
|
|
Color operator*(Color const &left, Color const &right);
|
|
Color operator/(Color const &left, float right);
|
|
Color operator/(Color const &left, Color const &right);
|
|
|
|
// Assignment operators
|
|
Color &operator+=(Color &left, Color const &right);
|
|
Color &operator-=(Color &left, Color const &right);
|
|
Color &operator*=(Color &left, float right);
|
|
Color &operator/=(Color &left, float right);
|
|
|
|
// Useful functions
|
|
Color clamped(Color const &c);
|
|
void clamp(Color *c);
|
|
|
|
#endif
|