]> git.localhorst.tv Git - blobs.git/blob - src/graphics/AlphaSprite.hpp
3cc6a83a849ba948ebff81485534614d2946a506
[blobs.git] / src / graphics / AlphaSprite.hpp
1 #ifndef BLOBS_GRAPHICS_ALPHASPRITE_HPP_
2 #define BLOBS_GRAPHICS_ALPHASPRITE_HPP_
3
4 #include "Program.hpp"
5 #include "SimpleVAO.hpp"
6
7 #include "glm.hpp"
8
9 #include <cstdint>
10
11
12 namespace blobs {
13 namespace graphics {
14
15 class Texture;
16
17 class AlphaSprite {
18
19 public:
20         AlphaSprite();
21         ~AlphaSprite();
22
23         AlphaSprite(const AlphaSprite &) = delete;
24         AlphaSprite &operator =(const AlphaSprite &) = delete;
25
26         AlphaSprite(AlphaSprite &&) = delete;
27         AlphaSprite &operator =(AlphaSprite &&) = delete;
28
29 public:
30         void Activate() noexcept;
31
32         void SetM(const glm::mat4 &m) noexcept;
33         void SetVP(const glm::mat4 &v, const glm::mat4 &p) noexcept;
34         void SetMVP(const glm::mat4 &m, const glm::mat4 &v, const glm::mat4 &p) noexcept;
35         void SetTexture(Texture &) noexcept;
36         void SetFgColor(const glm::vec4 &) noexcept;
37         void SetBgColor(const glm::vec4 &) noexcept;
38
39         const glm::mat4 &M() const noexcept { return m; }
40         const glm::mat4 &V() const noexcept { return v; }
41         const glm::mat4 &P() const noexcept { return p; }
42         const glm::mat4 &MV() const noexcept { return mv; }
43         const glm::mat4 &MVP() const noexcept { return mvp; }
44
45         void DrawRect() const noexcept;
46
47 private:
48         struct Attributes {
49                 glm::vec3 position;
50                 glm::vec2 texture;
51         };
52         SimpleVAO<Attributes, std::uint8_t> vao;
53         Program prog;
54
55         glm::mat4 m;
56         glm::mat4 v;
57         glm::mat4 p;
58         glm::mat4 mv;
59         glm::mat4 mvp;
60
61         GLuint m_handle;
62         GLuint mv_handle;
63         GLuint mvp_handle;
64
65         GLuint sampler_handle;
66         GLuint fg_color_handle;
67         GLuint bg_color_handle;
68
69 };
70
71 }
72 }
73
74 #endif