Title: [270103] trunk
Revision
270103
Author
[email protected]
Date
2020-11-20 03:48:29 -0800 (Fri, 20 Nov 2020)

Log Message

[TextureMapper] Hidden surface removal issue for nested transform-style:perserve-3d in Snow Stack demo
https://bugs.webkit.org/show_bug.cgi?id=218969

Reviewed by Carlos Garcia Campos.

Source/WebCore:

r267711 enabled a depth buffer for a perserve-3d layer, but it
didn't work nicely for nested perserve-3d, for example Snow Stack
demo. It needs a intermediate surface to properly render
interchangeably nested perserve-3d and non perserve-3d layers, for
example transforms/3d/point-mapping/3d-point-mapping-deep.html.
This change supports only simply nested perserve-3d layers such
like Snow Stack demo.

* platform/graphics/texmap/TextureMapperLayer.cpp:
(WebCore::TextureMapperLayer::paintSelfAndChildren): Added
Preserves3DScope to call beginPreserves3D and endPreserves3D.

LayoutTests:

* platform/gtk/transforms/3d/point-mapping/3d-point-mapping-deep-expected.png: Rebaselined.

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (270102 => 270103)


--- trunk/LayoutTests/ChangeLog	2020-11-20 11:40:06 UTC (rev 270102)
+++ trunk/LayoutTests/ChangeLog	2020-11-20 11:48:29 UTC (rev 270103)
@@ -1,3 +1,12 @@
+2020-11-20  Fujii Hironori  <[email protected]>
+
+        [TextureMapper] Hidden surface removal issue for nested transform-style:perserve-3d in Snow Stack demo
+        https://bugs.webkit.org/show_bug.cgi?id=218969
+
+        Reviewed by Carlos Garcia Campos.
+
+        * platform/gtk/transforms/3d/point-mapping/3d-point-mapping-deep-expected.png: Rebaselined.
+
 2020-11-20  Chris Lord  <[email protected]>
 
         Enable font functions on OffscreenCanvas for main-thread

Modified: trunk/LayoutTests/platform/gtk/transforms/3d/point-mapping/3d-point-mapping-deep-expected.png


(Binary files differ)

Modified: trunk/Source/WebCore/ChangeLog (270102 => 270103)


--- trunk/Source/WebCore/ChangeLog	2020-11-20 11:40:06 UTC (rev 270102)
+++ trunk/Source/WebCore/ChangeLog	2020-11-20 11:48:29 UTC (rev 270103)
@@ -1,3 +1,22 @@
+2020-11-20  Fujii Hironori  <[email protected]>
+
+        [TextureMapper] Hidden surface removal issue for nested transform-style:perserve-3d in Snow Stack demo
+        https://bugs.webkit.org/show_bug.cgi?id=218969
+
+        Reviewed by Carlos Garcia Campos.
+
+        r267711 enabled a depth buffer for a perserve-3d layer, but it
+        didn't work nicely for nested perserve-3d, for example Snow Stack
+        demo. It needs a intermediate surface to properly render
+        interchangeably nested perserve-3d and non perserve-3d layers, for
+        example transforms/3d/point-mapping/3d-point-mapping-deep.html.
+        This change supports only simply nested perserve-3d layers such
+        like Snow Stack demo.
+
+        * platform/graphics/texmap/TextureMapperLayer.cpp:
+        (WebCore::TextureMapperLayer::paintSelfAndChildren): Added
+        Preserves3DScope to call beginPreserves3D and endPreserves3D.
+
 2020-11-20  Chris Lord  <[email protected]>
 
         Enable font functions on OffscreenCanvas for main-thread

Modified: trunk/Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp (270102 => 270103)


--- trunk/Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp	2020-11-20 11:40:06 UTC (rev 270102)
+++ trunk/Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp	2020-11-20 11:48:29 UTC (rev 270103)
@@ -40,6 +40,7 @@
     float opacity { 1 };
     IntSize offset;
     TextureMapperLayer* backdropLayer { nullptr };
+    bool preserves3D { false };
 };
 
 TextureMapperLayer::TextureMapperLayer() = default;
@@ -223,8 +224,26 @@
     if (m_state.backdropLayer && m_state.backdropLayer == options.backdropLayer)
         return;
 
-    if (m_state.preserves3D)
-        options.textureMapper.beginPreserves3D();
+    struct Preserves3DScope {
+        Preserves3DScope(TextureMapperPaintOptions& passedOptions, bool passedEnable)
+            : options(passedOptions)
+            , enable(passedEnable)
+        {
+            if (enable) {
+                options.preserves3D = true;
+                options.textureMapper.beginPreserves3D();
+            }
+        }
+        ~Preserves3DScope()
+        {
+            if (enable) {
+                options.preserves3D = false;
+                options.textureMapper.endPreserves3D();
+            }
+        }
+        TextureMapperPaintOptions& options;
+        bool enable;
+    } scopedPreserves3D(options, m_state.preserves3D && !options.preserves3D);
 
     if (m_state.backdropLayer && !options.backdropLayer) {
         TransformationMatrix clipTransform;
@@ -238,11 +257,8 @@
 
     paintSelf(options);
 
-    if (m_children.isEmpty()) {
-        if (m_state.preserves3D)
-            options.textureMapper.endPreserves3D();
+    if (m_children.isEmpty())
         return;
-    }
 
     bool shouldClip = m_state.masksToBounds && !m_state.preserves3D;
     if (shouldClip) {
@@ -266,8 +282,6 @@
 
     if (shouldClip)
         options.textureMapper.endClip();
-    if (m_state.preserves3D)
-        options.textureMapper.endPreserves3D();
 }
 
 bool TextureMapperLayer::shouldBlend() const
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to