aboutsummaryrefslogtreecommitdiff
path: root/src/RenderBackend/OpenGL/ShaderProgram.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/RenderBackend/OpenGL/ShaderProgram.cpp')
-rw-r--r--src/RenderBackend/OpenGL/ShaderProgram.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/RenderBackend/OpenGL/ShaderProgram.cpp b/src/RenderBackend/OpenGL/ShaderProgram.cpp
index 40f5b6c..aceda3b 100644
--- a/src/RenderBackend/OpenGL/ShaderProgram.cpp
+++ b/src/RenderBackend/OpenGL/ShaderProgram.cpp
@@ -12,6 +12,12 @@ namespace amalgine
}
+ ShaderProgramNonExistingGlobalVariable::ShaderProgramNonExistingGlobalVariable(const char *variableName) :
+ runtime_error(string("There is no shader global variable with the name '") + variableName + "'")
+ {
+
+ }
+
ShaderProgram::ShaderProgram() : built(false)
{
shaderProgramId = glCreateProgram();
@@ -84,4 +90,19 @@ namespace amalgine
throw ShaderProgramUsedBeforeBuilt();
}
}
+
+ ShaderProgramGlobalVec3 ShaderProgram::getGlobalVec3(const char *name)
+ {
+ if(built)
+ {
+ GLint uniformId = glGetUniformLocation(shaderProgramId, name);
+ if(uniformId == -1)
+ throw ShaderProgramNonExistingGlobalVariable(name);
+ return ShaderProgramGlobalVec3(this, uniformId);
+ }
+ else
+ {
+ throw ShaderProgramUsedBeforeBuilt();
+ }
+ }
}