ios - - (BOOL)loadShaders 方法对我不起作用

标签 ios opengl-es nsbundle

我正在尝试从基于 View 的应用程序中使用 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;
}

最佳答案

如果 vertShaderPathname为空,这意味着找不到顶点着色器源。在这种情况下,请确保着色器存在于您的项目中,并作为资源捆绑在一起。

要在 xcode 中执行此操作,请转到左侧的树,导航到“Targets->(projname)->Copy Bundle Resources”并确保您有一个“Shader.vsh”。如果它出现在“Compile Sources”中,那么您需要将它拖到“Copy Bundle Resources”中

关于ios - - (BOOL)loadShaders 方法对我不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4860685/

相关文章:

ios - RCTLinking > 问题 > 指针缺少可空性类型说明符(_Nonnull、_Nullable 或 _Null_unspecified)

ios - OpenGL ES 填充效果

c++ - 从视频纹理中选择源矩形

iphone - iPhone 版 OpenGL ES

iPhone : Unable to copy from MainBundle to NSDocumentDirectory

objective-c - 从我自己的包中加载 Nib ?

xcode - NSBundle UIImage nil iOS 7 特定

java - Objective-C : Serializing/Archiving issues

ios - 在编辑模式下使用不同的表格 View 单元格

objective-c - 将日期格式从 12/12/12 更改为 2012-12-12 ios6