1

ビューベースのアプリからopengles2.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;
}
4

1 に答える 1

4

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

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

于 2011-02-01T12:45:18.977 に答える