Bottom right pixel of feDiffuseLighting has the wrong color
authorsimon.fraser@apple.com <simon.fraser@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 1 Jan 2018 20:28:32 +0000 (20:28 +0000)
committersimon.fraser@apple.com <simon.fraser@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 1 Jan 2018 20:28:32 +0000 (20:28 +0000)
https://bugs.webkit.org/show_bug.cgi?id=181203

Reviewed by Antti Koivisto.

Source/WebCore:

The lower right pixel of a feDiffuseLighting was the wrong color, because the kernel
values didn't match the spec for the bottom right Y values.

Test: svg/filters/feDiffuseLighting-bottomRightPixel.html

* platform/graphics/filters/FELighting.cpp:
(WebCore::FELighting::LightingData::bottomRightNormal const):

LayoutTests:

Test that draws an SVG image into a canvas, and scales it up without interpolation.

* svg/filters/feDiffuseLighting-bottomRightPixel-expected.html: Added.
* svg/filters/feDiffuseLighting-bottomRightPixel.html: Added.
* svg/filters/resources/feDiffuseLighting-rect.svg: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@226316 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/svg/filters/feDiffuseLighting-bottomRightPixel-expected.html [new file with mode: 0644]
LayoutTests/svg/filters/feDiffuseLighting-bottomRightPixel.html [new file with mode: 0644]
LayoutTests/svg/filters/feSpotLight-color-expected.svg
LayoutTests/svg/filters/feSpotLight-color.svg
LayoutTests/svg/filters/resources/feDiffuseLighting-rect.svg [new file with mode: 0644]
Source/WebCore/ChangeLog
Source/WebCore/platform/graphics/filters/FELighting.cpp

index e71621c..2962d82 100644 (file)
@@ -1,3 +1,16 @@
+2017-12-31  Simon Fraser  <simon.fraser@apple.com>
+
+        Bottom right pixel of feDiffuseLighting has the wrong color
+        https://bugs.webkit.org/show_bug.cgi?id=181203
+
+        Reviewed by Antti Koivisto.
+
+        Test that draws an SVG image into a canvas, and scales it up without interpolation.
+
+        * svg/filters/feDiffuseLighting-bottomRightPixel-expected.html: Added.
+        * svg/filters/feDiffuseLighting-bottomRightPixel.html: Added.
+        * svg/filters/resources/feDiffuseLighting-rect.svg: Added.
+
 2017-12-30  Simon Fraser  <simon.fraser@apple.com>
 
         SVG lighting colors need to be converted into linearSRGB
diff --git a/LayoutTests/svg/filters/feDiffuseLighting-bottomRightPixel-expected.html b/LayoutTests/svg/filters/feDiffuseLighting-bottomRightPixel-expected.html
new file mode 100644 (file)
index 0000000..b472752
--- /dev/null
@@ -0,0 +1 @@
+<div style="width: 200px; height: 200px; background-color: green"></div>
diff --git a/LayoutTests/svg/filters/feDiffuseLighting-bottomRightPixel.html b/LayoutTests/svg/filters/feDiffuseLighting-bottomRightPixel.html
new file mode 100644 (file)
index 0000000..57e25b4
--- /dev/null
@@ -0,0 +1,17 @@
+<canvas id="canvas" width="200" height="200"></canvas>
+<img id="image" src="resources/feDiffuseLighting-rect.svg" onload="drawIntoCanvas()" style="visibility:hidden">
+<script>
+if (window.testRunner)
+    testRunner.waitUntilDone();
+
+function drawIntoCanvas()
+{
+    var ctx = document.getElementById('canvas').getContext("2d");
+    var image = document.getElementById('image');
+    ctx.imageSmoothingEnabled = false;
+    ctx.drawImage(image, 0, 0, 200, 200);
+
+    if (window.testRunner)
+        testRunner.notifyDone();
+}
+</script>
index 84d7020..c99aedb 100644 (file)
@@ -5,6 +5,4 @@
     </filter>
 </defs>
 <rect x="0" y="00" width="400" height="400" filter="url(#filter)"/>
-<!-- Mask out a small difference in the bottom right corner -->
-<rect x="385" y="385" width="20" height="20" fill="black"/>
 </svg>
index 590aa6e..c44b973 100644 (file)
@@ -7,6 +7,4 @@
     </filter>
 </defs>
 <rect x="0" y="0" width="400" height="400" filter="url(#filter)"/>
-<!-- Mask out a small difference in the bottom right corner -->
-<rect x="385" y="385" width="20" height="20" fill="black"/>
 </svg>
diff --git a/LayoutTests/svg/filters/resources/feDiffuseLighting-rect.svg b/LayoutTests/svg/filters/resources/feDiffuseLighting-rect.svg
new file mode 100644 (file)
index 0000000..e273dbd
--- /dev/null
@@ -0,0 +1,10 @@
+<svg width="10px" height="10px" xmlns="http://www.w3.org/2000/svg">
+<defs>
+    <filter id="filter" filterUnits="objectBoundingBox" x="0" y="0" width="100%" height="100%">
+        <feDiffuseLighting lighting-color="green">
+            <feDistantLight azimuth="100" elevation="100"/>
+        </feDiffuseLighting>
+    </filter>
+</defs>
+<rect id="target" x="0" y="0" width="10" height="10" filter="url(#filter)"/>
+</svg>
index ab0c164..cff934f 100644 (file)
@@ -1,3 +1,18 @@
+2017-12-31  Simon Fraser  <simon.fraser@apple.com>
+
+        Bottom right pixel of feDiffuseLighting has the wrong color
+        https://bugs.webkit.org/show_bug.cgi?id=181203
+
+        Reviewed by Antti Koivisto.
+
+        The lower right pixel of a feDiffuseLighting was the wrong color, because the kernel
+        values didn't match the spec for the bottom right Y values.
+
+        Test: svg/filters/feDiffuseLighting-bottomRightPixel.html
+
+        * platform/graphics/filters/FELighting.cpp:
+        (WebCore::FELighting::LightingData::bottomRightNormal const):
+
 2017-12-30  Simon Fraser  <simon.fraser@apple.com>
 
         SVG lighting colors need to be converted into linearSRGB
index 44865af..7539eaa 100644 (file)
@@ -233,7 +233,7 @@ inline IntSize FELighting::LightingData::bottomRightNormal(int offset) const
     int top = static_cast<int>(pixels->item(offset + cAlphaChannelOffset));
     return {
         -topLeft + top - 2 * left + 2 * center,
-        topLeft - 2 * top + left + 2 * center
+        -topLeft - 2 * top + left + 2 * center
     };
 }