aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core
diff options
context:
space:
mode:
authorGravatar bsalomon <bsalomon@google.com>2015-09-29 06:38:55 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2015-09-29 06:38:55 -0700
commite25eea4b36a488448fb730f4e3dc5a900b0e2892 (patch)
tree6d4dbf179e793c456c2c164a6822528a13cba715 /src/core
parentc56c6ef3ce6447f39894649d535acb1606595d31 (diff)
Use child processors to implement compose color filter.
Diffstat (limited to 'src/core')
-rw-r--r--src/core/SkColorFilter.cpp18
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