]> git.tdb.fi Git - libs/demoscene.git/blob - source/fadeoverlay.cpp
Put everything in namespace Msp::DemoScene
[libs/demoscene.git] / source / fadeoverlay.cpp
1 #include <msp/datafile/collection.h>
2 #include <msp/gl/renderer.h>
3 #include <msp/gl/texture2d.h>
4 #include "demo.h"
5 #include "fadeoverlay.h"
6
7 using namespace std;
8
9 namespace Msp {
10 namespace DemoScene {
11
12 FadeOverlay::FadeOverlay(DataFile::Collection &resources):
13         mesh(get_fullscreen_quad()),
14         shprog(resources.get<GL::Program>("fade.glsl")),
15         color(0.0f, 0.0f, 0.0f, 0.0f)
16 {
17         shdata.uniform("color", color);
18 }
19
20 void FadeOverlay::set_color(const GL::Color &c)
21 {
22         color = c;
23         shdata.uniform("color", color);
24 }
25
26 void FadeOverlay::render(GL::Renderer &renderer, const GL::Texture2D &color_buf, const GL::Texture2D &)
27 {
28         GL::Renderer::Push push(renderer);
29         renderer.set_shader_program(&shprog, &shdata);
30         renderer.set_texture(&color_buf);
31         mesh.draw(renderer);
32 }
33
34
35 FadeOverlay::Fade::Fade():
36         ColorFadeAction(GL::Color(0.0f, 0.0f, 0.0f, 0.0f)),
37         overlay(0)
38 { }
39
40 FadeOverlay::Fade::Fade(FadeOverlay &o, const GL::Color &c):
41         ColorFadeAction(c),
42         overlay(&o)
43 { }
44
45 void FadeOverlay::Fade::validate() const
46 {
47         if(!overlay)
48                 throw logic_error("null overlay");
49 }
50
51
52 FadeOverlay::Fade::Loader::Loader(Fade &f, Demo &d):
53         DataFile::DerivedObjectLoader<Fade, Action::Loader>(f, d)
54 {
55         add("overlay", &Loader::overlay);
56         add("color", &Loader::color);
57 }
58
59 void FadeOverlay::Fade::Loader::overlay(const string &n)
60 {
61         obj.overlay = &demo.get_thing<FadeOverlay>(n);
62 }
63
64 void FadeOverlay::Fade::Loader::color(float r, float g, float b, float a)
65 {
66         obj.end_color = GL::Color(r, g, b, a);
67 }
68
69 } // namespace DemoScene
70 } // namespace Msp