Raftel Engine
 
Loading...
Searching...
No Matches
shader.hpp
Go to the documentation of this file.
1
23#ifndef __SHADER_H__
24#define __SHADER_H__ 1
25
26#pragma once
27#include <GL/glew.h>
28#include <string>
29#include <glm/mat4x4.hpp>
30#include <raftel/global_macros.hpp>
31
32
33namespace Raftel {
34
43 class Shader {
44 public:
48 Shader() = default;
49
56
64
72 bool loadFromFile(const std::string& filePath, GLenum shaderType);
73
81 bool loadFromSource(const std::string& sourceCode, GLenum shaderType);
82
88 GLuint getID() const { return shaderID; }
89
95 const std::string& getLastError() const { return lastError; }
96
97 private:
98 GLuint shaderID = 0;
99 std::string lastError;
100
108 void setError(const std::string& errorMessage, const char* file, int line);
109 };
110
120 public:
124 ShaderProgram() = default;
125
132 ShaderProgram(const std::string& vertexPath, const std::string& fragmentPath);
133
140
148
156 bool load(const std::string& vertexPath, const std::string& fragmentPath);
157
161 void use();
162
166 void unUse();
167
174 void setUniform(const std::string& name, int value);
175
182 void setUniform(const std::string& name, float value);
183
190 void setUniform(const std::string& name, glm::vec3 value);
191
198 void setUniform(const std::string& name, glm::vec4 value);
199
206 void setUniform(const std::string& name, const glm::mat4& matrix);
207
213 GLuint GetProgramID() const { return programID; }
214
220 const std::string& getLastError() const { return lastError; }
221
227 void attachShader(const Shader& shader);
228
233
246 bool loadFromMemory(const char* vertexSource, const char* fragmentSource);
247
248 private:
249 GLuint programID = 0;
250 std::string lastError;
251
259 void setError(const std::string& errorMessage, const char* file, int line);
260
266 bool link();
267 };
268} // namespace Raftel
269#endif // __SHADER_HPP__
A class to represent an OpenGL shader (vertex, fragment, etc.).
Definition shader.hpp:43
bool loadFromSource(const std::string &sourceCode, GLenum shaderType)
Loads a shader from source code.
const std::string & getLastError() const
Gets the last error message.
Definition shader.hpp:95
GLuint getID() const
Gets the OpenGL shader ID.
Definition shader.hpp:88
MOVABLE_BUT_NOT_COPYABLE(Shader)
Move constructor for Shader.
~Shader()
Destructor for Shader.
Shader()=default
Default constructor for Shader.
bool loadFromFile(const std::string &filePath, GLenum shaderType)
Loads a shader from a file.
void setUniform(const std::string &name, const glm::mat4 &matrix)
Sets a glm::mat4 uniform in the shader program.
void setUniform(const std::string &name, glm::vec4 value)
Sets a glm::vec4 uniform in the shader program.
bool loadFromMemory(const char *vertexSource, const char *fragmentSource)
Loads and compiles vertex and fragment shaders from memory.
void unUse()
Deactivates the shader program.
ShaderProgram()=default
Default constructor for ShaderProgram.
void setUniform(const std::string &name, float value)
Sets a float uniform in the shader program.
GLuint GetProgramID() const
Gets the OpenGL program ID.
Definition shader.hpp:213
void setUniform(const std::string &name, glm::vec3 value)
Sets a glm::vec3 uniform in the shader program.
bool load(const std::string &vertexPath, const std::string &fragmentPath)
Loads and links shaders from files.
MOVABLE_BUT_NOT_COPYABLE(ShaderProgram)
Move constructor for ShaderProgram.
const std::string & getLastError() const
Gets the last error message.
Definition shader.hpp:220
void printActiveUniforms()
Prints active uniforms in the shader program.
void setUniform(const std::string &name, int value)
Sets an integer uniform in the shader program.
void attachShader(const Shader &shader)
Attaches a shader to the shader program.
ShaderProgram(const std::string &vertexPath, const std::string &fragmentPath)
Constructor for ShaderProgram, loading and linking shaders from files.
void use()
Activates the shader program for use.
~ShaderProgram()
Destructor for ShaderProgram.