Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(238)

Side by Side Diff: include/gpu/GrColor.h

Issue 1334293003: Create fragment processor for performing input color blend with child processor (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: working Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698