]> git.tdb.fi Git - libs/gl.git/blob - demos/desertpillars/source/desertpillars.h
An assortment of minor fixes
[libs/gl.git] / demos / desertpillars / source / desertpillars.h
1 #ifndef DESERTPILLARS_H_
2 #define DESERTPILLARS_H_
3
4 #include <memory>
5 #include <msp/core/application.h>
6 #include <msp/datafile/directorysource.h>
7 #include <msp/gl/camera.h>
8 #include <msp/gl/device.h>
9 #include <msp/gl/environmentmap.h>
10 #include <msp/gl/objectinstance.h>
11 #include <msp/gl/orderedscene.h>
12 #include <msp/gl/resourcemanager.h>
13 #include <msp/gl/resources.h>
14 #include <msp/gl/sequence.h>
15 #include <msp/gl/shadowmap.h>
16 #include <msp/gl/sky.h>
17 #include <msp/gl/technique.h>
18 #include <msp/gl/windowview.h>
19 #include <msp/graphics/display.h>
20 #include <msp/graphics/window.h>
21 #include <msp/input/keyboard.h>
22 #include <msp/time/timestamp.h>
23
24 class DesertPillars: public Msp::RegisteredApplication<DesertPillars>
25 {
26 private:
27         struct Options
28         {
29                 Msp::Graphics::WindowOptions wnd_opts;
30
31                 Options();
32         };
33
34         class Resources: public Msp::GL::Resources
35         {
36         private:
37                 Msp::DataFile::DirectorySource source;
38
39         public:
40                 Resources(Msp::GL::ResourceManager *);
41         };
42
43         class MorphSphere: public Msp::GL::ObjectInstance
44         {
45         private:
46                 Msp::GL::ProgramData shdata;
47
48         public:
49                 MorphSphere(const Msp::GL::Object &o): ObjectInstance(o) { }
50
51                 void set_morph(float);
52
53                 virtual void setup_render(Msp::GL::Renderer &, Msp::GL::Tag) const;
54         };
55
56         class LightFlare: public Msp::GL::ObjectInstance
57         {
58         private:
59                 Msp::GL::ProgramData shdata;
60
61         public:
62                 LightFlare(const Msp::GL::Object &, unsigned);
63
64                 virtual void setup_render(Msp::GL::Renderer &, Msp::GL::Tag) const;
65         };
66
67         Msp::Graphics::Display display;
68         Options opts;
69         Msp::Graphics::Window window;
70         Msp::GL::Device gl_device;
71         Msp::Input::Keyboard keyboard;
72         Msp::GL::ResourceManager res_mgr;
73         Resources resources;
74
75         Msp::GL::WindowView view;
76         std::unique_ptr<Msp::GL::Sequence> sequence;
77         Msp::GL::Camera camera;
78         const Msp::GL::Lighting &lighting;
79
80         std::unique_ptr<Msp::GL::Sequence> env_seq;
81         std::unique_ptr<Msp::GL::EnvironmentMap> env_map;
82         Msp::GL::OrderedScene content;
83
84         MorphSphere sphere;
85         float sphere_morph;
86         bool sphere_frozen;
87         bool sphere_stopped;
88
89         Msp::GL::DirectionalLight &sun;
90         Msp::GL::Vector3 sun_node;
91         Msp::GL::Vector3 sun_axis;
92         Msp::Geometry::Angle<float> sun_angle;
93
94         Msp::GL::PointLight &wisp;
95         Msp::GL::Color wisp_base_color;
96         Msp::Geometry::Angle<float> wisp_angle;
97         LightFlare flare;
98
99         float camera_distance;
100         Msp::Geometry::Angle<float> camera_base_height;
101         Msp::Geometry::Angle<float> camera_angle;
102         Msp::Geometry::Angle<float> sphere_angle;
103         bool camera_stopped;
104         Msp::Time::TimeStamp last_tick;
105
106 public:
107         DesertPillars(int, char **);
108
109         virtual int main();
110 private:
111         virtual void tick();
112
113         void key_press(unsigned);
114 };
115
116 #endif