GLuint Shader::compileShader(GLuint &vShader, GLuint &fShader) {

	// Read in shader source
	char *vs = NULL, *fs = NULL;
	// Create the shader 
	vShader = glCreateShader(GL_VERTEX_SHADER);
	fShader = glCreateShader(GL_FRAGMENT_SHADER);
	GLint shader_ok, program_ok;
	// Read in shader source
	vs = textFileRead(vert);
	if (!vs) {
		fprintf(stderr, "Error reading vertex shader file %s\n", vert);
		return 0;
	}
	fs = textFileRead(frag);
	if (!fs) {
		fprintf(stderr, "Error reading fragment shader file %s\n", frag);
		return 0;
	}
	glShaderSource(vShader, 1, (const GLchar**) &vs, NULL);
	glShaderSource(fShader, 1, (const GLchar**) &fs, NULL);
	free(vs);free(fs);
	
	// Compile the shaders
	glCompileShader(vShader);
	glGetShaderiv(vShader, GL_COMPILE_STATUS, &shader_ok);
    if (!shader_ok) {
        fprintf(stderr, "Failed to compile %s:\n", vert);
        show_info_log(vShader, glGetShaderiv, glGetShaderInfoLog);
        glDeleteShader(vShader);
        return 0;
    }
	glCompileShader(fShader);
	glGetShaderiv(fShader, GL_COMPILE_STATUS, &shader_ok);
    if (!shader_ok) {
        fprintf(stderr, "Failed to compile %s:\n", frag);
        show_info_log(fShader, glGetShaderiv, glGetShaderInfoLog);
        glDeleteShader(fShader);
        return 0;
    }
	// Create the program -- attaching your shaders
	GLuint program = glCreateProgram();
	glAttachShader(program, vShader);
	glAttachShader(program, fShader);
	// Link the program
	glLinkProgram(program);
    glGetProgramiv(program, GL_LINK_STATUS, &program_ok);
    if (!program_ok) {
        fprintf(stderr, "Failed to link shader program:\n");
        show_info_log(program, glGetProgramiv, glGetProgramInfoLog);
        glDeleteProgram(program);
        return 0;
    }
	return program;
}
Exemple #2
0
static GLuint make_shader(GLenum type, const std::string& filename)/*{{{*/
{
    /* Utility function to create a shader object from a file*/
    GLint length;
    GLchar *source = (GLchar*)file_contents(filename.c_str(), &length);
    GLuint shader;
    GLint shader_ok;
    if (!source)
        return 0;
    //
    shader = glCreateShader(type);
    glShaderSource(shader, 1, (const GLchar**)&source, &length);
    free(source);
    glCompileShader(shader);
    //
    glGetShaderiv(shader, GL_COMPILE_STATUS, &shader_ok);
    if (!shader_ok) {
        std::cerr<<"Failed to compile "<<filename<<":"<<std::endl;
        show_info_log(shader, glGetShaderiv, glGetShaderInfoLog);
        glDeleteShader(shader);
        return 0;
    } else {
		// std::cout << filename << " compiled" << std::endl;
	}
    return shader;
}/*}}}*/
Exemple #3
0
static GLuint make_shader(GLenum type, const char *filename)
{
    GLint length;
    GLchar *source = file_contents(filename, &length);
    GLuint shader;
    GLuint shader_ok;

    if(!source)
    {
        return 0;
    }

    shader = glCreateShader(type);
    glShaderSource(shader, 1, (const GLchar**)&source, &length);
    free(source);
    glCompileShader(shader);

    glGetShaderiv(shader, GL_COMPILE_STATUS, &shader_ok);
    if(!shader_ok)
    {
        fprintf(stderr, "Failed to compile %s \n", filename);
        show_info_log(shader, glGetShaderiv, glGetShaderInfoLog);
        glDeleteShader(shader);
        return 0;
    }
    return shader;
}
Exemple #4
0
void link_program(GLuint program)/*{{{*/
{
    /* Utility function to create a program object from two files*/ 
    GLint program_ok;
    //
    glLinkProgram(program);
    //
    glGetProgramiv(program, GL_LINK_STATUS, &program_ok);
    if (!program_ok) {
        std::cerr<<"Failed to link shader program:"<<std::endl;
        show_info_log(program, glGetProgramiv, glGetProgramInfoLog);
        glDeleteProgram(program);
    }
}/*}}}*/
Exemple #5
0
static GLuint make_program(GLuint vertex_shader, GLuint fragment_shader) {
  GLint program_ok;
  GLuint program = glCreateProgram();
  glAttachShader(program, vertex_shader);
  glAttachShader(program, fragment_shader);
  glLinkProgram(program);
  glGetProgramiv(program, GL_LINK_STATUS, &program_ok);
  if (!program_ok) {
    fprintf(stderr, "Failed to link shader program:\n");
    show_info_log(program, glGetProgramiv, glGetProgramInfoLog);
    glDeleteProgram(program);
    return 0;
  }
  return program;
}
Exemple #6
0
Shader::Shader(Shader::Type t, char const* source) {

	this->id = glCreateShader(t);

	char const* source_ptr = source;
	GLint length = GLint(strlen(source));
	glShaderSource(this->id, 1, reinterpret_cast<GLchar const**>(&source_ptr), &length);
	glCompileShader(this->id);

	GLint compile_ok = 0;
	glGetShaderiv(this->id, GL_COMPILE_STATUS, &compile_ok);

	if (!compile_ok) {
		show_info_log(this->id, glGetShaderiv, glGetShaderInfoLog);
	}
}
Exemple #7
0
static GLuint make_program(GLuint vertex_shader, GLuint fragment_shader)/*{{{*/
{
    /* Utility function to create a program object from two files*/ 
    GLint program_ok;
    GLuint program = glCreateProgram();
    //
    glAttachShader(program, vertex_shader);
    glAttachShader(program, fragment_shader);
    glLinkProgram(program);
    //
    glGetProgramiv(program, GL_LINK_STATUS, &program_ok);
    if (!program_ok) {
        std::cerr<<"Failed to link shader program:"<<std::endl;
        show_info_log(program, glGetProgramiv, glGetProgramInfoLog);
        glDeleteProgram(program);
        return 0;
    } else {
		// std::cout << "Vertex and fragment shaders linked" << std::endl;	
	}
    return program;
}/*}}}*/