Elevate Engine 1
Loading...
Searching...
No Matches
Texture.h
Go to the documentation of this file.
1#pragma once
2
3#include <string>
4#include <memory>
5
6#include <glm/vec4.hpp>
7#include <glm/vec3.hpp>
8
9namespace Elevate
10{
11 class Renderer;
12 class Texture;
13 using TexturePtr = std::shared_ptr<Texture>;
14
15 enum class TextureSource : uint8_t {
16 File, // Loaded from disk
17 Generated, // Created from color or procedural
18 RenderTarget // Created as framebuffer texture
19 };
20
21 enum class TextureFormat : uint8_t {
22 EMPTY = 0,
23 GRAYSCALE = 1,
24 RGB = 3,
25 RGBA = 4,
26 DEPTH
27 };
28
29 enum class TextureType : uint8_t {
30 Diffuse,
32 Normal,
33 Height,
34 Cubemap,
35 Ambient,
36
37 Count
38 };
39
40 enum class TextureState : uint8_t {
41 Empty,
42 Unloaded = Empty, // Same as empty but for files
43 Loading,
44 Ready,
45 Loaded = Ready, // Same as ready but for files
46 Failed
47 };
48
49 enum class TextureFilter : uint8_t { Nearest, Linear };
51
53 std::string Name; // Logical name -> for display purposes
54 std::string Path; // The absolute file path
55 uint32_t Width = 0; // Width in px
56 uint32_t Height = 0; // Height in px
57 uint8_t Channels = 0; // 3 for rgb, 4 for rgba
58 TextureFormat Format = TextureFormat::RGB; // ex: EE_RGB, EE_RGBA
59 TextureType Usage = TextureType::Diffuse; // ex: Diffuse, Specular...
60 TextureSource Source = TextureSource::File; // Loaded from a file, generated or from a framebuffer
61 TextureState State = TextureState::Unloaded; // General state of the texxture, unloaded, loaded, failed etc.
62 uint32_t Layer = 0; // Default: 0 -> Used for cubemap faces, texture arrays, etc.
63
68 bool Mipmaps = true;
69
70 TextureMetadata() = default;
71 };
72
75
78
79 TextureMetadataBuilder& Name(const std::string name) { data.Name = name; return *this; }
80 TextureMetadataBuilder& Path(const std::string& path) { data.Path = path; return *this; }
81 TextureMetadataBuilder& size(const uint32_t w, const uint32_t h) { data.Width = w; data.Height = h; return *this; }
82 TextureMetadataBuilder& Format(const TextureFormat fmt) { data.Format = fmt; data.Channels = (uint8_t)fmt; return *this; }
83 TextureMetadataBuilder& Usage(const TextureType type) { data.Usage = type; return *this; }
84 TextureMetadataBuilder& Source(const TextureSource src) { data.Source = src; return *this; }
85 TextureMetadataBuilder& State(const TextureState state) { data.State = state; return *this; }
86 TextureMetadataBuilder& Layer(const uint32_t layer) { data.Layer = layer; return *this; }
87 TextureMetadataBuilder& Filter(const TextureFilter min, const TextureFilter mag) { data.MinFilter = min; data.MagFilter = mag; return *this; }
88 TextureMetadataBuilder& Wrap(const TextureWrap s, const TextureWrap t) { data.WrapS = s; data.WrapT = t; return *this; }
89 TextureMetadataBuilder& Mipmaps(const bool mipmaps) { data.Mipmaps = mipmaps; return *this; }
91 };
92
93 class Texture
94 {
95 public:
96 virtual ~Texture() = default;
97
98 inline void SetData(unsigned char* data, TextureMetadata& meta) {
99 m_meta = meta;
100 SetDataImpl(data);
101 }
102
103 virtual void* GetNativeHandle() const = 0; // Return a handle to the texture differs from the backend
104
105 inline bool IsTextureLoaded() const { return m_meta.State == TextureState::Loaded; }
106 bool MatchesPath(std::string pathToMatch);
107
108 static TexturePtr CreateFromFile(const std::string& path, TextureType usage = TextureType::Diffuse);
109 static TexturePtr CreateFromColor(const glm::vec3& color, const std::string& name, uint32_t width = 1, uint32_t height = 1);
110 static TexturePtr CreateFromColor(const glm::vec4& color, const std::string& name, uint32_t width = 1, uint32_t height = 1);
111 static TexturePtr CreateFromData(unsigned char* data, TextureMetadata& meta);
112
113 // NOT ALL GETTERS BUT THE MOST USED
114 inline const std::string& GetName() const { return m_meta.Name; }
115 inline const std::string& GetPath() const { return m_meta.Path; }
116 inline const uint32_t GetWidth() const { return m_meta.Width; }
117 inline const uint32_t GetHeight() const { return m_meta.Height; }
118 inline const TextureType GetUsage() const { return m_meta.Usage; }
119
120 inline const TextureMetadata& GetMetadata() const { return m_meta; }
121
122 protected:
123 Texture() = default;
125
126 virtual void SetDataImpl(unsigned char* data) = 0;
127
128 private:
129 virtual void Bind(uint32_t index = 0) = 0;
130 virtual void Unbind() = 0;
131
132 protected:
134
135 friend class Renderer;
136 };
137}
const uint32_t GetHeight() const
Definition Texture.h:117
const TextureMetadata & GetMetadata() const
Definition Texture.h:120
bool MatchesPath(std::string pathToMatch)
Definition Texture.cpp:15
const std::string & GetPath() const
Definition Texture.h:115
void SetData(unsigned char *data, TextureMetadata &meta)
Definition Texture.h:98
TextureMetadata m_meta
Definition Texture.h:133
static TexturePtr CreateFromData(unsigned char *data, TextureMetadata &meta)
Definition Texture.cpp:87
const uint32_t GetWidth() const
Definition Texture.h:116
virtual void SetDataImpl(unsigned char *data)=0
virtual void * GetNativeHandle() const =0
static TexturePtr CreateFromColor(const glm::vec3 &color, const std::string &name, uint32_t width=1, uint32_t height=1)
Definition Texture.cpp:27
const TextureType GetUsage() const
Definition Texture.h:118
Texture()=default
Texture(TextureMetadata meta)
Definition Texture.h:124
virtual ~Texture()=default
static TexturePtr CreateFromFile(const std::string &path, TextureType usage=TextureType::Diffuse)
Definition Texture.cpp:22
bool IsTextureLoaded() const
Definition Texture.h:105
const std::string & GetName() const
Definition Texture.h:114
TextureState
Definition Texture.h:40
TextureFormat
Definition Texture.h:21
TextureWrap
Definition Texture.h:50
TextureType
Definition Texture.h:29
TextureFilter
Definition Texture.h:49
TextureSource
Definition Texture.h:15
std::shared_ptr< Texture > TexturePtr
Definition Texture.h:13
TextureMetadataBuilder & Format(const TextureFormat fmt)
Definition Texture.h:82
TextureMetadata Build()
Definition Texture.h:90
TextureMetadataBuilder & Wrap(const TextureWrap s, const TextureWrap t)
Definition Texture.h:88
TextureMetadataBuilder & Source(const TextureSource src)
Definition Texture.h:84
TextureMetadataBuilder & Layer(const uint32_t layer)
Definition Texture.h:86
TextureMetadataBuilder & Filter(const TextureFilter min, const TextureFilter mag)
Definition Texture.h:87
TextureMetadataBuilder & Usage(const TextureType type)
Definition Texture.h:83
TextureMetadataBuilder(TextureMetadata &base)
Definition Texture.h:77
TextureMetadataBuilder & Name(const std::string name)
Definition Texture.h:79
TextureMetadataBuilder & size(const uint32_t w, const uint32_t h)
Definition Texture.h:81
TextureMetadataBuilder & Mipmaps(const bool mipmaps)
Definition Texture.h:89
TextureMetadataBuilder & State(const TextureState state)
Definition Texture.h:85
TextureMetadataBuilder & Path(const std::string &path)
Definition Texture.h:80
TextureSource Source
Definition Texture.h:60
TextureState State
Definition Texture.h:61
TextureFilter MagFilter
Definition Texture.h:65
TextureFilter MinFilter
Definition Texture.h:64
TextureFormat Format
Definition Texture.h:58