8 void attachShader(GLuint progId, string filePath, GLenum type) {
9 GLuint shader = glCreateShader(type);
12 cerr << "error creating shader" << endl;
16 ifstream file(filePath);
18 buffer << file.rdbuf();
19 string str = buffer.str();
20 const char* contents = str.c_str();
22 glShaderSource(shader, 1, (const GLchar**)&contents, NULL);
23 glCompileShader(shader);
25 glGetShaderiv(shader, GL_COMPILE_STATUS, &success);
28 glGetShaderInfoLog(shader, 1024, NULL, log);
29 fprintf(stderr, "Error compiling %s\n%s\n", filePath.c_str(), log);
32 glAttachShader(progId, shader);
35 Program::Program(const string vertexShader, const string fragmentShader) {
36 progId = glCreateProgram();
38 attachShader(progId, vertexShader, GL_VERTEX_SHADER);
39 attachShader(progId, fragmentShader, GL_FRAGMENT_SHADER);
41 glLinkProgram(progId);
43 glGetProgramiv(progId, GL_LINK_STATUS, &success);
46 glGetProgramInfoLog(progId, sizeof(log), NULL, log);
47 fprintf(stderr, "error linking %s and %s\n%s\n", vertexShader.c_str(), fragmentShader.c_str(), log);
52 void Program::validate() const {
53 glValidateProgram(progId);
56 glGetProgramiv(progId, GL_VALIDATE_STATUS, &success);
59 glGetProgramInfoLog(progId, sizeof(log), NULL, log);
60 fprintf(stderr, "Error validating: %s\n", log);