~andreas-pokorny/mir/input-sender-split

« back to all changes in this revision

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

  • Committer: Tarmac
  • Author(s): Kevin DuBois
  • Date: 2014-04-04 18:19:35 UTC
  • mfrom: (1523.5.4 no-rendering-operator)
  • Revision ID: tarmac-20140404181935-o5bqj4c7f5cj51sr
Remove the RenderingOperator and VisibilityFilter classes in favor of rendering on the generated list of renderables from the scene.

Approved by Alan Griffiths, Alexandros Frantzis, PS Jenkins bot, Alberto Aguirre.

Show diffs side-by-side

added added

removed removed

Lines of Context:
19
19
 
20
20
#include "default_display_buffer_compositor.h"
21
21
 
22
 
#include "rendering_operator.h"
23
22
#include "mir/compositor/scene.h"
 
23
#include "mir/compositor/renderer.h"
24
24
#include "mir/graphics/renderable.h"
25
25
#include "mir/graphics/display_buffer.h"
26
26
#include "mir/graphics/buffer.h"
34
34
namespace mc = mir::compositor;
35
35
namespace mg = mir::graphics;
36
36
 
37
 
//TODO remove VisibilityFilter once we don't need filters/operators for rendering
38
 
namespace
39
 
{
40
 
struct VisibilityFilter : public mc::FilterForScene
41
 
{
42
 
public:
43
 
    VisibilityFilter(
44
 
        mg::RenderableList const& renderable_list)
45
 
        : list(renderable_list)
46
 
    {
47
 
    }
48
 
 
49
 
    bool operator()(mg::Renderable const& r)
50
 
    {
51
 
        auto matcher = [&r](std::shared_ptr<mg::Renderable> const& renderable)
52
 
        {
53
 
            return (renderable.get() == &r);
54
 
        };
55
 
        return (std::find_if(list.begin(), list.end(), matcher) != list.end());
56
 
    }
57
 
 
58
 
private:
59
 
    mg::RenderableList const& list;
60
 
};
61
 
}
62
 
 
63
37
mc::DefaultDisplayBufferCompositor::DefaultDisplayBufferCompositor(
64
38
    mg::DisplayBuffer& display_buffer,
65
39
    std::shared_ptr<mc::Scene> const& scene,
122
96
 
123
97
    if (!bypassed)
124
98
    {
 
99
        //preserves buffers backing GL textures until after post_update
 
100
        std::vector<std::shared_ptr<mg::Buffer>> saved_resources;
 
101
 
125
102
        display_buffer.make_current();
126
103
 
127
104
        mc::filter_occlusions_from(renderable_list, view_area);
128
105
 
 
106
        renderer->set_rotation(display_buffer.orientation());
 
107
        renderer->begin();
 
108
 
129
109
        for(auto const& renderable : renderable_list)
 
110
        {
130
111
            uncomposited_buffers |= (renderable->buffers_ready_for_compositor() > 1);
131
112
 
132
 
        renderer->set_rotation(display_buffer.orientation());
133
 
        renderer->begin();
134
 
        mc::RenderingOperator applicator(*renderer);
135
 
        VisibilityFilter selector(renderable_list);
136
 
        scene->for_each_if(selector, applicator);
 
113
            //'renderer.get()' serves as an ID to distinguish itself from other compositors
 
114
            auto buffer = renderable->buffer(renderer.get());
 
115
            renderer->render(*renderable, *buffer);
 
116
            saved_resources.push_back(buffer);
 
117
        }
 
118
 
137
119
        renderer->end();
138
120
 
139
121
        display_buffer.post_update();