X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fview.cpp;h=d0d3542835448352f66be17d6f15f4735253c263;hb=41368577ab4c4091e19d4e9cbbf8fbf2cfbdddca;hp=f531905f59e1ae387908538c4198489f27fa79ad;hpb=e07b25a160c5d3231282df948017460ac581b4d7;p=libs%2Fgl.git diff --git a/source/view.cpp b/source/view.cpp index f531905f..d0d35428 100644 --- a/source/view.cpp +++ b/source/view.cpp @@ -6,17 +6,23 @@ namespace Msp { namespace GL { -View::View(): - target(Framebuffer::system()), +View::View(Framebuffer &t): + target(t), camera(0), - content(0) + content(0), + internal_renderer(0) { } +View::~View() +{ + delete internal_renderer; +} + void View::set_camera(Camera *c) { camera = c; if(camera) - camera->set_aspect(get_aspect()); + camera->set_aspect_ratio(get_aspect_ratio()); } void View::set_content(Renderable *r) @@ -24,21 +30,26 @@ void View::set_content(Renderable *r) content = r; } -void View::synchronize_camera_aspect(Camera &c) +void View::render() { - synced_cameras.push_back(&c); - c.set_aspect(get_aspect()); + if(!internal_renderer) + internal_renderer = new Renderer; + render(*internal_renderer); } -void View::render() +void View::render(Renderer &renderer) { - target.clear(COLOR_BUFFER_BIT|DEPTH_BUFFER_BIT); + Bind bind_fbo(target); + target.clear(); if(content) { - Renderer renderer(camera); + Renderer::Push push(renderer); + if(camera) + renderer.set_camera(*camera); content->setup_frame(renderer); content->render(renderer); content->finish_frame(); + renderer.flush_shader_data(); } }