【问题标题】:Xcode executable cannot find glsl filesXcode 可执行文件找不到 glsl 文件
【发布时间】:2013-01-25 09:50:18
【问题描述】:

这是我第一次尝试学习OpenGL,我是按照书上的例子来的。我正在使用 Xcode 在 OS X 10.8 下进行操作。代码如下:

#include "Angel.h"

const int numPoints = 5000;
typedef vec2 point2;

void init(){

    point2 points[numPoints];
    point2 vertices[3] = {
        point2(-1.0, -1.0), point2(0.0, 1.0), point2(1.0, -1.0)
    };

    points[0] = point2(0.25, 0.5);

    for (int k = 1; k < numPoints; k++) {
        int j = rand()%3;
        points[k] = (points[k-1]+vertices[j])/2.0;
    }

    GLuint program = InitShader("vertex.glsl", "fragment.glsl");
    glUseProgram(program);

    GLuint abuffer;
    glGenVertexArraysAPPLE(1, &abuffer);
    glBindVertexArrayAPPLE(abuffer);

    GLuint buffer;
    glGenBuffers(1, &buffer);
    glBindBuffer(GL_ARRAY_BUFFER, buffer);
    glBufferData(GL_ARRAY_BUFFER, sizeof(points), points, GL_STATIC_DRAW);

    GLuint location = glGetAttribLocation(program, "vPosition");
    glEnableVertexAttribArray(location);
    glVertexAttribPointer(location, 2, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(0));

    glClearColor(1.0, 1.0, 1.0, 1.0);

}


void display(){
    glClear(GL_COLOR_BUFFER_BIT);
    glDrawArrays(GL_POINTS, 0, numPoints);
    glFlush();
}

int main(int argc, char** argv){
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGBA);
    glutInitWindowSize(640, 480);

    glutCreateWindow("Sierpinski Gasket");

    init();
    glutDisplayFunc(display);
    glutMainLoop();

    return 0;
}

它编译。但是当我尝试执行它时,窗口不会出现。当我调用init() 函数时,问题就出现了。没有它,窗口就会出现,但背景为黑色。有了它,就没有窗户了。代码可以在here找到。

更新

显然程序正在GLuint program = InitShader("vertex.glsl", "fragment.glsl"); 行中退出,因为它没有找到着色器文件。我怎样才能告诉程序使用这些文件?我的意思是我将.glsl 文件与.h.cpp 放在同一个文件夹中,但是当Xcode 构建项目时,可执行文件与.glsl 文件不在同一个位置。如何在 Xcode 中解决这个问题?

【问题讨论】:

    标签: macos opengl xcode4.5 glut


    【解决方案1】:

    GLSL 文件在程序运行时加载。所以不是 XCode 没有找到文件,而是你的程序。最可能的原因是,您使用了文件的相对路径(例如在您提供的代码 sn-p 中),但使用与硬编码文件位置不匹配的工作路径启动程序。通常你的程序二进制文件被构建到一个专用的构建目录中。

    快速解决方法是将 GLSL 文件复制到与二进制文件相同的目录中。正确的解决方案是将文件放置在众所周知的位置。在 MacOS X 中,您可以为此使用应用程序包。请参阅 MacOS X 开发人员文档,了解如何将应用程序资源放入应用程序包以及如何访问它们。 XCode 还提供了自动将文件复制到生成的包中的工具。

    【讨论】:

    【解决方案2】:

    按照以下步骤操作:

    在左侧面板中选择项目。

    选择目标,然后选择Build Phases

    你应该找到一个名为Add Build Phase的按钮

    将出现一个框,您必须在其中选择文件(有一个小+sign)。并确保您选择了Destination: Products directory

    构建项目,运行它,现在它应该可以工作了!!

    【讨论】:

      【解决方案3】:

      如果 Xcode 没有导入文件,则检查它是否将其添加到资源文件夹,方法是转到文件选择器中的您的项目名称,构建阶段,复制捆绑资源并确保您的 2 个文件在那里。

      【讨论】:

      • 好的。我找到了 Copy Bundle Resources,但仍然没有复制文件。
      • 那么你的着色器在 Copy Bundle Resources 中吗?
      • 是的,它们在 Copy Bundle Resources 阶段
      • 你能告诉我们你的函数InitShader()的代码吗?
      猜你喜欢
      • 2023-03-29
      • 2014-06-05
      • 2021-09-10
      • 2015-06-04
      • 2021-11-29
      • 2019-02-24
      • 2012-03-29
      • 1970-01-01
      • 2019-11-02
      相关资源
      最近更新 更多