CGVIS Utils
Loading...
Searching...
No Matches
GLProgram.h
Go to the documentation of this file.
1#pragma once
2
3#include <vector>
4#include <string>
5#include <exception>
6
7#include <GL/glew.h>
8#include <GLFW/glfw3.h>
9
10#include "Vec2.h"
11#include "Vec3.h"
12#include "Vec4.h"
13#include "Mat4.h"
14#include "GLTexture2D.h"
15#include "GLTexture3D.h"
16#ifndef __EMSCRIPTEN__
17#include "GLTexture1D.h"
18#include "GLDepthTexture.h"
19#include "GLTextureCube.h"
20#endif
21
35
39class ProgramException : public std::exception {
40public:
45 ProgramException(const std::string& whatStr) : whatStr(whatStr) {}
49 virtual const char* what() const throw() {
50 return whatStr.c_str();
51 }
52private:
53 std::string whatStr;
54};
55
59class GLProgram {
60public:
62 ~GLProgram();
63
69
76 static GLProgram createFromFiles(const std::vector<std::string>& vs, const std::vector<std::string>& fs,
77 const std::vector<std::string>& gs = std::vector<std::string>());
84 static GLProgram createFromStrings(const std::vector<std::string>& vs, const std::vector<std::string>& fs,
85 const std::vector<std::string>& gs = std::vector<std::string>());
86
90 static GLProgram createFromFile(const std::string& vs, const std::string& fs, const std::string& gs="");
94 static GLProgram createFromString(const std::string& vs, const std::string& fs, const std::string& gs="");
96
98 GLProgram(const GLProgram& other);
100 GLProgram& operator=(const GLProgram& other);
101
106
112 GLint getAttributeLocation(const std::string& id) const;
119 GLint getUniformLocation(const std::string& id) const;
121
127 void setUniform(const std::string& id, float value) const;
128 void setUniform(const std::string& id, const Vec2& value) const;
129 void setUniform(const std::string& id, const Vec3& value) const;
130 void setUniform(const std::string& id, const Vec4& value) const;
131 void setUniform(const std::string& id, int value) const;
132 void setUniform(const std::string& id, const Vec2i& value) const;
133 void setUniform(const std::string& id, const Mat4& value, bool transpose=false) const;
135
136#ifndef __EMSCRIPTEN__
139 void setTexture(const std::string& id, const GLDepthTexture& texture, GLenum unit=0) const;
140 void setTexture(const std::string& id, const GLTexture1D& texture, GLenum unit=0) const;
141 void setTexture(const std::string& id, const GLTextureCube& texture, GLenum unit=0) const;
143#endif
146 void setTexture(const std::string& id, const GLTexture2D& texture, GLenum unit=0) const;
147 void setTexture(const std::string& id, const GLTexture3D& texture, GLenum unit=0) const;
149
155 void setUniform(GLint id, float value) const;
156 void setUniform(GLint id, const Vec2& value) const;
157 void setUniform(GLint id, const Vec3& value) const;
158 void setUniform(GLint id, const Vec4& value) const;
159 void setUniform(GLint id, int value) const;
160 void setUniform(GLint id, const Vec2i& value) const;
161 void setUniform(GLint id, const Vec3i& value) const;
162 void setUniform(GLint id, const Vec4i& value) const;
163 void setUniform(GLint id, const Mat4& value, bool transpose=false) const;
164
165 void setUniform(GLint id, const std::vector<float>& value) const;
166 void setUniform(GLint id, const std::vector<Vec2>& value) const;
167 void setUniform(GLint id, const std::vector<Vec3>& value) const;
168 void setUniform(GLint id, const std::vector<Vec4>& value) const;
169 void setUniform(GLint id, const std::vector<int>& value) const;
170 void setUniform(GLint id, const std::vector<Vec2i>& value) const;
171 void setUniform(GLint id, const std::vector<Vec3i>& value) const;
172 void setUniform(GLint id, const std::vector<Vec4i>& value) const;
173 void setUniform(GLint id, const std::vector<Mat4>& value, bool transpose=false) const;
175
176#ifndef __EMSCRIPTEN__
179 void setTexture(GLint id, const GLTexture1D& texture, GLenum unit=0) const;
180 void setTexture(GLint id, const GLDepthTexture& texture, GLenum unit=0) const;
181 void setTexture(GLint id, const GLTextureCube& texture, GLenum unit=0) const;
183#endif
186 void setTexture(GLint id, const GLTexture2D& texture, GLenum unit=0) const;
187 void setTexture(GLint id, const GLTexture3D& texture, GLenum unit=0) const;
189
190#ifndef __EMSCRIPTEN__
192 void unsetTexture1D(GLenum unit) const;
193#endif
195 void unsetTexture2D(GLenum unit) const;
197 void unsetTexture3D(GLenum unit) const;
198
200 void enable() const;
202 void disable() const;
203
204private:
205 GLuint glVertexShader;
206 GLuint glFragmentShader;
207 GLuint glGeometryShader;
208 GLuint glProgram;
209
210 std::vector<std::string> vertexShaderStrings;
211 std::vector<std::string> fragmentShaderStrings;
212 std::vector<std::string> geometryShaderStrings;
213
215 static std::string loadFile(const std::string& filename);
216
218 static GLuint createShader(GLenum type, const GLchar** src, GLsizei count);
219
221 GLProgram(std::vector<std::string> vertexShaderStrings, std::vector<std::string> fragmentShaderStrings, std::vector<std::string> geometryShaderStrings);
222
224 void programFromVectors(std::vector<std::string> vs, std::vector<std::string> fs, std::vector<std::string> gs);
225};
RAII wrapper for a 2D OpenGL depth texture with compare mode enabled.
Thin RAII wrapper for an OpenGL 1D texture.
RAII wrapper for an OpenGL 2D texture with byte/half/float upload helpers.
RAII wrapper for an OpenGL 3D texture with byte/float upload helpers.
RAII wrapper for an OpenGL cube map texture with byte/half/float uploads.
4×4 matrix template for 3D transformations, projections, and stereo sets.
Mat4t< float > Mat4
Single-precision 4×4 matrix.
Definition Mat4.h:567
2D vector template with arithmetic, length utilities, and helpers.
Vec2t< float > Vec2
Float vector (x,y).
Definition Vec2.h:258
Vec2t< int32_t > Vec2i
32-bit signed integer vector (x,y).
Definition Vec2.h:260
3D vector template with arithmetic, geometry helpers, and RNG utilities.
Vec3t< int32_t > Vec3i
3D 32-bit signed integer vector (x,y,z).
Definition Vec3.h:426
Vec3t< float > Vec3
3D float vector (x,y,z).
Definition Vec3.h:424
4D vector template with arithmetic, length helpers, and utilities.
Vec4t< int32_t > Vec4i
4D 32-bit signed integer vector (x,y,z,w).
Definition Vec4.h:339
Vec4t< float > Vec4
4D float vector (x,y,z,w).
Definition Vec4.h:337
Definition GLDepthTexture.h:19
void setTexture(const std::string &id, const GLDepthTexture &texture, GLenum unit=0) const
Definition GLProgram.cpp:302
void disable() const
Unbind any program (glUseProgram(0)).
Definition GLProgram.cpp:111
static GLProgram createFromFile(const std::string &vs, const std::string &fs, const std::string &gs="")
Convenience overload for a single file per stage.
Definition GLProgram.cpp:70
void setUniform(const std::string &id, float value) const
Definition GLProgram.cpp:269
void enable() const
Bind this program for subsequent draw calls (glUseProgram).
Definition GLProgram.cpp:107
GLProgram(const GLProgram &other)
Copy‑construct a new program with duplicated shaders and linkage.
Definition GLProgram.cpp:8
void unsetTexture2D(GLenum unit) const
Unbind any 2D texture from texture unit unit.
Definition GLProgram.cpp:229
GLint getUniformLocation(const std::string &id) const
Query a uniform location by name.
Definition GLProgram.cpp:99
static GLProgram createFromStrings(const std::vector< std::string > &vs, const std::vector< std::string > &fs, const std::vector< std::string > &gs=std::vector< std::string >())
Build directly from in‑memory source strings per stage.
Definition GLProgram.cpp:66
static GLProgram createFromString(const std::string &vs, const std::string &fs, const std::string &gs="")
Convenience overload for a single source string per stage.
Definition GLProgram.cpp:74
GLProgram & operator=(const GLProgram &other)
Copy‑assign, releasing current GL objects and recreating from other.
Definition GLProgram.cpp:13
void unsetTexture1D(GLenum unit) const
Unbind any 1D texture from texture unit unit.
Definition GLProgram.cpp:223
void unsetTexture3D(GLenum unit) const
Unbind any 3D texture from texture unit unit.
Definition GLProgram.cpp:234
GLint getAttributeLocation(const std::string &id) const
Query an attribute location by name.
Definition GLProgram.cpp:91
~GLProgram()
Destroy and delete owned GL shader objects and program.
Definition GLProgram.cpp:42
static GLProgram createFromFiles(const std::vector< std::string > &vs, const std::vector< std::string > &fs, const std::vector< std::string > &gs=std::vector< std::string >())
Build from lists of filenames per stage.
Definition GLProgram.cpp:49
Definition GLTexture1D.h:16
Definition GLTexture2D.h:19
Definition GLTexture3D.h:18
OpenGL cube map texture (6 faces) with convenience upload helpers.
Definition GLTextureCube.h:31
ProgramException(const std::string &whatStr)
Construct with an explanatory message.
Definition GLProgram.h:45
virtual const char * what() const
Retrieve the explanatory C‑string.
Definition GLProgram.h:49