Add support for geometry shaders

This commit is contained in:
Evert Prants 2018-04-15 12:56:04 +03:00
parent 017766a2ff
commit c08d1e8e5e
Signed by: evert
GPG Key ID: 1688DA83D222D0B5
2 changed files with 16 additions and 2 deletions

View File

@ -50,7 +50,7 @@ Camera::Camera(GLfloat posX, GLfloat posY, GLfloat posZ, GLfloat upX, GLfloat up
Camera::~Camera()
{
}
glm::mat4 Camera::getViewMatrix()

View File

@ -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);