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

rob*_*era 4 opengl-es objective-c ios opengl-es-2.0

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

检查依赖项

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

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

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

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

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

Bra*_*son 10

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

从项目目标的Compile Sources构建阶段中删除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);
    }
}   
Run Code Online (Sandbox Code Playgroud)