~mir-team/mir/fix-1339700-in-0.4

« back to all changes in this revision

Viewing changes to src/server/compositor/default_display_buffer_compositor.cpp

server: Track SceneElement visibility in the DefaultDisplayBufferCompositor.

Approved by PS Jenkins bot, Kevin DuBois, Alan Griffiths, Cemil Azizoglu.

Show diffs side-by-side

added added

removed removed

Lines of Context:
44
44
      renderer{renderer},
45
45
      report{report}
46
46
{
 
47
    scene->register_compositor(this);
 
48
}
 
49
 
 
50
mc::DefaultDisplayBufferCompositor::~DefaultDisplayBufferCompositor()
 
51
{
 
52
    scene->unregister_compositor(this);
47
53
}
48
54
 
49
55
void mc::DefaultDisplayBufferCompositor::composite()
52
58
 
53
59
    auto const& view_area = display_buffer.view_area();
54
60
    auto scene_elements = scene->scene_elements_for(this);
55
 
    mc::filter_occlusions_from(scene_elements, view_area);
 
61
    auto const& occlusions = mc::filter_occlusions_from(scene_elements, view_area);
 
62
 
 
63
    for (auto const& element : occlusions)
 
64
    {
 
65
        if (element->renderable()->visible())
 
66
            element->occluded_in(this);
 
67
    }
56
68
 
57
69
    mg::RenderableList renderable_list;
58
70
    for (auto const& element : scene_elements)
 
71
    {
 
72
        element->rendered_in(this);
59
73
        renderable_list.push_back(element->renderable());
 
74
    }
60
75
 
61
76
    if (display_buffer.post_renderables_if_optimizable(renderable_list))
62
77
    {