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; }
static bool compileFile(Shader &shader, const std::string &path) { std::vector<char> src; if (!readFile(path, src)) { return false; } return compileShaderCode(shader, src); }