Add support for geometry shaders
This commit is contained in:
parent
017766a2ff
commit
c08d1e8e5e
|
@ -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()
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue