OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2014 Google Inc. | 2 * Copyright 2014 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "effects/GrPorterDuffXferProcessor.h" | 8 #include "effects/GrPorterDuffXferProcessor.h" |
9 | 9 |
10 #include "GrBlend.h" | 10 #include "GrBlend.h" |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
61 args.fOutputSecondary, args.fInputCol
or, | 61 args.fOutputSecondary, args.fInputCol
or, |
62 args.fInputCoverage); | 62 args.fInputCoverage); |
63 break; | 63 break; |
64 default: | 64 default: |
65 SkFAIL("Unexpected Secondary Output"); | 65 SkFAIL("Unexpected Secondary Output"); |
66 } | 66 } |
67 } | 67 } |
68 | 68 |
69 fsBuilder->codeAppendf("%s = %s * %s;", args.fOutputPrimary, args.fInput
Color, | 69 fsBuilder->codeAppendf("%s = %s * %s;", args.fOutputPrimary, args.fInput
Color, |
70 args.fInputCoverage); | 70 args.fInputCoverage); |
71 if (GrPorterDuffXferProcessor::kCombineWithDst_PrimaryOutputType == xp.p
rimaryOutputType()){ | |
72 fsBuilder->codeAppendf("%s += (vec4(1.0) - %s) * %s;", args.fOutputP
rimary, | |
73 args.fInputCoverage, fsBuilder->dstColor()); | |
74 } | |
75 } | 71 } |
76 | 72 |
77 virtual void setData(const GrGLProgramDataManager&, const GrXferProcessor&)
SK_OVERRIDE {}; | 73 virtual void setData(const GrGLProgramDataManager&, const GrXferProcessor&)
SK_OVERRIDE {}; |
78 | 74 |
79 static void GenKey(const GrProcessor& processor, const GrGLCaps& caps, | 75 static void GenKey(const GrProcessor& processor, const GrGLCaps& caps, |
80 GrProcessorKeyBuilder* b) { | 76 GrProcessorKeyBuilder* b) { |
81 const GrPorterDuffXferProcessor& xp = processor.cast<GrPorterDuffXferPro
cessor>(); | 77 const GrPorterDuffXferProcessor& xp = processor.cast<GrPorterDuffXferPro
cessor>(); |
82 b->add32(xp.primaryOutputType()); | |
83 b->add32(xp.secondaryOutputType()); | 78 b->add32(xp.secondaryOutputType()); |
84 }; | 79 }; |
85 | 80 |
86 private: | 81 private: |
87 typedef GrGLXferProcessor INHERITED; | 82 typedef GrGLXferProcessor INHERITED; |
88 }; | 83 }; |
89 | 84 |
90 /////////////////////////////////////////////////////////////////////////////// | 85 /////////////////////////////////////////////////////////////////////////////// |
91 | 86 |
92 GrPorterDuffXferProcessor::GrPorterDuffXferProcessor(GrBlendCoeff srcBlend, GrBl
endCoeff dstBlend, | 87 GrPorterDuffXferProcessor::GrPorterDuffXferProcessor(GrBlendCoeff srcBlend, GrBl
endCoeff dstBlend, |
93 GrColor constant) | 88 GrColor constant) |
94 : fSrcBlend(srcBlend) | 89 : fSrcBlend(srcBlend) |
95 , fDstBlend(dstBlend) | 90 , fDstBlend(dstBlend) |
96 , fBlendConstant(constant) | 91 , fBlendConstant(constant) |
97 , fPrimaryOutputType(kModulate_PrimaryOutputType) | |
98 , fSecondaryOutputType(kNone_SecondaryOutputType) { | 92 , fSecondaryOutputType(kNone_SecondaryOutputType) { |
99 this->initClassID<GrPorterDuffXferProcessor>(); | 93 this->initClassID<GrPorterDuffXferProcessor>(); |
100 } | 94 } |
101 | 95 |
102 GrPorterDuffXferProcessor::~GrPorterDuffXferProcessor() { | 96 GrPorterDuffXferProcessor::~GrPorterDuffXferProcessor() { |
103 } | 97 } |
104 | 98 |
105 void GrPorterDuffXferProcessor::getGLProcessorKey(const GrGLCaps& caps, | 99 void GrPorterDuffXferProcessor::getGLProcessorKey(const GrGLCaps& caps, |
106 GrProcessorKeyBuilder* b) cons
t { | 100 GrProcessorKeyBuilder* b) cons
t { |
107 GrGLPorterDuffXferProcessor::GenKey(*this, caps, b); | 101 GrGLPorterDuffXferProcessor::GenKey(*this, caps, b); |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
151 fDstBlend = (GrBlendCoeff)GrGpu::kIS2C_GrBlendCoeff; | 145 fDstBlend = (GrBlendCoeff)GrGpu::kIS2C_GrBlendCoeff; |
152 } else if (kSA_GrBlendCoeff == fDstBlend) { | 146 } else if (kSA_GrBlendCoeff == fDstBlend) { |
153 // SA dst coeff becomes 1-(1-SA)*coverage when dst is partially
covered. | 147 // SA dst coeff becomes 1-(1-SA)*coverage when dst is partially
covered. |
154 fSecondaryOutputType = kCoverageISA_SecondaryOutputType; | 148 fSecondaryOutputType = kCoverageISA_SecondaryOutputType; |
155 fDstBlend = (GrBlendCoeff)GrGpu::kIS2C_GrBlendCoeff; | 149 fDstBlend = (GrBlendCoeff)GrGpu::kIS2C_GrBlendCoeff; |
156 } else if (kSC_GrBlendCoeff == fDstBlend) { | 150 } else if (kSC_GrBlendCoeff == fDstBlend) { |
157 // SA dst coeff becomes 1-(1-SA)*coverage when dst is partially
covered. | 151 // SA dst coeff becomes 1-(1-SA)*coverage when dst is partially
covered. |
158 fSecondaryOutputType = kCoverageISC_SecondaryOutputType; | 152 fSecondaryOutputType = kCoverageISC_SecondaryOutputType; |
159 fDstBlend = (GrBlendCoeff)GrGpu::kIS2C_GrBlendCoeff; | 153 fDstBlend = (GrBlendCoeff)GrGpu::kIS2C_GrBlendCoeff; |
160 } | 154 } |
161 } else if (readsDst && | |
162 kOne_GrBlendCoeff == fSrcBlend && | |
163 kZero_GrBlendCoeff == fDstBlend) { | |
164 fPrimaryOutputType = kCombineWithDst_PrimaryOutputType; | |
165 } | 155 } |
166 } | 156 } |
167 } | 157 } |
168 | 158 |
169 GrXferProcessor::OptFlags | 159 GrXferProcessor::OptFlags |
170 GrPorterDuffXferProcessor::internalGetOptimizations(const GrProcOptInfo& colorPO
I, | 160 GrPorterDuffXferProcessor::internalGetOptimizations(const GrProcOptInfo& colorPO
I, |
171 const GrProcOptInfo& coverag
ePOI, | 161 const GrProcOptInfo& coverag
ePOI, |
172 bool isCoverageDrawing, | 162 bool isCoverageDrawing, |
173 bool colorWriteDisabled, | 163 bool colorWriteDisabled, |
174 bool doesStencilWrite, | 164 bool doesStencilWrite, |
(...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
549 } while (GrBlendCoeffRefsSrc(src)); | 539 } while (GrBlendCoeffRefsSrc(src)); |
550 | 540 |
551 GrBlendCoeff dst; | 541 GrBlendCoeff dst; |
552 do { | 542 do { |
553 dst = GrBlendCoeff(random->nextRangeU(kFirstPublicGrBlendCoeff, kLastPub
licGrBlendCoeff)); | 543 dst = GrBlendCoeff(random->nextRangeU(kFirstPublicGrBlendCoeff, kLastPub
licGrBlendCoeff)); |
554 } while (GrBlendCoeffRefsDst(dst)); | 544 } while (GrBlendCoeffRefsDst(dst)); |
555 | 545 |
556 return GrPorterDuffXPFactory::Create(src, dst); | 546 return GrPorterDuffXPFactory::Create(src, dst); |
557 } | 547 } |
558 | 548 |
OLD | NEW |