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