diff options
author | 2017-05-25 22:07:16 +0000 | |
---|---|---|
committer | 2017-05-25 22:30:19 +0000 | |
commit | d8872be505c5c9c48072fe62c244e53e9b7334f1 (patch) | |
tree | ef6ae54d394f1bf0794393c42129811b93d0f6be /src/effects/gradients/SkLinearGradient.h | |
parent | 5b474d36238e38642add8d4b54cb9ac80935262b (diff) |
Revert "Relocate shaders to own dir"
This reverts commit fabe0b26d05624ce7374f6ca89bd66df6142534e.
Reason for revert: Last android roll failed with "external/skia/src/effects/SkGaussianEdgeShader.h:11:10: fatal error: 'SkShaderBase.h' file not found"
Original change's description:
> Relocate shaders to own dir
>
> Consolidate all shader impls under src/shaders/.
>
> Change-Id: I450e37541214704c1ad9e379d9d753b7cc62fac3
> Reviewed-on: https://skia-review.googlesource.com/17927
> Commit-Queue: Florin Malita <fmalita@chromium.org>
> Reviewed-by: Herb Derby <herb@google.com>
>
TBR=mtklein@google.com,herb@google.com,fmalita@chromium.org,reed@google.com
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Change-Id: Idbb2b75053969df1dad9d8ce0217cd39189b9ddb
Reviewed-on: https://skia-review.googlesource.com/18020
Reviewed-by: Stan Iliev <stani@google.com>
Commit-Queue: Stan Iliev <stani@google.com>
Diffstat (limited to 'src/effects/gradients/SkLinearGradient.h')
-rw-r--r-- | src/effects/gradients/SkLinearGradient.h | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/src/effects/gradients/SkLinearGradient.h b/src/effects/gradients/SkLinearGradient.h new file mode 100644 index 0000000000..19a965c7bb --- /dev/null +++ b/src/effects/gradients/SkLinearGradient.h @@ -0,0 +1,87 @@ +/* + * Copyright 2012 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef SkLinearGradient_DEFINED +#define SkLinearGradient_DEFINED + +#include "SkGradientShaderPriv.h" +#include "SkNx.h" + +struct Sk4fStorage { + float fArray[4]; + + operator Sk4f() const { + return Sk4f::Load(fArray); + } + + Sk4fStorage& operator=(const Sk4f& src) { + src.store(fArray); + return *this; + } +}; + +class SkLinearGradient : public SkGradientShaderBase { +public: + enum { + // Temp flag for testing the 4f impl. + kForce4fContext_PrivateFlag = 1 << 7, + }; + + SkLinearGradient(const SkPoint pts[2], const Descriptor&); + + class LinearGradientContext : public SkGradientShaderBase::GradientShaderBaseContext { + public: + LinearGradientContext(const SkLinearGradient&, const ContextRec&); + + void shadeSpan(int x, int y, SkPMColor dstC[], int count) override; + + struct Rec { + Sk4fStorage fColor; + float fPos; + float fPosScale; + }; + private: + SkTDArray<Rec> fRecs; + bool fApplyAlphaAfterInterp; + + void shade4_clamp(int x, int y, SkPMColor dstC[], int count); + template <bool, bool> void shade4_dx_clamp(SkPMColor dstC[], int count, float fx, float dx, + float invDx, const float dither[2]); + + typedef SkGradientShaderBase::GradientShaderBaseContext INHERITED; + }; + + GradientType asAGradient(GradientInfo* info) const override; +#if SK_SUPPORT_GPU + sk_sp<GrFragmentProcessor> asFragmentProcessor(const AsFPArgs&) const override; +#endif + + SK_TO_STRING_OVERRIDE() + SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkLinearGradient) + +protected: + SkLinearGradient(SkReadBuffer& buffer); + void flatten(SkWriteBuffer& buffer) const override; + Context* onMakeContext(const ContextRec&, SkArenaAlloc*) const override; + + bool adjustMatrixAndAppendStages(SkArenaAlloc* alloc, + SkMatrix* matrix, + SkRasterPipeline* p) const final; + + + sk_sp<SkShader> onMakeColorSpace(SkColorSpaceXformer* xformer) const override; + +private: + class LinearGradient4fContext; + + friend class SkGradientShader; + typedef SkGradientShaderBase INHERITED; + const SkPoint fStart; + const SkPoint fEnd; +}; + +#endif |