Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(108)

Unified Diff: src/effects/SkLightingImageFilter.cpp

Issue 2198263002: Image filters: force near-zero floating point parameters to zero. Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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)) {

Powered by Google App Engine
This is Rietveld 408576698