LkEngine 0.1.2
 
Loading...
Searching...
No Matches
Material.h
1#pragma once
2
3#include "LkEngine/Renderer/Texture.h"
4#include "LkEngine/Renderer/Shader.h"
5
6
7namespace LkEngine {
8
10 {
11 float Roughness = 0.50f;
12 float Density = 1.0f;
13 float Friction = 0.30f;
14
15 FMaterialSpecification() = default;
16 FMaterialSpecification(float InRoughness, float InDensity, float InFriction)
17 : Roughness(InRoughness)
18 , Density(InDensity)
19 , Friction(InFriction)
20 {
21 }
22 };
23
24
28 class LMaterial : public LObject
29 {
30 public:
31 virtual ~LMaterial() = default;
32
33 virtual void Invalidate() = 0;
34 virtual void OnShaderReloaded() = 0;
35
36 virtual FBuffer GetUniformStorageBuffer() const = 0;
37 virtual FBuffer& GetUniformStorageBuffer() = 0;
38
39 virtual void Set(const std::string& Name, const float Value) = 0;
40 virtual void Set(const std::string& Name, const int Value) = 0;
41 virtual void Set(const std::string& Name, const uint32_t Value) = 0;
42 virtual void Set(const std::string& Name, const bool Value) = 0;
43 virtual void Set(const std::string& Name, const glm::vec2& Value) = 0;
44 virtual void Set(const std::string& Name, const glm::vec3& Value) = 0;
45 virtual void Set(const std::string& Name, const glm::vec4& Value) = 0;
46 virtual void Set(const std::string& Name, const glm::ivec2& Value) = 0;
47 virtual void Set(const std::string& Name, const glm::ivec3& Value) = 0;
48 virtual void Set(const std::string& Name, const glm::ivec4& Value) = 0;
49
50 virtual void Set(const std::string& Name, const glm::mat3& Value) = 0;
51 virtual void Set(const std::string& Name, const glm::mat4& Value) = 0;
52
53 virtual void Set(const std::string& Name, const TObjectPtr<LTexture2D>& Texture) = 0;
54 virtual void Set(const std::string& Name, const TObjectPtr<LTexture2D>& Texture, const uint32_t ArrayIndex) = 0;
55 virtual void Set(const std::string& Name, const TObjectPtr<LImage2D>& Image) = 0;
56
57 virtual float& GetFloat(const std::string& Name) = 0;
58 virtual int32_t& GetInt(const std::string& Name) = 0;
59 virtual uint32_t& GetUInt(const std::string& Name) = 0;
60 virtual bool& GetBool(const std::string& Name) = 0;
61 virtual glm::vec2& GetVector2(const std::string& Name) = 0;
62 virtual glm::vec3& GetVector3(const std::string& Name) = 0;
63 virtual glm::vec4& GetVector4(const std::string& Name) = 0;
64 virtual glm::mat3& GetMatrix3(const std::string& Name) = 0;
65 virtual glm::mat4& GetMatrix4(const std::string& Name) = 0;
66
67 virtual void SetTexture(TObjectPtr<LTexture> Texture) = 0;
68 virtual void SetTexture(TObjectPtr<LTexture2D> Texture) = 0;
69
70 virtual TObjectPtr<LTexture2D> GetTexture(const std::string& Name = "") = 0;
71 virtual const TObjectPtr<LTexture2D>& GetTexture(const std::string& Name = "") const = 0;
72 virtual TObjectPtr<LTexture2D> TryGetTexture(const std::string& Name = "") = 0;
73
74 virtual TObjectPtr<LTextureCube> GetTextureCube(const std::string& Name) = 0;
75 virtual TObjectPtr<LTextureCube> TryGetTextureCube(const std::string& Name) = 0;
76
77 virtual TObjectPtr<LShader> GetShader() = 0;
78 virtual const std::string& GetName() const = 0;
79
80 static TObjectPtr<LMaterial> Create(const TObjectPtr<LShader>& Shader, const std::string& Name);
81 static TObjectPtr<LMaterial> Copy(const TObjectPtr<LMaterial>& Other, const std::string& Name = "");
82
83 private:
85 };
86
87}
Definition Material.h:29
Definition Object.h:46
Definition ObjectPtr.h:102
#define LCLASS(Class)
Definition CoreMacros.h:226
Definition Asset.h:11
Definition Buffer.h:9
Definition Material.h:10