X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fview.cpp;h=b4dcca99cc4a4f6b6bb6839df1ee39bf8f99fc23;hb=6dc2da27f0831d4172fcfeba4900616fd6c844b8;hp=47411998f8359b6ca12fe4b93f58f99c032438fb;hpb=9759cae2abf138acc548e3f230967e2c843e967e;p=libs%2Fgl.git diff --git a/source/view.cpp b/source/view.cpp index 47411998..b4dcca99 100644 --- a/source/view.cpp +++ b/source/view.cpp @@ -1,6 +1,7 @@ #include "camera.h" #include "framebuffer.h" #include "renderable.h" +#include "renderer.h" #include "view.h" using namespace std; @@ -12,12 +13,21 @@ View::View(Graphics::Window &w, Graphics::GLContext &c): window(w), context(c), target(Framebuffer::system()), + camera(0), content(0) { window.signal_resize.connect(sigc::mem_fun(this, &View::window_resized)); + window_resized(window.get_width(), window.get_height()); } -void View::set_content(const Renderable *r) +void View::set_camera(Camera *c) +{ + camera = c; + if(camera) + camera->set_aspect(static_cast(window.get_width())/window.get_height()); +} + +void View::set_content(Renderable *r) { content = r; } @@ -32,7 +42,12 @@ void View::render() { target.clear(COLOR_BUFFER_BIT|DEPTH_BUFFER_BIT); if(content) - content->render(); + { + Renderer renderer(camera); + content->setup_frame(renderer); + content->render(renderer); + content->finish_frame(); + } context.swap_buffers(); } @@ -40,6 +55,8 @@ void View::window_resized(unsigned w, unsigned h) { target.viewport(0, 0, w, h); float aspect = static_cast(w)/h; + if(camera) + camera->set_aspect(aspect); for(list::iterator i=synced_cameras.begin(); i!=synced_cameras.end(); ++i) (*i)->set_aspect(aspect); }