diff --git a/src/Camera.cpp b/src/Camera.cpp index 6d2a4af..302aa5e 100644 --- a/src/Camera.cpp +++ b/src/Camera.cpp @@ -50,7 +50,7 @@ Camera::Camera(GLfloat posX, GLfloat posY, GLfloat posZ, GLfloat upX, GLfloat up Camera::~Camera() { - + } glm::mat4 Camera::getViewMatrix() diff --git a/src/Shader.cpp b/src/Shader.cpp index 0728338..31a15a4 100644 --- a/src/Shader.cpp +++ b/src/Shader.cpp @@ -117,7 +117,7 @@ Shader& Shader::createShader(const std::string& vertexShaderFilePath, const std: { fatalError("Geometry shader failed to be created!"); } - + Shader::compileShader(vertexShaderFilePath, shader->m_vertexShaderID); Shader::compileShader(fragmentShaderFilePath, shader->m_fragmentShaderID); Shader::compileShader(geometryShaderFilePath, shader->m_geometryShaderID); @@ -185,6 +185,9 @@ void Shader::linkShaders() // Attach our shaders to our program glAttachShader(m_programID, m_vertexShaderID); glAttachShader(m_programID, m_fragmentShaderID); + if (m_geometryShaderID != 0) { + glAttachShader(m_programID, m_geometryShaderID); + } // Link our program glLinkProgram(m_programID); @@ -207,6 +210,9 @@ void Shader::linkShaders() // Don't leak shaders either. glDeleteShader(m_vertexShaderID); glDeleteShader(m_fragmentShaderID); + if (m_geometryShaderID != 0) { + glDeleteShader(m_geometryShaderID); + } std::printf("%s\n", &(infoLog[0])); fatalError("Shader linking failed!"); @@ -217,6 +223,11 @@ void Shader::linkShaders() glDetachShader(m_programID, m_fragmentShaderID); glDeleteShader(m_vertexShaderID); glDeleteShader(m_fragmentShaderID); + + if (m_geometryShaderID != 0) { + glDetachShader(m_programID, m_geometryShaderID); + glDeleteShader(m_geometryShaderID); + } } /** Bind the shader for usage */ @@ -287,12 +298,15 @@ void Shader::use() { m_valid = true; + // Bind the shader start(); + // Bind the buffers needed glBindVertexArray(vao); glBindBuffer(GL_ARRAY_BUFFER, vbo); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo); + // Enable all attributes for (auto it(m_attributes.begin()); it != m_attributes.end(); ++it) { GLuint location = getAttribLocation(it->first);