Platformer in OpenGL
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

93 lines
2.3 KiB

#pragma once
#include <string>
#include <fstream>
#include <sstream>
#include <iostream>
#include <glm.hpp>
#include "opengl.h"
class Shader {
private:
// Members
GLuint m_programID;
// Checks if compilation or linking failed and if so, print the error logs
int checkCompileErrors(GLuint object, std::string type);
public:
Shader()
{
m_programID = 0;
}
~Shader()
{
if (0 != m_programID)
glDeleteShader(m_programID);
}
// Inits with two file paths
// TODO: Remove this once a resource manager is done
int initShader(const std::string vertexPath, const std::string fragmentPath, const std::string geometryPath = std::string());
// Compiles the shader from given source code
// Note: geometry source code is optional
int compile(const char *vertexSource, const char *fragmentSource, const char *geometrySource = nullptr);
// Return the program ID
inline GLuint ID()
{
return m_programID;
}
// sets the current shader as active
inline void use()
{
glUseProgram(this->ID());
}
// Utility functions
/*inline void setFloat(const GLchar *name, GLfloat value)
{
glUniform1f(glGetUniformLocation(this->ID(), name), value);
}
inline void setInt(const GLchar *name, GLint value)
{
glUniform1i(glGetUniformLocation(this->ID(), name), value);
}
inline void setVector2f(const GLchar *name, GLfloat x, GLfloat y)
{
glUniform2f(glGetUniformLocation(this->ID(), name), x, y);
}
inline void setVector2f(const GLchar *name, const glm::vec2 &value)
{
glUniform2f(glGetUniformLocation(this->ID(), name), value.x, value.y);
}
inline void setVector3f(const GLchar *name, GLfloat x, GLfloat y, GLfloat z)
{
glUniform3f(glGetUniformLocation(this->ID(), name), x, y, z);
}
inline void setVector3f(const GLchar *name, const glm::vec3 &value)
{
glUniform3f(glGetUniformLocation(this->ID(), name), value.x, value.y, value.z);
}
inline void setVector4f(const GLchar *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
{
glUniform4f(glGetUniformLocation(this->ID(), name), x, y, z, w);
}
inline void setVector4f(const GLchar *name, const glm::vec4 &value)
{
glUniform4f(glGetUniformLocation(this->ID(), name), value.x, value.y, value.z, value.w);
}
inline void setMatrix4(const GLchar *name, const glm::mat4 &matrix)
{
glUniformMatrix4fv(glGetUniformLocation(this->ID(), name), 1, GL_FALSE, glm::value_ptr(matrix));
}*/
};