Я пытаюсь создать график с использованием opengl es 2.0 из приложения, основанного на представлении, но - (BOOL) loadShaders всегда возвращает NO, поэтому управление выполняется в renderer1. Есть идеи, что происходит?
- (BOOL)loadShaders {
//return YES;
GLuint vertShader, fragShader;
NSString *vertShaderPathname, *fragShaderPathname;
// create shader program
program = glCreateProgram();
// create and compile vertex shader
vertShaderPathname = [[NSBundle mainBundle] pathForResource:@"Shader" ofType:@"vsh"]; // this is returning nil always.
if (!compileShader(&vertShader, GL_VERTEX_SHADER, 1, vertShaderPathname)) {
destroyShaders(vertShader, fragShader, program);
return NO;
}
// create and compile fragment shader
fragShaderPathname = [[NSBundle mainBundle] pathForResource:@"Shader" ofType:@"fsh"];
if (!compileShader(&fragShader, GL_FRAGMENT_SHADER, 1, fragShaderPathname)) {
destroyShaders(vertShader, fragShader, program);
return NO;
}
// attach vertex shader to program
glAttachShader(program, vertShader);
// attach fragment shader to program
glAttachShader(program, fragShader);
// bind attribute locations
// this needs to be done prior to linking
glBindAttribLocation(program, ATTRIB_VERTEX, "position");
glBindAttribLocation(program, ATTRIB_COLOR, "color");
// link program
if (!linkProgram(program)) {
destroyShaders(vertShader, fragShader, program);
return NO;
}
// get uniform locations
uniforms[UNIFORM_MODELVIEW_PROJECTION_MATRIX] = glGetUniformLocation(program, "modelViewProjectionMatrix");
// release vertex and fragment shaders
if (vertShader) {
glDeleteShader(vertShader);
vertShader = 0;
}
if (fragShader) {
glDeleteShader(fragShader);
fragShader = 0;
}
return YES;
}