3#include "../Core/Resource.hpp"
4#include "../Graphic.hpp"
10 const std::string DEFAULT_SHADER_DIR =
"shader/";
11 const std::string DEFAULT_SHADER_LOCATION = res::DEFAULT_LOCATION + DEFAULT_SHADER_DIR;
21 inline std::string getShaderTypeString(shader::ShaderType type) {
23 case SHADER_TYPE_VERTEX:
25 case shader::SHADER_TYPE_FRAGMENT:
27 case shader::SHADER_TYPE_GEOMETRY:
29 case shader::SHADER_TYPE_PROGRAM:
36 inline unsigned int getShaderTypeValue(shader::ShaderType type) {
38 case shader::SHADER_TYPE_VERTEX:
39 return GL_VERTEX_SHADER;
40 case shader::SHADER_TYPE_FRAGMENT:
41 return GL_FRAGMENT_SHADER;
42 case shader::SHADER_TYPE_GEOMETRY:
43 return GL_GEOMETRY_SHADER;
44 case shader::SHADER_TYPE_PROGRAM:
45 std::cerr <<
"Invalid Shader type -> " << getShaderTypeString(type) <<
".\nUse a ShaderProgram instead.";
48 std::cerr <<
"Invalid Shader type -> " << getShaderTypeString(type) <<
".\n";
59 inline unsigned int getId()
const {
return this->m_id; }
63 Shader(
const std::string &location,
const std::string &file,
const shader::ShaderType &type) :
64 m_location(std::move(location)), m_file(std::move(file)), m_type(type) {}
66 Shader(
const std::string &file,
const shader::ShaderType &type) :
67 Shader(shader::DEFAULT_SHADER_LOCATION, file, type) {}
72 void checkCompileErrors();
74 unsigned int m_id = 0;
75 shader::ShaderType m_type = shader::ShaderType::SHADER_TYPE_NONE;
77 std::string m_location{};
79 unsigned int m_resourceId = 0;
84 void createShaderProgram();
88 inline unsigned int getId()
const {
return this->m_id; }
90 void setBool(
const std::string &name,
bool value)
const;
91 void setInt(
const std::string &name,
int value)
const;
92 void setFloat(
const std::string &name,
float value)
const;
94 void setVec2(
const std::string &name,
const glm::vec2 &value)
const;
95 void setVec2(
const std::string &name,
float x,
float y)
const;
97 void setVec3(
const std::string &name,
const glm::vec3 &value)
const;
98 void setVec3(
const std::string &name,
float x,
float y,
float z)
const;
100 void setVec4(
const std::string &name,
const glm::vec4 &value)
const;
101 void setVec4(
const std::string &name,
float x,
float y,
float z,
float w)
const;
103 void setMat2(
const std::string &name,
const glm::mat2 &mat)
const;
104 void setMat3(
const std::string &name,
const glm::mat3 &mat)
const;
105 void setMat4(
const std::string &name,
const glm::mat4 &mat)
const;
107 ShaderProgram() =
delete;
108 ShaderProgram(
const std::string &vloc,
const std::string &vfile,
const std::string &floc,
const std::string &ffile);
110 ShaderProgram(
const std::string &vfile,
const std::string &ffile) :
111 ShaderProgram(shader::DEFAULT_SHADER_LOCATION, vfile,
112 shader::DEFAULT_SHADER_LOCATION, ffile) {}
114 ShaderProgram(
const std::string &vloc,
const std::string &vfile,
const std::string &floc,
const std::string &ffile,
115 const std::string &gloc,
const std::string &gfile);
117 ShaderProgram(
const std::string &vfile,
const std::string &ffile,
const std::string &gfile) :
118 ShaderProgram(shader::DEFAULT_SHADER_LOCATION, vfile,
119 shader::DEFAULT_SHADER_LOCATION, ffile,
120 shader::DEFAULT_SHADER_LOCATION, gfile) {}
125 void checkLinkingErrors();
127 unsigned int m_id = 0;
128 Unique<Shader> m_vert =
nullptr;
129 Unique<Shader> m_frag =
nullptr;
130 Unique<Shader> m_geom =
nullptr;