From 97479d5201dbf7e10544f25776bc5e47eb384e41 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Sun, 25 Feb 2024 02:15:38 +0300 Subject: [PATCH] minor refactor --- src/assets/assetload_funcs.cpp | 5 +- src/graphics/Shader.cpp | 155 ++++++++++++++++----------------- src/graphics/Shader.h | 32 ++++--- 3 files changed, 97 insertions(+), 95 deletions(-) diff --git a/src/assets/assetload_funcs.cpp b/src/assets/assetload_funcs.cpp index eeff84e0..5a7c6809 100644 --- a/src/assets/assetload_funcs.cpp +++ b/src/assets/assetload_funcs.cpp @@ -52,10 +52,11 @@ bool assetload::shader( std::string vertexSource = files::read_string(vertexFile); std::string fragmentSource = files::read_string(fragmentFile); - Shader* shader = Shader::loadShader( + Shader* shader = Shader::create( vertexFile.string(), fragmentFile.string(), - vertexSource, fragmentSource); + vertexSource, fragmentSource + ); if (shader == nullptr) { std::cerr << "failed to load shader '" << name << "'" << std::endl; diff --git a/src/graphics/Shader.cpp b/src/graphics/Shader.cpp index a75cfed2..7d620906 100644 --- a/src/graphics/Shader.cpp +++ b/src/graphics/Shader.cpp @@ -12,12 +12,7 @@ #include "../coders/GLSLExtension.h" -using std::cerr; -using std::endl; -using glm::vec2; -using glm::vec3; -using std::string; -using std::filesystem::path; +namespace fs = std::filesystem; GLSLExtension* Shader::preprocessor = new GLSLExtension(); @@ -25,106 +20,108 @@ Shader::Shader(unsigned int id) : id(id){ } Shader::~Shader(){ - glDeleteProgram(id); + glDeleteProgram(id); } void Shader::use(){ - glUseProgram(id); + glUseProgram(id); } -void Shader::uniformMatrix(string name, glm::mat4 matrix){ - GLuint transformLoc = glGetUniformLocation(id, name.c_str()); - glUniformMatrix4fv(transformLoc, 1, GL_FALSE, glm::value_ptr(matrix)); +void Shader::uniformMatrix(std::string name, glm::mat4 matrix){ + GLuint transformLoc = glGetUniformLocation(id, name.c_str()); + glUniformMatrix4fv(transformLoc, 1, GL_FALSE, glm::value_ptr(matrix)); } -void Shader::uniform1i(string name, int x){ - GLuint transformLoc = glGetUniformLocation(id, name.c_str()); - glUniform1i(transformLoc, x); +void Shader::uniform1i(std::string name, int x){ + GLuint transformLoc = glGetUniformLocation(id, name.c_str()); + glUniform1i(transformLoc, x); } -void Shader::uniform1f(string name, float x){ - GLuint transformLoc = glGetUniformLocation(id, name.c_str()); - glUniform1f(transformLoc, x); +void Shader::uniform1f(std::string name, float x){ + GLuint transformLoc = glGetUniformLocation(id, name.c_str()); + glUniform1f(transformLoc, x); } -void Shader::uniform2f(string name, float x, float y){ - GLuint transformLoc = glGetUniformLocation(id, name.c_str()); - glUniform2f(transformLoc, x, y); +void Shader::uniform2f(std::string name, float x, float y){ + GLuint transformLoc = glGetUniformLocation(id, name.c_str()); + glUniform2f(transformLoc, x, y); } -void Shader::uniform2f(string name, vec2 xy){ - GLuint transformLoc = glGetUniformLocation(id, name.c_str()); - glUniform2f(transformLoc, xy.x, xy.y); +void Shader::uniform2f(std::string name, glm::vec2 xy){ + GLuint transformLoc = glGetUniformLocation(id, name.c_str()); + glUniform2f(transformLoc, xy.x, xy.y); } -void Shader::uniform3f(string name, float x, float y, float z){ - GLuint transformLoc = glGetUniformLocation(id, name.c_str()); - glUniform3f(transformLoc, x,y,z); +void Shader::uniform3f(std::string name, float x, float y, float z){ + GLuint transformLoc = glGetUniformLocation(id, name.c_str()); + glUniform3f(transformLoc, x,y,z); } -void Shader::uniform3f(string name, vec3 xyz){ - GLuint transformLoc = glGetUniformLocation(id, name.c_str()); - glUniform3f(transformLoc, xyz.x, xyz.y, xyz.z); +void Shader::uniform3f(std::string name, glm::vec3 xyz){ + GLuint transformLoc = glGetUniformLocation(id, name.c_str()); + glUniform3f(transformLoc, xyz.x, xyz.y, xyz.z); } -Shader* Shader::loadShader(string vertexFile, - string fragmentFile, - string vertexCode, - string fragmentCode) { - vertexCode = preprocessor->process(path(vertexFile), vertexCode); - fragmentCode = preprocessor->process(path(fragmentFile), fragmentCode); +Shader* Shader::create( + std::string vertexFile, + std::string fragmentFile, + std::string vertexCode, + std::string fragmentCode +) { + vertexCode = preprocessor->process(fs::path(vertexFile), vertexCode); + fragmentCode = preprocessor->process(fs::path(fragmentFile), fragmentCode); - const GLchar* vShaderCode = vertexCode.c_str(); - const GLchar* fShaderCode = fragmentCode.c_str(); + const GLchar* vShaderCode = vertexCode.c_str(); + const GLchar* fShaderCode = fragmentCode.c_str(); - GLuint vertex, fragment; - GLint success; - GLchar infoLog[512]; + GLuint vertex, fragment; + GLint success; + GLchar infoLog[512]; - // Vertex Shader - vertex = glCreateShader(GL_VERTEX_SHADER); - glShaderSource(vertex, 1, &vShaderCode, nullptr); - glCompileShader(vertex); - glGetShaderiv(vertex, GL_COMPILE_STATUS, &success); - if (!success){ - glGetShaderInfoLog(vertex, 512, nullptr, infoLog); - cerr << "SHADER::VERTEX: compilation failed: " << vertexFile << endl; - cerr << infoLog << endl; - return nullptr; - } + // Vertex Shader + vertex = glCreateShader(GL_VERTEX_SHADER); + glShaderSource(vertex, 1, &vShaderCode, nullptr); + glCompileShader(vertex); + glGetShaderiv(vertex, GL_COMPILE_STATUS, &success); + if (!success){ + glGetShaderInfoLog(vertex, 512, nullptr, infoLog); + std::cerr << "SHADER::VERTEX: compilation failed: " << vertexFile << std::endl; + std::cerr << infoLog << std::endl; + return nullptr; + } - // Fragment Shader - fragment = glCreateShader(GL_FRAGMENT_SHADER); - glShaderSource(fragment, 1, &fShaderCode, nullptr); - glCompileShader(fragment); - glGetShaderiv(fragment, GL_COMPILE_STATUS, &success); - if (!success){ - glGetShaderInfoLog(fragment, 512, nullptr, infoLog); - cerr << "SHADER::FRAGMENT: compilation failed: " << vertexFile << endl; - cerr << infoLog << endl; - return nullptr; - } + // Fragment Shader + fragment = glCreateShader(GL_FRAGMENT_SHADER); + glShaderSource(fragment, 1, &fShaderCode, nullptr); + glCompileShader(fragment); + glGetShaderiv(fragment, GL_COMPILE_STATUS, &success); + if (!success){ + glGetShaderInfoLog(fragment, 512, nullptr, infoLog); + std::cerr << "SHADER::FRAGMENT: compilation failed: " << vertexFile << std::endl; + std::cerr << infoLog << std::endl; + return nullptr; + } - // Shader Program - GLuint id = glCreateProgram(); - glAttachShader(id, vertex); - glAttachShader(id, fragment); - glLinkProgram(id); + // Shader Program + GLuint id = glCreateProgram(); + glAttachShader(id, vertex); + glAttachShader(id, fragment); + glLinkProgram(id); - glGetProgramiv(id, GL_LINK_STATUS, &success); - if (!success){ - glGetProgramInfoLog(id, 512, nullptr, infoLog); - cerr << "SHADER::PROGRAM: linking failed" << endl; - cerr << infoLog << endl; + glGetProgramiv(id, GL_LINK_STATUS, &success); + if (!success){ + glGetProgramInfoLog(id, 512, nullptr, infoLog); + std::cerr << "SHADER::PROGRAM: linking failed" << std::endl; + std::cerr << infoLog << std::endl; - glDeleteShader(vertex); - glDeleteShader(fragment); - return nullptr; - } + glDeleteShader(vertex); + glDeleteShader(fragment); + return nullptr; + } - glDeleteShader(vertex); - glDeleteShader(fragment); + glDeleteShader(vertex); + glDeleteShader(fragment); - return new Shader(id); + return new Shader(id); } diff --git a/src/graphics/Shader.h b/src/graphics/Shader.h index 78672665..3aea4585 100644 --- a/src/graphics/Shader.h +++ b/src/graphics/Shader.h @@ -8,23 +8,27 @@ class GLSLExtension; class Shader { public: - static GLSLExtension* preprocessor; - unsigned int id; + static GLSLExtension* preprocessor; + unsigned int id; - Shader(unsigned int id); - ~Shader(); + Shader(unsigned int id); + ~Shader(); - void use(); - void uniformMatrix(std::string name, glm::mat4 matrix); - void uniform1i(std::string name, int x); - void uniform1f(std::string name, float x); - void uniform2f(std::string name, float x, float y); - void uniform2f(std::string name, glm::vec2 xy); - void uniform3f(std::string name, float x, float y, float z); - void uniform3f(std::string name, glm::vec3 xyz); + void use(); + void uniformMatrix(std::string name, glm::mat4 matrix); + void uniform1i(std::string name, int x); + void uniform1f(std::string name, float x); + void uniform2f(std::string name, float x, float y); + void uniform2f(std::string name, glm::vec2 xy); + void uniform3f(std::string name, float x, float y, float z); + void uniform3f(std::string name, glm::vec3 xyz); - static Shader* loadShader(std::string vertexFile, std::string fragmentFile, - std::string vertexSource, std::string fragmentSource); + static Shader* create( + std::string vertexFile, + std::string fragmentFile, + std::string vertexSource, + std::string fragmentSource + ); }; #endif /* GRAPHICS_SHADER_H_ */