18 FORCEINLINE
virtual void Bind()
const override
20 LK_OpenGL_Verify(glUseProgram(RendererID));
23 FORCEINLINE
virtual void Unbind()
const override
25 LK_OpenGL_Verify(glUseProgram(0));
28 FORCEINLINE
virtual LRendererID GetRendererID()
const override {
return RendererID; }
29 FORCEINLINE
virtual LRendererID& GetRendererID()
override {
return RendererID; }
31 virtual void Get(std::string_view Uniform,
int& Value)
override;
32 virtual void Get(std::string_view Uniform,
bool& Value)
override;
33 virtual void Get(std::string_view Uniform,
float& Value)
override;
34 virtual void Get(std::string_view Uniform, uint32_t& Value)
override;
35 virtual void Get(std::string_view Uniform, glm::vec3& Value)
override;
36 virtual void Get(std::string_view Uniform, glm::vec4& Value)
override;
38 virtual void Set(std::string_view Uniform,
const int Value)
override;
39 virtual void Set(std::string_view Uniform,
const bool Value)
override;
40 virtual void Set(std::string_view Uniform,
const float Value)
override;
41 virtual void Set(std::string_view Uniform,
const uint32_t Value)
override;
42 virtual void Set(std::string_view Uniform,
const glm::vec2& Value)
override;
43 virtual void Set(std::string_view Uniform,
const glm::vec3& Value)
override;
44 virtual void Set(std::string_view Uniform,
const glm::vec4& Value)
override;
45 virtual void Set(std::string_view Uniform,
const glm::ivec2& Value)
override;
46 virtual void Set(std::string_view Uniform,
const glm::ivec3& Value)
override;
47 virtual void Set(std::string_view Uniform,
const glm::ivec4& Value)
override;
48 virtual void Set(std::string_view Uniform,
const glm::mat4& Value)
override;
50 virtual std::size_t GetHash()
const override
52 return LHash::Generate<EHash::FNV>(FilePath.string());
55 virtual std::string GetName()
const override
57 if (FilePath.has_filename())
59 return FilePath.filename().string();
76 FORCEINLINE
int GetUniformLocation(
const std::string& Uniform)
78 if (UniformLocationCache.find(Uniform) != UniformLocationCache.end())
80 return UniformLocationCache[Uniform];
84 LK_OpenGL_Verify(UniformLocation = glGetUniformLocation(RendererID, Uniform.c_str()));
85 if (UniformLocation == -1)
87 LK_CORE_WARN_TAG(
"Shader",
"Uniform '{}' is not in use ({})", Uniform, FilePath.filename().string());
91 UniformLocationCache[Uniform] = UniformLocation;
93 return UniformLocation;
96 virtual uint32_t CompileShader(
const uint32_t InShaderType,
const std::string& Source)
override;
102 std::unordered_map<std::string, int> UniformLocationCache;
103 std::filesystem::path FilePath{};