Pro OpenGL ES for iOS

(singke) #1

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;
}
Free download pdf