1e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack/*
2e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack * Copyright 2016 Google Inc.
3e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack *
4e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack * Use of this source code is governed by a BSD-style license that can be
5e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack * found in the LICENSE file.
6e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack */
7e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack#ifndef SkShadowParams_DEFINED
8e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack#define SkShadowParams_DEFINED
9e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack
106b20a559968e1ed0d3aa4ecbd6ddda9e681b4f86Hal Canary#include "SkScalar.h"
116b20a559968e1ed0d3aa4ecbd6ddda9e681b4f86Hal Canary
12e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack/** \struct SkShadowParams
13e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack
14e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack    This struct holds information needed for drawing shadows.
15e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack
16e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack    fShadowRadius - radius of the shadow blur
17e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack
18e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack    fBiasingConstant - A constant used in variance shadow mapping to directly
19e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack    0.0 - 1.0          reduce light bleeding. Essentially sets all shadows
20e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack    ~.25               below a certain brightness equal to no light, and does
21e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack                       a linear step on the rest. Essentially makes shadows
22e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack                       darker and more rounded at higher values.
23e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack
24e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack    fMinVariance - Too low of a variance (near the outer edges of blurry
25e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack    ~512, 1024     shadows) will lead to ugly sharp shadow brightness
26e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack                   distortions. This enforces a minimum amount of variance
27e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack                   in the calculation to smooth out the outside edges of
28e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack                   blurry shadows. However, too high of a value for this will
29e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack                   cause all shadows to be lighter by visibly different
30e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack                   amounts varying on depth.
31e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack
32e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack    fType - Decides which algorithm to use to draw shadows.
33e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack*/
34e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblackstruct SkShadowParams {
35e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack    SkScalar fShadowRadius;
36e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack    SkScalar fBiasingConstant;
37e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack    SkScalar fMinVariance;
38e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack
39e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack    enum ShadowType {
40e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack        kNoBlur_ShadowType,
41e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack        kVariance_ShadowType,
42e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack
43e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack        kLast_ShadowType = kVariance_ShadowType
44e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack    };
45e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack    static const int kShadowTypeCount = kLast_ShadowType + 1;
46e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack
47e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack    ShadowType fType;
48e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack};
49e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack
50e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack#endif
51