2011-02-01 19 views
1

ビューベースのアプリケーションからopengl es 2.0を使ってグラフを作成しようとしていますが、 - (BOOL)loadShadersが常にNOを返すので、制御がrenderer1になります。何が起きているのか?- (BOOL)loadShadersメソッドが私のために働いていません

- (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; 
} 
+0

「はい」と「いいえ」は何ですか?あなた自身のバージョンのbool? WTF。 – shoosh

+1

@shooshこれらは、objective-cの組み込みブール値です –

答えて

4

vertShaderPathnameが空の場合は、頂点シェーダーのソースが見つかりませんでした。この場合、プロジェクトにシェーダが存在し、リソースとしてバンドルされていることを確認してください。

xcodeでこれを行うには、左側のツリーに移動し、 "Targets - >(projname) - > Copy Bundle Resources"に移動し、 "Shader.vsh"があることを確認します。代わりに「ソースをコンパイル」に表示される場合は、「バンドルリソースをコピーする」にドラッグする必要があります

関連する問題