iPad的着色器文件警告(第1代)

时间:2011-11-05 04:44:13

标签: objective-c ios opengl-es opengl-es-2.0

我目前正在为iPad制作一个OpenGL ES 2.0绘图应用程序,并且我一直收到有关着色器的以下警告:

  

检查依赖关系

     

[WARN]警告:没有规则处理架构i386的源代码类型为源代码的文件'$(PROJECT_DIR)/ IdeaStorm / Drawing Engine / Shaders / Shader.fsh'

     

[WARN]警告:没有规则处理架构i386的源代码类型为源代码的文件'$(PROJECT_DIR)/ IdeaStorm / Drawing Engine / Shaders / Shader.vsh'

我的绘图应用程序目前在iOS 2的第二代iPad上正常运行,但此错误除外,并且在模拟器中运行也很好。

然而,有一天,我尝试在iOS 4.3的朋友第一代iPad上运行它,并且着色器无法编译。

任何人都可以指出我的正确方向是关于这个警告以及着色器为第一代iPad编译的失败吗?

1 个答案:

答案 0 :(得分:10)

默认情况下,当您向项目添加顶点和片段着色器时,Xcode会错误地将它们视为要编译的源文件而不是要捆绑的资源。这会导致上述错误。

从项目目标的编译源构建阶段中删除Shader.fsh和Shader.vsh文件,并确保它们出现在Copy Bundle Resources阶段。

你的着色器在iPad 2上成功编译(在运行时,我认为),但在原始iPad上没有成功,这有点奇怪。虽然iPad 2具有比iPad 1更强的着色能力,但是当它在另一个上工作时,不应该导致着色器失败。您可以尝试使用以下代码(在着色器编译过程中)注销任何着色器编译失败:

glGetShaderiv(*shader, GL_COMPILE_STATUS, &status);

if (status != GL_TRUE)
{
    GLint logLength;
    glGetShaderiv(*shader, GL_INFO_LOG_LENGTH, &logLength);
    if (logLength > 0)
    {
        GLchar *log = (GLchar *)malloc(logLength);
        glGetShaderInfoLog(*shader, logLength, &logLength, log);
        NSLog(@"Shader compile log:\n%s", log);
        free(log);
    }
}