diff options
author | bsalomon <bsalomon@google.com> | 2015-09-29 06:38:55 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-09-29 06:38:55 -0700 |
commit | e25eea4b36a488448fb730f4e3dc5a900b0e2892 (patch) | |
tree | 6d4dbf179e793c456c2c164a6822528a13cba715 /src/core | |
parent | c56c6ef3ce6447f39894649d535acb1606595d31 (diff) |
Use child processors to implement compose color filter.
Review URL: https://codereview.chromium.org/1368423003
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/SkColorFilter.cpp | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/src/core/SkColorFilter.cpp b/src/core/SkColorFilter.cpp index 4605a1d7ab..25e6b2ea73 100644 --- a/src/core/SkColorFilter.cpp +++ b/src/core/SkColorFilter.cpp @@ -13,7 +13,9 @@ #include "SkUnPreMultiply.h" #include "SkWriteBuffer.h" -class GrFragmentProcessor; +#if SK_SUPPORT_GPU +#include "GrFragmentProcessor.h" +#endif bool SkColorFilter::asColorMode(SkColor* color, SkXfermode::Mode* mode) const { return false; @@ -67,11 +69,15 @@ public: #endif #if SK_SUPPORT_GPU - bool asFragmentProcessors(GrContext* context, GrProcessorDataManager* procDataManager, - SkTDArray<const GrFragmentProcessor*>* array) const override { - bool hasFrags = fInner->asFragmentProcessors(context, procDataManager, array); - hasFrags |= fOuter->asFragmentProcessors(context, procDataManager, array); - return hasFrags; + const GrFragmentProcessor* asFragmentProcessor(GrContext* context, + GrProcessorDataManager* pdm) const override { + SkAutoTUnref<const GrFragmentProcessor> innerFP(fInner->asFragmentProcessor(context, pdm)); + SkAutoTUnref<const GrFragmentProcessor> outerFP(fOuter->asFragmentProcessor(context, pdm)); + if (!innerFP || !outerFP) { + return nullptr; + } + const GrFragmentProcessor* series[] = { innerFP, outerFP }; + return GrFragmentProcessor::RunInSeries(series, 2); } #endif |