xref: /aosp_15_r20/external/skia/src/effects/SkEmbossMaskFilter.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1 /*
2  * Copyright 2006 The Android Open Source Project
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #ifndef SkEmbossMaskFilter_DEFINED
9 #define SkEmbossMaskFilter_DEFINED
10 
11 #include "include/core/SkFlattenable.h"
12 #include "include/core/SkMaskFilter.h"
13 #include "include/core/SkRect.h"
14 #include "include/core/SkRefCnt.h"
15 #include "include/core/SkScalar.h"
16 #include "src/core/SkMask.h"
17 #include "src/core/SkMaskFilterBase.h"
18 
19 #include <cstdint>
20 
21 class SkMatrix;
22 class SkReadBuffer;
23 class SkWriteBuffer;
24 struct SkIPoint;
25 
26 /** \class SkEmbossMaskFilter
27 
28     This mask filter creates a 3D emboss look, by specifying a light and blur amount.
29 */
30 class SkEmbossMaskFilter : public SkMaskFilterBase {
31 public:
32     struct Light {
33         SkScalar    fDirection[3];  // x,y,z
34         uint16_t    fPad;
35         uint8_t     fAmbient;
36         uint8_t     fSpecular;      // exponent, 4.4 right now
37     };
38 
39     static sk_sp<SkMaskFilter> Make(SkScalar blurSigma, const Light& light);
40 
41     // overrides from SkMaskFilter
42     //  This method is not exported to java.
43     SkMask::Format getFormat() const override;
44     //  This method is not exported to java.
45     bool filterMask(SkMaskBuilder* dst, const SkMask& src, const SkMatrix&,
46                     SkIPoint* margin) const override;
type()47     SkMaskFilterBase::Type type() const override { return SkMaskFilterBase::Type::kEmboss; }
48 
49 protected:
50     SkEmbossMaskFilter(SkScalar blurSigma, const Light& light);
51     void flatten(SkWriteBuffer&) const override;
52 
53 private:
54     SK_FLATTENABLE_HOOKS(SkEmbossMaskFilter)
55 
56     Light       fLight;
57     SkScalar    fBlurSigma;
58 
59     using INHERITED = SkMaskFilter;
60 };
61 
62 #endif
63