int buildShaders(int foo, const char *vertexShaderSourceParam, const char *fragmentShaderSourceParam){ printf("building shaders...\n"); // build and compile our shader program // ------------------------------------ // open file and convert it to string for vs: char * vbuffer = 0; long vlength; FILE * vertex_file = fopen (vertexShaderSourceParam, "rb"); if (vertex_file) { fseek (vertex_file, 0, SEEK_END); vlength = ftell (vertex_file); fseek (vertex_file, 0, SEEK_SET); vbuffer = malloc (vlength + 1); if (vbuffer) { fread (vbuffer, 1, vlength, vertex_file); } fclose (vertex_file); vbuffer[vlength] = '\0'; } char * fbuffer = 0; long flength; FILE * fragment_file = fopen (fragmentShaderSourceParam, "rb"); if (fragment_file) { fseek (fragment_file, 0, SEEK_END); flength = ftell (fragment_file); fseek (fragment_file, 0, SEEK_SET); fbuffer = malloc (flength + 1); if (fbuffer) { fread (fbuffer, 1, flength, fragment_file); } fclose (fragment_file); fbuffer[flength] = '\0'; } // vertex shader int vertexShader = glCreateShader(GL_VERTEX_SHADER); glShaderSource(vertexShader, 1, &vbuffer, NULL); glCompileShader(vertexShader); // check for shader compile errors int success; char infoLog[512]; glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &success); if (!success) { glGetShaderInfoLog(vertexShader, 512, NULL, infoLog); printf("ERROR::SHADER::VERTEX::COMPILATION_FAILED\n %s", infoLog); return 1; } // fragment shader int fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); glShaderSource(fragmentShader, 1, &fbuffer, NULL); glCompileShader(fragmentShader); // check for shader compile errors glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &success); if (!success) { glGetShaderInfoLog(fragmentShader, 512, NULL, infoLog); printf("ERROR::SHADER::FRAGMENT::COMPILATION_FAILED\n %s", infoLog); return 2; } // link shaders // int shaderProgram = glCreateProgram(); glAttachShader(foo, vertexShader); glAttachShader(foo, fragmentShader); glLinkProgram(foo); // check for linking errors glGetProgramiv(foo, GL_LINK_STATUS, &success); if (!success) { glGetProgramInfoLog(foo, 512, NULL, infoLog); printf("ERROR::SHADER::PROGRAM::LINKING_FAILED\n %s", infoLog); return 3; } glDeleteShader(vertexShader); glDeleteShader(fragmentShader); return 0; }