Elevate Engine 1
Loading...
Searching...
No Matches
Material.h
Go to the documentation of this file.
1#pragma once
2
3#include <stdint.h>
4#include <memory>
5#include <map>
6#include <string>
7#include <vector>
8#include <glm/glm.hpp>
9#include <unordered_map>
10
16
17#define EE_DEFAULT_MATERIAL 0
18
19namespace Elevate
20{
21 class Material;
22 class MaterialFactory;
23 class MaterialRegistry;
24 using MaterialPtr = std::shared_ptr<Material>;
25
26 typedef uint32_t MaterialID;
27
29 {
30 public:
31 template<typename T>
32 void Set(const std::string& name, const T& value)
33 {
34 for (const auto& uniform : m_shader->GetLayout())
35 {
36 if (uniform.Name == name)
37 {
38 memcpy(m_buffer.data() + uniform.Offset, &value, sizeof(T));
39 m_definedUniforms[uniform.Index] = true;
40 }
41 }
42 }
43
44 void SetTexture(const std::string& name, TexturePtr texture);
45 void Apply();
46 std::shared_ptr<Shader> GetShader();
47 inline MaterialID GetID() { return m_id; }
48
49 private:
50 Material();
51 Material(const std::shared_ptr<Shader>& shader);
52
53 std::shared_ptr<Shader> m_shader;
54 // Uniforms
55 std::vector<uint8_t> m_buffer;
56 std::vector<bool> m_definedUniforms;
57
58 std::unordered_map<std::string, TexturePtr> m_textures;
59
60 MaterialID m_id;
61 static MaterialID s_nextId;
62
63 friend class MaterialFactory;
64 };
65
67 {
68 protected:
69 static MaterialPtr Create(const std::shared_ptr<Shader>& shader);
70 friend class MaterialRegistry;
71 };
72
74 {
75 public:
76 static MaterialPtr LoadMaterial(const std::shared_ptr<Shader>& shader);
78
79 private:
81 static MaterialRegistry& instance();
82
83 std::unordered_map<MaterialID, MaterialPtr> m_materials;
84 };
85}
static MaterialPtr Create(const std::shared_ptr< Shader > &shader)
Definition Material.cpp:99
static MaterialPtr LoadMaterial(const std::shared_ptr< Shader > &shader)
Definition Material.cpp:109
static MaterialPtr GetMaterial(MaterialID id)
Definition Material.cpp:117
MaterialID GetID()
Definition Material.h:47
void Set(const std::string &name, const T &value)
Definition Material.h:32
std::shared_ptr< Shader > GetShader()
Definition Material.cpp:94
void SetTexture(const std::string &name, TexturePtr texture)
Definition Material.cpp:40
uint32_t MaterialID
Definition Material.h:26
std::shared_ptr< Material > MaterialPtr
Definition Material.h:24
std::shared_ptr< Texture > TexturePtr
Definition Texture.h:13