]> git.localhorst.tv Git - blobs.git/blob - src/graphics/CreatureSkin.hpp
basic creature model
[blobs.git] / src / graphics / CreatureSkin.hpp
1 #ifndef BLOBS_GRAPHICS_CREATURESKIN_HPP_
2 #define BLOBS_GRAPHICS_CREATURESKIN_HPP_
3
4 #include "Program.hpp"
5
6 #include "glm.hpp"
7
8
9 namespace blobs {
10 namespace graphics {
11
12 class ArrayTexture;
13
14 class CreatureSkin {
15
16 public:
17         static constexpr int MAX_LIGHTS = 8;
18
19 public:
20         CreatureSkin();
21         ~CreatureSkin();
22
23         CreatureSkin(const CreatureSkin &) = delete;
24         CreatureSkin &operator =(const CreatureSkin &) = delete;
25
26         CreatureSkin(CreatureSkin &&) = delete;
27         CreatureSkin &operator =(CreatureSkin &&) = delete;
28
29 public:
30         void Activate() noexcept;
31
32         void SetMVP(const glm::mat4 &m, const glm::mat4 &v, const glm::mat4 &p) noexcept;
33         void SetTexture(ArrayTexture &) noexcept;
34         void SetLight(int n, const glm::vec3 &pos, const glm::vec3 &color, float strength) noexcept;
35         void SetNumLights(int n) noexcept;
36
37         const glm::mat4 &M() const noexcept { return m; }
38         const glm::mat4 &V() const noexcept { return v; }
39         const glm::mat4 &P() const noexcept { return p; }
40         const glm::mat4 &MV() const noexcept { return mv; }
41         const glm::mat4 &MVP() const noexcept { return mvp; }
42
43 private:
44         Program prog;
45
46         int num_lights;
47
48         glm::mat4 m;
49         glm::mat4 v;
50         glm::mat4 p;
51         glm::mat4 mv;
52         glm::mat4 mvp;
53
54         GLuint m_handle;
55         GLuint mv_handle;
56         GLuint mvp_handle;
57         GLuint sampler_handle;
58
59         GLuint num_lights_handle;
60         GLuint light_handle[MAX_LIGHTS * 3];
61
62 };
63
64 }
65 }
66
67 #endif