X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fview.cpp;h=d0d3542835448352f66be17d6f15f4735253c263;hb=344dd6a52b55d847f3346e94ec266a8864764b9d;hp=47411998f8359b6ca12fe4b93f58f99c032438fb;hpb=9759cae2abf138acc548e3f230967e2c843e967e;p=libs%2Fgl.git diff --git a/source/view.cpp b/source/view.cpp index 47411998..d0d35428 100644 --- a/source/view.cpp +++ b/source/view.cpp @@ -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(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(w)/h; - for(list::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