| 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 | 
|---|