]> git.tdb.fi Git - libs/gl.git/blobdiff - source/view.cpp
Remove the deprecated ProgramBuilder class
[libs/gl.git] / source / view.cpp
index 47411998f8359b6ca12fe4b93f58f99c032438fb..d0d3542835448352f66be17d6f15f4735253c263 100644 (file)
@@ -1,47 +1,56 @@
 #include "camera.h"
-#include "framebuffer.h"
 #include "renderable.h"
+#include "renderer.h"
 #include "view.h"
 
-using namespace std;
-
 namespace Msp {
 namespace GL {
 
-View::View(Graphics::Window &w, Graphics::GLContext &c):
-       window(w),
-       context(c),
-       target(Framebuffer::system()),
-       content(0)
+View::View(Framebuffer &t):
+       target(t),
+       camera(0),
+       content(0),
+       internal_renderer(0)
+{ }
+
+View::~View()
 {
-       window.signal_resize.connect(sigc::mem_fun(this, &View::window_resized));
+       delete internal_renderer;
 }
 
-void View::set_content(const Renderable *r)
+void View::set_camera(Camera *c)
 {
-       content = r;
+       camera = c;
+       if(camera)
+               camera->set_aspect_ratio(get_aspect_ratio());
 }
 
-void View::synchronize_camera_aspect(Camera &c)
+void View::set_content(Renderable *r)
 {
-       synced_cameras.push_back(&c);
-       c.set_aspect(static_cast<float>(window.get_width())/window.get_height());
+       content = r;
 }
 
 void View::render()
 {
-       target.clear(COLOR_BUFFER_BIT|DEPTH_BUFFER_BIT);
-       if(content)
-               content->render();
-       context.swap_buffers();
+       if(!internal_renderer)
+               internal_renderer = new Renderer;
+       render(*internal_renderer);
 }
 
-void View::window_resized(unsigned w, unsigned h)
+void View::render(Renderer &renderer)
 {
-       target.viewport(0, 0, w, h);
-       float aspect = static_cast<float>(w)/h;
-       for(list<Camera *>::iterator i=synced_cameras.begin(); i!=synced_cameras.end(); ++i)
-               (*i)->set_aspect(aspect);
+       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