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 30 matching lines...) Expand all Loading... |
41 GR_STATIC_ASSERT(kColorBurn_GrBlendEquation == SkXfermode::kColorBurn_Mode +
kOffset); | 41 GR_STATIC_ASSERT(kColorBurn_GrBlendEquation == SkXfermode::kColorBurn_Mode +
kOffset); |
42 GR_STATIC_ASSERT(kHardLight_GrBlendEquation == SkXfermode::kHardLight_Mode +
kOffset); | 42 GR_STATIC_ASSERT(kHardLight_GrBlendEquation == SkXfermode::kHardLight_Mode +
kOffset); |
43 GR_STATIC_ASSERT(kSoftLight_GrBlendEquation == SkXfermode::kSoftLight_Mode +
kOffset); | 43 GR_STATIC_ASSERT(kSoftLight_GrBlendEquation == SkXfermode::kSoftLight_Mode +
kOffset); |
44 GR_STATIC_ASSERT(kDifference_GrBlendEquation == SkXfermode::kDifference_Mode
+ kOffset); | 44 GR_STATIC_ASSERT(kDifference_GrBlendEquation == SkXfermode::kDifference_Mode
+ kOffset); |
45 GR_STATIC_ASSERT(kExclusion_GrBlendEquation == SkXfermode::kExclusion_Mode +
kOffset); | 45 GR_STATIC_ASSERT(kExclusion_GrBlendEquation == SkXfermode::kExclusion_Mode +
kOffset); |
46 GR_STATIC_ASSERT(kMultiply_GrBlendEquation == SkXfermode::kMultiply_Mode + k
Offset); | 46 GR_STATIC_ASSERT(kMultiply_GrBlendEquation == SkXfermode::kMultiply_Mode + k
Offset); |
47 GR_STATIC_ASSERT(kHSLHue_GrBlendEquation == SkXfermode::kHue_Mode + kOffset)
; | 47 GR_STATIC_ASSERT(kHSLHue_GrBlendEquation == SkXfermode::kHue_Mode + kOffset)
; |
48 GR_STATIC_ASSERT(kHSLSaturation_GrBlendEquation == SkXfermode::kSaturation_M
ode + kOffset); | 48 GR_STATIC_ASSERT(kHSLSaturation_GrBlendEquation == SkXfermode::kSaturation_M
ode + kOffset); |
49 GR_STATIC_ASSERT(kHSLColor_GrBlendEquation == SkXfermode::kColor_Mode + kOff
set); | 49 GR_STATIC_ASSERT(kHSLColor_GrBlendEquation == SkXfermode::kColor_Mode + kOff
set); |
50 GR_STATIC_ASSERT(kHSLLuminosity_GrBlendEquation == SkXfermode::kLuminosity_M
ode + kOffset); | 50 GR_STATIC_ASSERT(kHSLLuminosity_GrBlendEquation == SkXfermode::kLuminosity_M
ode + kOffset); |
51 GR_STATIC_ASSERT(kTotalGrBlendEquationCount == SkXfermode::kLastMode + 1 + k
Offset); | 51 GR_STATIC_ASSERT(kGrBlendEquationCnt == SkXfermode::kLastMode + 1 + kOffset)
; |
52 } | 52 } |
53 | 53 |
54 static void hard_light(GrGLFragmentBuilder* fsBuilder, | 54 static void hard_light(GrGLFragmentBuilder* fsBuilder, |
55 const char* final, | 55 const char* final, |
56 const char* src, | 56 const char* src, |
57 const char* dst) { | 57 const char* dst) { |
58 static const char kComponents[] = {'r', 'g', 'b'}; | 58 static const char kComponents[] = {'r', 'g', 'b'}; |
59 for (size_t i = 0; i < SK_ARRAY_COUNT(kComponents); ++i) { | 59 for (size_t i = 0; i < SK_ARRAY_COUNT(kComponents); ++i) { |
60 char component = kComponents[i]; | 60 char component = kComponents[i]; |
61 fsBuilder->codeAppendf("if (2.0 * %s.%c <= %s.a) {", src, component, src
); | 61 fsBuilder->codeAppendf("if (2.0 * %s.%c <= %s.a) {", src, component, src
); |
(...skipping 457 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 kInvalid_GrBlendEquation != fHWBlen
dEquation; } | 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 GrDeviceCoordTexture* dstCopy, bool wi
llReadDstColor); |
538 | 538 |
539 GrXferProcessor::OptFlags onGetOptimizations(const GrProcOptInfo& colorPOI, | 539 GrXferProcessor::OptFlags onGetOptimizations(const GrProcOptInfo& colorPOI, |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 GrDeviceCoordTexture* dstCopy, |
630 bool willReadDstColor) | 630 bool willReadDstColor) |
631 : INHERITED(dstCopy, willReadDstColor), | 631 : INHERITED(dstCopy, willReadDstColor), |
632 fMode(mode), | 632 fMode(mode), |
633 fHWBlendEquation(kInvalid_GrBlendEquation) { | 633 fHWBlendEquation(static_cast<GrBlendEquation>(-1)) { |
634 this->initClassID<CustomXP>(); | 634 this->initClassID<CustomXP>(); |
635 } | 635 } |
636 | 636 |
637 void CustomXP::onGetGLProcessorKey(const GrGLSLCaps& caps, GrProcessorKeyBuilder
* b) const { | 637 void CustomXP::onGetGLProcessorKey(const GrGLSLCaps& caps, GrProcessorKeyBuilder
* b) const { |
638 GLCustomXP::GenKey(*this, caps, b); | 638 GLCustomXP::GenKey(*this, caps, b); |
639 } | 639 } |
640 | 640 |
641 GrGLXferProcessor* CustomXP::createGLInstance() const { | 641 GrGLXferProcessor* CustomXP::createGLInstance() const { |
642 SkASSERT(this->willReadDstColor() != this->hasHWBlendEquation()); | 642 SkASSERT(this->willReadDstColor() != this->hasHWBlendEquation()); |
643 return SkNEW_ARGS(GLCustomXP, (*this)); | 643 return SkNEW_ARGS(GLCustomXP, (*this)); |
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
818 GR_DEFINE_XP_FACTORY_TEST(GrCustomXPFactory); | 818 GR_DEFINE_XP_FACTORY_TEST(GrCustomXPFactory); |
819 GrXPFactory* GrCustomXPFactory::TestCreate(SkRandom* rand, | 819 GrXPFactory* GrCustomXPFactory::TestCreate(SkRandom* rand, |
820 GrContext*, | 820 GrContext*, |
821 const GrDrawTargetCaps&, | 821 const GrDrawTargetCaps&, |
822 GrTexture*[]) { | 822 GrTexture*[]) { |
823 int mode = rand->nextRangeU(SkXfermode::kLastCoeffMode + 1, SkXfermode::kLas
tSeparableMode); | 823 int mode = rand->nextRangeU(SkXfermode::kLastCoeffMode + 1, SkXfermode::kLas
tSeparableMode); |
824 | 824 |
825 return SkNEW_ARGS(GrCustomXPFactory, (static_cast<SkXfermode::Mode>(mode))); | 825 return SkNEW_ARGS(GrCustomXPFactory, (static_cast<SkXfermode::Mode>(mode))); |
826 } | 826 } |
827 | 827 |
OLD | NEW |