diff options
author | 2017-07-29 19:08:28 -0400 | |
---|---|---|
committer | 2017-07-30 14:24:21 +0000 | |
commit | 50b2084bd15e7aea416dc8c6fd2373864c50f023 (patch) | |
tree | a68b832e4eb3e9e8cd8c463bccab8b9836cd6fff /src | |
parent | c25437da5c6a3e5766c7811cfd484c5ef1b2861e (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.cpp | 7 | ||||
-rw-r--r-- | src/shaders/gradients/SkGradientShaderPriv.h | 6 | ||||
-rw-r--r-- | src/shaders/gradients/SkLinearGradient.cpp | 9 | ||||
-rw-r--r-- | src/shaders/gradients/SkLinearGradient.h | 6 | ||||
-rw-r--r-- | src/shaders/gradients/SkRadialGradient.cpp | 9 | ||||
-rw-r--r-- | src/shaders/gradients/SkRadialGradient.h | 6 | ||||
-rw-r--r-- | src/shaders/gradients/SkSweepGradient.cpp | 9 | ||||
-rw-r--r-- | src/shaders/gradients/SkSweepGradient.h | 6 | ||||
-rw-r--r-- | src/shaders/gradients/SkTwoPointConicalGradient.cpp | 13 | ||||
-rw-r--r-- | src/shaders/gradients/SkTwoPointConicalGradient.h | 6 |
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; } |