• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2012 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 SkLightingImageFilter_DEFINED
9 #define SkLightingImageFilter_DEFINED
10 
11 #include "SkImageFilter.h"
12 #include "SkColor.h"
13 
14 
15 class SkImageFilterLight;
16 struct SkPoint3;
17 
18 class SK_API SkLightingImageFilter : public SkImageFilter {
19 public:
20     static sk_sp<SkImageFilter> MakeDistantLitDiffuse(const SkPoint3& direction,
21         SkColor lightColor, SkScalar surfaceScale, SkScalar kd,
22         sk_sp<SkImageFilter> input, const CropRect* cropRect = nullptr);
23     static sk_sp<SkImageFilter> MakePointLitDiffuse(const SkPoint3& location,
24         SkColor lightColor, SkScalar surfaceScale, SkScalar kd,
25         sk_sp<SkImageFilter> input, const CropRect* cropRect = nullptr);
26     static sk_sp<SkImageFilter> MakeSpotLitDiffuse(const SkPoint3& location,
27         const SkPoint3& target, SkScalar specularExponent, SkScalar cutoffAngle,
28         SkColor lightColor, SkScalar surfaceScale, SkScalar kd,
29         sk_sp<SkImageFilter> input, const CropRect* cropRect = nullptr);
30     static sk_sp<SkImageFilter> MakeDistantLitSpecular(const SkPoint3& direction,
31         SkColor lightColor, SkScalar surfaceScale, SkScalar ks,
32         SkScalar shininess, sk_sp<SkImageFilter> input, const CropRect* cropRect = nullptr);
33     static sk_sp<SkImageFilter> MakePointLitSpecular(const SkPoint3& location,
34         SkColor lightColor, SkScalar surfaceScale, SkScalar ks,
35         SkScalar shininess, sk_sp<SkImageFilter> input, const CropRect* cropRect = nullptr);
36     static sk_sp<SkImageFilter> MakeSpotLitSpecular(const SkPoint3& location,
37         const SkPoint3& target, SkScalar specularExponent, SkScalar cutoffAngle,
38         SkColor lightColor, SkScalar surfaceScale, SkScalar ks,
39         SkScalar shininess, sk_sp<SkImageFilter> input, const CropRect* cropRect = nullptr);
40     ~SkLightingImageFilter() override;
41 
42     SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP()
43 
44 protected:
45     SkLightingImageFilter(sk_sp<SkImageFilterLight> light,
46                           SkScalar surfaceScale,
47                           sk_sp<SkImageFilter> input,
48                           const CropRect* cropRect);
49     void flatten(SkWriteBuffer&) const override;
light()50     const SkImageFilterLight* light() const { return fLight.get(); }
surfaceScale()51     SkScalar surfaceScale() const { return fSurfaceScale; }
affectsTransparentBlack()52     bool affectsTransparentBlack() const override { return true; }
53 
54 private:
55     sk_sp<SkImageFilterLight> fLight;
56     SkScalar fSurfaceScale;
57 
58     typedef SkImageFilter INHERITED;
59 };
60 
61 #endif
62