Feb 1, 2018 at 6:31am UTC
exception is coming in shaders.cpp
#include <iostream>
#include <fstream>
#include <string>
#include <GL/glew.h>
#include <GL/glut.h>
using namespace std;
// This is a basic program to initiate a shader
// The textFileRead function reads in a filename into a string
// programerrors and shadererrors output compilation errors
// initshaders initiates a vertex or fragment shader
// initprogram initiates a program with vertex and fragment shaders
string textFileRead(const char * filename) {
string str, ret = "";
ifstream in;
in.open(filename);
if (in.is_open()) {
getline(in, str);
while (in) {
ret += str + "\n";
getline(in, str);
}
// cout << "Shader below\n" << ret << "\n" ;
return ret;
}
else {
cerr << "Unable to Open File " << filename << "\n";
throw 2;
}
}
void programerrors(const GLint program) {
GLint length;
GLchar * log;
glGetProgramiv(program, GL_INFO_LOG_LENGTH, &length);
log = new GLchar[length + 1];
glGetProgramInfoLog(program, length, &length, log);
cout << "Compile Error, Log Below\n" << log << "\n";
delete[] log;
}
void shadererrors(const GLint shader) {
GLint length;
GLchar * log;
glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &length);
log = new GLchar[length + 1];
glGetShaderInfoLog(shader, length, &length, log);
cout << "Compile Error, Log Below\n" << log << "\n";
delete[] log;
}
GLuint initshaders(GLenum type, const char *filename)
{
// Using GLSL shaders, OpenGL book, page 679
GLuint shader = glCreateShader(type);
GLint compiled;
string str = textFileRead(filename);
GLchar * cstr = new GLchar[str.size() + 1];
const GLchar * cstr2 = cstr; // Weirdness to get a const char
strcpy(cstr, str.c_str());
glShaderSource(shader, 1, &cstr2, NULL);
glCompileShader(shader);
glGetShaderiv(shader, GL_COMPILE_STATUS, &compiled);
if (!compiled) {
shadererrors(shader);
throw 3;
}
return shader;
}
GLuint initprogram(GLuint vertexshader, GLuint fragmentshader)
{
GLuint program = glCreateProgram();
GLint linked;
glAttachShader(program, vertexshader);
glAttachShader(program, fragmentshader);
glLinkProgram(program);
glGetProgramiv(program, GL_LINK_STATUS, &linked);
if (linked) glUseProgram(program);
else {
programerrors(program);
throw 4;
}
return program;
}
The fragment shader uses varying color, but previous shader does not write to it.
Out of resource error.
exception is coming on return program instruction
Last edited on Feb 1, 2018 at 6:42am UTC
Feb 1, 2018 at 4:16pm UTC
exception is coming on return program instruction
A return statement in itself does not throw an exception. You should be more specific in which exception is being thrown, and what line it's being thrown from.
Is it possible for you to provide your shader files and
make a complete, compilable source code ? Paste in pastebin.com if it's too big for the forum.
Last edited on Feb 1, 2018 at 4:17pm UTC