1 #ifndef VolViz_ShaderProgram_h
2 #define VolViz_ShaderProgram_h
10 #include <unordered_map>
57 assertGL(
"Failed to upload uniform");
64 assertGL(
"Failed to upload uniform");
71 assertGL(
"Failed to upload uniform");
78 assertGL(
"Failed to upload uniform");
85 assertGL(
"Failed to upload uniform");
92 assertGL(
"Failed to upload uniform");
99 assertGL(
"Failed to upload uniform");
104 operator=(Eigen::Transpose<Eigen::Matrix4f>
const &
m)
const noexcept {
107 assertGL(
"Failed to upload uniform");
114 assertGL(
"Failed to upload uniform");
122 #pragma clang diagnostic push
123 #pragma clang diagnostic ignored "-Wpadded"
128 assertGL(
"OpenGL error stack not clean");
130 assert(
program_ != 0 &&
"Shader program creation failed");
157 assertGL(
"Shader attachment failed");
162 template <
class Container>
170 inline void use() const noexcept {
171 assertGL(
"Dirty OpenGL error stack");
178 if (search !=
uniforms_.end())
return search->second;
180 throw std::runtime_error(name +
181 " is not an active uniform of shader program " +
189 std::vector<std::string> activeUniforms;
190 for (
auto const &kv :
uniforms_) activeUniforms.push_back(kv.first);
191 return activeUniforms;
197 attachedShaders_.clear();
208 #pragma clang diagnostic pop
214 #endif // VolViz_ShaderProgram_h
int GLint
Definition: glad.h:684
void assertGL(char const *txt) noexcept
Definition: Error.h:17
void use() const noexcept
Definition: ShaderProgram.h:170
~ShaderProgram()
Definition: ShaderProgram.h:133
GLsizei const GLchar *const * string
Definition: glad.h:2514
#define glUniform1i
Definition: glad.h:2534
const GLdouble * v
Definition: glad.h:2583
#define glDetachShader
Definition: glad.h:2450
#define glDeleteProgram
Definition: glad.h:2444
void queryUniforms()
Definition: ShaderProgram.cpp:71
unsigned int GLenum
Definition: glad.h:678
GLenum type
Definition: glad.h:732
unsigned int GLuint
Definition: glad.h:688
~Shader()
Definition: ShaderProgram.h:24
ShaderProgram(ShaderProgram &&rhs) noexcept
Definition: ShaderProgram.h:140
#define glUniform2fv
Definition: glad.h:2549
RAII wrapper for OpenGL shader programs objects.
Definition: ShaderProgram.h:125
GLuint shader
Definition: glad.h:2427
RAII wrapper for OpenGL shader objects.
Definition: ShaderProgram.h:20
UniformProxy const & operator[](std::string const &name) const
Definition: ShaderProgram.h:176
const GLubyte * c
Definition: glad.h:14924
GLuint shader_
Definition: ShaderProgram.h:44
GLuint const GLchar * name
Definition: glad.h:2430
auto activeUniformNames() const
Definition: ShaderProgram.h:188
UniformTable uniforms_
Definition: ShaderProgram.h:205
GLuint program_
Definition: ShaderProgram.h:206
#define glUniform3fv
Definition: glad.h:2552
Shader(Shader &&rhs) noexcept
Definition: ShaderProgram.h:28
#define glAttachShader
Definition: glad.h:2429
ShaderProgram & attachShader(Shader const &shader) noexcept
Definition: ShaderProgram.h:155
#define glUniform1f
Definition: glad.h:2522
void compile() const
Definition: ShaderProgram.cpp:21
void detachShaders() noexcept
Definition: ShaderProgram.h:195
Shader(GLenum type, std::string const &source)
Definition: ShaderProgram.cpp:12
ShaderProgram & link()
Definition: ShaderProgram.cpp:46
#define glUniform1ui
Definition: glad.h:2842
std::unordered_map< std::string, UniformProxy > UniformTable
Definition: ShaderProgram.h:202
#define glUniformMatrix4fv
Definition: glad.h:2576
ShaderProgram & attachShaders(Container &&c) noexcept
Definition: ShaderProgram.h:163
std::vector< GLuint > attachedShaders_
Definition: ShaderProgram.h:204
Eigen::Vector3f Vector3f
Definition: Types.h:15
#define glUseProgram
Definition: glad.h:2519
ShaderProgram & operator=(ShaderProgram &&rhs) noexcept
Definition: ShaderProgram.h:147
#define glUniformMatrix3fv
Definition: glad.h:2573
ShaderProgram() noexcept
Definition: ShaderProgram.h:127
const GLfloat * m
Definition: glad.h:10074
#define glUniform4fv
Definition: glad.h:2555
GLdouble s
Definition: glad.h:8448
#define glCreateProgram
Definition: glad.h:2438
#define glDeleteShader
Definition: glad.h:2447
Shader & operator=(Shader &&rhs) noexcept
Definition: ShaderProgram.h:33
GLfloat f
Definition: glad.h:3403
GLsizei GLsizei GLchar * source
Definition: glad.h:2481