CUGL 1.3
Cornell University Game Library
|
#include <CUColor4.h>
Public Member Functions | |
Color4 () | |
Color4 (GLubyte r, GLubyte g, GLubyte b, GLubyte a=255) | |
Color4 (GLuint color) | |
Color4 (const float *array) | |
Color4 & | operator= (GLuint color) |
Color4 & | operator= (const float *array) |
Color4 & | set (GLubyte r, GLubyte g, GLubyte b, GLubyte a=255) |
Color4 & | set (const float *array) |
Color4 & | set (GLuint color) |
Color4 & | set (const Color4 &c) |
Color4 & | clamp (Color4 min, Color4 max) |
Color4 | getClamp (Color4 min, Color4 max) const |
Color4 & | add (Color4 c, bool alpha=false) |
Color4 & | add (GLubyte r, GLubyte g, GLubyte b, GLubyte a=0) |
Color4 & | subtract (Color4 c, bool alpha=false) |
Color4 & | subtract (GLubyte r, GLubyte g, GLubyte b, GLubyte a=0) |
Color4 & | scale (float s, bool alpha=false) |
Color4 & | scale (float sr, float sg, float sb, float sa=1) |
Color4 & | scale (Color4 c, bool alpha=false) |
Color4 & | map (std::function< GLubyte(GLubyte)> func, bool alpha=false) |
Color4 | getMap (std::function< GLubyte(GLubyte)> func, bool alpha=false) const |
Color4 & | complement (bool alpha=false) |
Color4 | getComplement (bool alpha=false) const |
Color4 & | lerp (const Color4f &other, float alpha) |
Color4 & | blend (Color4 other) |
Color4 & | blendPre (Color4 other) |
Color4 & | premultiply () |
Color4 & | unpremultiply () |
Color4 | getLerp (Color4 other, float alpha) const |
Color4 | getBlend (Color4 other) const |
Color4f | getBlendPre (Color4 other) const |
Color4 | getPremultiplied () const |
Color4 | getUnpremultiplied () const |
GLuint | getRGBA () const |
Color4 & | operator+= (Color4 c) |
Color4 & | operator-= (Color4 c) |
Color4 & | operator*= (float s) |
Color4 & | operator*= (Color4 c) |
const Color4 | operator+ (Color4 c) const |
const Color4 | operator- (Color4 c) const |
const Color4 | operator* (float s) const |
const Color4 | operator* (Color4 c) const |
bool | operator< (Color4 c) const |
bool | operator<= (Color4 c) const |
bool | operator> (Color4 c) const |
bool | operator>= (Color4 c) const |
bool | operator== (Color4 c) const |
bool | operator!= (Color4 c) const |
bool | darkerThan (Color4 c) const |
bool | lighterThan (Color4 c) const |
std::string | toString (bool verbose=false) const |
operator std::string () const | |
operator Vec4 () const | |
Color4 (const Vec4 &vector) | |
Color4 & | operator= (const Vec4 &vector) |
operator Vec3 () const | |
Color4 (const Vec3 &vector) | |
Color4 & | operator= (const Vec3 &vector) |
operator Color4f () const | |
Color4 (const Color4f &color) | |
Color4 & | operator= (const Color4f &color) |
Static Public Member Functions | |
static Color4 * | lerp (Color4 c1, Color4 c2, float alpha, Color4 *dst) |
static Color4 * | blend (Color4 c1, Color4 c2, Color4 *dst) |
static Color4 * | blendPre (Color4 c1, Color4 c2, Color4 *dst) |
Public Attributes | |
union { | |
struct { | |
GLubyte r | |
GLubyte g | |
GLubyte b | |
GLubyte a | |
} | |
Uint32 rgba | |
}; | |
Static Public Attributes | |
static const Color4 | CLEAR |
static const Color4 | WHITE |
static const Color4 | BLACK |
static const Color4 | YELLOW |
static const Color4 | BLUE |
static const Color4 | GREEN |
static const Color4 | RED |
static const Color4 | MAGENTA |
static const Color4 | CYAN |
static const Color4 | ORANGE |
static const Color4 | GRAY |
static const Color4 | CORNFLOWER |
static const Color4 | PAPYRUS |
This class is a RGBA color composed of 4 unsigned bytes.
This is the preferred (non-transparent) color class for storage. It is slightly slower on calculations, because it often has to shift to 0..1 for all its values. It is also slower to cast to Vec3.
|
inline |
Constructs a new clear color (all zeros).
|
inline |
Constructs a new color initialized to the specified values.
r | The red color. |
g | The green color. |
b | The blue color. |
a | The alpha value (optional). |
|
inline |
Creates a new color from an integer interpreted as an RGBA value.
This representation assigned is native to the platform, but it will be normalized to network order. In this representation, red will always be the highest order byte and alpha will always be the lowest order byte.
color | The integer to interpret as an RGBA value. |
cugl::Color4::Color4 | ( | const float * | array | ) |
Constructs a new color from the values in the specified array.
The color values must all be in the range 0..1. They are multiplied by 255.0 and rounded up.
array | An array containing the color values in the order r, g, b, a. |
|
explicit |
Creates a color from the given vector.
The attributes are read in the order x,y,z,w. They are all multiplied by 255.0f and rounded up before assignment.
vector | The vector to convert |
|
explicit |
Creates a color from the given vector.
The attributes are read in the order x,y,z. They are all multiplied by 255.0f and rounded up before assignment. The alpha value is 255.
vector | The vector to convert |
|
explicit |
Creates a byte-based color from the given float-based color.
The attributes are read in the order r,g,b,a. They are all multiplied by 255.0f and rounded up before assignment.
color | The color to convert |
Adds the given color to this one in place.
This operation is functionally identical to additive blending. The addition is clamped so that this remains a valid color.
c | The color to add |
alpha | Whether to add the alpha values (optional) |
|
inline |
Adds the given values to this color.
The addition is clamped so that this remains a valid color.
r | The red color to add. |
g | The green color to add. |
b | The blue color to add. |
a | The alpha value (optional). |
Blends the two colors c1 and c2, assuming they are not premultiplied.
The blending is the standard over operation with color c1 as the source and c2 as the destination. It assumes that the color values are not premultiplied.
c1 | The source color. |
c2 | The destination color. |
dst | The color to store the result in |
Blends this color with the other one, storing the new value in place.
The blending is the standard over operation with this color as the destination. It assumes that the color values are not premultiplied.
other | The color to interpolate with. |
Blends the two colors c1 and c2, assuming they are premultiplied.
The blending is the standard over operation with color c1 as the source and c2 as the destination. It assumes that the color values are premultiplied.
c1 | The source color. |
c2 | The destination color. |
dst | The color to store the result in |
Blends this color with the other one, storing the new value in place.
The blending is the standard over operation with this color as the destination. It assumes that this color is premultiplied.
other | The color to interpolate with. |
Clamps this color within the given range.
min | The minimum value. |
max | The maximum value. |
|
inline |
Complements this color.
The complement of the color is the (255-v) for each value v.
alpha | Whether to complement the alpha value (optional) |
|
inline |
Returns true if this color is dominated by the given color.
Domination means that all components of the given color are greater than or equal to the components of this one. However, alpha is reversed for this computation, as a greater value means more opaque (and hence darker).
c | The color to compare against. |
Returns a blend of this color with the other one.
The blending is the standard over operation with this color as the destination. It assumes that the color values are not premultiplied.
Note: this does not modify this color.
other | The color to interpolate with. |
Returns a blend of this color with the other one.
The blending is the standard over operation with this color as the destination. It assumes that this color is premultiplied.
Note: this does not modify this color.
other | The color to interpolate with. |
Returns a copy of this color clamped within the given range.
Note: this does not modify this color.
min | The minimum value. |
max | The maximum value. |
|
inline |
Returns the complement of this color.
The complement of the color is the (255-v) for each value v.
alpha | Whether to complement the alpha value (optional) |
Note: this does not modify this color.
Returns the linear interpolation of this color with other.
If alpha is 0, the color is unchanged. If alpha is 1, the color is other. Otherwise it is a value in between. If alpha is outside of the range 0 to 1, it is clamped to the nearest value.
This method just implements standard linear interpolation. It does not attempt to give any blending semantics to it.
Note: this does not modify this color.
other | The color to interpolate with. |
alpha | The interpolation value in 0..1 |
|
inline |
Returns a copy of this color with func applied to each component.
This method supports any function that has the signature Glubyte func(Glubyte). If you wish to use float-oriented function, use Color4f instead.
func | The function to map on the color values. |
alpha | Whether to modify the alpha value (optional) |
|
inline |
Returns the premultiplied version of this color, using its current alpha.
This class does not store whether the color is already premultiplied. Hence premultiplying an already premultiplied color will have a compounding effect.
Note: this does not modify this color.
|
inline |
Returns the packed integer representation of this color
This representation returned is native to the platform. In other words, it is guaranteed to be the same value set in either the constructor or a setter.
In this representation, red will always be the highest order byte and alpha will always be the lowest order byte.
|
inline |
Returns the unpremultiplied version of this color, using its current alpha.
This class does not store whether the color is already premultiplied. Hence unpremultiplying an non-premultiplied color will have a compounding effect.
If the alpha value is 0, the copy is equal to the original color.
Note: this does not modify this color.
Interpolates the two colors c1 and c2, and stores the result in dst.
If alpha is 0, the result is c1. If alpha is 1, the color is c2. Otherwise it is a value in c1..c2. If alpha is outside of the range 0 to 1, it is clamped to the nearest value.
This method just implements standard linear interpolation. It does not attempt to give any blending semantics to it.
c1 | The first color. |
c2 | The second color. |
alpha | The interpolation value in 0..1 |
dst | The color to store the result in |
Modifies this color to be the linear interpolation with other.
If alpha is 0, the color is unchanged. If alpha is 1, the color is other. Otherwise it is a value in between. If alpha is outside of the range 0 to 1, it is clamped to the nearest value.
This method just implements standard linear interpolation. It does not attempt to give any blending semantics to it.
other | The color to interpolate with. |
alpha | The interpolation value in 0..1 |
|
inline |
Returns true if this color dominates the given color.
Domination means that all components of this color are greater than or equal to the components of the given color. However, alpha is reversed for this computation, as a lesser value means more transparent (and hence lighter).
c | The color to compare against. |
|
inline |
Maps the given function to the color values in place.
This method supports any function that has the signature Glubyte func(Glubyte). If you wish to use float-oriented function, use Color4f instead.
func | The function to map on the color values. |
alpha | Whether to modify the alpha value (optional) |
|
inline |
Cast from Color4f to a string.
cugl::Color4::operator Vec3 | ( | ) | const |
Cast from Color4f to a vector.
The attributes are all divided by 255.0. The alpha value is dropped.
cugl::Color4::operator Vec4 | ( | ) | const |
Cast from Color4 to a vector.
The attributes are all divided by 255.0.
|
inline |
Returns true if this color is not equal to the given color.
Comparison is exact, which may be unreliable given that the attributes are floats.
c | The color to compare against. |
Returns the scalar product of this color with the given color.
This operation is functionally identical to multiplicative blending.
Note: this does not modify this color.
c | The color to scale by. |
|
inline |
Returns the scalar product of this color with the given color.
The scaling is clamped so that this remains a valid color.
This version of scaling always multiplies alpha values.
Note: this does not modify this color.
s | The value to scale by. |
Scales this color nonuniformly by the given color.
This operation is functionally identical to multiplicative blending.
c | The color to scale by |
|
inline |
Scales this color in place by the given factor.
The scaling is clamped so that this remains a valid color.
This version of scaling always multiplies alpha values.
s | The value to scale by |
Returns the sum of this color with the given color.
This operation is functionally identical to additive blending. The addition is clamped so that this remains a valid color.
This version of addition always adds alpha values.
Note: this does not modify this color.
c | The color to add. |
Adds the given color to this one in place.
This operation is functionally identical to additive blending. The addition is clamped so that this remains a valid color.
This version of addition always adds alpha values.
c | The color to add |
Returns the difference of this color with the given color.
This operation is functionally identical to subtractive blending. The subtraction is clamped so that this remains a valid color.
This version of subraction always subtracts alpha values.
Note: this does not modify this color.
c | The color to subtract. |
Subtracts the given color from this one in place.
This operation is functionally identical to subtractive blending. The subtraction is clamped so that this remains a valid color.
This version of subraction always subtracts alpha values.
c | The color to subtract |
bool cugl::Color4::operator< | ( | Color4 | c | ) | const |
Returns true if this color is less than the given color.
This comparison uses lexicographical order of rgba. To test if all components in this color are less than those of c, use the method darkerThan().
c | The color to compare against. |
|
inline |
Returns true if this color is less than or equal the given color.
This comparison uses lexicographical order of rgba. To test if all components in this color are less than those of c, use the method darkerThan().
c | The color to compare against. |
Sets the attributes of this color from the given float-based color.
The attributes are read in the order r,g,b,a. They are all multiplied by 255.0f and rounded up before assignment.
color | The color to convert. |
|
inline |
Sets the elements of this color from the values in the specified array.
The color values must all be in the range 0..1. They are multiplied by 255.0 and rounded up
array | An array containing the color values in the order r, g, b, a |
Sets the coordinates of this color to those of the given vector.
The attributes are read in the order x,y,z. They are all multiplied by 255.0f and rounded up before assignment. The alpha value is 255.
vector | The vector to convert |
Sets the coordinates of this color to those of the given vector.
The attributes are read in the order x,y,z,w. They are all multiplied by 255.0f and rounded up before assignment.
vector | The vector to convert |
|
inline |
Sets this color to the integer interpreted as an RGBA value.
This representation assigned is native to the platform, but it will be normalized to network order. In this representation, red will always be the highest order byte and alpha will always be the lowest order byte.
color | The integer to interpret as an RGBA value. |
|
inline |
Returns true if this color is equal to the given color.
c | The color to compare against. |
bool cugl::Color4::operator> | ( | Color4 | c | ) | const |
Returns true if this color is greater than the given color.
This comparison uses lexicographical order of rgba. To test if all components in this color are greater than those of c, use the method lighterThan().
c | The color to compare against. |
|
inline |
Returns true if this color is greater than or equal the given color.
This comparison uses lexicographical order of rgba. To test if all components in this color are greater than those of c, use the method lighterThan().
c | The color to compare against. |
|
inline |
Premultiplies this color with its current alpha.
This class does not store whether the color is already premultiplied. Hence premultiplying an already premultiplied color will have a compounding effect.
Scales this color nonuniformly by the given color.
This operation is functionally identical to multiplicative blending.
c | The color to scale by |
alpha | Whether to scale the alpha value (optional) |
|
inline |
Scales this color in place by the given factor.
The scaling is clamped so that this remains a valid color.
s | The scalar to multiply by |
alpha | Whether to scale the alpha value (optional) |
|
inline |
Scales this color nonuniformly by the given factors.
The scaling is clamped so that this remains a valid color.
sr | The scalar to multiply the red value |
sg | The scalar to multiply the green value |
sb | The scalar to multiply the blue value |
sa | The scalar to multiply the alpha value (optional) |
Sets the values of this color to those in the specified color.
c | The color to copy. |
Color4& cugl::Color4::set | ( | const float * | array | ) |
Sets the elements of this color from the values in the specified array.
The color values must all be in the range 0..1. They are multiplied by 255.0 and rounded up
array | An array containing the color values in the order r, g, b, a |
|
inline |
Sets the elements of this color to the specified values.
r | The red color. |
g | The green color. |
b | The blue color. |
a | The alpha value (optional). |
|
inline |
Sets this color to the integer interpreted as an RGBA value.
This setter processes the integer in RGBA order. Hence, 0xff0000ff represents red or the color (1, 0, 0, 1).
color | The integer to interpret as an RGBA value. |
Subtracts the given color from this one in place.
This operation is functionally identical to subtractive blending. The subtraction is clamped so that this remains a valid color.
c | The color to subtract |
alpha | Whether to subtract the alpha value (optional) |
|
inline |
Subtracts the given values from this color.
The subtraction is clamped so that this remains a valid color.
r | The red color to subtract. |
g | The green color to subtract. |
b | The blue color to subtract. |
a | The alpha value (optional). |
std::string cugl::Color4::toString | ( | bool | verbose = false | ) | const |
Returns a string representation of this vector for debuggging purposes.
If verbose is true, the string will include class information. This allows us to unambiguously identify the class.
verbose | Whether to include class information |
|
inline |
Undoes premultiplication this color with its current alpha.
This class does not store whether the color is already premultiplied. Hence unpremultiplying an non-premultiplied color will have a compounding effect.
If the alpha value is 0, the color is unchanged.
GLubyte cugl::Color4::a |
The alpha value
GLubyte cugl::Color4::b |
The blue value
|
static |
The Black color (0,0,0,1)
|
static |
The Blue color (0,0,1,1)
|
static |
The Clear color (0,0,0,0)
|
static |
The classic XNA color (0.392,0.584,0.93,1)
|
static |
The Cyan color (0,1,1,1)
GLubyte cugl::Color4::g |
The green value
|
static |
The Gray color (0.65,0.65,0.65,1)
|
static |
The Green color (0,1,0,1)
|
static |
The Magenta color (1,0,1,1)
|
static |
The Orange color (1,0.5,0,1)
|
static |
The Playing Fields color (0.933f,0.99f,0.65f,1.0f)
GLubyte cugl::Color4::r |
The red value
|
static |
The Red color (1,0,0,1)
Uint32 cugl::Color4::rgba |
The color as a packed integer (WARNING: Endian specific)
|
static |
The White color (1,1,1,1)
|
static |
The Yellow color (1,1,0,1)