#pragma once #include #include struct ShaderProgramSource { std::string VertexSource; std::string FragmentSource; }; class Shader { private: unsigned int m_RendererID; std::string m_FilePath; std::unordered_map m_UniformLocationCache; public: Shader(const std::string& filepath); ~Shader(); void Bind() const; void Unbind() const; // Set uniforms void SetUniform4f(const std::string& name, float f0, float f1, float f2, float f3); void SetUniform1f(const std::string& name, float value); private: int GetUniformLocation(const std::string& name); struct ShaderProgramSource ParseShader(const std::string& filepath); unsigned int CompileShader(unsigned int type, const std::string& source); unsigned int CreateShader(const std::string& vertexShader, const std::string& fragmentShader); };