aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Florin Malita <fmalita@chromium.org>2017-07-29 19:08:28 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-07-30 14:24:21 +0000
commit50b2084bd15e7aea416dc8c6fd2373864c50f023 (patch)
treea68b832e4eb3e9e8cd8c463bccab8b9836cd6fff /src
parentc25437da5c6a3e5766c7811cfd484c5ef1b2861e (diff)
Gradient stages cleanup
Hoist the matrix setup into SkGradientShaderBase. Drop the bool return for adjustMatrixAndAppendStages(), and rename to appendGradientStages(). Change-Id: Iad412f638f86223e5af46a7d3dea6f768f52bcad Reviewed-on: https://skia-review.googlesource.com/26427 Commit-Queue: Florin Malita <fmalita@chromium.org> Reviewed-by: Mike Reed <reed@google.com> Reviewed-by: Mike Klein <mtklein@google.com>
Diffstat (limited to 'src')
-rw-r--r--src/shaders/gradients/SkGradientShader.cpp7
-rw-r--r--src/shaders/gradients/SkGradientShaderPriv.h6
-rw-r--r--src/shaders/gradients/SkLinearGradient.cpp9
-rw-r--r--src/shaders/gradients/SkLinearGradient.h6
-rw-r--r--src/shaders/gradients/SkRadialGradient.cpp9
-rw-r--r--src/shaders/gradients/SkRadialGradient.h6
-rw-r--r--src/shaders/gradients/SkSweepGradient.cpp9
-rw-r--r--src/shaders/gradients/SkSweepGradient.h6
-rw-r--r--src/shaders/gradients/SkTwoPointConicalGradient.cpp13
-rw-r--r--src/shaders/gradients/SkTwoPointConicalGradient.h6
10 files changed, 22 insertions, 55 deletions
diff --git a/src/shaders/gradients/SkGradientShader.cpp b/src/shaders/gradients/SkGradientShader.cpp
index c9a69e2a55..e2989e67f1 100644
--- a/src/shaders/gradients/SkGradientShader.cpp
+++ b/src/shaders/gradients/SkGradientShader.cpp
@@ -374,16 +374,13 @@ bool SkGradientShaderBase::onAppendStages(SkRasterPipeline* p,
if (!this->computeTotalInverse(ctm, localM, &matrix)) {
return false;
}
+ matrix.postConcat(fPtsToUnit);
- SkRasterPipeline_<256> tPipeline;
SkRasterPipeline_<256> postPipeline;
- if (!this->adjustMatrixAndAppendStages(alloc, &matrix, &tPipeline, &postPipeline)) {
- return false;
- }
p->append(SkRasterPipeline::seed_shader);
p->append_matrix(alloc, matrix);
- p->extend(tPipeline);
+ this->appendGradientStages(alloc, p, &postPipeline);
switch(fTileMode) {
case kMirror_TileMode: p->append(SkRasterPipeline::mirror_x_1); break;
diff --git a/src/shaders/gradients/SkGradientShaderPriv.h b/src/shaders/gradients/SkGradientShaderPriv.h
index 07ba7e3521..b6da7b9507 100644
--- a/src/shaders/gradients/SkGradientShaderPriv.h
+++ b/src/shaders/gradients/SkGradientShaderPriv.h
@@ -233,10 +233,8 @@ protected:
const SkMatrix& ctm, const SkPaint& paint,
const SkMatrix* localM) const override;
- virtual bool adjustMatrixAndAppendStages(SkArenaAlloc* alloc,
- SkMatrix* matrix,
- SkRasterPipeline* tPipeline,
- SkRasterPipeline* postPipeline) const = 0;
+ virtual void appendGradientStages(SkArenaAlloc* alloc, SkRasterPipeline* tPipeline,
+ SkRasterPipeline* postPipeline) const = 0;
template <typename T, typename... Args>
static Context* CheckedMakeContext(SkArenaAlloc* alloc, Args&&... args) {
diff --git a/src/shaders/gradients/SkLinearGradient.cpp b/src/shaders/gradients/SkLinearGradient.cpp
index 605ae544a2..32b2ba5670 100644
--- a/src/shaders/gradients/SkLinearGradient.cpp
+++ b/src/shaders/gradients/SkLinearGradient.cpp
@@ -79,12 +79,9 @@ SkShaderBase::Context* SkLinearGradient::onMakeBurstPipelineContext(
: nullptr;
}
-bool SkLinearGradient::adjustMatrixAndAppendStages(SkArenaAlloc*,
- SkMatrix* matrix,
- SkRasterPipeline*,
- SkRasterPipeline*) const {
- matrix->postConcat(fPtsToUnit);
- return true;
+void SkLinearGradient::appendGradientStages(SkArenaAlloc*, SkRasterPipeline*,
+ SkRasterPipeline*) const {
+ // No extra stage needed for linear gradients.
}
sk_sp<SkShader> SkLinearGradient::onMakeColorSpace(SkColorSpaceXformer* xformer) const {
diff --git a/src/shaders/gradients/SkLinearGradient.h b/src/shaders/gradients/SkLinearGradient.h
index abc3e0d692..c0ba7f4dbf 100644
--- a/src/shaders/gradients/SkLinearGradient.h
+++ b/src/shaders/gradients/SkLinearGradient.h
@@ -64,10 +64,8 @@ protected:
Context* onMakeContext(const ContextRec&, SkArenaAlloc*) const override;
Context* onMakeBurstPipelineContext(const ContextRec&, SkArenaAlloc*) const override;
- bool adjustMatrixAndAppendStages(SkArenaAlloc* alloc,
- SkMatrix* matrix,
- SkRasterPipeline* tPipeline,
- SkRasterPipeline* postPipeline) const final;
+ void appendGradientStages(SkArenaAlloc* alloc, SkRasterPipeline* tPipeline,
+ SkRasterPipeline* postPipeline) const final;
sk_sp<SkShader> onMakeColorSpace(SkColorSpaceXformer* xformer) const override;
diff --git a/src/shaders/gradients/SkRadialGradient.cpp b/src/shaders/gradients/SkRadialGradient.cpp
index fc484828eb..22977f5034 100644
--- a/src/shaders/gradients/SkRadialGradient.cpp
+++ b/src/shaders/gradients/SkRadialGradient.cpp
@@ -377,14 +377,9 @@ bool SkRadialGradient::onIsRasterPipelineOnly() const {
#endif
}
-bool SkRadialGradient::adjustMatrixAndAppendStages(SkArenaAlloc* alloc,
- SkMatrix* matrix,
- SkRasterPipeline* p,
- SkRasterPipeline*) const {
- matrix->postConcat(fPtsToUnit);
-
+void SkRadialGradient::appendGradientStages(SkArenaAlloc*, SkRasterPipeline* p,
+ SkRasterPipeline*) const {
p->append(SkRasterPipeline::xy_to_radius);
- return true;
}
#ifndef SK_IGNORE_TO_STRING
diff --git a/src/shaders/gradients/SkRadialGradient.h b/src/shaders/gradients/SkRadialGradient.h
index f85bc8e53a..83680eff8c 100644
--- a/src/shaders/gradients/SkRadialGradient.h
+++ b/src/shaders/gradients/SkRadialGradient.h
@@ -38,10 +38,8 @@ protected:
Context* onMakeContext(const ContextRec&, SkArenaAlloc*) const override;
sk_sp<SkShader> onMakeColorSpace(SkColorSpaceXformer* xformer) const override;
- bool adjustMatrixAndAppendStages(SkArenaAlloc* alloc,
- SkMatrix* matrix,
- SkRasterPipeline* tPipeline,
- SkRasterPipeline* postPipeline) const override;
+ void appendGradientStages(SkArenaAlloc* alloc, SkRasterPipeline* tPipeline,
+ SkRasterPipeline* postPipeline) const override;
bool onIsRasterPipelineOnly() const override;
diff --git a/src/shaders/gradients/SkSweepGradient.cpp b/src/shaders/gradients/SkSweepGradient.cpp
index 8a2e5307b2..e70066a4d4 100644
--- a/src/shaders/gradients/SkSweepGradient.cpp
+++ b/src/shaders/gradients/SkSweepGradient.cpp
@@ -224,14 +224,9 @@ void SkSweepGradient::toString(SkString* str) const {
str->append(")");
}
-bool SkSweepGradient::adjustMatrixAndAppendStages(SkArenaAlloc* alloc,
- SkMatrix* matrix,
- SkRasterPipeline* p,
- SkRasterPipeline*) const {
- matrix->postConcat(fPtsToUnit);
+void SkSweepGradient::appendGradientStages(SkArenaAlloc*, SkRasterPipeline* p,
+ SkRasterPipeline*) const {
p->append(SkRasterPipeline::xy_to_unit_angle);
-
- return true;
}
#endif
diff --git a/src/shaders/gradients/SkSweepGradient.h b/src/shaders/gradients/SkSweepGradient.h
index 00fcc97ee6..647b454ab5 100644
--- a/src/shaders/gradients/SkSweepGradient.h
+++ b/src/shaders/gradients/SkSweepGradient.h
@@ -27,10 +27,8 @@ protected:
void flatten(SkWriteBuffer& buffer) const override;
sk_sp<SkShader> onMakeColorSpace(SkColorSpaceXformer* xformer) const override;
- bool adjustMatrixAndAppendStages(SkArenaAlloc* alloc,
- SkMatrix* matrix,
- SkRasterPipeline* tPipeline,
- SkRasterPipeline* postPipeline) const override;
+ void appendGradientStages(SkArenaAlloc* alloc, SkRasterPipeline* tPipeline,
+ SkRasterPipeline* postPipeline) const override;
bool onIsRasterPipelineOnly() const override { return true; }
diff --git a/src/shaders/gradients/SkTwoPointConicalGradient.cpp b/src/shaders/gradients/SkTwoPointConicalGradient.cpp
index 6f821a5869..0bee74fe38 100644
--- a/src/shaders/gradients/SkTwoPointConicalGradient.cpp
+++ b/src/shaders/gradients/SkTwoPointConicalGradient.cpp
@@ -202,12 +202,8 @@ void SkTwoPointConicalGradient::toString(SkString* str) const {
}
#endif
-bool SkTwoPointConicalGradient::adjustMatrixAndAppendStages(SkArenaAlloc* alloc,
- SkMatrix* matrix,
- SkRasterPipeline* p,
- SkRasterPipeline* postPipeline) const {
- matrix->postConcat(fPtsToUnit);
-
+void SkTwoPointConicalGradient::appendGradientStages(SkArenaAlloc* alloc, SkRasterPipeline* p,
+ SkRasterPipeline* postPipeline) const {
const auto dRadius = fRadius2 - fRadius1;
SkASSERT(dRadius >= 0);
@@ -220,8 +216,7 @@ bool SkTwoPointConicalGradient::adjustMatrixAndAppendStages(SkArenaAlloc* alloc,
p->append_matrix(alloc, SkMatrix::Concat(SkMatrix::MakeTrans(bias, 0),
SkMatrix::MakeScale(scale, 1)));
-
- return true;
+ return;
}
const auto dCenter = (fCenter1 - fCenter2).length();
@@ -267,6 +262,4 @@ bool SkTwoPointConicalGradient::adjustMatrixAndAppendStages(SkArenaAlloc* alloc,
p->append(SkRasterPipeline::mask_2pt_conical_degenerates, ctx);
postPipeline->append(SkRasterPipeline::apply_vector_mask, &ctx->fMask);
}
-
- return true;
}
diff --git a/src/shaders/gradients/SkTwoPointConicalGradient.h b/src/shaders/gradients/SkTwoPointConicalGradient.h
index 8b11963802..81b3b202f3 100644
--- a/src/shaders/gradients/SkTwoPointConicalGradient.h
+++ b/src/shaders/gradients/SkTwoPointConicalGradient.h
@@ -38,10 +38,8 @@ protected:
void flatten(SkWriteBuffer& buffer) const override;
sk_sp<SkShader> onMakeColorSpace(SkColorSpaceXformer* xformer) const override;
- bool adjustMatrixAndAppendStages(SkArenaAlloc* alloc,
- SkMatrix* matrix,
- SkRasterPipeline* tPipeline,
- SkRasterPipeline* postPipeline) const override;
+ void appendGradientStages(SkArenaAlloc* alloc, SkRasterPipeline* tPipeline,
+ SkRasterPipeline* postPipeline) const override;
bool onIsRasterPipelineOnly() const override { return true; }