OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 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/GrCustomXfermode.h" | 8 #include "effects/GrCustomXfermode.h" |
9 #include "effects/GrCustomXfermodePriv.h" | 9 #include "effects/GrCustomXfermodePriv.h" |
10 | 10 |
(...skipping 490 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
501 | 501 |
502 return SkNEW_ARGS(GrCustomXferFP, (static_cast<SkXfermode::Mode>(mode), text
ures[0])); | 502 return SkNEW_ARGS(GrCustomXferFP, (static_cast<SkXfermode::Mode>(mode), text
ures[0])); |
503 } | 503 } |
504 | 504 |
505 /////////////////////////////////////////////////////////////////////////////// | 505 /////////////////////////////////////////////////////////////////////////////// |
506 // Xfer Processor | 506 // Xfer Processor |
507 /////////////////////////////////////////////////////////////////////////////// | 507 /////////////////////////////////////////////////////////////////////////////// |
508 | 508 |
509 class CustomXP : public GrXferProcessor { | 509 class CustomXP : public GrXferProcessor { |
510 public: | 510 public: |
511 static GrXferProcessor* Create(SkXfermode::Mode mode, const GrDeviceCoordTex
ture* dstCopy, | 511 static GrXferProcessor* Create(SkXfermode::Mode mode, const DstTexture* dstT
exture, |
512 bool willReadDstColor) { | 512 bool willReadDstColor) { |
513 if (!GrCustomXfermode::IsSupportedMode(mode)) { | 513 if (!GrCustomXfermode::IsSupportedMode(mode)) { |
514 return NULL; | 514 return NULL; |
515 } else { | 515 } else { |
516 return SkNEW_ARGS(CustomXP, (mode, dstCopy, willReadDstColor)); | 516 return SkNEW_ARGS(CustomXP, (mode, dstTexture, willReadDstColor)); |
517 } | 517 } |
518 } | 518 } |
519 | 519 |
520 ~CustomXP() override {}; | 520 ~CustomXP() override {}; |
521 | 521 |
522 const char* name() const override { return "Custom Xfermode"; } | 522 const char* name() const override { return "Custom Xfermode"; } |
523 | 523 |
524 GrGLXferProcessor* createGLInstance() const override; | 524 GrGLXferProcessor* createGLInstance() const override; |
525 | 525 |
526 bool hasSecondaryOutput() const override { return false; } | 526 bool hasSecondaryOutput() const override { return false; } |
527 | 527 |
528 SkXfermode::Mode mode() const { return fMode; } | 528 SkXfermode::Mode mode() const { return fMode; } |
529 bool hasHWBlendEquation() const { return -1 != static_cast<int>(fHWBlendEqua
tion); } | 529 bool hasHWBlendEquation() const { return -1 != static_cast<int>(fHWBlendEqua
tion); } |
530 | 530 |
531 GrBlendEquation hwBlendEquation() const { | 531 GrBlendEquation hwBlendEquation() const { |
532 SkASSERT(this->hasHWBlendEquation()); | 532 SkASSERT(this->hasHWBlendEquation()); |
533 return fHWBlendEquation; | 533 return fHWBlendEquation; |
534 } | 534 } |
535 | 535 |
536 private: | 536 private: |
537 CustomXP(SkXfermode::Mode mode, const GrDeviceCoordTexture* dstCopy, bool wi
llReadDstColor); | 537 CustomXP(SkXfermode::Mode mode, const DstTexture*, bool willReadDstColor); |
538 | 538 |
539 GrXferProcessor::OptFlags onGetOptimizations(const GrProcOptInfo& colorPOI, | 539 GrXferProcessor::OptFlags onGetOptimizations(const GrProcOptInfo& colorPOI, |
540 const GrProcOptInfo& coveragePO
I, | 540 const GrProcOptInfo& coveragePO
I, |
541 bool doesStencilWrite, | 541 bool doesStencilWrite, |
542 GrColor* overrideColor, | 542 GrColor* overrideColor, |
543 const GrCaps& caps) override; | 543 const GrCaps& caps) override; |
544 | 544 |
545 void onGetGLProcessorKey(const GrGLSLCaps& caps, GrProcessorKeyBuilder* b) c
onst override; | 545 void onGetGLProcessorKey(const GrGLSLCaps& caps, GrProcessorKeyBuilder* b) c
onst override; |
546 | 546 |
547 bool onWillNeedXferBarrier(const GrRenderTarget* rt, | 547 bool onWillNeedXferBarrier(const GrRenderTarget* rt, |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
619 } | 619 } |
620 } | 620 } |
621 | 621 |
622 void onSetData(const GrGLProgramDataManager&, const GrXferProcessor&) overri
de {} | 622 void onSetData(const GrGLProgramDataManager&, const GrXferProcessor&) overri
de {} |
623 | 623 |
624 typedef GrGLFragmentProcessor INHERITED; | 624 typedef GrGLFragmentProcessor INHERITED; |
625 }; | 625 }; |
626 | 626 |
627 /////////////////////////////////////////////////////////////////////////////// | 627 /////////////////////////////////////////////////////////////////////////////// |
628 | 628 |
629 CustomXP::CustomXP(SkXfermode::Mode mode, const GrDeviceCoordTexture* dstCopy, | 629 CustomXP::CustomXP(SkXfermode::Mode mode, const DstTexture* dstTexture, bool wil
lReadDstColor) |
630 bool willReadDstColor) | 630 : INHERITED(dstTexture, willReadDstColor), |
631 : INHERITED(dstCopy, willReadDstColor), | |
632 fMode(mode), | 631 fMode(mode), |
633 fHWBlendEquation(static_cast<GrBlendEquation>(-1)) { | 632 fHWBlendEquation(static_cast<GrBlendEquation>(-1)) { |
634 this->initClassID<CustomXP>(); | 633 this->initClassID<CustomXP>(); |
635 } | 634 } |
636 | 635 |
637 void CustomXP::onGetGLProcessorKey(const GrGLSLCaps& caps, GrProcessorKeyBuilder
* b) const { | 636 void CustomXP::onGetGLProcessorKey(const GrGLSLCaps& caps, GrProcessorKeyBuilder
* b) const { |
638 GLCustomXP::GenKey(*this, caps, b); | 637 GLCustomXP::GenKey(*this, caps, b); |
639 } | 638 } |
640 | 639 |
641 GrGLXferProcessor* CustomXP::createGLInstance() const { | 640 GrGLXferProcessor* CustomXP::createGLInstance() const { |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
783 | 782 |
784 GrCustomXPFactory::GrCustomXPFactory(SkXfermode::Mode mode) | 783 GrCustomXPFactory::GrCustomXPFactory(SkXfermode::Mode mode) |
785 : fMode(mode) { | 784 : fMode(mode) { |
786 this->initClassID<GrCustomXPFactory>(); | 785 this->initClassID<GrCustomXPFactory>(); |
787 } | 786 } |
788 | 787 |
789 GrXferProcessor* | 788 GrXferProcessor* |
790 GrCustomXPFactory::onCreateXferProcessor(const GrCaps& caps, | 789 GrCustomXPFactory::onCreateXferProcessor(const GrCaps& caps, |
791 const GrProcOptInfo& colorPOI, | 790 const GrProcOptInfo& colorPOI, |
792 const GrProcOptInfo& coveragePOI, | 791 const GrProcOptInfo& coveragePOI, |
793 const GrDeviceCoordTexture* dstCopy) co
nst { | 792 const DstTexture* dstTexture) const { |
794 return CustomXP::Create(fMode, dstCopy, this->willReadDstColor(caps, colorPO
I, coveragePOI)); | 793 return CustomXP::Create(fMode, dstTexture, this->willReadDstColor(caps, colo
rPOI, coveragePOI)); |
795 } | 794 } |
796 | 795 |
797 bool GrCustomXPFactory::willReadDstColor(const GrCaps& caps, | 796 bool GrCustomXPFactory::willReadDstColor(const GrCaps& caps, |
798 const GrProcOptInfo& colorPOI, | 797 const GrProcOptInfo& colorPOI, |
799 const GrProcOptInfo& coveragePOI) const
{ | 798 const GrProcOptInfo& coveragePOI) const
{ |
800 if (!caps.advancedBlendEquationSupport()) { | 799 if (!caps.advancedBlendEquationSupport()) { |
801 // No hardware support for advanced blend equations; we will need to do
it in the shader. | 800 // No hardware support for advanced blend equations; we will need to do
it in the shader. |
802 return true; | 801 return true; |
803 } | 802 } |
804 if (coveragePOI.isFourChannelOutput()) { | 803 if (coveragePOI.isFourChannelOutput()) { |
(...skipping 13 matching lines...) Expand all Loading... |
818 GR_DEFINE_XP_FACTORY_TEST(GrCustomXPFactory); | 817 GR_DEFINE_XP_FACTORY_TEST(GrCustomXPFactory); |
819 GrXPFactory* GrCustomXPFactory::TestCreate(SkRandom* rand, | 818 GrXPFactory* GrCustomXPFactory::TestCreate(SkRandom* rand, |
820 GrContext*, | 819 GrContext*, |
821 const GrCaps&, | 820 const GrCaps&, |
822 GrTexture*[]) { | 821 GrTexture*[]) { |
823 int mode = rand->nextRangeU(SkXfermode::kLastCoeffMode + 1, SkXfermode::kLas
tSeparableMode); | 822 int mode = rand->nextRangeU(SkXfermode::kLastCoeffMode + 1, SkXfermode::kLas
tSeparableMode); |
824 | 823 |
825 return SkNEW_ARGS(GrCustomXPFactory, (static_cast<SkXfermode::Mode>(mode))); | 824 return SkNEW_ARGS(GrCustomXPFactory, (static_cast<SkXfermode::Mode>(mode))); |
826 } | 825 } |
827 | 826 |
OLD | NEW |