Index: src/effects/SkLightingImageFilter.cpp |
diff --git a/src/effects/SkLightingImageFilter.cpp b/src/effects/SkLightingImageFilter.cpp |
index a9e833539cde6e860cb35cc8f09c710bc0d40711..8965d06d1a65b0f003973f5d5e9058c2640fdc7b 100644 |
--- a/src/effects/SkLightingImageFilter.cpp |
+++ b/src/effects/SkLightingImageFilter.cpp |
@@ -99,7 +99,7 @@ static SkScalar max_component(const SkPoint3& p) { |
class SpecularLightingType { |
public: |
SpecularLightingType(SkScalar ks, SkScalar shininess) |
- : fKS(ks), fShininess(shininess) {} |
+ : fKS(SkScalarNormalize(ks)), fShininess(SkScalarNormalize(shininess)) {} |
SkPMColor light(const SkPoint3& normal, const SkPoint3& surfaceTolight, |
const SkPoint3& lightColor) const { |
SkPoint3 halfDir(surfaceTolight); |
@@ -316,9 +316,9 @@ void lightBitmap(const LightingType& lightingType, |
SkPoint3 readPoint3(SkReadBuffer& buffer) { |
SkPoint3 point; |
- point.fX = buffer.readScalar(); |
- point.fY = buffer.readScalar(); |
- point.fZ = buffer.readScalar(); |
+ point.fX = SkScalarNormalize(buffer.readScalar()); |
+ point.fY = SkScalarNormalize(buffer.readScalar()); |
+ point.fZ = SkScalarNormalize(buffer.readScalar()); |
buffer.validate(SkScalarIsFinite(point.fX) && |
SkScalarIsFinite(point.fY) && |
SkScalarIsFinite(point.fZ)); |
@@ -775,7 +775,7 @@ protected: |
SkIntToScalar(SkColorGetB(color))); |
} |
SkImageFilterLight(const SkPoint3& color) |
- : fColor(color) {} |
+ : fColor(color.makeDenormalsZero()) {} |
SkImageFilterLight(SkReadBuffer& buffer) { |
fColor = readPoint3(buffer); |
} |
@@ -793,7 +793,7 @@ private: |
class SkDistantLight : public SkImageFilterLight { |
public: |
SkDistantLight(const SkPoint3& direction, SkColor color) |
- : INHERITED(color), fDirection(direction) { |
+ : INHERITED(color), fDirection(direction.makeDenormalsZero()) { |
} |
SkPoint3 surfaceToLight(int x, int y, int z, SkScalar surfaceScale) const { |
@@ -996,10 +996,10 @@ public: |
SkSpotLight(SkReadBuffer& buffer) : INHERITED(buffer) { |
fLocation = readPoint3(buffer); |
fTarget = readPoint3(buffer); |
- fSpecularExponent = buffer.readScalar(); |
- fCosOuterConeAngle = buffer.readScalar(); |
- fCosInnerConeAngle = buffer.readScalar(); |
- fConeScale = buffer.readScalar(); |
+ fSpecularExponent = SkScalarNormalize(buffer.readScalar()); |
+ fCosOuterConeAngle = SkScalarNormalize(buffer.readScalar()); |
+ fCosInnerConeAngle = SkScalarNormalize(buffer.readScalar()); |
+ fConeScale = SkScalarNormalize(buffer.readScalar()); |
fS = readPoint3(buffer); |
buffer.validate(SkScalarIsFinite(fSpecularExponent) && |
SkScalarIsFinite(fCosOuterConeAngle) && |
@@ -1016,13 +1016,13 @@ protected: |
const SkPoint3& s, |
const SkPoint3& color) |
: INHERITED(color), |
- fLocation(location), |
- fTarget(target), |
- fSpecularExponent(specularExponent), |
- fCosOuterConeAngle(cosOuterConeAngle), |
- fCosInnerConeAngle(cosInnerConeAngle), |
- fConeScale(coneScale), |
- fS(s) |
+ fLocation(location.makeDenormalsZero()), |
+ fTarget(target.makeDenormalsZero()), |
+ fSpecularExponent(SkScalarNormalize(specularExponent)), |
+ fCosOuterConeAngle(SkScalarNormalize(cosOuterConeAngle)), |
+ fCosInnerConeAngle(SkScalarNormalize(cosInnerConeAngle)), |
+ fConeScale(SkScalarNormalize(coneScale)), |
+ fS(s.makeDenormalsZero()) |
{ |
} |
void onFlattenLight(SkWriteBuffer& buffer) const override { |
@@ -1102,7 +1102,7 @@ SkLightingImageFilter::SkLightingImageFilter(sk_sp<SkImageFilterLight> light, |
sk_sp<SkImageFilter> input, const CropRect* cropRect) |
: INHERITED(&input, 1, cropRect) |
, fLight(std::move(light)) |
- , fSurfaceScale(surfaceScale / 255) { |
+ , fSurfaceScale(SkScalarNormalize(surfaceScale / 255)) { |
} |
SkLightingImageFilter::~SkLightingImageFilter() {} |
@@ -1218,7 +1218,7 @@ SkDiffuseLightingImageFilter::SkDiffuseLightingImageFilter(sk_sp<SkImageFilterLi |
sk_sp<SkImageFilter> input, |
const CropRect* cropRect) |
: INHERITED(std::move(light), surfaceScale, std::move(input), cropRect) |
- , fKD(kd) { |
+ , fKD(SkScalarNormalize(kd)) { |
} |
sk_sp<SkFlattenable> SkDiffuseLightingImageFilter::CreateProc(SkReadBuffer& buffer) { |
@@ -1379,8 +1379,8 @@ SkSpecularLightingImageFilter::SkSpecularLightingImageFilter(sk_sp<SkImageFilter |
sk_sp<SkImageFilter> input, |
const CropRect* cropRect) |
: INHERITED(std::move(light), surfaceScale, std::move(input), cropRect) |
- , fKS(ks) |
- , fShininess(shininess) { |
+ , fKS(SkScalarNormalize(ks)) |
+ , fShininess(SkScalarNormalize(shininess)) { |
} |
sk_sp<SkFlattenable> SkSpecularLightingImageFilter::CreateProc(SkReadBuffer& buffer) { |
@@ -1703,7 +1703,7 @@ GrLightingEffect::GrLightingEffect(GrTexture* texture, |
const SkIRect* srcBounds) |
: INHERITED(texture, nullptr, GrCoordTransform::MakeDivByTextureWHMatrix(texture)) |
, fLight(light) |
- , fSurfaceScale(surfaceScale) |
+ , fSurfaceScale(SkScalarNormalize(surfaceScale)) |
, fFilterMatrix(matrix) |
, fBoundaryMode(boundaryMode) |
, fDomain(create_domain(texture, srcBounds, GrTextureDomain::kDecal_Mode)) { |