示例#1
0
void ShaderProgram::InitShader(string vertexFile, string fragmentFile)
{
    // Create vertex shader
    vertexShader = new Shader(GL_VERTEX_SHADER, vertexFile);

    // Create fragment shader
    fragmentShader = new Shader(GL_FRAGMENT_SHADER, fragmentFile);

    /* Shader program*/
    programID = glCreateProgram();

    /* Attach and link */
    glAttachShader(programID, vertexShader->GetShaderID());
    glAttachShader(programID, fragmentShader->GetShaderID());

    // BIND ATTRib
    BindAllAttributes();

    // LINK and VALIDATE
    glLinkProgram(programID);
    glValidateProgram(programID);

    /* Check for any error */
    GLint status;
    glGetProgramiv(programID, GL_LINK_STATUS, &status);
    if(status == 0){
        GLchar infoLog[512];
        glGetProgramInfoLog(programID, 512, NULL, infoLog);
        std::cout<<"SHADER PROGRAM LINK FAILED\n"
                <<infoLog<<std::endl;
        exit(5);
    }

    // Get uniform location
    GetAllUniformLocations();
}
 TextShader::TextShader() : ShaderProgram("src/shaders/vert_text.glsl", "src/shaders/frag_text.glsl") {
     GetAllUniformLocations();
 }
TerrainShader::TerrainShader()
	: ShaderProgram("../res/shaders/terrainShader")
{
	BindAttributes();
	GetAllUniformLocations();
}