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