Reorganize core
This commit is contained in:
75
core/Shaders/Shader.cpp
Normal file
75
core/Shaders/Shader.cpp
Normal file
@@ -0,0 +1,75 @@
|
||||
#include "Shader.h"
|
||||
|
||||
Shader::Shader(const char* vertexCode, const char* fragmentCode) {
|
||||
Id vertex, fragment;
|
||||
int success;
|
||||
char infoLog[512];
|
||||
|
||||
vertex = glCreateShader(GL_VERTEX_SHADER);
|
||||
glShaderSource(vertex, 1, &vertexCode, NULL);
|
||||
glCompileShader(vertex);
|
||||
glGetShaderiv(vertex, GL_COMPILE_STATUS, &success);
|
||||
if (!success) {
|
||||
glGetShaderInfoLog(vertex, 512, NULL, infoLog);
|
||||
std::cerr << "Vertex shader failed compilation\n" << infoLog << std::endl;
|
||||
}
|
||||
|
||||
fragment = glCreateShader(GL_FRAGMENT_SHADER);
|
||||
glShaderSource(fragment, 1, &fragmentCode, NULL);
|
||||
glCompileShader(fragment);
|
||||
glGetShaderiv(fragment, GL_COMPILE_STATUS, &success);
|
||||
if (!success) {
|
||||
glGetShaderInfoLog(fragment, 512, NULL, infoLog);
|
||||
std::cerr << "Fragment shader failed compilation\n" << infoLog << std::endl;
|
||||
}
|
||||
|
||||
id = glCreateProgram();
|
||||
glAttachShader(id, vertex);
|
||||
glAttachShader(id, fragment);
|
||||
glLinkProgram(id);
|
||||
glGetProgramiv(id, GL_LINK_STATUS, &success);
|
||||
if(!success) {
|
||||
glGetProgramInfoLog(id, 512, NULL, infoLog);
|
||||
std::cerr << "Shader program linking failed\n" << infoLog << std::endl;
|
||||
}
|
||||
|
||||
glDeleteShader(vertex);
|
||||
glDeleteShader(fragment);
|
||||
}
|
||||
|
||||
void Shader::Use() {
|
||||
glUseProgram(id);
|
||||
}
|
||||
|
||||
void Shader::UpdateView(Matrix view) {
|
||||
glUniformMatrix4fv(glGetUniformLocation(id, "VIEW"), 1, GL_FALSE, glm::value_ptr(view));
|
||||
}
|
||||
|
||||
void Shader::UpdateModel(Matrix model) {
|
||||
glUniformMatrix4fv(glGetUniformLocation(id, "MODEL"), 1, GL_FALSE, glm::value_ptr(model));
|
||||
}
|
||||
|
||||
void Shader::UpdateProjection(Matrix projection) {
|
||||
glUniformMatrix4fv(glGetUniformLocation(id, "PROJECTION"), 1, GL_FALSE, glm::value_ptr(projection));
|
||||
}
|
||||
|
||||
void Shader::UpdateColor(bool usesColor) {
|
||||
glUniform1i(glGetUniformLocation(id, "material.usesColor"), (int) usesColor);
|
||||
}
|
||||
|
||||
void Shader::UpdateColor(bool usesColor, Color color) {
|
||||
glUniform1i(glGetUniformLocation(id, "material.usesColor"), (int) usesColor);
|
||||
glUniform3f(glGetUniformLocation(id, "material.color"), color.r, color.g, color.b);
|
||||
}
|
||||
|
||||
void Shader::UpdateTex(bool usesTex) {
|
||||
glUniform1i(glGetUniformLocation(id, "material.usesTex"), (int) usesTex);
|
||||
}
|
||||
void Shader::UpdateTex(bool usesTex, Texture tex) {
|
||||
glUniform1i(glGetUniformLocation(id, "material.usesTex"), (int) usesTex);
|
||||
glBindTexture(GL_TEXTURE_2D, tex.id);
|
||||
}
|
||||
|
||||
Name Shader::GetName() const {
|
||||
return "Unnamed Shader";
|
||||
}
|
||||
26
core/Shaders/Shader.h
Normal file
26
core/Shaders/Shader.h
Normal file
@@ -0,0 +1,26 @@
|
||||
#ifndef SHADER_H
|
||||
#define SHADER_H
|
||||
|
||||
#include <glm/gtc/type_ptr.hpp>
|
||||
|
||||
#include "types.h"
|
||||
#include "Material.h"
|
||||
|
||||
class Shader {
|
||||
public:
|
||||
Id id;
|
||||
|
||||
Shader(const char *vertexCode, const char *fragmentCode);
|
||||
void Use();
|
||||
void UpdateView(Matrix view);
|
||||
void UpdateModel(Matrix model);
|
||||
void UpdateProjection(Matrix projection);
|
||||
void UpdateColor(bool usesColor);
|
||||
void UpdateColor(bool usesColor, Color color);
|
||||
void UpdateTex(bool usesTex);
|
||||
void UpdateTex(bool usesTex, Texture tex);
|
||||
|
||||
virtual Name GetName() const;
|
||||
};
|
||||
|
||||
#endif /* SHADER_H */
|
||||
Reference in New Issue
Block a user