aboutsummaryrefslogtreecommitdiffhomepage
path: root/include/gpu/effects/GrPorterDuffXferProcessor.h
diff options
context:
space:
mode:
authorGravatar egdaniel <egdaniel@google.com>2014-12-05 12:14:26 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2014-12-05 12:14:27 -0800
commit8bf2bd335f39afc29d7829ad11aa440945c2d37a (patch)
treefa68a2fd4406b468df66d93bcfcd7b7cfb51828d /include/gpu/effects/GrPorterDuffXferProcessor.h
parent69469b570ceb8a5ab7f64778d1b128cd5c472e73 (diff)
Move GrPorterDuffXferProcessor to include/gpu/effects.
Diffstat (limited to 'include/gpu/effects/GrPorterDuffXferProcessor.h')
-rw-r--r--include/gpu/effects/GrPorterDuffXferProcessor.h80
1 files changed, 80 insertions, 0 deletions
diff --git a/include/gpu/effects/GrPorterDuffXferProcessor.h b/include/gpu/effects/GrPorterDuffXferProcessor.h
new file mode 100644
index 0000000000..d1b30cc931
--- /dev/null
+++ b/include/gpu/effects/GrPorterDuffXferProcessor.h
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2014 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef GrPorterDuffXferProcessor_DEFINED
+#define GrPorterDuffXferProcessor_DEFINED
+
+#include "GrTypes.h"
+#include "GrXferProcessor.h"
+#include "SkXfermode.h"
+
+class GrDrawState;
+class GrInvariantOutput;
+
+class GrPorterDuffXferProcessor : public GrXferProcessor {
+public:
+ static GrXferProcessor* Create(GrBlendCoeff srcBlend, GrBlendCoeff dstBlend) {
+ return SkNEW_ARGS(GrPorterDuffXferProcessor, (srcBlend, dstBlend));
+ }
+
+ virtual ~GrPorterDuffXferProcessor();
+
+ virtual const char* name() const { return "Porter Duff"; }
+
+ virtual void getGLProcessorKey(const GrGLCaps& caps,
+ GrProcessorKeyBuilder* b) const SK_OVERRIDE;
+
+ virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
+
+private:
+ GrPorterDuffXferProcessor(GrBlendCoeff srcBlend, GrBlendCoeff dstBlend);
+
+ virtual bool onIsEqual(const GrFragmentProcessor& fpBase) const SK_OVERRIDE {
+ const GrPorterDuffXferProcessor& xp = fpBase.cast<GrPorterDuffXferProcessor>();
+ if (fSrcBlend != xp.fSrcBlend || fDstBlend != xp.fDstBlend) {
+ return false;
+ }
+ return true;
+ }
+
+ virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE;
+
+ GrBlendCoeff fSrcBlend;
+ GrBlendCoeff fDstBlend;
+
+ typedef GrXferProcessor INHERITED;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+
+class GrPorterDuffXPFactory : public GrXPFactory {
+public:
+ static GrXPFactory* Create(SkXfermode::Mode mode);
+
+ static GrXPFactory* Create(SkXfermode::Coeff src, SkXfermode::Coeff dst) {
+ return SkNEW_ARGS(GrPorterDuffXPFactory, ((GrBlendCoeff)(src), (GrBlendCoeff)(dst)));
+ }
+
+ static GrXPFactory* Create(GrBlendCoeff src, GrBlendCoeff dst) {
+ return SkNEW_ARGS(GrPorterDuffXPFactory, (src, dst));
+ }
+
+ const GrXferProcessor* createXferProcessor() const SK_OVERRIDE;
+
+ bool supportsRGBCoverage(GrColor knownColor, uint32_t knownColorFlags) const SK_OVERRIDE;
+
+private:
+ GrPorterDuffXPFactory(GrBlendCoeff src, GrBlendCoeff dst)
+ : fSrc(src), fDst(dst) {}
+
+ GrBlendCoeff fSrc;
+ GrBlendCoeff fDst;
+
+ typedef GrXPFactory INHERITED;
+};
+
+#endif