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() Camera::~Camera()
{ {
} }
glm::mat4 Camera::getViewMatrix() 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!"); fatalError("Geometry shader failed to be created!");
} }
Shader::compileShader(vertexShaderFilePath, shader->m_vertexShaderID); Shader::compileShader(vertexShaderFilePath, shader->m_vertexShaderID);
Shader::compileShader(fragmentShaderFilePath, shader->m_fragmentShaderID); Shader::compileShader(fragmentShaderFilePath, shader->m_fragmentShaderID);
Shader::compileShader(geometryShaderFilePath, shader->m_geometryShaderID); Shader::compileShader(geometryShaderFilePath, shader->m_geometryShaderID);
@ -185,6 +185,9 @@ void Shader::linkShaders()
// Attach our shaders to our program // Attach our shaders to our program
glAttachShader(m_programID, m_vertexShaderID); glAttachShader(m_programID, m_vertexShaderID);
glAttachShader(m_programID, m_fragmentShaderID); glAttachShader(m_programID, m_fragmentShaderID);
if (m_geometryShaderID != 0) {
glAttachShader(m_programID, m_geometryShaderID);
}
// Link our program // Link our program
glLinkProgram(m_programID); glLinkProgram(m_programID);
@ -207,6 +210,9 @@ void Shader::linkShaders()
// Don't leak shaders either. // Don't leak shaders either.
glDeleteShader(m_vertexShaderID); glDeleteShader(m_vertexShaderID);
glDeleteShader(m_fragmentShaderID); glDeleteShader(m_fragmentShaderID);
if (m_geometryShaderID != 0) {
glDeleteShader(m_geometryShaderID);
}
std::printf("%s\n", &(infoLog[0])); std::printf("%s\n", &(infoLog[0]));
fatalError("Shader linking failed!"); fatalError("Shader linking failed!");
@ -217,6 +223,11 @@ void Shader::linkShaders()
glDetachShader(m_programID, m_fragmentShaderID); glDetachShader(m_programID, m_fragmentShaderID);
glDeleteShader(m_vertexShaderID); glDeleteShader(m_vertexShaderID);
glDeleteShader(m_fragmentShaderID); glDeleteShader(m_fragmentShaderID);
if (m_geometryShaderID != 0) {
glDetachShader(m_programID, m_geometryShaderID);
glDeleteShader(m_geometryShaderID);
}
} }
/** Bind the shader for usage */ /** Bind the shader for usage */
@ -287,12 +298,15 @@ void Shader::use()
{ {
m_valid = true; m_valid = true;
// Bind the shader
start(); start();
// Bind the buffers needed
glBindVertexArray(vao); glBindVertexArray(vao);
glBindBuffer(GL_ARRAY_BUFFER, vbo); glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo);
// Enable all attributes
for (auto it(m_attributes.begin()); it != m_attributes.end(); ++it) for (auto it(m_attributes.begin()); it != m_attributes.end(); ++it)
{ {
GLuint location = getAttribLocation(it->first); GLuint location = getAttribLocation(it->first);