1 // Copyright Timothy Goya 2007.
2 // Distributed under the Boost Software License, Version 1.0.
3 // (See accompanying file LICENSE_1_0.txt or copy at
4 // http://www.boost.org/LICENSE_1_0.txt)
6 #include <unison/video/Renderers.hpp>
7 #include <unison/video/Window.hpp>
8 #include <unison/video/Texture.hpp>
9 #include "auto/Renderer.hpp"
10 #include "sdl/Renderer.hpp"
11 #include "opengl/Renderer.hpp"
19 Renderers::Renderers() :
24 auto_renderer = new Auto::Renderer(renderers);
25 renderer = auto_renderer;
26 add_renderer(new SDL::Renderer());
27 add_renderer(new OpenGL::Renderer());
31 Renderers::~Renderers()
35 std::for_each(renderers.begin(), renderers.end(), std::ptr_fun(operator delete));
39 Renderers &Renderers::get()
41 static Renderers renderers;
47 bool match_name(Backend::Renderer *renderer, std::string name)
49 return renderer && renderer->get_name() == name;
53 void Renderers::set_renderer(const std::string &name)
56 bool fullscreen = false;
57 if(Window::get().is_open())
59 window_size = Window::get().get_size();
60 fullscreen = Window::get().is_fullscreen();
62 std::vector<Surface> surfaces = Texture::save_textures();
66 renderer = auto_renderer;
70 std::vector<Backend::Renderer *>::iterator found = std::find_if(renderers.begin(), renderers.end(), std::bind2nd(std::ptr_fun(match_name), name));
71 if(found == renderers.end())
73 fprintf(stderr, "Renderer '%s' not found.\n", name.c_str());
79 Texture::load_textures(surfaces);
80 if(window_size != Area())
82 Window::get().open(window_size, fullscreen);
87 Backend::Renderer &Renderers::get_renderer()
93 void Renderers::add_renderer(Backend::Renderer *renderer)
95 renderers.push_back(renderer);