diff --git a/headers/shader.hpp b/headers/shader.hpp deleted file mode 100644 index 74691ae..0000000 --- a/headers/shader.hpp +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef SHADER_H -#define SHADER_H -#include -#include - -class Shader { -public: - Shader(const char *vertexPath, const char *fragmentPath); - ~Shader(); - void use(); - void setInt(const std::string &name, int value); - void setFloat(const std::string &name, float value); - -private: - unsigned int ID; - unsigned int shaderCMPL(GLenum type, const char *src); - void shaderERR(unsigned int shader); - unsigned int shaderProgramCMPL(const char *vertexSource, - const char *fragmentSource); - void shaderProgramERR(unsigned int shaderProgram); -}; -#endif diff --git a/headers/shapes.h b/headers/shapes.h index b1d414f..e97b32d 100644 --- a/headers/shapes.h +++ b/headers/shapes.h @@ -54,12 +54,3 @@ const char *rgbFragmentShaderSource = "#version 330 core\n" "{\n" " FragColor = vec4(color, 1.0);\n" "}\0"; - -const char *rgbPulseFragmentShaderSource = "#version 330 core\n" - "out vec4 FragColor;\n" - "in vec3 color;\n" - "uniform float u_time;" - "void main()\n" - "{\n" - " FragColor = vec4(color,0.0)*(sin(u_time)/2.0+0.5);\n" - "}\0"; diff --git a/shaders/rgbPulseFrag.glsl b/shaders/rgbPulseFrag.glsl deleted file mode 100644 index 6af4d1a..0000000 --- a/shaders/rgbPulseFrag.glsl +++ /dev/null @@ -1,8 +0,0 @@ -#version 330 core -out vec4 FragColor; -in vec3 color; -uniform float u_time; -void main() -{ - FragColor = vec4(color,0.0)*(sin(u_time)/2.0+0.5); -} diff --git a/shaders/rgbPulseVert.glsl b/shaders/rgbPulseVert.glsl deleted file mode 100644 index e9e5b0b..0000000 --- a/shaders/rgbPulseVert.glsl +++ /dev/null @@ -1,9 +0,0 @@ -#version 330 core -layout (location = 0) in vec3 aPos; -layout (location = 1) in vec3 aColor; -out vec3 color; -void main() -{ - color = aColor; - gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0); -} diff --git a/src/main.cpp b/src/main.cpp index ca0914b..38778df 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3,13 +3,16 @@ #include #include #include -#include #define UNUSED(x) (void)(x) void processInput(GLFWwindow *window); void framebuffer_size_callback(GLFWwindow *window, int width, int height); - +unsigned int shaderCMPL(GLenum type, const char *src); +void shaderERR(unsigned int shader); +unsigned int shaderProgramCMPL(const char *vertexSource, + const char *fragmentSource); +void shaderProgramERR(unsigned int shaderProgram); int main(void) { int tmp = 0; @@ -49,7 +52,9 @@ int main(void) { glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(sqr_indices), sqr_indices, GL_STATIC_DRAW); */ - Shader* shaderProgram = new Shader("./shaders/rgbPulseVert.glsl","./shaders/rgbPulseFrag.glsl"); + unsigned int shaderProgram = + shaderProgramCMPL(rgbVertexShaderSource, rgbFragmentShaderSource); + glUseProgram(shaderProgram); while (!glfwWindowShouldClose(window)) { processInput(window); @@ -57,8 +62,7 @@ int main(void) { glClearColor(0.2f, 0.3f, 0.3f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); - shaderProgram->use(); - shaderProgram->setFloat("u_time",glfwGetTime()); + glUseProgram(shaderProgram); glBindVertexArray(VAO); //glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); @@ -68,7 +72,6 @@ int main(void) { glfwPollEvents(); } - delete(shaderProgram); glfwTerminate(); return 0; } @@ -82,3 +85,56 @@ void framebuffer_size_callback(GLFWwindow *window, int width, int height) { UNUSED(window); glViewport(0, 0, width, height); } + +unsigned int shaderCMPL(GLenum type, const char *src) { + unsigned int shader; + shader = glCreateShader(type); + glShaderSource(shader, 1, &src, NULL); + glCompileShader(shader); + return shader; +} + +void shaderERR(unsigned int shader) { + int success; + char infoLog[512]; + glGetShaderiv(shader, GL_COMPILE_STATUS, &success); + + if (!success) { + glGetShaderInfoLog(shader, 512, NULL, infoLog); + std::cout << "ERROR::SHADER::COMPILATION_FAILED\n" << infoLog << std::endl; + } +} + +unsigned int shaderProgramCMPL(const char *vertexSource, + const char *fragmentSource) { + unsigned int vertexShader; + vertexShader = shaderCMPL(GL_VERTEX_SHADER, vertexSource); + shaderERR(vertexShader); + + unsigned int fragmentShader; + fragmentShader = shaderCMPL(GL_FRAGMENT_SHADER, fragmentSource); + shaderERR(fragmentShader); + + unsigned int shaderProgram; + shaderProgram = glCreateProgram(); + + glAttachShader(shaderProgram, vertexShader); + glAttachShader(shaderProgram, fragmentShader); + glLinkProgram(shaderProgram); + shaderProgramERR(shaderProgram); + glDeleteShader(vertexShader); + glDeleteShader(fragmentShader); + + return shaderProgram; +} + +void shaderProgramERR(unsigned int shaderProgram) { + int success; + char infoLog[512]; + glGetProgramiv(shaderProgram, GL_LINK_STATUS, &success); + + if (!success) { + glGetProgramInfoLog(shaderProgram, 512, NULL, infoLog); + std::cout << "ERROR::SHADER::PROGRAM::FAILED\n" << infoLog << std::endl; + } +} diff --git a/src/shader.cpp b/src/shader.cpp deleted file mode 100644 index 608d134..0000000 --- a/src/shader.cpp +++ /dev/null @@ -1,99 +0,0 @@ -#include -#include -#include -#include -#include -#include - -/*pub*/ -Shader::Shader(const char *vertexPath, const char *fragmentPath) { - std::string vertexCode, fragmentCode; - std::ifstream vShaderFile, fShaderFile; - - vShaderFile.exceptions(std::ifstream::failbit | std::ifstream::badbit); - fShaderFile.exceptions(std::ifstream::failbit | std::ifstream::badbit); - try { - vShaderFile.open(vertexPath); - fShaderFile.open(fragmentPath); - std::stringstream vShaderStream, fShaderStream; - - vShaderStream << vShaderFile.rdbuf(); - fShaderStream << fShaderFile.rdbuf(); - - vShaderFile.close(); - fShaderFile.close(); - - vertexCode = vShaderStream.str(); - fragmentCode = fShaderStream.str(); - } catch (std::ifstream::failure &e) { - std::cout << "ERROR::SHADER::FILE_NOT_SUCCESSFULLY_READ: " << e.what() - << std::endl; - } - this->ID = shaderProgramCMPL(vertexCode.c_str(), fragmentCode.c_str()); -} - -Shader::~Shader() { glDeleteProgram(ID); } - -void Shader::use() { glUseProgram(ID); } - -void Shader::setInt(const std::string &name, int value) { - glUniform1i(glGetUniformLocation(ID, name.c_str()), value); -} - -void Shader::setFloat(const std::string &name, float value) { - glUniform1f(glGetUniformLocation(ID, name.c_str()), value); -} - -/*priv*/ -unsigned int Shader::shaderCMPL(GLenum type, const char *src) { - unsigned int shader; - shader = glCreateShader(type); - glShaderSource(shader, 1, &src, NULL); - glCompileShader(shader); - return shader; -} - -void Shader::shaderERR(unsigned int shader) { - int success; - char infoLog[512]; - glGetShaderiv(shader, GL_COMPILE_STATUS, &success); - - if (!success) { - glGetShaderInfoLog(shader, 512, NULL, infoLog); - std::cout << "ERROR::SHADER::COMPILATION_FAILED\n" << infoLog << std::endl; - } -} - -unsigned int Shader::shaderProgramCMPL(const char *vertexSource, - const char *fragmentSource) { - unsigned int vertexShader; - vertexShader = shaderCMPL(GL_VERTEX_SHADER, vertexSource); - shaderERR(vertexShader); - - unsigned int fragmentShader; - fragmentShader = shaderCMPL(GL_FRAGMENT_SHADER, fragmentSource); - shaderERR(fragmentShader); - - unsigned int shaderProgram; - shaderProgram = glCreateProgram(); - - glAttachShader(shaderProgram, vertexShader); - glAttachShader(shaderProgram, fragmentShader); - glLinkProgram(shaderProgram); - shaderProgramERR(shaderProgram); - glDeleteShader(vertexShader); - glDeleteShader(fragmentShader); - - return shaderProgram; -} - -void Shader::shaderProgramERR(unsigned int shaderProgram) { - int success; - char infoLog[512]; - glGetProgramiv(shaderProgram, GL_LINK_STATUS, &success); - - if (!success) { - glGetProgramInfoLog(shaderProgram, 512, NULL, infoLog); - std::cout << "ERROR::SHADER::PROGRAM::FAILED\n" << infoLog << std::endl; - } -}