LkEngine 0.1.2
 
Loading...
Searching...
No Matches
OpenGLMaterial.h
1#pragma once
2
3#include "LkEngine/Renderer/Material.h"
4#include "LkEngine/Renderer/Shader.h"
5
6#include "OpenGLShader.h"
7
8
9namespace LkEngine {
10
12 {
13 public:
14 LOpenGLMaterial(const TObjectPtr<LShader>& Shader, const std::string& Name);
15 LOpenGLMaterial(TObjectPtr<LMaterial> Material, const std::string& Name);
16 LOpenGLMaterial() = delete;
17 ~LOpenGLMaterial() = default;
18
19 virtual void Invalidate() override;
20 virtual void OnShaderReloaded() override;
21
22 FORCEINLINE virtual FBuffer GetUniformStorageBuffer() const override { return UniformStorageBuffer; }
23 FORCEINLINE virtual FBuffer& GetUniformStorageBuffer() override { return UniformStorageBuffer; }
24
25 virtual void Set(const std::string& Name, const int Value) override;
26 virtual void Set(const std::string& Name, const bool Value) override;
27 virtual void Set(const std::string& Name, const float Value) override;
28 virtual void Set(const std::string& Name, const uint32_t Value) override;
29 virtual void Set(const std::string& Name, const glm::vec2& Value) override;
30 virtual void Set(const std::string& Name, const glm::vec3& Value) override;
31 virtual void Set(const std::string& Name, const glm::vec4& Value) override;
32 virtual void Set(const std::string& Name, const glm::ivec2& Value) override;
33 virtual void Set(const std::string& Name, const glm::ivec3& Value) override;
34 virtual void Set(const std::string& Name, const glm::ivec4& Value) override;
35
36 virtual void Set(const std::string& Name, const glm::mat3& Value) override;
37 virtual void Set(const std::string& Name, const glm::mat4& Value) override;
38
39 virtual void Set(const std::string& Name, const TObjectPtr<LTexture2D>& Texture) override;
40 virtual void Set(const std::string& Name, const TObjectPtr<LTexture2D>& Texture,
41 const uint32_t ArrayIndex) override;
42 virtual void Set(const std::string& Name, const TObjectPtr<LImage2D>& Image) override;
43
44 virtual float& GetFloat(const std::string& Name) override;
45 virtual int32_t& GetInt(const std::string& Name) override;
46 virtual uint32_t& GetUInt(const std::string& Name) override;
47 virtual bool& GetBool(const std::string& Name) override;
48 virtual glm::vec2& GetVector2(const std::string& Name) override;
49 virtual glm::vec3& GetVector3(const std::string& Name) override;
50 virtual glm::vec4& GetVector4(const std::string& Name) override;
51 virtual glm::mat3& GetMatrix3(const std::string& Name) override;
52 virtual glm::mat4& GetMatrix4(const std::string& Name) override;
53
55 virtual void SetTexture(TObjectPtr<LTexture> Texture) override;
56 virtual void SetTexture(TObjectPtr<LTexture2D> Texture) override;
57
58 virtual TObjectPtr<LTexture2D> GetTexture(const std::string& Name = "") override;
59 virtual const TObjectPtr<LTexture2D>& GetTexture(const std::string& Name) const override;
60
61 virtual TObjectPtr<LTexture2D> TryGetTexture(const std::string& Name) override;
62
63 virtual TObjectPtr<LTextureCube> GetTextureCube(const std::string& Name) override;
64 virtual TObjectPtr<LTextureCube> TryGetTextureCube(const std::string& Name) override;
65
66 FORCEINLINE virtual TObjectPtr<LShader> GetShader() override { return Shader; }
67 FORCEINLINE virtual const std::string& GetName() const override { return Name; }
68
69 private:
70 std::string Name = "Unknown";
71 FMaterialSpecification Specification{};
72
73 TObjectPtr<LShader> Shader{};
74 TObjectPtr<LTexture2D> Texture{};
75
76 uint32_t MaterialFlags = 0;
77 FBuffer UniformStorageBuffer{};
78
80 };
81
82
83}
Definition Material.h:29
Definition OpenGLMaterial.h:12
virtual void SetTexture(TObjectPtr< LTexture > Texture) override
@TODO: Allow for multiple textures per material.
Definition OpenGLMaterial.cpp:60
Definition ObjectPtr.h:102
#define LCLASS(Class)
Definition CoreMacros.h:226
Definition Asset.h:11
Definition Buffer.h:9
Definition Material.h:10