aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/effects/SkEmbossMaskFilter.cpp
diff options
context:
space:
mode:
authorGravatar Mike Reed <reed@google.com>2018-02-12 11:46:19 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-02-12 19:04:19 +0000
commitfaffa867716049c6b983312f034f6b54e3bccddc (patch)
tree2ec0b3ec4ab81d3bc675279735429b85a1bb7143 /src/effects/SkEmbossMaskFilter.cpp
parent154771b4dccff130d246c6b067129bafd64afb1a (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.cpp36
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 {