summaryrefslogtreecommitdiff
path: root/learnopengl/shader.h
diff options
context:
space:
mode:
authorAndrew Guschin <guschin.drew@gmail.com>2022-04-02 09:13:33 +0400
committerAndrew Guschin <guschin.drew@gmail.com>2022-04-02 09:13:33 +0400
commit806a1e093eeac8b426b20717c14260c9cb896798 (patch)
tree7b6e1a01958269ce78b9716461a9fa4c05d3dc5e /learnopengl/shader.h
parent15ccb946f43283bfc91d80ddf012d9ae2a0333ed (diff)
Removed CUDA files and changed build system to premakeremake
Diffstat (limited to 'learnopengl/shader.h')
-rw-r--r--learnopengl/shader.h195
1 files changed, 0 insertions, 195 deletions
diff --git a/learnopengl/shader.h b/learnopengl/shader.h
deleted file mode 100644
index c8adcae..0000000
--- a/learnopengl/shader.h
+++ /dev/null
@@ -1,195 +0,0 @@
-#ifndef SHADER_H
-#define SHADER_H
-
-#include <glad/glad.h>
-//#include <glm/glm.hpp>
-
-#include <string>
-#include <fstream>
-#include <sstream>
-#include <iostream>
-
-class Shader
-{
-public:
- unsigned int ID;
- // constructor generates the shader on the fly
- // ------------------------------------------------------------------------
- Shader(const char* vertexPath, const char* fragmentPath, const char* geometryPath = nullptr)
- {
- // 1. retrieve the vertex/fragment source code from filePath
- std::string vertexCode;
- std::string fragmentCode;
- std::string geometryCode;
- std::ifstream vShaderFile;
- std::ifstream fShaderFile;
- std::ifstream gShaderFile;
- // ensure ifstream objects can throw exceptions:
- vShaderFile.exceptions (std::ifstream::failbit | std::ifstream::badbit);
- fShaderFile.exceptions (std::ifstream::failbit | std::ifstream::badbit);
- gShaderFile.exceptions (std::ifstream::failbit | std::ifstream::badbit);
- try
- {
- // open files
-// std::cout << "kavo" << std::endl;
- vShaderFile.open(vertexPath);
-
- fShaderFile.open(fragmentPath);
- std::stringstream vShaderStream, fShaderStream;
- // read file's buffer contents into streams
- vShaderStream << vShaderFile.rdbuf();
- fShaderStream << fShaderFile.rdbuf();
- // close file handlers
- vShaderFile.close();
- fShaderFile.close();
- // convert stream into string
- vertexCode = vShaderStream.str();
- fragmentCode = fShaderStream.str();
-
- // if geometry shader path is present, also load a geometry shader
- if(geometryPath != nullptr)
- {
- gShaderFile.open(geometryPath);
- std::stringstream gShaderStream;
- gShaderStream << gShaderFile.rdbuf();
- gShaderFile.close();
- geometryCode = gShaderStream.str();
- }
- }
- catch (std::ifstream::failure e)
- {
- std::cout << "ERROR::SHADER::FILE_NOT_SUCCESFULLY_READ" << e.what() << std::endl;
- }
- const char* vShaderCode = vertexCode.c_str();
- const char * fShaderCode = fragmentCode.c_str();
- // 2. compile shaders
- unsigned int vertex, fragment;
- // vertex shader
- vertex = glCreateShader(GL_VERTEX_SHADER);
- glShaderSource(vertex, 1, &vShaderCode, NULL);
- glCompileShader(vertex);
- checkCompileErrors(vertex, "VERTEX");
- // fragment Shader
- fragment = glCreateShader(GL_FRAGMENT_SHADER);
- glShaderSource(fragment, 1, &fShaderCode, NULL);
- glCompileShader(fragment);
- checkCompileErrors(fragment, "FRAGMENT");
- // if geometry shader is given, compile geometry shader
- unsigned int geometry;
- if(geometryPath != nullptr)
- {
- const char * gShaderCode = geometryCode.c_str();
- geometry = glCreateShader(GL_GEOMETRY_SHADER);
- glShaderSource(geometry, 1, &gShaderCode, NULL);
- glCompileShader(geometry);
- checkCompileErrors(geometry, "GEOMETRY");
- }
- // shader Program
- ID = glCreateProgram();
- glAttachShader(ID, vertex);
- glAttachShader(ID, fragment);
- if(geometryPath != nullptr)
- glAttachShader(ID, geometry);
- glLinkProgram(ID);
- checkCompileErrors(ID, "PROGRAM");
- // delete the shaders as they're linked into our program now and no longer necessery
- glDeleteShader(vertex);
- glDeleteShader(fragment);
- if(geometryPath != nullptr)
- glDeleteShader(geometry);
-
- }
- // activate the shader
- // ------------------------------------------------------------------------
- void use()
- {
- glUseProgram(ID);
- }
- // utility uniform functions
- // ------------------------------------------------------------------------
- void setBool(const std::string &name, bool value) const
- {
- glUniform1i(glGetUniformLocation(ID, name.c_str()), (int)value);
- }
- // ------------------------------------------------------------------------
- void setInt(const std::string &name, int value) const
- {
- glUniform1i(glGetUniformLocation(ID, name.c_str()), value);
- }
- // ------------------------------------------------------------------------
- void setFloat(const std::string &name, float value) const
- {
- glUniform1f(glGetUniformLocation(ID, name.c_str()), value);
- }
- // ------------------------------------------------------------------------
-// void setVec2(const std::string &name, const glm::vec2 &value) const
-// {
-// glUniform2fv(glGetUniformLocation(ID, name.c_str()), 1, &value[0]);
-// }
-// void setVec2(const std::string &name, float x, float y) const
-// {
-// glUniform2f(glGetUniformLocation(ID, name.c_str()), x, y);
-// }
-// // ------------------------------------------------------------------------
-// void setVec3(const std::string &name, const glm::vec3 &value) const
-// {
-// glUniform3fv(glGetUniformLocation(ID, name.c_str()), 1, &value[0]);
-// }
-// void setVec3(const std::string &name, float x, float y, float z) const
-// {
-// glUniform3f(glGetUniformLocation(ID, name.c_str()), x, y, z);
-// }
-// // ------------------------------------------------------------------------
-// void setVec4(const std::string &name, const glm::vec4 &value) const
-// {
-// glUniform4fv(glGetUniformLocation(ID, name.c_str()), 1, &value[0]);
-// }
-// void setVec4(const std::string &name, float x, float y, float z, float w)
-// {
-// glUniform4f(glGetUniformLocation(ID, name.c_str()), x, y, z, w);
-// }
-// // ------------------------------------------------------------------------
-// void setMat2(const std::string &name, const glm::mat2 &mat) const
-// {
-// glUniformMatrix2fv(glGetUniformLocation(ID, name.c_str()), 1, GL_FALSE, &mat[0][0]);
-// }
-// // ------------------------------------------------------------------------
-// void setMat3(const std::string &name, const glm::mat3 &mat) const
-// {
-// glUniformMatrix3fv(glGetUniformLocation(ID, name.c_str()), 1, GL_FALSE, &mat[0][0]);
-// }
-// // ------------------------------------------------------------------------
-// void setMat4(const std::string &name, const glm::mat4 &mat) const
-// {
-// glUniformMatrix4fv(glGetUniformLocation(ID, name.c_str()), 1, GL_FALSE, &mat[0][0]);
-// }
-
-private:
- // utility function for checking shader compilation/linking errors.
- // ------------------------------------------------------------------------
- void checkCompileErrors(GLuint shader, std::string type)
- {
- GLint success;
- GLchar infoLog[1024];
- if(type != "PROGRAM")
- {
- glGetShaderiv(shader, GL_COMPILE_STATUS, &success);
- if(!success)
- {
- glGetShaderInfoLog(shader, 1024, NULL, infoLog);
- std::cout << "ERROR::SHADER_COMPILATION_ERROR of type: " << type << "\n" << infoLog << "\n -- --------------------------------------------------- -- " << std::endl;
- }
- }
- else
- {
- glGetProgramiv(shader, GL_LINK_STATUS, &success);
- if(!success)
- {
- glGetProgramInfoLog(shader, 1024, NULL, infoLog);
- std::cout << "ERROR::PROGRAM_LINKING_ERROR of type: " << type << "\n" << infoLog << "\n -- --------------------------------------------------- -- " << std::endl;
- }
- }
- }
-};
-#endif
-