OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2014 Google Inc. | 3 * Copyright 2014 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 #include "effects/GrCoverageSetOpXP.h" | 9 #include "effects/GrCoverageSetOpXP.h" |
10 #include "GrColor.h" | 10 #include "GrColor.h" |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
179 default: | 179 default: |
180 return NULL; | 180 return NULL; |
181 } | 181 } |
182 } | 182 } |
183 | 183 |
184 GrXferProcessor* GrCoverageSetOpXPFactory::createXferProcessor(const GrProcOptIn
fo& /* colorPOI*/, | 184 GrXferProcessor* GrCoverageSetOpXPFactory::createXferProcessor(const GrProcOptIn
fo& /* colorPOI*/, |
185 const GrProcOptIn
fo& covPOI) const { | 185 const GrProcOptIn
fo& covPOI) const { |
186 return GrCoverageSetOpXP::Create(fRegionOp, fInvertCoverage); | 186 return GrCoverageSetOpXP::Create(fRegionOp, fInvertCoverage); |
187 } | 187 } |
188 | 188 |
189 bool GrCoverageSetOpXPFactory::willBlendWithDst(const GrProcOptInfo& colorPOI, | 189 void GrCoverageSetOpXPFactory::getInvariantOutput(const GrProcOptInfo& colorPOI, |
190 const GrProcOptInfo& coveragePOI
, | 190 const GrProcOptInfo& coverageP
OI, |
191 bool colorWriteDisabled) const { | 191 bool colorWriteDisabled, |
192 // TODO: once all SkXferEffects are XP's then we will never reads dst here s
ince only XP's | 192 GrXPFactory::InvariantOutput*
output) const { |
193 // will readDst and this XP doesn't read dst. | 193 if (SkRegion::kReplace_Op == fRegionOp) { |
194 if (coveragePOI.readsDst()) { | 194 if (coveragePOI.isSolidWhite()) { |
195 return true; | 195 output->fBlendedColor = GrColor_WHITE; |
| 196 output->fBlendedColorFlags = kRGBA_GrColorComponentFlags; |
| 197 } else { |
| 198 output->fBlendedColorFlags = 0; |
| 199 } |
| 200 |
| 201 if (coveragePOI.readsDst()) { |
| 202 output->fWillBlendWithDst = true; |
| 203 } else { |
| 204 output->fWillBlendWithDst = false; |
| 205 } |
| 206 } else { |
| 207 output->fBlendedColorFlags = 0; |
| 208 output->fWillBlendWithDst = true; |
196 } | 209 } |
197 | |
198 // Besides Replace all other SkRegion ops will either have a src coeff that
references dst or a | |
199 // non zero dst coeff | |
200 return SkRegion::kReplace_Op != fRegionOp; | |
201 } | |
202 | |
203 bool GrCoverageSetOpXPFactory::getOpaqueAndKnownColor(const GrProcOptInfo& color
POI, | |
204 const GrProcOptInfo& cover
agePOI, | |
205 GrColor* solidColor, | |
206 uint32_t* solidColorKnownC
omponents) const { | |
207 if (!coveragePOI.isSolidWhite()) { | |
208 return false; | |
209 } | |
210 | |
211 SkASSERT((NULL == solidColor) == (NULL == solidColorKnownComponents)); | |
212 | |
213 bool opaque = SkRegion::kReplace_Op == fRegionOp; | |
214 if (solidColor) { | |
215 if (opaque) { | |
216 *solidColor = GrColor_WHITE; | |
217 *solidColorKnownComponents = kRGBA_GrColorComponentFlags; | |
218 } else { | |
219 solidColorKnownComponents = 0; | |
220 } | |
221 } | |
222 return opaque; | |
223 } | 210 } |
224 | 211 |
225 GR_DEFINE_XP_FACTORY_TEST(GrCoverageSetOpXPFactory); | 212 GR_DEFINE_XP_FACTORY_TEST(GrCoverageSetOpXPFactory); |
226 | 213 |
227 GrXPFactory* GrCoverageSetOpXPFactory::TestCreate(SkRandom* random, | 214 GrXPFactory* GrCoverageSetOpXPFactory::TestCreate(SkRandom* random, |
228 GrContext*, | 215 GrContext*, |
229 const GrDrawTargetCaps&, | 216 const GrDrawTargetCaps&, |
230 GrTexture*[]) { | 217 GrTexture*[]) { |
231 SkRegion::Op regionOp = SkRegion::Op(random->nextULessThan(SkRegion::kLastOp
+ 1)); | 218 SkRegion::Op regionOp = SkRegion::Op(random->nextULessThan(SkRegion::kLastOp
+ 1)); |
232 bool invertCoverage = random->nextBool(); | 219 bool invertCoverage = random->nextBool(); |
233 return GrCoverageSetOpXPFactory::Create(regionOp, invertCoverage); | 220 return GrCoverageSetOpXPFactory::Create(regionOp, invertCoverage); |
234 } | 221 } |
235 | 222 |
OLD | NEW |