26 #include "generic/managed.h"
27 #include "generic/property.h"
28 #include "signals/signal.h"
29 #include "renderers/renderer.h"
32 #include "partitioner.h"
37 typedef sig::signal<void (Layer&)> LayerRenderStarted;
38 typedef sig::signal<void (Layer&)> LayerRenderFinished;
54 TexturePtr target=
nullptr,
58 std::list<LayerPtr>::iterator begin() {
59 return ordered_pipelines_.begin();
62 std::list<LayerPtr>::iterator end() {
63 return ordered_pipelines_.end();
66 LayerPtr find_layer(
const std::string& name);
67 void destroy_all_layers();
69 bool has_layer(
const std::string& name);
72 void set_renderer(
Renderer *renderer);
75 void clean_destroyed_layers();
78 if(queued_for_destruction_.count(pip)) {
82 queued_for_destruction_.insert(pip);
92 void destroy_object_immediately(
LayerPtr pipeline) {
94 destroy_object(pipeline);
100 void dump_render_trace(std::ostream *out);
103 void run_layer(
LayerPtr stage,
int& actors_rendered);
105 Window* window_ =
nullptr;
109 std::list<std::shared_ptr<Layer>> pool_;
110 std::list<LayerPtr> ordered_pipelines_;
111 std::set<LayerPtr> queued_for_destruction_;
115 std::set<RenderTarget*> targets_rendered_this_frame_;
119 S_DEFINE_PROPERTY(window, &Compositor::window_);
138 auto ret = compositor_->create_layer(subtree, camera,
Viewport(),
nullptr, priority);
139 layers_.push_back(ret);
143 LayerPtr find_layer(
const std::string& name) {
144 for(
auto& layer: layers_) {
145 if(layer->name() == name) {
153 void destroy_all_layers() {
154 for(
auto& layer: layers_) {
161 Scene* scene_ =
nullptr;
163 std::list<LayerPtr> layers_;
169 S_DEFINE_PROPERTY(global_compositor, &SceneCompositor::compositor_);