Visualizer/src/backend/Shader.hpp

35 lines
708 B
C++
Raw Normal View History

2021-12-20 18:09:52 +00:00
#pragma once
2021-12-20 23:51:18 +00:00
#include <glm/glm.hpp>
2021-12-20 18:09:52 +00:00
#include <string>
#include <memory>
class AbstractShader
{
friend class ShaderFactory;
public:
AbstractShader(const std::string& vertexShader, const std::string& fragmentShader);
AbstractShader(const AbstractShader& other) = delete;
~AbstractShader();
inline bool Good() { return id != 0; }
void Use();
2021-12-20 23:51:18 +00:00
void SetUniform(const std::string& name, const glm::mat4& value);
2021-12-20 18:09:52 +00:00
private:
unsigned int id;
};
typedef std::shared_ptr<AbstractShader> Shader;
class ShaderFactory
{
public:
inline static Shader Produce(const std::string& vertexShader, const std::string& fragmentShader)
{
return std::make_shared<AbstractShader>(vertexShader, fragmentShader);
}
};