Changeset 270103 in webkit


Ignore:
Timestamp:
Nov 20, 2020 3:48:29 AM (2 years ago)
Author:
Fujii Hironori
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.
Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r270102 r270103  
     12020-11-20  Fujii Hironori  <Hironori.Fujii@sony.com>
     2
     3        [TextureMapper] Hidden surface removal issue for nested transform-style:perserve-3d in Snow Stack demo
     4        https://bugs.webkit.org/show_bug.cgi?id=218969
     5
     6        Reviewed by Carlos Garcia Campos.
     7
     8        * platform/gtk/transforms/3d/point-mapping/3d-point-mapping-deep-expected.png: Rebaselined.
     9
    1102020-11-20  Chris Lord  <clord@igalia.com>
    211
  • trunk/Source/WebCore/ChangeLog

    r270102 r270103  
     12020-11-20  Fujii Hironori  <Hironori.Fujii@sony.com>
     2
     3        [TextureMapper] Hidden surface removal issue for nested transform-style:perserve-3d in Snow Stack demo
     4        https://bugs.webkit.org/show_bug.cgi?id=218969
     5
     6        Reviewed by Carlos Garcia Campos.
     7
     8        r267711 enabled a depth buffer for a perserve-3d layer, but it
     9        didn't work nicely for nested perserve-3d, for example Snow Stack
     10        demo. It needs a intermediate surface to properly render
     11        interchangeably nested perserve-3d and non perserve-3d layers, for
     12        example transforms/3d/point-mapping/3d-point-mapping-deep.html.
     13        This change supports only simply nested perserve-3d layers such
     14        like Snow Stack demo.
     15
     16        * platform/graphics/texmap/TextureMapperLayer.cpp:
     17        (WebCore::TextureMapperLayer::paintSelfAndChildren): Added
     18        Preserves3DScope to call beginPreserves3D and endPreserves3D.
     19
    1202020-11-20  Chris Lord  <clord@igalia.com>
    221
  • trunk/Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp

    r270071 r270103  
    4141    IntSize offset;
    4242    TextureMapperLayer* backdropLayer { nullptr };
     43    bool preserves3D { false };
    4344};
    4445
     
    224225        return;
    225226
    226     if (m_state.preserves3D)
    227         options.textureMapper.beginPreserves3D();
     227    struct Preserves3DScope {
     228        Preserves3DScope(TextureMapperPaintOptions& passedOptions, bool passedEnable)
     229            : options(passedOptions)
     230            , enable(passedEnable)
     231        {
     232            if (enable) {
     233                options.preserves3D = true;
     234                options.textureMapper.beginPreserves3D();
     235            }
     236        }
     237        ~Preserves3DScope()
     238        {
     239            if (enable) {
     240                options.preserves3D = false;
     241                options.textureMapper.endPreserves3D();
     242            }
     243        }
     244        TextureMapperPaintOptions& options;
     245        bool enable;
     246    } scopedPreserves3D(options, m_state.preserves3D && !options.preserves3D);
    228247
    229248    if (m_state.backdropLayer && !options.backdropLayer) {
     
    239258    paintSelf(options);
    240259
    241     if (m_children.isEmpty()) {
    242         if (m_state.preserves3D)
    243             options.textureMapper.endPreserves3D();
    244         return;
    245     }
     260    if (m_children.isEmpty())
     261        return;
    246262
    247263    bool shouldClip = m_state.masksToBounds && !m_state.preserves3D;
     
    267283    if (shouldClip)
    268284        options.textureMapper.endClip();
    269     if (m_state.preserves3D)
    270         options.textureMapper.endPreserves3D();
    271285}
    272286
Note: See TracChangeset for help on using the changeset viewer.