diff options
author | Mike Reed <reed@google.com> | 2018-02-12 11:46:19 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-02-12 19:04:19 +0000 |
commit | faffa867716049c6b983312f034f6b54e3bccddc (patch) | |
tree | 2ec0b3ec4ab81d3bc675279735429b85a1bb7143 /src/effects/SkEmbossMaskFilter.cpp | |
parent | 154771b4dccff130d246c6b067129bafd64afb1a (diff) |
begin to wrap all float divides
Bug: skia:7607 skia:6134
Change-Id: Id126e92816bef1df1372bd531238cda9f3b36fab
Reviewed-on: https://skia-review.googlesource.com/106261
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Mike Reed <reed@google.com>
Diffstat (limited to 'src/effects/SkEmbossMaskFilter.cpp')
-rw-r--r-- | src/effects/SkEmbossMaskFilter.cpp | 36 |
1 files changed, 24 insertions, 12 deletions
diff --git a/src/effects/SkEmbossMaskFilter.cpp b/src/effects/SkEmbossMaskFilter.cpp index 9fa26c5731..9f4a54a8be 100644 --- a/src/effects/SkEmbossMaskFilter.cpp +++ b/src/effects/SkEmbossMaskFilter.cpp @@ -14,8 +14,27 @@ #include "SkWriteBuffer.h" #include "SkString.h" +static void normalize3(SkScalar dst[3], const SkScalar src[3]) { + SkScalar mag = SkScalarSquare(src[0]) + SkScalarSquare(src[1]) + SkScalarSquare(src[2]); + SkScalar scale = SkScalarInvert(SkScalarSqrt(mag)); + + for (int i = 0; i < 3; i++) { + dst[i] = src[i] * scale; + } +} + sk_sp<SkMaskFilter> SkEmbossMaskFilter::Make(SkScalar blurSigma, const Light& light) { - return sk_sp<SkMaskFilter>(new SkEmbossMaskFilter(blurSigma, light)); + if (!SkScalarIsFinite(blurSigma) || blurSigma <= 0) { + return nullptr; + } + + Light newLight = light; + normalize3(newLight.fDirection, light.fDirection); + if (SkScalarsAreFinite(newLight.fDirection, 3)) { + return nullptr; + } + + return sk_sp<SkMaskFilter>(new SkEmbossMaskFilter(blurSigma, newLight)); } #ifdef SK_SUPPORT_LEGACY_EMBOSSMASKFILTER @@ -40,18 +59,11 @@ sk_sp<SkMaskFilter> SkBlurMaskFilter::MakeEmboss(SkScalar blurSigma, const SkSca /////////////////////////////////////////////////////////////////////////////// -static void normalize(SkScalar v[3]) { - SkScalar mag = SkScalarSquare(v[0]) + SkScalarSquare(v[1]) + SkScalarSquare(v[2]); - mag = SkScalarSqrt(mag); - - for (int i = 0; i < 3; i++) { - v[i] /= mag; - } -} - SkEmbossMaskFilter::SkEmbossMaskFilter(SkScalar blurSigma, const Light& light) - : fLight(light), fBlurSigma(blurSigma) { - normalize(fLight.fDirection); + : fLight(light), fBlurSigma(blurSigma) +{ + SkASSERT(fBlurSigma > 0); + SkASSERT(SkScalarsAreFinite(fLight.fDirection, 3)); } SkMask::Format SkEmbossMaskFilter::getFormat() const { |