- (BOOL) метод loadShaders не работает для меня - PullRequest
1 голос
/ 01 февраля 2011

Я пытаюсь создать график с использованием 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;
}

1 Ответ

4 голосов
/ 01 февраля 2011

Если vertShaderPathname пусто, это означает, что источник вершинного шейдера не может быть найден.В этом случае убедитесь, что шейдер существует в вашем проекте и связан как ресурс.

Чтобы сделать это в xcode, перейдите в дерево слева, перейдите к «Targets -> (projname)-> Скопируйте Bundle Resources "и убедитесь, что у вас есть" Shader.vsh ".Если вместо этого он отображается в «Компиляции источников», его необходимо перетащить в «Копировать ресурсы комплекта»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...