]> git.tdb.fi Git - libs/gl.git/blobdiff - source/render/view.cpp
Rearrange soucre files into subdirectories
[libs/gl.git] / source / render / view.cpp
diff --git a/source/render/view.cpp b/source/render/view.cpp
new file mode 100644 (file)
index 0000000..d0d3542
--- /dev/null
@@ -0,0 +1,57 @@
+#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