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