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 440 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
451 return NULL; | 451 return NULL; |
452 } | 452 } |
453 } | 453 } |
454 | 454 |
455 GrXferProcessor* | 455 GrXferProcessor* |
456 GrPorterDuffXPFactory::onCreateXferProcessor(const GrProcOptInfo& colorPOI, | 456 GrPorterDuffXPFactory::onCreateXferProcessor(const GrProcOptInfo& colorPOI, |
457 const GrProcOptInfo& covPOI, | 457 const GrProcOptInfo& covPOI, |
458 const GrDeviceCoordTexture* dstCopy
) const { | 458 const GrDeviceCoordTexture* dstCopy
) const { |
459 if (!covPOI.isFourChannelOutput()) { | 459 if (!covPOI.isFourChannelOutput()) { |
460 return PorterDuffXferProcessor::Create(fSrcCoeff, fDstCoeff, 0, dstCopy, | 460 return PorterDuffXferProcessor::Create(fSrcCoeff, fDstCoeff, 0, dstCopy, |
461 this->willReadDstColor()); | 461 this->willReadDstColor(colorPOI,
covPOI)); |
462 } else { | 462 } else { |
463 if (this->supportsRGBCoverage(colorPOI.color(), colorPOI.validFlags()))
{ | 463 if (this->supportsRGBCoverage(colorPOI.color(), colorPOI.validFlags()))
{ |
464 SkASSERT(kRGBA_GrColorComponentFlags == colorPOI.validFlags()); | 464 SkASSERT(kRGBA_GrColorComponentFlags == colorPOI.validFlags()); |
465 GrColor blendConstant = GrUnPreMulColor(colorPOI.color()); | 465 GrColor blendConstant = GrUnPreMulColor(colorPOI.color()); |
466 return PorterDuffXferProcessor::Create(kConstC_GrBlendCoeff, kISC_Gr
BlendCoeff, | 466 return PorterDuffXferProcessor::Create(kConstC_GrBlendCoeff, kISC_Gr
BlendCoeff, |
467 blendConstant, dstCopy, | 467 blendConstant, dstCopy, |
468 this->willReadDstColor()); | 468 this->willReadDstColor(colorP
OI, covPOI)); |
469 } else { | 469 } else { |
470 return NULL; | 470 return NULL; |
471 } | 471 } |
472 } | 472 } |
473 } | 473 } |
474 | 474 |
475 bool GrPorterDuffXPFactory::supportsRGBCoverage(GrColor /*knownColor*/, | 475 bool GrPorterDuffXPFactory::supportsRGBCoverage(GrColor /*knownColor*/, |
476 uint32_t knownColorFlags) const
{ | 476 uint32_t knownColorFlags) const
{ |
477 if (kOne_GrBlendCoeff == fSrcCoeff && kISA_GrBlendCoeff == fDstCoeff && | 477 if (kOne_GrBlendCoeff == fSrcCoeff && kISA_GrBlendCoeff == fDstCoeff && |
478 kRGBA_GrColorComponentFlags == knownColorFlags) { | 478 kRGBA_GrColorComponentFlags == knownColorFlags) { |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
580 case kIConstC_GrBlendCoeff: | 580 case kIConstC_GrBlendCoeff: |
581 case kConstA_GrBlendCoeff: | 581 case kConstA_GrBlendCoeff: |
582 case kIConstA_GrBlendCoeff: | 582 case kIConstA_GrBlendCoeff: |
583 output->fBlendedColorFlags = 0; | 583 output->fBlendedColorFlags = 0; |
584 break; | 584 break; |
585 } | 585 } |
586 | 586 |
587 output->fWillBlendWithDst = false; | 587 output->fWillBlendWithDst = false; |
588 } | 588 } |
589 | 589 |
590 bool GrPorterDuffXPFactory::willReadDstColor() const { | 590 bool GrPorterDuffXPFactory::willReadDstColor(const GrProcOptInfo& colorPOI, |
| 591 const GrProcOptInfo& coveragePOI) c
onst { |
591 return false; | 592 return false; |
592 } | 593 } |
593 | 594 |
594 GR_DEFINE_XP_FACTORY_TEST(GrPorterDuffXPFactory); | 595 GR_DEFINE_XP_FACTORY_TEST(GrPorterDuffXPFactory); |
595 | 596 |
596 GrXPFactory* GrPorterDuffXPFactory::TestCreate(SkRandom* random, | 597 GrXPFactory* GrPorterDuffXPFactory::TestCreate(SkRandom* random, |
597 GrContext*, | 598 GrContext*, |
598 const GrDrawTargetCaps&, | 599 const GrDrawTargetCaps&, |
599 GrTexture*[]) { | 600 GrTexture*[]) { |
600 GrBlendCoeff src; | 601 GrBlendCoeff src; |
601 do { | 602 do { |
602 src = GrBlendCoeff(random->nextRangeU(kFirstPublicGrBlendCoeff, kLastPub
licGrBlendCoeff)); | 603 src = GrBlendCoeff(random->nextRangeU(kFirstPublicGrBlendCoeff, kLastPub
licGrBlendCoeff)); |
603 } while (GrBlendCoeffRefsSrc(src)); | 604 } while (GrBlendCoeffRefsSrc(src)); |
604 | 605 |
605 GrBlendCoeff dst; | 606 GrBlendCoeff dst; |
606 do { | 607 do { |
607 dst = GrBlendCoeff(random->nextRangeU(kFirstPublicGrBlendCoeff, kLastPub
licGrBlendCoeff)); | 608 dst = GrBlendCoeff(random->nextRangeU(kFirstPublicGrBlendCoeff, kLastPub
licGrBlendCoeff)); |
608 } while (GrBlendCoeffRefsDst(dst)); | 609 } while (GrBlendCoeffRefsDst(dst)); |
609 | 610 |
610 return GrPorterDuffXPFactory::Create(src, dst); | 611 return GrPorterDuffXPFactory::Create(src, dst); |
611 } | 612 } |
612 | 613 |
OLD | NEW |