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 |