314 CHAPTER 10: OpenGL ES 2, Shaders, and...^
Listing 10-4. Loading the Shaders and Resolving Parameters
- (BOOL)loadShaders
{
GLuint vertShader, fragShader;
NSString vertShaderPathname, fragShaderPathname;
_program = glCreateProgram(); //1
vertShaderPathname = [[NSBundle mainBundle]
pathForResource:@"Shader" ofType:@"vsh"];
if (![self compileShader:&vertShader //2
type:GL_VERTEX_SHADER file:vertShaderPathname])
{
NSLog(@"Failed to compile vertex shader");
return NO;
}
fragShaderPathname = [[NSBundle mainBundle] pathForResource:@"Shader"
ofType:@"fsh"];
if (![self compileShader:&fragShader
type:GL_FRAGMENT_SHADER file:fragShaderPathname])
{
NSLog(@"Failed to compile fragment shader");
return NO;
}
glAttachShader(_program, vertShader); //3
glAttachShader(_program, fragShader);
glBindAttribLocation(_program, ATTRIB_VERTEX, "position"); //4
glBindAttribLocation(_program, ATTRIB_NORMAL, "normal");
if (![self linkProgram:_program]) //5
{
NSLog(@"Failed to link program: %d", _program);
if (vertShader)
{
glDeleteShader(vertShader);
vertShader = 0;
}
if (fragShader)
{
glDeleteShader(fragShader);
fragShader = 0;
}