| 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 17 matching lines...) Expand all Loading... |
| 28 find that only 1, ISA, and ISC produce the correct destination when applied
to S' and D. | 28 find that only 1, ISA, and ISC produce the correct destination when applied
to S' and D. |
| 29 */ | 29 */ |
| 30 return kOne_GrBlendCoeff == dstCoeff || | 30 return kOne_GrBlendCoeff == dstCoeff || |
| 31 kISA_GrBlendCoeff == dstCoeff || | 31 kISA_GrBlendCoeff == dstCoeff || |
| 32 kISC_GrBlendCoeff == dstCoeff; | 32 kISC_GrBlendCoeff == dstCoeff; |
| 33 } | 33 } |
| 34 | 34 |
| 35 class PorterDuffXferProcessor : public GrXferProcessor { | 35 class PorterDuffXferProcessor : public GrXferProcessor { |
| 36 public: | 36 public: |
| 37 static GrXferProcessor* Create(GrBlendCoeff srcBlend, GrBlendCoeff dstBlend, | 37 static GrXferProcessor* Create(GrBlendCoeff srcBlend, GrBlendCoeff dstBlend, |
| 38 GrColor constant, const GrDeviceCoordTexture*
dstCopy, | 38 GrColor constant, const DstTexture* dstTextur
e, |
| 39 bool willReadDstColor) { | 39 bool willReadDstColor) { |
| 40 return SkNEW_ARGS(PorterDuffXferProcessor, (srcBlend, dstBlend, constant
, dstCopy, | 40 return SkNEW_ARGS(PorterDuffXferProcessor, (srcBlend, dstBlend, constant
, dstTexture, |
| 41 willReadDstColor)); | 41 willReadDstColor)); |
| 42 } | 42 } |
| 43 | 43 |
| 44 ~PorterDuffXferProcessor() override; | 44 ~PorterDuffXferProcessor() override; |
| 45 | 45 |
| 46 const char* name() const override { return "Porter Duff"; } | 46 const char* name() const override { return "Porter Duff"; } |
| 47 | 47 |
| 48 GrGLXferProcessor* createGLInstance() const override; | 48 GrGLXferProcessor* createGLInstance() const override; |
| 49 | 49 |
| 50 bool hasSecondaryOutput() const override; | 50 bool hasSecondaryOutput() const override; |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 82 }; | 82 }; |
| 83 | 83 |
| 84 PrimaryOutputType primaryOutputType() const { return fPrimaryOutputType; } | 84 PrimaryOutputType primaryOutputType() const { return fPrimaryOutputType; } |
| 85 SecondaryOutputType secondaryOutputType() const { return fSecondaryOutputTyp
e; } | 85 SecondaryOutputType secondaryOutputType() const { return fSecondaryOutputTyp
e; } |
| 86 | 86 |
| 87 GrBlendCoeff getSrcBlend() const { return fSrcBlend; } | 87 GrBlendCoeff getSrcBlend() const { return fSrcBlend; } |
| 88 GrBlendCoeff getDstBlend() const { return fDstBlend; } | 88 GrBlendCoeff getDstBlend() const { return fDstBlend; } |
| 89 | 89 |
| 90 private: | 90 private: |
| 91 PorterDuffXferProcessor(GrBlendCoeff srcBlend, GrBlendCoeff dstBlend, GrColo
r constant, | 91 PorterDuffXferProcessor(GrBlendCoeff srcBlend, GrBlendCoeff dstBlend, GrColo
r constant, |
| 92 const GrDeviceCoordTexture* dstCopy, bool willReadDs
tColor); | 92 const DstTexture*, bool willReadDstColor); |
| 93 | 93 |
| 94 GrXferProcessor::OptFlags onGetOptimizations(const GrProcOptInfo& colorPOI, | 94 GrXferProcessor::OptFlags onGetOptimizations(const GrProcOptInfo& colorPOI, |
| 95 const GrProcOptInfo& coveragePO
I, | 95 const GrProcOptInfo& coveragePO
I, |
| 96 bool doesStencilWrite, | 96 bool doesStencilWrite, |
| 97 GrColor* overrideColor, | 97 GrColor* overrideColor, |
| 98 const GrCaps& caps) override; | 98 const GrCaps& caps) override; |
| 99 | 99 |
| 100 void onGetGLProcessorKey(const GrGLSLCaps& caps, GrProcessorKeyBuilder* b) c
onst override; | 100 void onGetGLProcessorKey(const GrGLSLCaps& caps, GrProcessorKeyBuilder* b) c
onst override; |
| 101 | 101 |
| 102 void onGetBlendInfo(GrXferProcessor::BlendInfo* blendInfo) const override { | 102 void onGetBlendInfo(GrXferProcessor::BlendInfo* blendInfo) const override { |
| (...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 270 void onSetData(const GrGLProgramDataManager&, const GrXferProcessor&) overri
de {}; | 270 void onSetData(const GrGLProgramDataManager&, const GrXferProcessor&) overri
de {}; |
| 271 | 271 |
| 272 typedef GrGLXferProcessor INHERITED; | 272 typedef GrGLXferProcessor INHERITED; |
| 273 }; | 273 }; |
| 274 | 274 |
| 275 /////////////////////////////////////////////////////////////////////////////// | 275 /////////////////////////////////////////////////////////////////////////////// |
| 276 | 276 |
| 277 PorterDuffXferProcessor::PorterDuffXferProcessor(GrBlendCoeff srcBlend, | 277 PorterDuffXferProcessor::PorterDuffXferProcessor(GrBlendCoeff srcBlend, |
| 278 GrBlendCoeff dstBlend, | 278 GrBlendCoeff dstBlend, |
| 279 GrColor constant, | 279 GrColor constant, |
| 280 const GrDeviceCoordTexture* dst
Copy, | 280 const DstTexture* dstTexture, |
| 281 bool willReadDstColor) | 281 bool willReadDstColor) |
| 282 : INHERITED(dstCopy, willReadDstColor) | 282 : INHERITED(dstTexture, willReadDstColor) |
| 283 , fSrcBlend(srcBlend) | 283 , fSrcBlend(srcBlend) |
| 284 , fDstBlend(dstBlend) | 284 , fDstBlend(dstBlend) |
| 285 , fBlendConstant(constant) | 285 , fBlendConstant(constant) |
| 286 , fPrimaryOutputType(kModulate_PrimaryOutputType) | 286 , fPrimaryOutputType(kModulate_PrimaryOutputType) |
| 287 , fSecondaryOutputType(kNone_SecondaryOutputType) { | 287 , fSecondaryOutputType(kNone_SecondaryOutputType) { |
| 288 this->initClassID<PorterDuffXferProcessor>(); | 288 this->initClassID<PorterDuffXferProcessor>(); |
| 289 } | 289 } |
| 290 | 290 |
| 291 PorterDuffXferProcessor::~PorterDuffXferProcessor() { | 291 PorterDuffXferProcessor::~PorterDuffXferProcessor() { |
| 292 } | 292 } |
| (...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 669 } | 669 } |
| 670 default: | 670 default: |
| 671 return NULL; | 671 return NULL; |
| 672 } | 672 } |
| 673 } | 673 } |
| 674 | 674 |
| 675 GrXferProcessor* | 675 GrXferProcessor* |
| 676 GrPorterDuffXPFactory::onCreateXferProcessor(const GrCaps& caps, | 676 GrPorterDuffXPFactory::onCreateXferProcessor(const GrCaps& caps, |
| 677 const GrProcOptInfo& colorPOI, | 677 const GrProcOptInfo& colorPOI, |
| 678 const GrProcOptInfo& covPOI, | 678 const GrProcOptInfo& covPOI, |
| 679 const GrDeviceCoordTexture* dstCopy
) const { | 679 const DstTexture* dstTexture) const
{ |
| 680 if (covPOI.isFourChannelOutput()) { | 680 if (covPOI.isFourChannelOutput()) { |
| 681 return PDLCDXferProcessor::Create(fSrcCoeff, fDstCoeff, colorPOI); | 681 return PDLCDXferProcessor::Create(fSrcCoeff, fDstCoeff, colorPOI); |
| 682 } else { | 682 } else { |
| 683 return PorterDuffXferProcessor::Create(fSrcCoeff, fDstCoeff, 0, dstCopy, | 683 return PorterDuffXferProcessor::Create(fSrcCoeff, fDstCoeff, 0, dstTextu
re, |
| 684 this->willReadDstColor(caps, colo
rPOI, covPOI)); | 684 this->willReadDstColor(caps, colo
rPOI, covPOI)); |
| 685 } | 685 } |
| 686 } | 686 } |
| 687 | 687 |
| 688 bool GrPorterDuffXPFactory::supportsRGBCoverage(GrColor /*knownColor*/, | 688 bool GrPorterDuffXPFactory::supportsRGBCoverage(GrColor /*knownColor*/, |
| 689 uint32_t knownColorFlags) const
{ | 689 uint32_t knownColorFlags) const
{ |
| 690 if (kOne_GrBlendCoeff == fSrcCoeff && kISA_GrBlendCoeff == fDstCoeff && | 690 if (kOne_GrBlendCoeff == fSrcCoeff && kISA_GrBlendCoeff == fDstCoeff && |
| 691 kRGBA_GrColorComponentFlags == knownColorFlags) { | 691 kRGBA_GrColorComponentFlags == knownColorFlags) { |
| 692 return true; | 692 return true; |
| 693 } | 693 } |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 799 GR_DEFINE_XP_FACTORY_TEST(GrPorterDuffXPFactory); | 799 GR_DEFINE_XP_FACTORY_TEST(GrPorterDuffXPFactory); |
| 800 | 800 |
| 801 GrXPFactory* GrPorterDuffXPFactory::TestCreate(SkRandom* random, | 801 GrXPFactory* GrPorterDuffXPFactory::TestCreate(SkRandom* random, |
| 802 GrContext*, | 802 GrContext*, |
| 803 const GrCaps&, | 803 const GrCaps&, |
| 804 GrTexture*[]) { | 804 GrTexture*[]) { |
| 805 SkXfermode::Mode mode = SkXfermode::Mode(random->nextULessThan(SkXfermode::k
LastCoeffMode)); | 805 SkXfermode::Mode mode = SkXfermode::Mode(random->nextULessThan(SkXfermode::k
LastCoeffMode)); |
| 806 return GrPorterDuffXPFactory::Create(mode); | 806 return GrPorterDuffXPFactory::Create(mode); |
| 807 } | 807 } |
| 808 | 808 |
| OLD | NEW |