All Classes Files Functions Variables Typedefs Pages
Image.hpp
1 #pragma once
2 
3 #include "../config/BaseProxy.hpp"
4 #include "../config/LConfig.hpp"
5 #include "../core/LuminaException.hpp"
6 #include "../util/Color.hpp"
7 #include "../util/Vector.hpp"
8 
9 #include <memory>
10 
11 namespace lumina {
12 
13 namespace internal {
14 
15 class ImageBase {
16 
17 public:
18  virtual void* data() = 0;
19  virtual Vec2i dimension() = 0;
20 
21 };
22 
23 }
24 
25 
26 template <typename C>
27 class Image : public internal::ImageBase, public config::CommonBase {
28 public:
29  void create(Vec2i size);
30  C& operator[](Vec2i pos);
31  void* data() override;
32  Vec2i dimension() override;
33 
34 private:
35  std::unique_ptr<C[]> m_data;
36  Vec2i m_size;
37 };
38 
39 class ImageBox : public config::CommonBase {
40 public:
41  template <typename C>
42  ImageBox(Image<C>&& image);
43 
44  template <typename C>
45  ImageBox& operator=(Image<C>&& image);
46 
47  void* data();
48  Vec2i dimension();
49 
50  template <typename C>
51  Color<C>& get();
52 
53 private:
54  std::shared_ptr<internal::ImageBase> m_img;
55 };
56 
57 } // namespace lumina
58 
59 #include "Image.tpp"
Definition: ColorCore.hpp:99
Definition: Image.fpp:4
Definition: SingleBase.hpp:19
Definition: Image.hpp:15
Definition: Image.hpp:39