Example #1
0
GLuint Shaders::createShaderProgram(const std::string &vertexShaderCode, const std::string &fragmentShaderCode)
{
    GLuint vertexHandle = compileShaderCode(vertexShaderCode, GL_VERTEX_SHADER);
    GLuint fragmentHandle = compileShaderCode(fragmentShaderCode, GL_FRAGMENT_SHADER);
    
    GLuint programHandle = glCreateProgram();
    glAttachShader(programHandle, vertexHandle);
    glAttachShader(programHandle, fragmentHandle);
    glLinkProgram(programHandle);
    
    GLint result = GL_FALSE;
    int infoLength;
    glGetProgramiv(programHandle, GL_LINK_STATUS, &result);
    glGetProgramiv(programHandle, GL_INFO_LOG_LENGTH, &infoLength);
    if (infoLength > 0) {
        std::vector<char> programErrorMessage(infoLength + 1);
        glGetProgramInfoLog(programHandle, infoLength, NULL, &programErrorMessage[0]);
        std::cout << "Error linking program: " << &programErrorMessage[0] << std::endl;
    } else {
        std::cout << "Shader program linking successful" << std::endl;
    }
    
    glDetachShader(programHandle, vertexHandle);
    glDetachShader(programHandle, fragmentHandle);
    
    glDeleteShader(vertexHandle);
    glDeleteShader(fragmentHandle);
    
    return programHandle;
}
Example #2
0
static bool
compileFile(Shader &shader, const std::string &path)
{
   std::vector<char> src;

   if (!readFile(path, src)) {
      return false;
   }

   return compileShaderCode(shader, src);
}