// Creates program object, attaches shaders, and links into pipeline protected int createProgram(String vertexSource, String fragmentSource) { // Load the vertex and fragment shaders int vertexShader = loadShader(GL_VERTEX_SHADER, vertexSource); int fragmentShader = loadShader(GL_FRAGMENT_SHADER, fragmentSource); // Create the program object int program = glCreateProgram(); if (vertexShader == 0 || fragmentShader == 0 || program == 0) return 0; if (program != 0) { glAttachShader(program, vertexShader); ctx.checkGLError("createProgram Attaching vertex shader"); glAttachShader(program, fragmentShader); ctx.checkGLError("createProgram Attaching fragment shader"); glLinkProgram(program); int linkStatus = glGetProgram(program, GL_LINK_STATUS); if (linkStatus != GL_TRUE) { log().error("Could not link program: "); log().error(glGetProgramInfoLog(program, SHADER_INFO_LOG_LEN)); glDeleteProgram(program); program = 0; } } return program; }