Sequence::~Sequence()
{
+ for(vector<PostProcStep>::iterator i=postproc.begin(); i!=postproc.end(); ++i)
+ if(i->owned)
+ delete i->postproc;
delete target[0];
delete target[1];
delete target_ms;
void Sequence::add_postprocessor(PostProcessor &pp)
{
- add_postprocessor(&pp, true);
+ add_postprocessor(&pp, false);
}
void Sequence::add_postprocessor_owned(PostProcessor *pp)
{
- add_postprocessor(pp, false);
+ add_postprocessor(pp, true);
}
-void Sequence::add_postprocessor(PostProcessor *pp, bool keep)
+void Sequence::add_postprocessor(PostProcessor *pp, bool owned)
{
- postproc.push_back(pp);
- if(keep)
- postproc.back().keep();
+ postproc.push_back(PostProcStep(pp, owned));
try
{
create_targets(0);
}
catch(...)
{
+ if(!owned)
+ delete pp;
postproc.pop_back();
throw;
}
for(vector<Step>::const_iterator i=steps.begin(); i!=steps.end(); ++i)
if(Renderable *renderable = i->get_renderable())
renderable->setup_frame(renderer);
- for(vector<Slot>::const_iterator i=renderables.begin(); i!=renderables.end(); ++i)
- i->renderable->setup_frame(renderer);
}
void Sequence::finish_frame()
for(vector<Step>::const_iterator i=steps.begin(); i!=steps.end(); ++i)
if(Renderable *renderable = i->get_renderable())
renderable->finish_frame();
- for(vector<Slot>::const_iterator i=renderables.begin(); i!=renderables.end(); ++i)
- i->renderable->finish_frame();
}
void Sequence::render(Renderer &renderer, Tag tag) const
if(const Renderable *renderable = i->get_renderable())
renderer.render(*renderable, i->get_tag());
-
- for(vector<Slot>::const_iterator j=renderables.begin(); j!=renderables.end(); ++j)
- if(j->passes.empty() || j->passes.count(i->get_tag()))
- renderer.render(*j->renderable, i->get_tag());
}
if(target[0])
out_fbo->bind();
const Texture2D &color = target[j]->get_target_texture(RENDER_COLOR);
const Texture2D &depth = target[j]->get_target_texture(RENDER_DEPTH);
- postproc[i]->render(renderer, color, depth);
+ postproc[i].postproc->render(renderer, color, depth);
}
}
}
clipping =c;
}
-
-Sequence::Slot::Slot(Renderable *r):
- renderable(r)
-{ }
-
} // namespace GL
} // namespace Msp