9#include <unordered_map>
17#define EE_DEFAULT_MATERIAL 0
22 class MaterialFactory;
23 class MaterialRegistry;
32 void Set(
const std::string& name,
const T& value)
34 for (
const auto& uniform : m_shader->GetLayout())
36 if (uniform.Name == name)
38 memcpy(m_buffer.data() + uniform.Offset, &value,
sizeof(T));
39 m_definedUniforms[uniform.Index] =
true;
51 Material(
const std::shared_ptr<Shader>& shader);
53 std::shared_ptr<Shader> m_shader;
55 std::vector<uint8_t> m_buffer;
56 std::vector<bool> m_definedUniforms;
58 std::unordered_map<std::string, TexturePtr> m_textures;
83 std::unordered_map<MaterialID, MaterialPtr> m_materials;
static MaterialPtr Create(const std::shared_ptr< Shader > &shader)
static MaterialPtr LoadMaterial(const std::shared_ptr< Shader > &shader)
static MaterialPtr GetMaterial(MaterialID id)
void Set(const std::string &name, const T &value)
std::shared_ptr< Shader > GetShader()
void SetTexture(const std::string &name, TexturePtr texture)
std::shared_ptr< Material > MaterialPtr
std::shared_ptr< Texture > TexturePtr