| 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" |
| 11 #include "GrDrawTargetCaps.h" | 11 #include "GrDrawTargetCaps.h" |
| 12 #include "GrInvariantOutput.h" | |
| 13 #include "GrProcessor.h" | 12 #include "GrProcessor.h" |
| 14 #include "GrProcOptInfo.h" | 13 #include "GrProcOptInfo.h" |
| 15 #include "gl/GrGLXferProcessor.h" | 14 #include "gl/GrGLXferProcessor.h" |
| 16 #include "gl/builders/GrGLFragmentShaderBuilder.h" | 15 #include "gl/builders/GrGLFragmentShaderBuilder.h" |
| 17 #include "gl/builders/GrGLProgramBuilder.h" | 16 #include "gl/builders/GrGLProgramBuilder.h" |
| 18 | 17 |
| 19 class GrGLCoverageSetOpXP : public GrGLXferProcessor { | 18 class GrGLCoverageSetOpXP : public GrGLXferProcessor { |
| 20 public: | 19 public: |
| 21 GrGLCoverageSetOpXP(const GrProcessor&) {} | 20 GrGLCoverageSetOpXP(const GrProcessor&) {} |
| 22 | 21 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 61 GrGLCoverageSetOpXP::GenKey(*this, caps, b); | 60 GrGLCoverageSetOpXP::GenKey(*this, caps, b); |
| 62 } | 61 } |
| 63 | 62 |
| 64 GrGLXferProcessor* GrCoverageSetOpXP::createGLInstance() const { | 63 GrGLXferProcessor* GrCoverageSetOpXP::createGLInstance() const { |
| 65 return SkNEW_ARGS(GrGLCoverageSetOpXP, (*this)); | 64 return SkNEW_ARGS(GrGLCoverageSetOpXP, (*this)); |
| 66 } | 65 } |
| 67 | 66 |
| 68 GrXferProcessor::OptFlags | 67 GrXferProcessor::OptFlags |
| 69 GrCoverageSetOpXP::getOptimizations(const GrProcOptInfo& colorPOI, | 68 GrCoverageSetOpXP::getOptimizations(const GrProcOptInfo& colorPOI, |
| 70 const GrProcOptInfo& coveragePOI, | 69 const GrProcOptInfo& coveragePOI, |
| 71 bool colorWriteDisabled, | |
| 72 bool doesStencilWrite, | 70 bool doesStencilWrite, |
| 73 GrColor* color, | 71 GrColor* color, |
| 74 const GrDrawTargetCaps& caps) { | 72 const GrDrawTargetCaps& caps) { |
| 75 // We never look at the color input | 73 // We never look at the color input |
| 76 return GrXferProcessor::kIgnoreColor_OptFlag; | 74 return GrXferProcessor::kIgnoreColor_OptFlag; |
| 77 } | 75 } |
| 78 | 76 |
| 79 void GrCoverageSetOpXP::getBlendInfo(GrXferProcessor::BlendInfo* blendInfo) cons
t { | 77 void GrCoverageSetOpXP::getBlendInfo(GrXferProcessor::BlendInfo* blendInfo) cons
t { |
| 80 switch (fRegionOp) { | 78 switch (fRegionOp) { |
| 81 case SkRegion::kReplace_Op: | 79 case SkRegion::kReplace_Op: |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 181 } | 179 } |
| 182 } | 180 } |
| 183 | 181 |
| 184 GrXferProcessor* GrCoverageSetOpXPFactory::createXferProcessor(const GrProcOptIn
fo& /* colorPOI*/, | 182 GrXferProcessor* GrCoverageSetOpXPFactory::createXferProcessor(const GrProcOptIn
fo& /* colorPOI*/, |
| 185 const GrProcOptIn
fo& covPOI) const { | 183 const GrProcOptIn
fo& covPOI) const { |
| 186 return GrCoverageSetOpXP::Create(fRegionOp, fInvertCoverage); | 184 return GrCoverageSetOpXP::Create(fRegionOp, fInvertCoverage); |
| 187 } | 185 } |
| 188 | 186 |
| 189 void GrCoverageSetOpXPFactory::getInvariantOutput(const GrProcOptInfo& colorPOI, | 187 void GrCoverageSetOpXPFactory::getInvariantOutput(const GrProcOptInfo& colorPOI, |
| 190 const GrProcOptInfo& coverageP
OI, | 188 const GrProcOptInfo& coverageP
OI, |
| 191 bool colorWriteDisabled, | |
| 192 GrXPFactory::InvariantOutput*
output) const { | 189 GrXPFactory::InvariantOutput*
output) const { |
| 193 if (SkRegion::kReplace_Op == fRegionOp) { | 190 if (SkRegion::kReplace_Op == fRegionOp) { |
| 194 if (coveragePOI.isSolidWhite()) { | 191 if (coveragePOI.isSolidWhite()) { |
| 195 output->fBlendedColor = GrColor_WHITE; | 192 output->fBlendedColor = GrColor_WHITE; |
| 196 output->fBlendedColorFlags = kRGBA_GrColorComponentFlags; | 193 output->fBlendedColorFlags = kRGBA_GrColorComponentFlags; |
| 197 } else { | 194 } else { |
| 198 output->fBlendedColorFlags = 0; | 195 output->fBlendedColorFlags = 0; |
| 199 } | 196 } |
| 200 | 197 |
| 201 if (coveragePOI.readsDst()) { | 198 if (coveragePOI.readsDst()) { |
| 202 output->fWillBlendWithDst = true; | 199 output->fWillBlendWithDst = true; |
| 203 } else { | 200 } else { |
| 204 output->fWillBlendWithDst = false; | 201 output->fWillBlendWithDst = false; |
| 205 } | 202 } |
| 206 } else { | 203 } else { |
| 207 output->fBlendedColorFlags = 0; | 204 output->fBlendedColorFlags = 0; |
| 208 output->fWillBlendWithDst = true; | 205 output->fWillBlendWithDst = true; |
| 209 } | 206 } |
| 210 } | 207 } |
| 211 | 208 |
| 209 bool GrCoverageSetOpXPFactory::willReadDst(const GrProcOptInfo& colorPOI, |
| 210 const GrProcOptInfo& coveragePOI) con
st { |
| 211 return coveragePOI.readsDst(); |
| 212 } |
| 213 |
| 212 GR_DEFINE_XP_FACTORY_TEST(GrCoverageSetOpXPFactory); | 214 GR_DEFINE_XP_FACTORY_TEST(GrCoverageSetOpXPFactory); |
| 213 | 215 |
| 214 GrXPFactory* GrCoverageSetOpXPFactory::TestCreate(SkRandom* random, | 216 GrXPFactory* GrCoverageSetOpXPFactory::TestCreate(SkRandom* random, |
| 215 GrContext*, | 217 GrContext*, |
| 216 const GrDrawTargetCaps&, | 218 const GrDrawTargetCaps&, |
| 217 GrTexture*[]) { | 219 GrTexture*[]) { |
| 218 SkRegion::Op regionOp = SkRegion::Op(random->nextULessThan(SkRegion::kLastOp
+ 1)); | 220 SkRegion::Op regionOp = SkRegion::Op(random->nextULessThan(SkRegion::kLastOp
+ 1)); |
| 219 bool invertCoverage = random->nextBool(); | 221 bool invertCoverage = random->nextBool(); |
| 220 return GrCoverageSetOpXPFactory::Create(regionOp, invertCoverage); | 222 return GrCoverageSetOpXPFactory::Create(regionOp, invertCoverage); |
| 221 } | 223 } |
| 222 | 224 |
| OLD | NEW |