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