LkEngine 0.1.2
 
Loading...
Searching...
No Matches
Shader.h
1#pragma once
2
3#include "LkEngine/Core/Hash.h"
4
6#include "LkEngine/Core/LObject/ObjectPtr.h"
7
8#include "ShaderUniform.h"
9#include "ShaderResource.h"
10
11#include "Texture.h"
12
13
14namespace LkEngine {
15
21 enum class EShaderType
22 {
23 None = -1,
24 Vertex,
25 Fragment
26 };
27
33 enum class EUniformVarType
34 {
35 None = 0,
36 Bool,
37 Float,
38 Vec3,
39 Sampler2D,
40 Sampler2DArray,
41 };
42
43 class LShader : public LObject
44 {
45 public:
46 virtual ~LShader() = default;
47
48 static TObjectPtr<LShader> Create(const std::string& InFilepath);
49 static TObjectPtr<LShader> Create(const FShaderProgramSource& ShaderProgramSource);
50
51 virtual LRendererID GetRendererID() const = 0;
52 virtual LRendererID& GetRendererID() = 0;
53
54 virtual void Bind() const = 0;
55 virtual void Unbind() const = 0;
56
57 virtual void Get(std::string_view Uniform, int& Value) = 0;
58 virtual void Get(std::string_view Uniform, bool& Value) = 0;
59 virtual void Get(std::string_view Uniform, float& Value) = 0;
60 virtual void Get(std::string_view Uniform, uint32_t& Value) = 0;
61 virtual void Get(std::string_view Uniform, glm::vec3& Value) = 0;
62 virtual void Get(std::string_view Uniform, glm::vec4& Value) = 0;
63
64 virtual void Set(std::string_view Uniform, int Value) = 0;
65 virtual void Set(std::string_view Uniform, bool Value) = 0;
66 virtual void Set(std::string_view Uniform, float Value) = 0;
67 virtual void Set(std::string_view Uniform, uint32_t Value) = 0;
68 virtual void Set(std::string_view Uniform, const glm::vec2& Value) = 0;
69 virtual void Set(std::string_view Uniform, const glm::vec3& Value) = 0;
70 virtual void Set(std::string_view Uniform, const glm::vec4& Value) = 0;
71 virtual void Set(std::string_view Uniform, const glm::ivec2& Value) = 0;
72 virtual void Set(std::string_view Uniform, const glm::ivec3& Value) = 0;
73 virtual void Set(std::string_view Uniform, const glm::ivec4& Value) = 0;
74 virtual void Set(std::string_view Uniform, const glm::mat4& Value) = 0;
75
76 virtual uint32_t CompileShader(const uint32_t ShaderType, const std::string& Source) = 0;
77 virtual uint32_t CreateShader(const FShaderProgramSource& ShaderProgramSource) = 0;
78
79 bool ParseShader(FShaderProgramSource& ShaderProgramSource, const std::filesystem::path& InFilePath);
80 bool ParseShaders(FShaderProgramSource& ShaderProgramSource,
81 const std::filesystem::path& InVertexPath,
82 const std::filesystem::path& InFragmentPath);
83
84 virtual std::size_t GetHash() const = 0;
85 virtual std::string GetName() const = 0;
86
87 virtual const FShaderProgramSource& GetSource() const = 0;
88
89 static const char* ConvertUniformType(const ETextureUniformType Type)
90 {
91 switch (Type)
92 {
93 case ETextureUniformType::Diffuse: return "u_Diffuse";
94 case ETextureUniformType::Specular: return "u_Specular";
95 case ETextureUniformType::Normal: return "u_Normal";
96 case ETextureUniformType::Height: return "u_Height";
97 case ETextureUniformType::DiffuseRoughness: return "u_DiffuseRoughness";
98 case ETextureUniformType::Emissive: return "u_Emissive";
99 }
100
101 LK_CORE_ASSERT(false, "Could not convert the TextureUniformType {}", static_cast<int>(Type));
102 return nullptr;
103 }
104
110 static std::pair<EUniformVarType, std::string> GetUniformVariable(const std::string& InString);
111
112 private:
114 };
115
116
122 class LShaderLibrary : public LObject
123 {
124 public:
126 ~LShaderLibrary() = default;
127
128 TObjectPtr<LShader>& Get(const std::string& ShaderName);
129
130 void Add(const TObjectPtr<LShader>& InShader);
131 void Load(const std::string& ShaderName, const std::filesystem::path& InFilepath);
132
133 uint32_t GetShadersLoaded() const
134 {
135 return static_cast<uint32_t>(ShaderMap.size());
136 }
137
138 private:
139 std::unordered_map<std::string, TObjectPtr<LShader>> ShaderMap;
140
141 friend class LMaterialEditor;
142
144 };
145
146
147}
LObject implementation.
Definition Object.h:46
Definition Shader.h:123
Definition Shader.h:44
static std::pair< EUniformVarType, std::string > GetUniformVariable(const std::string &InString)
Definition Shader.cpp:122
Definition ObjectPtr.h:102
#define LCLASS(Class)
Definition CoreMacros.h:226
uint32_t LRendererID
Definition CoreTypes.h:30
Definition Asset.h:11
EUniformVarType
Definition Shader.h:34
EShaderType
Definition Shader.h:22
Definition ShaderResource.h:11