16 Shader(
const char *cVertexPath,
const char *cFragmentPath) {
17 std::string strVertexCode;
18 std::string strFragmentCode;
20 std::ifstream istrmVertexFile;
21 std::ifstream istrmFragmentFile;
22 istrmVertexFile.exceptions(std::ifstream::failbit | std::ifstream::badbit);
23 istrmFragmentFile.exceptions(std::ifstream::failbit | std::ifstream::badbit);
26 istrmVertexFile.open(cVertexPath);
27 istrmFragmentFile.open(cFragmentPath);
29 std::stringstream strstrmVertex, strstrmFragment;
30 strstrmVertex << istrmVertexFile.rdbuf();
31 strstrmFragment << istrmFragmentFile.rdbuf();
33 istrmVertexFile.close();
34 istrmFragmentFile.close();
36 strVertexCode = strstrmVertex.str();
37 strFragmentCode = strstrmFragment.str();
38 }
catch (std::ifstream::failure &e) {
39 std::cout <<
"ERROR::SHADER::FILE_NOT_SUCCESSFULLY_READ\n" << e.what() << std::endl;
40 assert(
false &&
"Shader File Not Found!");
44 const char *cVertexShaderCode = strVertexCode.c_str();
45 const char *cFragmentShaderCode = strFragmentCode.c_str();
47 unsigned int uiVertex, uiFragment;
48 uiVertex = glCreateShader(GL_VERTEX_SHADER);
49 glShaderSource(uiVertex, 1, &cVertexShaderCode,
nullptr);
50 glCompileShader(uiVertex);
53 uiFragment = glCreateShader(GL_FRAGMENT_SHADER);
54 glShaderSource(uiFragment, 1, &cFragmentShaderCode,
nullptr);
55 glCompileShader(uiFragment);
58 ID = glCreateProgram();
59 glAttachShader(
ID, uiVertex);
60 glAttachShader(
ID, uiFragment);
64 glDeleteShader(uiVertex);
65 glDeleteShader(uiFragment);
90 if (strType !=
"PROGRAM") {
91 glGetShaderiv(uiShader, GL_COMPILE_STATUS, &iSuccess);
93 glGetShaderInfoLog(uiShader, 1024,
nullptr, cInfoLog);
94 std::cout <<
"ERROR::SHADER::COMPILATION_ERROR\n" << cInfoLog;
96 <<
"-----------------------------------------------------------------------";
99 glGetProgramiv(uiShader, GL_LINK_STATUS, &iSuccess);
101 glGetProgramInfoLog(uiShader, 1024,
nullptr, cInfoLog);
102 std::cout <<
"ERROR::PROGRAM::LINKING_ERROR\n" << cInfoLog;
104 <<
"-----------------------------------------------------------------------";