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.cpp17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/RenderBackend/OpenGL/ShaderProgram.cpp b/src/RenderBackend/OpenGL/ShaderProgram.cpp
index f76903e..40f5b6c 100644
--- a/src/RenderBackend/OpenGL/ShaderProgram.cpp
+++ b/src/RenderBackend/OpenGL/ShaderProgram.cpp
@@ -36,17 +36,30 @@ namespace amalgine
// TODO: Before adding shader to program, check if it has already been added
- bool ShaderProgram::addVertexShader(CompiledVertexShader *vertexShader)
+ bool ShaderProgram::setVertexShader(CompiledVertexShader *vertexShader)
{
+ if(!vertexShader) return false;
+
// TODO: Do not allow adding shader if the program has already been built
glAttachShader(shaderProgramId, vertexShader->getShaderId());
return true;
}
- bool ShaderProgram::addPixelShader(CompiledPixelShader *pixelShader)
+ bool ShaderProgram::setPixelShader(CompiledPixelShader *pixelShader)
{
+ if(!pixelShader) return false;
+
// TODO: Do not allow adding shader if the program has already been built
glAttachShader(shaderProgramId, pixelShader->getShaderId());
+
+ const auto &pixelAttributes = pixelShader->getPixelAttributes();
+ for(const auto &pixelAttribute : pixelAttributes)
+ {
+ const string &attributeName = pixelAttribute.first;
+ i32 attributeLocation = pixelAttribute.second;
+ glBindFragDataLocation(shaderProgramId, attributeLocation, attributeName.c_str());
+ }
+
return true;
}