diff --git a/Escape-the-Dawn/Renderer.cpp b/Escape-the-Dawn/Renderer.cpp index 985bf2c..f567de0 100644 --- a/Escape-the-Dawn/Renderer.cpp +++ b/Escape-the-Dawn/Renderer.cpp @@ -71,7 +71,8 @@ void Renderer::AddModelToDraw(Model* _model) void Renderer::LoadContent() { - m_ShaderProgram->AddShader(std::unique_ptr(new VertexShader("Shaders/Vertex.glsl"))); - m_ShaderProgram->AddShader(std::unique_ptr(new FragmentShader("Shaders/Fragment.glsl"))); - m_ShaderProgram->Link(); + m_ShaderProgram.AddShader(std::unique_ptr(new VertexShader("Shaders/Vertex.glsl"))); + m_ShaderProgram.AddShader(std::unique_ptr(new FragmentShader("Shaders/Fragment.glsl"))); + m_ShaderProgram.Compile(); + m_ShaderProgram.Link(); } diff --git a/Escape-the-Dawn/Renderer.h b/Escape-the-Dawn/Renderer.h index c7547a6..c8e4fd0 100644 --- a/Escape-the-Dawn/Renderer.h +++ b/Escape-the-Dawn/Renderer.h @@ -25,7 +25,7 @@ class Renderer { public: - std::shared_ptr m_ShaderProgram; + ShaderProgram m_ShaderProgram; std::vector ModelsToRender; diff --git a/Escape-the-Dawn/ShaderProgram.cpp b/Escape-the-Dawn/ShaderProgram.cpp index f913f12..7c5d133 100644 --- a/Escape-the-Dawn/ShaderProgram.cpp +++ b/Escape-the-Dawn/ShaderProgram.cpp @@ -6,8 +6,7 @@ GLuint Shader::CompileShader(GLenum shaderType, std::string fileName) std::string shaderFile; std::ifstream in(fileName, std::ios::in); - if(!in) - { + if (!in) { LOG_ERROR("Error: Failed to open shader file \"%s\"", fileName.c_str()); return 0; } @@ -31,8 +30,7 @@ GLuint Shader::CompileShader(GLenum shaderType, std::string fileName) GLint compileStatus; glGetShaderiv(shader, GL_COMPILE_STATUS, &compileStatus); - if(compileStatus != GL_TRUE) - { + if(compileStatus != GL_TRUE) { LOG_ERROR("Shader compilation failed"); GLsizei infoLogLength; glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &infoLogLength); @@ -55,7 +53,9 @@ Shader::Shader(GLenum shaderType, std::string fileName) : m_ShaderType(shaderTyp Shader::~Shader() { - glDeleteShader(m_ShaderHandle); + if (m_ShaderHandle != 0) { + glDeleteShader(m_ShaderHandle); + } } GLuint Shader::Compile() @@ -89,13 +89,6 @@ ShaderProgram::ShaderProgram() Initialize(); } -ShaderProgram::ShaderProgram(std::string vertexShaderFile, std::string fragmentShaderFile) -{ - AddShader(std::unique_ptr(new VertexShader(vertexShaderFile))); - AddShader(std::unique_ptr(new VertexShader(fragmentShaderFile))); - Initialize(); -} - ShaderProgram::~ShaderProgram() { Unbind(); @@ -104,13 +97,16 @@ ShaderProgram::~ShaderProgram() void ShaderProgram::AddShader(std::unique_ptr shader) { - if (!shader->IsCompiled()) { - if (shader->Compile() == 0) { - return; + m_Shaders.push_back(std::move(shader)); +} + +void ShaderProgram::Compile() +{ + for (auto &shader : m_Shaders) { + if (!shader->IsCompiled()) { + shader->Compile(); } } - - m_Shaders.push_back(std::move(shader)); } GLuint ShaderProgram::Link() diff --git a/Escape-the-Dawn/ShaderProgram.h b/Escape-the-Dawn/ShaderProgram.h index e46d89d..3f2dfb1 100644 --- a/Escape-the-Dawn/ShaderProgram.h +++ b/Escape-the-Dawn/ShaderProgram.h @@ -71,10 +71,9 @@ public: ShaderProgram(); ~ShaderProgram(); - ShaderProgram(std::string vertexShaderFile, std::string fragmentShaderFile); - void AddShader(std::unique_ptr shader); + void Compile(); GLuint Link(); void Bind(); diff --git a/Escape-the-Dawn/Texture.h b/Escape-the-Dawn/Texture.h index 52f6594..bf27ff3 100644 --- a/Escape-the-Dawn/Texture.h +++ b/Escape-the-Dawn/Texture.h @@ -7,8 +7,6 @@ #include #include -//#include "Renderer.h" - class Texture { public: