| Index: src/effects/SkLightingImageFilter.cpp
|
| diff --git a/src/effects/SkLightingImageFilter.cpp b/src/effects/SkLightingImageFilter.cpp
|
| index ccb1dc5127357da4df535069bd3af6d8a1b2c247..363399466cdd951cb89d9114a66f64729c1b788b 100644
|
| --- a/src/effects/SkLightingImageFilter.cpp
|
| +++ b/src/effects/SkLightingImageFilter.cpp
|
| @@ -64,9 +64,9 @@ public:
|
| colorScale = SkScalarClampMax(colorScale, SK_Scalar1);
|
| SkPoint3 color(lightColor * colorScale);
|
| return SkPackARGB32(255,
|
| - SkScalarFloorToInt(color.fX),
|
| - SkScalarFloorToInt(color.fY),
|
| - SkScalarFloorToInt(color.fZ));
|
| + SkClampMax(SkScalarFloorToInt(color.fX), 255),
|
| + SkClampMax(SkScalarFloorToInt(color.fY), 255),
|
| + SkClampMax(SkScalarFloorToInt(color.fZ), 255));
|
| }
|
| private:
|
| SkScalar fKD;
|
| @@ -84,10 +84,10 @@ public:
|
| SkScalarPow(normal.dot(halfDir), fShininess));
|
| colorScale = SkScalarClampMax(colorScale, SK_Scalar1);
|
| SkPoint3 color(lightColor * colorScale);
|
| - return SkPackARGB32(SkScalarFloorToInt(color.maxComponent()),
|
| - SkScalarFloorToInt(color.fX),
|
| - SkScalarFloorToInt(color.fY),
|
| - SkScalarFloorToInt(color.fZ));
|
| + return SkPackARGB32(SkClampMax(SkScalarFloorToInt(color.maxComponent()), 255),
|
| + SkClampMax(SkScalarFloorToInt(color.fX), 255),
|
| + SkClampMax(SkScalarFloorToInt(color.fY), 255),
|
| + SkClampMax(SkScalarFloorToInt(color.fZ), 255));
|
| }
|
| private:
|
| SkScalar fKS;
|
| @@ -660,7 +660,7 @@ public:
|
| : INHERITED(color),
|
| fLocation(location),
|
| fTarget(target),
|
| - fSpecularExponent(specularExponent)
|
| + fSpecularExponent(SkScalarPin(specularExponent, kSpecularExponentMin, kSpecularExponentMax))
|
| {
|
| fS = target - location;
|
| fS.normalize();
|
| @@ -744,6 +744,9 @@ protected:
|
| }
|
|
|
| private:
|
| + static const SkScalar kSpecularExponentMin;
|
| + static const SkScalar kSpecularExponentMax;
|
| +
|
| typedef SkLight INHERITED;
|
| SkPoint3 fLocation;
|
| SkPoint3 fTarget;
|
| @@ -754,6 +757,11 @@ private:
|
| SkPoint3 fS;
|
| };
|
|
|
| +// According to the spec, the specular term should be in the range [1, 128] :
|
| +// http://www.w3.org/TR/SVG/filters.html#feSpecularLightingSpecularExponentAttribute
|
| +const SkScalar SkSpotLight::kSpecularExponentMin = SkFloatToScalar(1.0f);
|
| +const SkScalar SkSpotLight::kSpecularExponentMax = SkFloatToScalar(128.0f);
|
| +
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| SkLightingImageFilter::SkLightingImageFilter(SkLight* light, SkScalar surfaceScale, SkImageFilter* input, const SkIRect* cropRect)
|
|
|