aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/effects/SkTableColorFilter.cpp
diff options
context:
space:
mode:
authorGravatar Brian Salomon <bsalomon@google.com>2017-07-25 09:43:22 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-07-25 14:00:53 +0000
commit0e05a823f6ff6e9d799172f002e77ab9f2015f0f (patch)
tree4fac7a1b648be3b11aaf3a65122d26bce1df03c4 /src/effects/SkTableColorFilter.cpp
parent22115b4fc6ab169d45a1cfb65dae2dc7e544c80a (diff)
Add GrFragmentProcessor::clone(), implementation for ColorTableEffect, and unit test.
We occasionally make copies of GrPaints. clone() fill facilitate this case when GrFragmentProcessors are non-shareable.. Change-Id: I004e34f6ce8c293f9e0664d26532e44bd6b9fdff Reviewed-on: https://skia-review.googlesource.com/26360 Commit-Queue: Brian Salomon <bsalomon@google.com> Reviewed-by: Robert Phillips <robertphillips@google.com>
Diffstat (limited to 'src/effects/SkTableColorFilter.cpp')
-rw-r--r--src/effects/SkTableColorFilter.cpp26
1 files changed, 14 insertions, 12 deletions
diff --git a/src/effects/SkTableColorFilter.cpp b/src/effects/SkTableColorFilter.cpp
index 2e8e57ec3e..34c962cc15 100644
--- a/src/effects/SkTableColorFilter.cpp
+++ b/src/effects/SkTableColorFilter.cpp
@@ -323,9 +323,7 @@ sk_sp<SkColorFilter> SkTable_ColorFilter::makeComposed(sk_sp<SkColorFilter> inne
class ColorTableEffect : public GrFragmentProcessor {
public:
- static sk_sp<GrFragmentProcessor> Make(GrContext* context,
- const SkBitmap& bitmap,
- unsigned flags);
+ static sk_sp<GrFragmentProcessor> Make(GrContext* context, const SkBitmap& bitmap);
~ColorTableEffect() override;
@@ -334,6 +332,8 @@ public:
const GrTextureStripAtlas* atlas() const { return fAtlas; }
int atlasRow() const { return fRow; }
+ sk_sp<GrFragmentProcessor> clone() override;
+
private:
GrGLSLFragmentProcessor* onCreateGLSLInstance() const override;
@@ -341,8 +341,7 @@ private:
bool onIsEqual(const GrFragmentProcessor&) const override;
- ColorTableEffect(sk_sp<GrTextureProxy> proxy,
- GrTextureStripAtlas* atlas, int row, unsigned flags);
+ ColorTableEffect(sk_sp<GrTextureProxy> proxy, GrTextureStripAtlas* atlas, int row);
GR_DECLARE_FRAGMENT_PROCESSOR_TEST
@@ -437,9 +436,7 @@ void GLColorTableEffect::emitCode(EmitArgs& args) {
}
///////////////////////////////////////////////////////////////////////////////
-sk_sp<GrFragmentProcessor> ColorTableEffect::Make(GrContext* context, const SkBitmap& bitmap,
- unsigned flags) {
-
+sk_sp<GrFragmentProcessor> ColorTableEffect::Make(GrContext* context, const SkBitmap& bitmap) {
GrTextureStripAtlas::Desc desc;
desc.fWidth = bitmap.width();
desc.fHeight = 128;
@@ -463,11 +460,10 @@ sk_sp<GrFragmentProcessor> ColorTableEffect::Make(GrContext* context, const SkBi
return nullptr;
}
- return sk_sp<GrFragmentProcessor>(new ColorTableEffect(std::move(proxy), atlas, row, flags));
+ return sk_sp<GrFragmentProcessor>(new ColorTableEffect(std::move(proxy), atlas, row));
}
-ColorTableEffect::ColorTableEffect(sk_sp<GrTextureProxy> proxy,
- GrTextureStripAtlas* atlas, int row, unsigned flags)
+ColorTableEffect::ColorTableEffect(sk_sp<GrTextureProxy> proxy, GrTextureStripAtlas* atlas, int row)
: INHERITED(kNone_OptimizationFlags) // Not bothering with table-specific optimizations.
, fTextureSampler(std::move(proxy))
, fAtlas(atlas)
@@ -482,6 +478,12 @@ ColorTableEffect::~ColorTableEffect() {
}
}
+sk_sp<GrFragmentProcessor> ColorTableEffect::clone() {
+ fAtlas->lockRow(fRow);
+ return sk_sp<GrFragmentProcessor>(
+ new ColorTableEffect(sk_ref_sp(fTextureSampler.proxy()), fAtlas, fRow));
+}
+
void ColorTableEffect::onGetGLSLProcessorKey(const GrShaderCaps& caps,
GrProcessorKeyBuilder* b) const {
GLColorTableEffect::GenKey(*this, caps, b);
@@ -539,7 +541,7 @@ sk_sp<GrFragmentProcessor> SkTable_ColorFilter::asFragmentProcessor(GrContext* c
SkBitmap bitmap;
this->asComponentTable(&bitmap);
- return ColorTableEffect::Make(context, bitmap, fFlags);
+ return ColorTableEffect::Make(context, bitmap);
}
#endif // SK_SUPPORT_GPU