Shkyera Engine
Easy to use, game engine for Python
Loading...
Searching...
No Matches
ShaderProgram.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <glad/glad.h>
4#include <glm/glm.hpp>
5
6#include <memory>
7#include <stack>
8#include <string>
9#include <unordered_map>
10
12
13namespace shkyera {
14
16 public:
19
20 void attachShader(const std::shared_ptr<Shader>& shader);
21
22 void link();
23
24 void use();
25 void stopUsing();
26
27 void setUniform(const std::string& name, int value);
28 void setUniform(const std::string& name, float value);
29 void setUniform(const std::string& name, const glm::vec2& value);
30 void setUniform(const std::string& name, const glm::vec3& value);
31 void setUniform(const std::string& name, const glm::mat4& value);
32
33 private:
34 bool isInUse();
35 GLint getUniformLocation(const std::string& name);
36
37 GLuint _id; // OpenGL shader program ID
38 std::unordered_map<std::string, GLint> _uniformLocationCache;
39
40 inline static std::stack<GLuint> _shadersInUse{};
41};
42
43class UseShader {
44 public:
46 ~UseShader();
47
48 private:
50};
51
52} // namespace shkyera
Definition ShaderProgram.hpp:15
void attachShader(const std::shared_ptr< Shader > &shader)
Definition ShaderProgram.cpp:14
void link()
Definition ShaderProgram.cpp:18
~ShaderProgram()
Definition ShaderProgram.cpp:10
GLuint _id
Definition ShaderProgram.hpp:37
void stopUsing()
Definition ShaderProgram.cpp:40
ShaderProgram()
Definition ShaderProgram.cpp:6
GLint getUniformLocation(const std::string &name)
Definition ShaderProgram.cpp:110
void use()
Definition ShaderProgram.cpp:35
static std::stack< GLuint > _shadersInUse
Definition ShaderProgram.hpp:40
void setUniform(const std::string &name, int value)
Definition ShaderProgram.cpp:45
bool isInUse()
Definition ShaderProgram.cpp:31
std::unordered_map< std::string, GLint > _uniformLocationCache
Definition ShaderProgram.hpp:38
Definition ShaderProgram.hpp:43
~UseShader()
Definition ShaderProgram.cpp:129
ShaderProgram & mShaderProgram
Definition ShaderProgram.hpp:49
Definition Asset.hpp:6
Definition Clock.hpp:9