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 |