Visualisierung2
ShaderLoader.cpp
Go to the documentation of this file.
1 #include "ShaderLoader.h"
2 
3 using namespace std;
4 
6 {
7 }
8 
9 
11 {
12 }
13 
19 GLuint ShaderLoader::LoadShaders(const char * vertex_path, const char * fragment_path, const char * geo_path)
20 {
21  // set up the handle to the individual shaders
22  GLuint Vertexhandle = glCreateShader(GL_VERTEX_SHADER);
23  GLuint Fragmenthandle = glCreateShader(GL_FRAGMENT_SHADER);
24  GLuint Geometryhandle = glCreateShader(GL_GEOMETRY_SHADER);
25 
26  // -.-.-.-.- shader Programme laden -.-.-.-.-.-.-
27  //load vertex shader
28  string VertexShaderCode;
29  ifstream VertexShaderStream(vertex_path, ios::in);
30  if(VertexShaderStream.is_open())
31  {
32  string Line = "";
33  while(getline(VertexShaderStream, Line))
34  VertexShaderCode += "\n" + Line;
35  VertexShaderStream.close();
36  }
37 
38  //load fragment shader
39  string FragmentShaderCode;
40  ifstream FragmentShaderStream(fragment_path, ios::in);
41  if(FragmentShaderStream.is_open())
42  {
43  string Line = "";
44  while(getline(FragmentShaderStream, Line))
45  FragmentShaderCode += "\n" + Line;
46  FragmentShaderStream.close();
47  }
48 
49  //load geometry shader
50  string GeometryShaderCode;
51  ifstream GeometryShaderStream(geo_path, ios::in);
52  if(GeometryShaderStream.is_open())
53  {
54  string Line = "";
55  while(getline(GeometryShaderStream, Line))
56  GeometryShaderCode += "\n" + Line;
57  GeometryShaderStream.close();
58  }
59  // -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
60 
61  // -.-.-.-.- vertex Shader Compilieren -.-.-.-.-.-.-
62  //compile vertex shader
63  char const * VertexPtr = VertexShaderCode.c_str();
64  glShaderSource(Vertexhandle, 1, &VertexPtr , NULL);
65  glCompileShader(Vertexhandle);
66 
67  // test ob erfolgreich
68  //test vertex shader
69  GLint succeded;
70  glGetShaderiv(Vertexhandle, GL_COMPILE_STATUS, &succeded);
71  if (succeded == GL_FALSE)
72  {
73  //Log auslesen und ausgeben
74  GLint logSize;
75  glGetShaderiv(Vertexhandle, GL_INFO_LOG_LENGTH, &logSize);
76  GLchar* message = new char[logSize];
77  glGetShaderInfoLog(Vertexhandle, logSize, NULL, message);
78  delete[] message;
79  }
80  // -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
81 
82  // -.-.-.-.- fragment Shader Compilieren -.-.-.-.-.-.-
83  //compile fragment shader
84  char const * FragmentPtr = FragmentShaderCode.c_str();
85  glShaderSource(Fragmenthandle, 1, &FragmentPtr , NULL);
86  glCompileShader(Fragmenthandle);
87 
88  // test ob erfolgreich
89  //test fragment shader
90  glGetShaderiv(Fragmenthandle, GL_COMPILE_STATUS, &succeded);
91  if (succeded == GL_FALSE)
92  {
93  //Log auslesen und ausgeben
94  GLint logSize;
95  glGetShaderiv(Fragmenthandle, GL_INFO_LOG_LENGTH, &logSize);
96  GLchar* message = new char[logSize];
97  glGetShaderInfoLog(Fragmenthandle, logSize, NULL, message);
98  delete[] message;
99  }
100  // -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
101 
102  // -.-.-.-.- geometry Shader Compilieren -.-.-.-.-.-.-
103  //compile geometry shader
104  char const * GeometryPtr = GeometryShaderCode.c_str();
105  glShaderSource(Geometryhandle, 1, &GeometryPtr , NULL);
106  glCompileShader(Geometryhandle);
107 
108  // test ob erfolgreich
109  //test geometry shader
110  glGetShaderiv(Geometryhandle, GL_COMPILE_STATUS, &succeded);
111  if (succeded == GL_FALSE)
112  {
113  //Log auslesen und ausgeben
114  GLint logSize;
115  glGetShaderiv(Geometryhandle, GL_INFO_LOG_LENGTH, &logSize);
116  GLchar* message = new char[logSize];
117  glGetShaderInfoLog(Geometryhandle, logSize, NULL, message);
118  delete[] message;
119  }
120  // -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
121 
122  // -.-.-.-.- Shader Linken -.-.-.-.-.-.-
123  //link the shaders to a program
124  GLuint programHandle = glCreateProgram();
125  glAttachShader(programHandle, Vertexhandle);
126  glAttachShader(programHandle, Fragmenthandle);
127  //glAttachShader(programHandle, Geometryhandle); //geometry shader not used in this project version
128 
129  glBindFragDataLocation(programHandle, 0, "fragColor"); //Output "fragColor" auf position 0 legen
130  glLinkProgram(programHandle);
131  // -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
132 
133  // -.-.-.-.- testen ob programm richtig angelegt -.-.-.-.-.-.-
134  //test program
135  glGetProgramiv(programHandle, GL_LINK_STATUS, &succeded);
136  if (!succeded)
137  {
138  //Log auslesen und ausgeben
139  GLint logSize;
140  glGetShaderiv(programHandle, GL_INFO_LOG_LENGTH, &logSize);
141  GLchar* message = new char[logSize];
142  glGetShaderInfoLog(programHandle, logSize, NULL, message);
143  delete[] message;
144  }
145  // -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
146 
147  glDeleteShader(Vertexhandle);
148  glDeleteShader(Fragmenthandle);
149  glDeleteShader(Geometryhandle);
150 
151  return programHandle;
152 }
GLuint LoadShaders(const char *vertex_path, const char *fragment_path, const char *geo_path)
Diese Methode laedt die Shader. Parameter sind die jeweiligen Dateipfade.
~ShaderLoader(void)
ShaderLoader(void)
Definition: ShaderLoader.cpp:5