Index: include/gpu/GrColor.h |
diff --git a/include/gpu/GrColor.h b/include/gpu/GrColor.h |
index 9ccc638fc9fe6745d58ac954e13169e2dcb58394..7e2b3b263f08e2c71cc5106bf4c8be778c1c54f0 100644 |
--- a/include/gpu/GrColor.h |
+++ b/include/gpu/GrColor.h |
@@ -77,7 +77,7 @@ static inline GrColor GrColorPackA4(unsigned a) { |
#define GrColor_ILLEGAL (~(0xFF << GrColor_SHIFT_A)) |
#define GrColor_WHITE 0xFFFFFFFF |
-#define GrColor_TRANS_BLACK 0x0 |
+#define GrColor_TRANSPARENT_BLACK 0x0 |
/** |
* Assert in debug builds that a GrColor is premultiplied. |
@@ -95,6 +95,31 @@ static inline void GrColorIsPMAssert(GrColor SkDEBUGCODE(c)) { |
#endif |
} |
+/** Inverts each color channel. */ |
+static inline GrColor GrInvertColor(GrColor c) { |
+ U8CPU a = GrColorUnpackA(c); |
+ U8CPU r = GrColorUnpackR(c); |
+ U8CPU g = GrColorUnpackG(c); |
+ U8CPU b = GrColorUnpackB(c); |
+ return GrColorPackRGBA(0xff - r, 0xff - g, 0xff - b, 0xff - a); |
+} |
+ |
+static inline GrColor GrColorMul(GrColor c0, GrColor c1) { |
+ U8CPU r = SkMulDiv255Round(GrColorUnpackR(c0), GrColorUnpackR(c1)); |
+ U8CPU g = SkMulDiv255Round(GrColorUnpackG(c0), GrColorUnpackG(c1)); |
+ U8CPU b = SkMulDiv255Round(GrColorUnpackB(c0), GrColorUnpackB(c1)); |
+ U8CPU a = SkMulDiv255Round(GrColorUnpackA(c0), GrColorUnpackA(c1)); |
+ return GrColorPackRGBA(r, g, b, a); |
+} |
+ |
+static inline GrColor GrColorSatAdd(GrColor c0, GrColor c1) { |
+ unsigned r = SkTMin<unsigned>(GrColorUnpackR(c0) + GrColorUnpackR(c1), 0xff); |
+ unsigned g = SkTMin<unsigned>(GrColorUnpackG(c0) + GrColorUnpackG(c1), 0xff); |
+ unsigned b = SkTMin<unsigned>(GrColorUnpackB(c0) + GrColorUnpackB(c1), 0xff); |
+ unsigned a = SkTMin<unsigned>(GrColorUnpackA(c0) + GrColorUnpackA(c1), 0xff); |
+ return GrColorPackRGBA(r, g, b, a); |
+} |
+ |
/** Converts a GrColor to an rgba array of GrGLfloat */ |
static inline void GrColorToRGBAFloat(GrColor color, float rgba[4]) { |
static const float ONE_OVER_255 = 1.f / 255.f; |
@@ -115,8 +140,20 @@ static inline bool GrColorIsOpaque(GrColor color) { |
return (color & (0xFFU << GrColor_SHIFT_A)) == (0xFFU << GrColor_SHIFT_A); |
} |
+static inline GrColor GrPremulColor(GrColor color) { |
+ unsigned r = GrColorUnpackR(color); |
+ unsigned g = GrColorUnpackG(color); |
+ unsigned b = GrColorUnpackB(color); |
+ unsigned a = GrColorUnpackA(color); |
+ return GrColorPackRGBA(SkMulDiv255Round(r, a), |
+ SkMulDiv255Round(g, a), |
+ SkMulDiv255Round(b, a), |
+ a); |
+} |
+ |
/** Returns an unpremuled version of the GrColor. */ |
-static inline GrColor GrUnPreMulColor(GrColor color) { |
+static inline GrColor GrUnpremulColor(GrColor color) { |
+ GrColorIsPMAssert(color); |
unsigned r = GrColorUnpackR(color); |
unsigned g = GrColorUnpackG(color); |
unsigned b = GrColorUnpackB(color); |