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

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: fix 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
« no previous file with comments | « include/gpu/GrBlend.h ('k') | include/gpu/GrInvariantOutput.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 }
153
118 /** Returns an unpremuled version of the GrColor. */ 154 /** Returns an unpremuled version of the GrColor. */
119 static inline GrColor GrUnPreMulColor(GrColor color) { 155 static inline GrColor GrUnpremulColor(GrColor color) {
156 GrColorIsPMAssert(color);
120 unsigned r = GrColorUnpackR(color); 157 unsigned r = GrColorUnpackR(color);
121 unsigned g = GrColorUnpackG(color); 158 unsigned g = GrColorUnpackG(color);
122 unsigned b = GrColorUnpackB(color); 159 unsigned b = GrColorUnpackB(color);
123 unsigned a = GrColorUnpackA(color); 160 unsigned a = GrColorUnpackA(color);
124 SkPMColor colorPM = SkPackARGB32(a, r, g, b); 161 SkPMColor colorPM = SkPackARGB32(a, r, g, b);
125 SkColor colorUPM = SkUnPreMultiply::PMColorToColor(colorPM); 162 SkColor colorUPM = SkUnPreMultiply::PMColorToColor(colorPM);
126 163
127 r = SkColorGetR(colorUPM); 164 r = SkColorGetR(colorUPM);
128 g = SkColorGetG(colorUPM); 165 g = SkColorGetG(colorUPM);
129 b = SkColorGetB(colorUPM); 166 b = SkColorGetB(colorUPM);
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 GR_STATIC_ASSERT(9 == kLATC_GrPixelConfig); 240 GR_STATIC_ASSERT(9 == kLATC_GrPixelConfig);
204 GR_STATIC_ASSERT(10 == kR11_EAC_GrPixelConfig); 241 GR_STATIC_ASSERT(10 == kR11_EAC_GrPixelConfig);
205 GR_STATIC_ASSERT(11 == kASTC_12x12_GrPixelConfig); 242 GR_STATIC_ASSERT(11 == kASTC_12x12_GrPixelConfig);
206 GR_STATIC_ASSERT(12 == kRGBA_float_GrPixelConfig); 243 GR_STATIC_ASSERT(12 == kRGBA_float_GrPixelConfig);
207 GR_STATIC_ASSERT(13 == kAlpha_half_GrPixelConfig); 244 GR_STATIC_ASSERT(13 == kAlpha_half_GrPixelConfig);
208 GR_STATIC_ASSERT(14 == kRGBA_half_GrPixelConfig); 245 GR_STATIC_ASSERT(14 == kRGBA_half_GrPixelConfig);
209 GR_STATIC_ASSERT(SK_ARRAY_COUNT(kFlags) == kGrPixelConfigCnt); 246 GR_STATIC_ASSERT(SK_ARRAY_COUNT(kFlags) == kGrPixelConfigCnt);
210 } 247 }
211 248
212 #endif 249 #endif
OLDNEW
« no previous file with comments | « include/gpu/GrBlend.h ('k') | include/gpu/GrInvariantOutput.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698