diff options
author | 2017-05-25 14:05:42 -0400 | |
---|---|---|
committer | 2017-05-25 18:33:17 +0000 | |
commit | 04d22c04838fb312aa5ecc770299aff31076e7e3 (patch) | |
tree | 0244eb375c20336592366fbbff8869fce1775595 /src/effects/gradients | |
parent | ac1e4964e7816de1f4977b52fa5f2f372537468b (diff) |
Remove (now-dead) SK_LEGACY_SWEEP_GRADIENT code
Behold the first raster pipeline-only gradient!
Change-Id: Ib6f53224e4ff9506aafdae1d2303102fc5235dfc
Reviewed-on: https://skia-review.googlesource.com/17982
Commit-Queue: Mike Klein <mtklein@chromium.org>
Reviewed-by: Mike Klein <mtklein@chromium.org>
Diffstat (limited to 'src/effects/gradients')
-rw-r--r-- | src/effects/gradients/SkSweepGradient.cpp | 81 | ||||
-rw-r--r-- | src/effects/gradients/SkSweepGradient.h | 17 |
2 files changed, 3 insertions, 95 deletions
diff --git a/src/effects/gradients/SkSweepGradient.cpp b/src/effects/gradients/SkSweepGradient.cpp index 1e583c2ee0..a138a8e213 100644 --- a/src/effects/gradients/SkSweepGradient.cpp +++ b/src/effects/gradients/SkSweepGradient.cpp @@ -8,9 +8,6 @@ #include "SkColorSpaceXformer.h" #include "SkSweepGradient.h" -#include <algorithm> -#include <cmath> - #include "SkPM4fPriv.h" #include "SkRasterPipeline.h" @@ -52,84 +49,6 @@ void SkSweepGradient::flatten(SkWriteBuffer& buffer) const { buffer.writePoint(fCenter); } -SkShaderBase::Context* SkSweepGradient::onMakeContext( - const ContextRec& rec, SkArenaAlloc* alloc) const -{ - return CheckedMakeContext<SweepGradientContext>(alloc, *this, rec); -} - -SkSweepGradient::SweepGradientContext::SweepGradientContext( - const SkSweepGradient& shader, const ContextRec& rec) - : INHERITED(shader, rec) {} - -bool SkSweepGradient::isRasterPipelineOnly() const { -#ifdef SK_LEGACY_SWEEP_GRADIENT - return false; -#else - return true; -#endif -} - -// returns angle in a circle [0..2PI) -> [0..255] -static unsigned SkATan2_255(float y, float x) { - // static const float g255Over2PI = 255 / (2 * SK_ScalarPI); - static const float g255Over2PI = 40.584510488433314f; - - float result = sk_float_atan2(y, x); - if (!SkScalarIsFinite(result)) { - return 0; - } - if (result < 0) { - result += 2 * SK_ScalarPI; - } - SkASSERT(result >= 0); - // since our value is always >= 0, we can cast to int, which is faster than - // calling floorf() - int ir = (int)(result * g255Over2PI); - SkASSERT(ir >= 0 && ir <= 255); - return ir; -} - -void SkSweepGradient::SweepGradientContext::shadeSpan(int x, int y, SkPMColor* SK_RESTRICT dstC, - int count) { - SkMatrix::MapXYProc proc = fDstToIndexProc; - const SkMatrix& matrix = fDstToIndex; - const SkPMColor* SK_RESTRICT cache = fCache->getCache32(); - int toggle = init_dither_toggle(x, y); - SkPoint srcPt; - - if (fDstToIndexClass != kPerspective_MatrixClass) { - proc(matrix, SkIntToScalar(x) + SK_ScalarHalf, - SkIntToScalar(y) + SK_ScalarHalf, &srcPt); - SkScalar dx, fx = srcPt.fX; - SkScalar dy, fy = srcPt.fY; - - if (fDstToIndexClass == kFixedStepInX_MatrixClass) { - const auto step = matrix.fixedStepInX(SkIntToScalar(y) + SK_ScalarHalf); - dx = step.fX; - dy = step.fY; - } else { - SkASSERT(fDstToIndexClass == kLinear_MatrixClass); - dx = matrix.getScaleX(); - dy = matrix.getSkewY(); - } - - for (; count > 0; --count) { - *dstC++ = cache[toggle + SkATan2_255(fy, fx)]; - fx += dx; - fy += dy; - toggle = next_dither_toggle(toggle); - } - } else { // perspective case - for (int stop = x + count; x < stop; x++) { - proc(matrix, SkIntToScalar(x) + SK_ScalarHalf, - SkIntToScalar(y) + SK_ScalarHalf, &srcPt); - *dstC++ = cache[toggle + SkATan2_255(srcPt.fY, srcPt.fX)]; - toggle = next_dither_toggle(toggle); - } - } -} - ///////////////////////////////////////////////////////////////////// #if SK_SUPPORT_GPU diff --git a/src/effects/gradients/SkSweepGradient.h b/src/effects/gradients/SkSweepGradient.h index b7ed7e5bb9..c30ca4d916 100644 --- a/src/effects/gradients/SkSweepGradient.h +++ b/src/effects/gradients/SkSweepGradient.h @@ -10,20 +10,10 @@ #include "SkGradientShaderPriv.h" -class SkSweepGradient : public SkGradientShaderBase { +class SkSweepGradient final : public SkGradientShaderBase { public: SkSweepGradient(SkScalar cx, SkScalar cy, const Descriptor&); - class SweepGradientContext : public SkGradientShaderBase::GradientShaderBaseContext { - public: - SweepGradientContext(const SkSweepGradient& shader, const ContextRec&); - - void shadeSpan(int x, int y, SkPMColor dstC[], int count) override; - - private: - typedef SkGradientShaderBase::GradientShaderBaseContext INHERITED; - }; - GradientType asAGradient(GradientInfo* info) const override; #if SK_SUPPORT_GPU @@ -35,14 +25,13 @@ public: protected: void flatten(SkWriteBuffer& buffer) const override; - Context* onMakeContext(const ContextRec&, SkArenaAlloc*) const override; sk_sp<SkShader> onMakeColorSpace(SkColorSpaceXformer* xformer) const override; bool adjustMatrixAndAppendStages(SkArenaAlloc* alloc, SkMatrix* matrix, - SkRasterPipeline* p) const final; + SkRasterPipeline* p) const override; - bool isRasterPipelineOnly() const final; + bool isRasterPipelineOnly() const override { return true; } private: const SkPoint fCenter; |