Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2010 Google Inc. | 3 * Copyright 2010 Google Inc. |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 | 8 |
| 9 | 9 |
| 10 | 10 |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 70 #define GrColorUnpackB(color) (((color) >> GrColor_SHIFT_B) & 0xFF) | 70 #define GrColorUnpackB(color) (((color) >> GrColor_SHIFT_B) & 0xFF) |
| 71 #define GrColorUnpackA(color) (((color) >> GrColor_SHIFT_A) & 0xFF) | 71 #define GrColorUnpackA(color) (((color) >> GrColor_SHIFT_A) & 0xFF) |
| 72 | 72 |
| 73 /** | 73 /** |
| 74 * Since premultiplied means that alpha >= color, we construct a color with | 74 * Since premultiplied means that alpha >= color, we construct a color with |
| 75 * each component==255 and alpha == 0 to be "illegal" | 75 * each component==255 and alpha == 0 to be "illegal" |
| 76 */ | 76 */ |
| 77 #define GrColor_ILLEGAL (~(0xFF << GrColor_SHIFT_A)) | 77 #define GrColor_ILLEGAL (~(0xFF << GrColor_SHIFT_A)) |
| 78 | 78 |
| 79 #define GrColor_WHITE 0xFFFFFFFF | 79 #define GrColor_WHITE 0xFFFFFFFF |
| 80 #define GrColor_TRANS_BLACK 0x0 | 80 #define GrColor_TRANSPARENT_BLACK 0x0 |
| 81 | 81 |
| 82 /** | 82 /** |
| 83 * Assert in debug builds that a GrColor is premultiplied. | 83 * Assert in debug builds that a GrColor is premultiplied. |
| 84 */ | 84 */ |
| 85 static inline void GrColorIsPMAssert(GrColor SkDEBUGCODE(c)) { | 85 static inline void GrColorIsPMAssert(GrColor SkDEBUGCODE(c)) { |
| 86 #ifdef SK_DEBUG | 86 #ifdef SK_DEBUG |
| 87 unsigned a = GrColorUnpackA(c); | 87 unsigned a = GrColorUnpackA(c); |
| 88 unsigned r = GrColorUnpackR(c); | 88 unsigned r = GrColorUnpackR(c); |
| 89 unsigned g = GrColorUnpackG(c); | 89 unsigned g = GrColorUnpackG(c); |
| 90 unsigned b = GrColorUnpackB(c); | 90 unsigned b = GrColorUnpackB(c); |
| 91 | 91 |
| 92 SkASSERT(r <= a); | 92 SkASSERT(r <= a); |
| 93 SkASSERT(g <= a); | 93 SkASSERT(g <= a); |
| 94 SkASSERT(b <= a); | 94 SkASSERT(b <= a); |
| 95 #endif | 95 #endif |
| 96 } | 96 } |
| 97 | 97 |
| 98 /** Inverts each color channel. */ | |
| 99 static inline GrColor GrInvertColor(GrColor c) { | |
| 100 U8CPU a = GrColorUnpackA(c); | |
| 101 U8CPU r = GrColorUnpackR(c); | |
| 102 U8CPU g = GrColorUnpackG(c); | |
| 103 U8CPU b = GrColorUnpackB(c); | |
| 104 return GrColorPackRGBA(0xff - r, 0xff - g, 0xff - b, 0xff - a); | |
| 105 } | |
| 106 | |
| 107 static inline GrColor GrColorMul(GrColor c0, GrColor c1) { | |
| 108 U8CPU r = SkMulDiv255Round(GrColorUnpackR(c0), GrColorUnpackR(c1)); | |
| 109 U8CPU g = SkMulDiv255Round(GrColorUnpackG(c0), GrColorUnpackG(c1)); | |
| 110 U8CPU b = SkMulDiv255Round(GrColorUnpackB(c0), GrColorUnpackB(c1)); | |
| 111 U8CPU a = SkMulDiv255Round(GrColorUnpackA(c0), GrColorUnpackA(c1)); | |
| 112 return GrColorPackRGBA(r, g, b, a); | |
| 113 } | |
| 114 | |
| 115 static inline GrColor GrColorSatAdd(GrColor c0, GrColor c1) { | |
| 116 unsigned r = SkTMin<unsigned>(GrColorUnpackR(c0) + GrColorUnpackR(c1), 0xff) ; | |
| 117 unsigned g = SkTMin<unsigned>(GrColorUnpackG(c0) + GrColorUnpackG(c1), 0xff) ; | |
| 118 unsigned b = SkTMin<unsigned>(GrColorUnpackB(c0) + GrColorUnpackB(c1), 0xff) ; | |
| 119 unsigned a = SkTMin<unsigned>(GrColorUnpackA(c0) + GrColorUnpackA(c1), 0xff) ; | |
| 120 return GrColorPackRGBA(r, g, b, a); | |
| 121 } | |
| 122 | |
| 98 /** Converts a GrColor to an rgba array of GrGLfloat */ | 123 /** Converts a GrColor to an rgba array of GrGLfloat */ |
| 99 static inline void GrColorToRGBAFloat(GrColor color, float rgba[4]) { | 124 static inline void GrColorToRGBAFloat(GrColor color, float rgba[4]) { |
| 100 static const float ONE_OVER_255 = 1.f / 255.f; | 125 static const float ONE_OVER_255 = 1.f / 255.f; |
| 101 rgba[0] = GrColorUnpackR(color) * ONE_OVER_255; | 126 rgba[0] = GrColorUnpackR(color) * ONE_OVER_255; |
| 102 rgba[1] = GrColorUnpackG(color) * ONE_OVER_255; | 127 rgba[1] = GrColorUnpackG(color) * ONE_OVER_255; |
| 103 rgba[2] = GrColorUnpackB(color) * ONE_OVER_255; | 128 rgba[2] = GrColorUnpackB(color) * ONE_OVER_255; |
| 104 rgba[3] = GrColorUnpackA(color) * ONE_OVER_255; | 129 rgba[3] = GrColorUnpackA(color) * ONE_OVER_255; |
| 105 } | 130 } |
| 106 | 131 |
| 107 /** Normalizes and coverts an uint8_t to a float. [0, 255] -> [0.0, 1.0] */ | 132 /** Normalizes and coverts an uint8_t to a float. [0, 255] -> [0.0, 1.0] */ |
| 108 static inline float GrNormalizeByteToFloat(uint8_t value) { | 133 static inline float GrNormalizeByteToFloat(uint8_t value) { |
| 109 static const float ONE_OVER_255 = 1.f / 255.f; | 134 static const float ONE_OVER_255 = 1.f / 255.f; |
| 110 return value * ONE_OVER_255; | 135 return value * ONE_OVER_255; |
| 111 } | 136 } |
| 112 | 137 |
| 113 /** Determines whether the color is opaque or not. */ | 138 /** Determines whether the color is opaque or not. */ |
| 114 static inline bool GrColorIsOpaque(GrColor color) { | 139 static inline bool GrColorIsOpaque(GrColor color) { |
| 115 return (color & (0xFFU << GrColor_SHIFT_A)) == (0xFFU << GrColor_SHIFT_A); | 140 return (color & (0xFFU << GrColor_SHIFT_A)) == (0xFFU << GrColor_SHIFT_A); |
| 116 } | 141 } |
| 117 | 142 |
| 143 static inline GrColor GrPremulColor(GrColor color) { | |
| 144 unsigned r = GrColorUnpackR(color); | |
| 145 unsigned g = GrColorUnpackG(color); | |
| 146 unsigned b = GrColorUnpackB(color); | |
| 147 unsigned a = GrColorUnpackA(color); | |
| 148 return GrColorPackRGBA(SkMulDiv255Round(r, a), | |
| 149 SkMulDiv255Round(g, a), | |
| 150 SkMulDiv255Round(b, a), | |
| 151 a); | |
| 152 } | |
| 118 /** Returns an unpremuled version of the GrColor. */ | 153 /** Returns an unpremuled version of the GrColor. */ |
| 119 static inline GrColor GrUnPreMulColor(GrColor color) { | 154 static inline GrColor GrUnpremulColor(GrColor color) { |
| 155 GrColorIsPMAssert(color); | |
| 120 unsigned r = GrColorUnpackR(color); | 156 unsigned r = GrColorUnpackR(color); |
| 121 unsigned g = GrColorUnpackG(color); | 157 unsigned g = GrColorUnpackG(color); |
| 122 unsigned b = GrColorUnpackB(color); | 158 unsigned b = GrColorUnpackB(color); |
| 123 unsigned a = GrColorUnpackA(color); | 159 unsigned a = GrColorUnpackA(color); |
| 124 SkPMColor colorPM = SkPackARGB32(a, r, g, b); | 160 SkPMColor colorPM = SkPackARGB32(a, r, g, b); |
|
egdaniel
2015/09/15 20:59:28
maybe use your new helper GrColorToSkPMColor here?
bsalomon
2015/09/15 21:12:07
now that is moved out I think the minor code dupli
| |
| 125 SkColor colorUPM = SkUnPreMultiply::PMColorToColor(colorPM); | 161 SkColor colorUPM = SkUnPreMultiply::PMColorToColor(colorPM); |
| 126 | 162 |
| 127 r = SkColorGetR(colorUPM); | 163 r = SkColorGetR(colorUPM); |
| 128 g = SkColorGetG(colorUPM); | 164 g = SkColorGetG(colorUPM); |
| 129 b = SkColorGetB(colorUPM); | 165 b = SkColorGetB(colorUPM); |
| 130 a = SkColorGetA(colorUPM); | 166 a = SkColorGetA(colorUPM); |
| 131 | 167 |
| 132 return GrColorPackRGBA(r, g, b, a); | 168 return GrColorPackRGBA(r, g, b, a); |
| 133 } | 169 } |
| 134 | 170 |
| 171 static inline SkPMColor GrColorToSkPMColor(GrColor c) { | |
| 172 GrColorIsPMAssert(c); | |
| 173 return SkPackARGB32(GrColorUnpackA(c), GrColorUnpackR(c), GrColorUnpackG(c), GrColorUnpackB(c)); | |
| 174 } | |
| 175 | |
| 176 static inline GrColor SkPMColorToGrColor(SkPMColor c) { | |
| 177 return GrColorPackRGBA(SkGetPackedR32(c), SkGetPackedG32(c), SkGetPackedB32( c), | |
| 178 SkGetPackedA32(c)); | |
| 179 } | |
| 180 | |
| 135 /** | 181 /** |
| 136 * Flags used for bitfields of color components. They are defined so that the bi t order reflects the | 182 * Flags used for bitfields of color components. They are defined so that the bi t order reflects the |
| 137 * GrColor shift order. | 183 * GrColor shift order. |
| 138 */ | 184 */ |
| 139 enum GrColorComponentFlags { | 185 enum GrColorComponentFlags { |
| 140 kR_GrColorComponentFlag = 1 << (GrColor_SHIFT_R / 8), | 186 kR_GrColorComponentFlag = 1 << (GrColor_SHIFT_R / 8), |
| 141 kG_GrColorComponentFlag = 1 << (GrColor_SHIFT_G / 8), | 187 kG_GrColorComponentFlag = 1 << (GrColor_SHIFT_G / 8), |
| 142 kB_GrColorComponentFlag = 1 << (GrColor_SHIFT_B / 8), | 188 kB_GrColorComponentFlag = 1 << (GrColor_SHIFT_B / 8), |
| 143 kA_GrColorComponentFlag = 1 << (GrColor_SHIFT_A / 8), | 189 kA_GrColorComponentFlag = 1 << (GrColor_SHIFT_A / 8), |
| 144 | 190 |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 203 GR_STATIC_ASSERT(9 == kLATC_GrPixelConfig); | 249 GR_STATIC_ASSERT(9 == kLATC_GrPixelConfig); |
| 204 GR_STATIC_ASSERT(10 == kR11_EAC_GrPixelConfig); | 250 GR_STATIC_ASSERT(10 == kR11_EAC_GrPixelConfig); |
| 205 GR_STATIC_ASSERT(11 == kASTC_12x12_GrPixelConfig); | 251 GR_STATIC_ASSERT(11 == kASTC_12x12_GrPixelConfig); |
| 206 GR_STATIC_ASSERT(12 == kRGBA_float_GrPixelConfig); | 252 GR_STATIC_ASSERT(12 == kRGBA_float_GrPixelConfig); |
| 207 GR_STATIC_ASSERT(13 == kAlpha_half_GrPixelConfig); | 253 GR_STATIC_ASSERT(13 == kAlpha_half_GrPixelConfig); |
| 208 GR_STATIC_ASSERT(14 == kRGBA_half_GrPixelConfig); | 254 GR_STATIC_ASSERT(14 == kRGBA_half_GrPixelConfig); |
| 209 GR_STATIC_ASSERT(SK_ARRAY_COUNT(kFlags) == kGrPixelConfigCnt); | 255 GR_STATIC_ASSERT(SK_ARRAY_COUNT(kFlags) == kGrPixelConfigCnt); |
| 210 } | 256 } |
| 211 | 257 |
| 212 #endif | 258 #endif |
| OLD | NEW |