Index: src/gpu/effects/GrXfermodeFragmentProcessor.cpp |
diff --git a/src/gpu/effects/GrXfermodeFragmentProcessor.cpp b/src/gpu/effects/GrXfermodeFragmentProcessor.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..536472a13110562d45cb4ded277e4fc51a05e0a1 |
--- /dev/null |
+++ b/src/gpu/effects/GrXfermodeFragmentProcessor.cpp |
@@ -0,0 +1,33 @@ |
+/* |
+ * Copyright 2015 Google Inc. |
+ * |
+ * Use of this source code is governed by a BSD-style license that can be |
+ * found in the LICENSE file. |
+ */ |
+ |
+#include "effects/GrXfermodeFragmentProcessor.h" |
+ |
+#include "GrFragmentProcessor.h" |
+#include "SkComposeShader.h" |
+#include "effects/GrConstColorProcessor.h" |
+ |
+const GrFragmentProcessor* GrXfermodeFragmentProcessor::CreateFrom2Procs( |
+ const GrFragmentProcessor* src, const GrFragmentProcessor* dst, SkXfermode::Mode mode) { |
+ if (SkXfermode::kLastCoeffMode < mode) { |
+ return nullptr; |
+ } |
+ switch (mode) { |
+ case SkXfermode::kClear_Mode: |
+ return GrConstColorProcessor::Create(GrColor_TRANS_BLACK, |
+ GrConstColorProcessor::kIgnore_InputMode); |
+ break; |
+ case SkXfermode::kSrc_Mode: |
+ return SkRef(src); |
+ break; |
+ case SkXfermode::kDst_Mode: |
+ return SkRef(dst); |
+ break; |
+ default: |
+ return new GrComposeEffect(dst, src, mode); |
+ } |
+} |