| 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)) {
|
|
|