aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/effects/SkDisplacementMapEffect.cpp
diff options
context:
space:
mode:
authorGravatar Brian Salomon <bsalomon@google.com>2017-07-25 14:59:03 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-07-25 19:25:41 +0000
commitffc2ec46da40776c0b8056bbbaa2f43e92b46729 (patch)
treef0cb82d197b0470acc534adedb1afa8f3ef702dd /src/effects/SkDisplacementMapEffect.cpp
parent816afd83f45ac72b6b3b9ffe418b4baef8ecbc42 (diff)
Implement clone() for GrDisplacementEffect
This also adds copy constructors for: GrTextureDomain GrFragmentProcessor::TextureSampler GrCoordTransform Change-Id: I23cb85113e236f8b6fd1d91163c80d2a41931691 Reviewed-on: https://skia-review.googlesource.com/26621 Reviewed-by: Ethan Nicholas <ethannicholas@google.com> Reviewed-by: Robert Phillips <robertphillips@google.com> Commit-Queue: Brian Salomon <bsalomon@google.com>
Diffstat (limited to 'src/effects/SkDisplacementMapEffect.cpp')
-rw-r--r--src/effects/SkDisplacementMapEffect.cpp40
1 files changed, 37 insertions, 3 deletions
diff --git a/src/effects/SkDisplacementMapEffect.cpp b/src/effects/SkDisplacementMapEffect.cpp
index 06e7e687ab..6a7378b6d4 100644
--- a/src/effects/SkDisplacementMapEffect.cpp
+++ b/src/effects/SkDisplacementMapEffect.cpp
@@ -191,7 +191,13 @@ public:
const GrTextureDomain& domain() const { return fDomain; }
GrColorSpaceXform* colorSpaceXform() const { return fColorSpaceXform.get(); }
+ sk_sp<GrFragmentProcessor> clone() const override;
+
private:
+ static OptimizationFlags OptimizationFlags(GrPixelConfig colorConfig);
+
+ GrDisplacementMapEffect(const GrDisplacementMapEffect&);
+
GrGLSLFragmentProcessor* onCreateGLSLInstance() const override;
void onGetGLSLProcessorKey(const GrShaderCaps& caps, GrProcessorKeyBuilder* b) const override;
@@ -444,6 +450,13 @@ void GrDisplacementMapEffect::onGetGLSLProcessorKey(const GrShaderCaps& caps,
GrGLDisplacementMapEffect::GenKey(*this, caps, b);
}
+GrFragmentProcessor::OptimizationFlags GrDisplacementMapEffect::OptimizationFlags(
+ GrPixelConfig colorConfig) {
+ return GrPixelConfigIsOpaque(colorConfig)
+ ? GrFragmentProcessor::kPreservesOpaqueInput_OptimizationFlag
+ : GrFragmentProcessor::kNone_OptimizationFlags;
+}
+
GrDisplacementMapEffect::GrDisplacementMapEffect(
SkDisplacementMapEffect::ChannelSelectorType xChannelSelector,
SkDisplacementMapEffect::ChannelSelectorType yChannelSelector,
@@ -453,8 +466,7 @@ GrDisplacementMapEffect::GrDisplacementMapEffect(
sk_sp<GrTextureProxy> color,
sk_sp<GrColorSpaceXform> colorSpaceXform,
const SkISize& colorDimensions)
- : INHERITED(GrPixelConfigIsOpaque(color->config()) ? kPreservesOpaqueInput_OptimizationFlag
- : kNone_OptimizationFlags)
+ : INHERITED(OptimizationFlags(color->config()))
, fDisplacementTransform(offsetMatrix, displacement.get())
, fDisplacementSampler(displacement)
, fColorTransform(color.get())
@@ -472,7 +484,28 @@ GrDisplacementMapEffect::GrDisplacementMapEffect(
this->addTextureSampler(&fColorSampler);
}
-GrDisplacementMapEffect::~GrDisplacementMapEffect() {
+GrDisplacementMapEffect::GrDisplacementMapEffect(const GrDisplacementMapEffect& that)
+ : INHERITED(OptimizationFlags(that.fColorSampler.proxy()->config()))
+ , fDisplacementTransform(that.fDisplacementTransform)
+ , fDisplacementSampler(that.fDisplacementSampler)
+ , fColorTransform(that.fColorTransform)
+ , fDomain(that.fDomain)
+ , fColorSampler(that.fColorSampler)
+ , fColorSpaceXform(that.fColorSpaceXform)
+ , fXChannelSelector(that.fXChannelSelector)
+ , fYChannelSelector(that.fYChannelSelector)
+ , fScale(that.fScale) {
+ this->initClassID<GrDisplacementMapEffect>();
+ this->addCoordTransform(&fDisplacementTransform);
+ this->addTextureSampler(&fDisplacementSampler);
+ this->addCoordTransform(&fColorTransform);
+ this->addTextureSampler(&fColorSampler);
+}
+
+GrDisplacementMapEffect::~GrDisplacementMapEffect() {}
+
+sk_sp<GrFragmentProcessor> GrDisplacementMapEffect::clone() const {
+ return sk_sp<GrFragmentProcessor>(new GrDisplacementMapEffect(*this));
}
bool GrDisplacementMapEffect::onIsEqual(const GrFragmentProcessor& sBase) const {
@@ -512,6 +545,7 @@ sk_sp<GrFragmentProcessor> GrDisplacementMapEffect::TestCreate(GrProcessorTestDa
std::move(colorProxy), colorSpaceXform,
colorDimensions);
}
+
#endif
///////////////////////////////////////////////////////////////////////////////