diff options
author | Brian Osman <brianosman@google.com> | 2017-10-17 17:15:52 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-10-18 13:27:46 +0000 |
commit | c4f93cab667b022bbaa196bddcbca23592ad2e6c (patch) | |
tree | f9d18a953013b5249b8dc36c76d24ddc76dbd9dd /src/gpu/GrColorSpaceXform.h | |
parent | 43938b8533dbee75816726b54737e410097428ce (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.h | 31 |
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 |