| 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/GrXfermodeFragmentProcessor.h" | 8 #include "effects/GrXfermodeFragmentProcessor.h" | 
| 9 | 9 | 
| 10 #include "GrFragmentProcessor.h" | 10 #include "GrFragmentProcessor.h" | 
| (...skipping 11 matching lines...) Expand all  Loading... | 
| 22         : fMode(mode) { | 22         : fMode(mode) { | 
| 23         this->initClassID<ComposeTwoFragmentProcessor>(); | 23         this->initClassID<ComposeTwoFragmentProcessor>(); | 
| 24         SkDEBUGCODE(int shaderAChildIndex = )this->registerChildProcessor(src); | 24         SkDEBUGCODE(int shaderAChildIndex = )this->registerChildProcessor(src); | 
| 25         SkDEBUGCODE(int shaderBChildIndex = )this->registerChildProcessor(dst); | 25         SkDEBUGCODE(int shaderBChildIndex = )this->registerChildProcessor(dst); | 
| 26         SkASSERT(0 == shaderAChildIndex); | 26         SkASSERT(0 == shaderAChildIndex); | 
| 27         SkASSERT(1 == shaderBChildIndex); | 27         SkASSERT(1 == shaderBChildIndex); | 
| 28     } | 28     } | 
| 29 | 29 | 
| 30     const char* name() const override { return "ComposeTwo"; } | 30     const char* name() const override { return "ComposeTwo"; } | 
| 31 | 31 | 
| 32     void onGetGLProcessorKey(const GrGLSLCaps& caps, GrProcessorKeyBuilder* b) c
     onst override { | 32     void onGetGLSLProcessorKey(const GrGLSLCaps& caps, GrProcessorKeyBuilder* b)
      const override { | 
| 33         b->add32(fMode); | 33         b->add32(fMode); | 
| 34     } | 34     } | 
| 35 | 35 | 
| 36     SkXfermode::Mode getMode() const { return fMode; } | 36     SkXfermode::Mode getMode() const { return fMode; } | 
| 37 | 37 | 
| 38 protected: | 38 protected: | 
| 39     bool onIsEqual(const GrFragmentProcessor& other) const override { | 39     bool onIsEqual(const GrFragmentProcessor& other) const override { | 
| 40         const ComposeTwoFragmentProcessor& cs = other.cast<ComposeTwoFragmentPro
     cessor>(); | 40         const ComposeTwoFragmentProcessor& cs = other.cast<ComposeTwoFragmentPro
     cessor>(); | 
| 41         return fMode == cs.fMode; | 41         return fMode == cs.fMode; | 
| 42     } | 42     } | 
| 43 | 43 | 
| 44     void onComputeInvariantOutput(GrInvariantOutput* inout) const override { | 44     void onComputeInvariantOutput(GrInvariantOutput* inout) const override { | 
| 45         inout->setToUnknown(GrInvariantOutput::kWill_ReadInput); | 45         inout->setToUnknown(GrInvariantOutput::kWill_ReadInput); | 
| 46     } | 46     } | 
| 47 | 47 | 
| 48 private: | 48 private: | 
| 49     GrGLSLFragmentProcessor* onCreateGLInstance() const override; | 49     GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; | 
| 50 | 50 | 
| 51     SkXfermode::Mode fMode; | 51     SkXfermode::Mode fMode; | 
| 52 | 52 | 
| 53     GR_DECLARE_FRAGMENT_PROCESSOR_TEST; | 53     GR_DECLARE_FRAGMENT_PROCESSOR_TEST; | 
| 54 | 54 | 
| 55     typedef GrFragmentProcessor INHERITED; | 55     typedef GrFragmentProcessor INHERITED; | 
| 56 }; | 56 }; | 
| 57 | 57 | 
| 58 ///////////////////////////////////////////////////////////////////// | 58 ///////////////////////////////////////////////////////////////////// | 
| 59 | 59 | 
| (...skipping 14 matching lines...) Expand all  Loading... | 
| 74 const GrFragmentProcessor* ComposeTwoFragmentProcessor::TestCreate(GrProcessorTe
     stData* d) { | 74 const GrFragmentProcessor* ComposeTwoFragmentProcessor::TestCreate(GrProcessorTe
     stData* d) { | 
| 75     // Create two random frag procs. | 75     // Create two random frag procs. | 
| 76     SkAutoTUnref<const GrFragmentProcessor> fpA(GrProcessorUnitTest::CreateChild
     FP(d)); | 76     SkAutoTUnref<const GrFragmentProcessor> fpA(GrProcessorUnitTest::CreateChild
     FP(d)); | 
| 77     SkAutoTUnref<const GrFragmentProcessor> fpB(GrProcessorUnitTest::CreateChild
     FP(d)); | 77     SkAutoTUnref<const GrFragmentProcessor> fpB(GrProcessorUnitTest::CreateChild
     FP(d)); | 
| 78 | 78 | 
| 79     SkXfermode::Mode mode = static_cast<SkXfermode::Mode>( | 79     SkXfermode::Mode mode = static_cast<SkXfermode::Mode>( | 
| 80         d->fRandom->nextRangeU(0, SkXfermode::kLastMode)); | 80         d->fRandom->nextRangeU(0, SkXfermode::kLastMode)); | 
| 81     return new ComposeTwoFragmentProcessor(fpA, fpB, mode); | 81     return new ComposeTwoFragmentProcessor(fpA, fpB, mode); | 
| 82 } | 82 } | 
| 83 | 83 | 
| 84 GrGLSLFragmentProcessor* ComposeTwoFragmentProcessor::onCreateGLInstance() const
     { | 84 GrGLSLFragmentProcessor* ComposeTwoFragmentProcessor::onCreateGLSLInstance() con
     st{ | 
| 85     return new GLComposeTwoFragmentProcessor(*this); | 85     return new GLComposeTwoFragmentProcessor(*this); | 
| 86 } | 86 } | 
| 87 | 87 | 
| 88 ///////////////////////////////////////////////////////////////////// | 88 ///////////////////////////////////////////////////////////////////// | 
| 89 | 89 | 
| 90 void GLComposeTwoFragmentProcessor::emitCode(EmitArgs& args) { | 90 void GLComposeTwoFragmentProcessor::emitCode(EmitArgs& args) { | 
| 91 | 91 | 
| 92     GrGLSLFragmentBuilder* fsBuilder = args.fBuilder->getFragmentShaderBuilder()
     ; | 92     GrGLSLFragmentBuilder* fsBuilder = args.fBuilder->getFragmentShaderBuilder()
     ; | 
| 93     const ComposeTwoFragmentProcessor& cs = args.fFp.cast<ComposeTwoFragmentProc
     essor>(); | 93     const ComposeTwoFragmentProcessor& cs = args.fFp.cast<ComposeTwoFragmentProc
     essor>(); | 
| 94 | 94 | 
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 143     ComposeOneFragmentProcessor(const GrFragmentProcessor* dst, SkXfermode::Mode
      mode, Child child) | 143     ComposeOneFragmentProcessor(const GrFragmentProcessor* dst, SkXfermode::Mode
      mode, Child child) | 
| 144         : fMode(mode) | 144         : fMode(mode) | 
| 145         , fChild(child) { | 145         , fChild(child) { | 
| 146         this->initClassID<ComposeOneFragmentProcessor>(); | 146         this->initClassID<ComposeOneFragmentProcessor>(); | 
| 147         SkDEBUGCODE(int dstIndex = )this->registerChildProcessor(dst); | 147         SkDEBUGCODE(int dstIndex = )this->registerChildProcessor(dst); | 
| 148         SkASSERT(0 == dstIndex); | 148         SkASSERT(0 == dstIndex); | 
| 149     } | 149     } | 
| 150 | 150 | 
| 151     const char* name() const override { return "ComposeOne"; } | 151     const char* name() const override { return "ComposeOne"; } | 
| 152 | 152 | 
| 153     void onGetGLProcessorKey(const GrGLSLCaps& caps, GrProcessorKeyBuilder* b) c
     onst override { | 153     void onGetGLSLProcessorKey(const GrGLSLCaps& caps, GrProcessorKeyBuilder* b)
      const override { | 
| 154         GR_STATIC_ASSERT((SkXfermode::kLastMode & SK_MaxU16) == SkXfermode::kLas
     tMode); | 154         GR_STATIC_ASSERT((SkXfermode::kLastMode & SK_MaxU16) == SkXfermode::kLas
     tMode); | 
| 155         b->add32(fMode | (fChild << 16)); | 155         b->add32(fMode | (fChild << 16)); | 
| 156     } | 156     } | 
| 157 | 157 | 
| 158     SkXfermode::Mode mode() const { return fMode; } | 158     SkXfermode::Mode mode() const { return fMode; } | 
| 159 | 159 | 
| 160     Child child() const { return fChild; } | 160     Child child() const { return fChild; } | 
| 161 | 161 | 
| 162 protected: | 162 protected: | 
| 163     bool onIsEqual(const GrFragmentProcessor& that) const override { | 163     bool onIsEqual(const GrFragmentProcessor& that) const override { | 
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 195                     readsInput = GrInvariantOutput::kWill_ReadInput; | 195                     readsInput = GrInvariantOutput::kWill_ReadInput; | 
| 196                 } | 196                 } | 
| 197             } | 197             } | 
| 198             inout->setToOther(blendFlags, blendColor, readsInput); | 198             inout->setToOther(blendFlags, blendColor, readsInput); | 
| 199         } else { | 199         } else { | 
| 200             inout->setToUnknown(GrInvariantOutput::kWill_ReadInput); | 200             inout->setToUnknown(GrInvariantOutput::kWill_ReadInput); | 
| 201         } | 201         } | 
| 202     } | 202     } | 
| 203 | 203 | 
| 204 private: | 204 private: | 
| 205     GrGLSLFragmentProcessor* onCreateGLInstance() const override; | 205     GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; | 
| 206 | 206 | 
| 207     SkXfermode::Mode    fMode; | 207     SkXfermode::Mode    fMode; | 
| 208     Child               fChild; | 208     Child               fChild; | 
| 209 | 209 | 
| 210     GR_DECLARE_FRAGMENT_PROCESSOR_TEST; | 210     GR_DECLARE_FRAGMENT_PROCESSOR_TEST; | 
| 211 | 211 | 
| 212     typedef GrFragmentProcessor INHERITED; | 212     typedef GrFragmentProcessor INHERITED; | 
| 213 }; | 213 }; | 
| 214 | 214 | 
| 215 ////////////////////////////////////////////////////////////////////////////// | 215 ////////////////////////////////////////////////////////////////////////////// | 
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 257     // possibility of an arbitrarily large tree of procs. | 257     // possibility of an arbitrarily large tree of procs. | 
| 258     SkAutoTUnref<const GrFragmentProcessor> dst(GrProcessorUnitTest::CreateChild
     FP(d)); | 258     SkAutoTUnref<const GrFragmentProcessor> dst(GrProcessorUnitTest::CreateChild
     FP(d)); | 
| 259     SkXfermode::Mode mode = static_cast<SkXfermode::Mode>( | 259     SkXfermode::Mode mode = static_cast<SkXfermode::Mode>( | 
| 260         d->fRandom->nextRangeU(0, SkXfermode::kLastMode)); | 260         d->fRandom->nextRangeU(0, SkXfermode::kLastMode)); | 
| 261     ComposeOneFragmentProcessor::Child child = d->fRandom->nextBool() ? | 261     ComposeOneFragmentProcessor::Child child = d->fRandom->nextBool() ? | 
| 262         ComposeOneFragmentProcessor::kDst_Child : | 262         ComposeOneFragmentProcessor::kDst_Child : | 
| 263         ComposeOneFragmentProcessor::kSrc_Child; | 263         ComposeOneFragmentProcessor::kSrc_Child; | 
| 264     return new ComposeOneFragmentProcessor(dst, mode, child); | 264     return new ComposeOneFragmentProcessor(dst, mode, child); | 
| 265 } | 265 } | 
| 266 | 266 | 
| 267 GrGLSLFragmentProcessor* ComposeOneFragmentProcessor::onCreateGLInstance() const
      { | 267 GrGLSLFragmentProcessor* ComposeOneFragmentProcessor::onCreateGLSLInstance() con
     st { | 
| 268     return new GLComposeOneFragmentProcessor(*this); | 268     return new GLComposeOneFragmentProcessor(*this); | 
| 269 } | 269 } | 
| 270 | 270 | 
| 271 ////////////////////////////////////////////////////////////////////////////// | 271 ////////////////////////////////////////////////////////////////////////////// | 
| 272 | 272 | 
| 273 const GrFragmentProcessor* GrXfermodeFragmentProcessor::CreateFromDstProcessor( | 273 const GrFragmentProcessor* GrXfermodeFragmentProcessor::CreateFromDstProcessor( | 
| 274     const GrFragmentProcessor* dst, SkXfermode::Mode mode) { | 274     const GrFragmentProcessor* dst, SkXfermode::Mode mode) { | 
| 275     switch (mode) { | 275     switch (mode) { | 
| 276         case SkXfermode::kClear_Mode: | 276         case SkXfermode::kClear_Mode: | 
| 277             return GrConstColorProcessor::Create(GrColor_TRANSPARENT_BLACK, | 277             return GrConstColorProcessor::Create(GrColor_TRANSPARENT_BLACK, | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
| 290         case SkXfermode::kClear_Mode: | 290         case SkXfermode::kClear_Mode: | 
| 291             return GrConstColorProcessor::Create(GrColor_TRANSPARENT_BLACK, | 291             return GrConstColorProcessor::Create(GrColor_TRANSPARENT_BLACK, | 
| 292                                                  GrConstColorProcessor::kIgnore_
     InputMode); | 292                                                  GrConstColorProcessor::kIgnore_
     InputMode); | 
| 293         case SkXfermode::kDst_Mode: | 293         case SkXfermode::kDst_Mode: | 
| 294             return nullptr; | 294             return nullptr; | 
| 295         default: | 295         default: | 
| 296             return new ComposeOneFragmentProcessor(src, mode, | 296             return new ComposeOneFragmentProcessor(src, mode, | 
| 297                                                    ComposeOneFragmentProcessor::
     kSrc_Child); | 297                                                    ComposeOneFragmentProcessor::
     kSrc_Child); | 
| 298     } | 298     } | 
| 299 } | 299 } | 
| OLD | NEW | 
|---|