--- /dev/null
+#include "camera.h"
+#include "renderable.h"
+#include "renderer.h"
+#include "view.h"
+
+namespace Msp {
+namespace GL {
+
+View::View(Framebuffer &t):
+ target(t),
+ camera(0),
+ content(0),
+ internal_renderer(0)
+{ }
+
+View::~View()
+{
+ delete internal_renderer;
+}
+
+void View::set_camera(Camera *c)
+{
+ camera = c;
+ if(camera)
+ camera->set_aspect_ratio(get_aspect_ratio());
+}
+
+void View::set_content(Renderable *r)
+{
+ content = r;
+}
+
+void View::render()
+{
+ if(!internal_renderer)
+ internal_renderer = new Renderer;
+ render(*internal_renderer);
+}
+
+void View::render(Renderer &renderer)
+{
+ Bind bind_fbo(target);
+ target.clear();
+ if(content)
+ {
+ Renderer::Push push(renderer);
+ if(camera)
+ renderer.set_camera(*camera);
+ content->setup_frame(renderer);
+ content->render(renderer);
+ content->finish_frame();
+ renderer.flush_shader_data();
+ }
+}
+
+} // namespace GL
+} // namespace Msp