X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Frender%2Fview.cpp;fp=source%2Frender%2Fview.cpp;h=d0d3542835448352f66be17d6f15f4735253c263;hb=7aaec9a70b8d7733429bec043f8e33e02956f266;hp=0000000000000000000000000000000000000000;hpb=bec07999d95b76f4b47cffcc564d0cd0afc0435e;p=libs%2Fgl.git diff --git a/source/render/view.cpp b/source/render/view.cpp new file mode 100644 index 00000000..d0d35428 --- /dev/null +++ b/source/render/view.cpp @@ -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