#pragma once #include "Deer/Memory.h" #include "glm/glm.hpp" #include namespace Deer { class Shader { public: virtual void bind() const = 0; virtual ~Shader() = default; virtual void uploadUniformFloat(const std::string& name, float value) = 0; virtual void uploadUniformFloat2(const std::string& name, const glm::vec2& value) = 0; virtual void uploadUniformFloat3(const std::string& name, const glm::vec3& value) = 0; virtual void uploadUniformFloat4(const std::string& name, const glm::vec4& value) = 0; virtual void uploadUniformInt(const std::string& name, int value) = 0; virtual void uploadUniformMat4(const std::string& name, const glm::mat4 mat) = 0; static Ref create(const std::string& filePath); static Ref create(uint8_t* data, uint32_t size); static Shader* create(const std::string& vertexSrc, const std::string& fragmentSrc); }; }