Monad Engine da02fba2
> Undercity Codex_
Loading...
Searching...
No Matches
ShaderProgram.cpp
Go to the documentation of this file.
1#include "graphics/ShaderProgram.h"
2#include "graphics/Texture.h"
3#include <glm/gtc/type_ptr.hpp>
4
5namespace eng
6{
7 ShaderProgram::ShaderProgram(GLuint shaderProgramID) : m_shaderProgramID(shaderProgramID)
8 {
9 }
10
12 {
13 glDeleteProgram(m_shaderProgramID);
14 }
15
17 {
18 glUseProgram(m_shaderProgramID);
19 m_currentTextureUnit = 0;
20 }
21
23 {
24 auto it = m_uniformLocationCache.find(name);
25 if (it != m_uniformLocationCache.end())
26 {
27 return it->second;
28 }
29 GLint location = glGetUniformLocation(m_shaderProgramID, name.c_str());
30 m_uniformLocationCache[name] = location;
31 return location;
32 }
33
34 void ShaderProgram::SetUniform(const std::string& name, float value)
35 {
36 auto location = GetUniformLocation(name);
37 glUniform1f(location, value);
38 }
39
40 void ShaderProgram::SetUniform(const std::string& name, float v0, float v1)
41 {
42 auto location = GetUniformLocation(name);
43 glUniform2f(location, v0, v1);
44 }
45
46 void ShaderProgram::SetUniform(const std::string& name, const glm::mat4& mat)
47 {
48 auto location = GetUniformLocation(name);
49 glUniformMatrix4fv(location, 1, GL_FALSE, glm::value_ptr(mat));
50 }
51
52 void ShaderProgram::SetUniform(const std::string& name, const glm::vec3& value)
53 {
54 auto location = GetUniformLocation(name);
55 glUniform3fv(location, 1, glm::value_ptr(value));
56 }
57
58 void ShaderProgram::SetUniform(const std::string& name, const glm::vec4& value)
59 {
60 auto location = GetUniformLocation(name);
61 glUniform4fv(location, 1, glm::value_ptr(value));
62 }
63
64 void ShaderProgram::SetTexture(const std::string& name, Texture* texture)
65 {
66 auto location = GetUniformLocation(name);
67
68 glActiveTexture(GL_TEXTURE0 + m_currentTextureUnit);
69 glBindTexture(GL_TEXTURE_2D, texture->GetID());
70 glUniform1i(location, m_currentTextureUnit);
71 ++m_currentTextureUnit;
72 }
73}
int GLint
Definition GLForward.h:13
unsigned int GLuint
Definition GLForward.h:11
GLint GetUniformLocation(const std::string &name)
ShaderProgram()=delete
void SetUniform(const std::string &name, float value)
void SetTexture(const std::string &name, Texture *texture)
GLuint GetID() const
Definition Texture.cpp:23