aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/GrColorSpaceXform.h
diff options
context:
space:
mode:
authorGravatar Brian Osman <brianosman@google.com>2017-10-17 17:15:52 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-10-18 13:27:46 +0000
commitc4f93cab667b022bbaa196bddcbca23592ad2e6c (patch)
treef9d18a953013b5249b8dc36c76d24ddc76dbd9dd /src/gpu/GrColorSpaceXform.h
parent43938b8533dbee75816726b54737e410097428ce (diff)
Add GrColorSpaceXformEffect
This is an FP that just applies a GrColorSpaceXform. I have a long string of follow-up changes that use this, which greatly simplifies many other FPs, and ultimately eliminates the need for color space xforms to be a first-class type in SkSL. Bug: skia: Change-Id: I070d8bab81c9a620a2173c83b0013c63ad53bc8e Reviewed-on: https://skia-review.googlesource.com/60726 Reviewed-by: Brian Salomon <bsalomon@google.com> Commit-Queue: Brian Osman <brianosman@google.com>
Diffstat (limited to 'src/gpu/GrColorSpaceXform.h')
-rw-r--r--src/gpu/GrColorSpaceXform.h31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/gpu/GrColorSpaceXform.h b/src/gpu/GrColorSpaceXform.h
index 68cd3b0563..b871563387 100644
--- a/src/gpu/GrColorSpaceXform.h
+++ b/src/gpu/GrColorSpaceXform.h
@@ -9,6 +9,7 @@
#define GrColorSpaceXform_DEFINED
#include "GrColor.h"
+#include "GrFragmentProcessor.h"
#include "SkMatrix44.h"
#include "SkRefCnt.h"
@@ -42,4 +43,34 @@ private:
SkMatrix44 fSrcToDst;
};
+class GrColorSpaceXformEffect : public GrFragmentProcessor {
+public:
+ /**
+ * Returns a fragment processor that calls the passed in fragment processor, and then converts
+ * the color space of the output from src to dst.
+ */
+ static std::unique_ptr<GrFragmentProcessor> Make(std::unique_ptr<GrFragmentProcessor> child,
+ const SkColorSpace* src,
+ const SkColorSpace* dst);
+
+ const char* name() const override { return "ColorSpaceXform"; }
+ std::unique_ptr<GrFragmentProcessor> clone() const override;
+
+ const GrColorSpaceXform* colorXform() const { return fColorXform.get(); }
+
+private:
+ GrColorSpaceXformEffect(std::unique_ptr<GrFragmentProcessor> child,
+ sk_sp<GrColorSpaceXform> colorXform);
+
+ static OptimizationFlags OptFlags(const GrFragmentProcessor* child);
+
+ GrGLSLFragmentProcessor* onCreateGLSLInstance() const override;
+ void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override;
+ bool onIsEqual(const GrFragmentProcessor&) const override;
+
+ sk_sp<GrColorSpaceXform> fColorXform;
+
+ typedef GrFragmentProcessor INHERITED;
+};
+
#endif