Xcode: "Thread 1: EXC_BAD_ACCESS (code=1, address=0x0)" 在 GLFW / GLAD 默认 C 应用程序中

Xcode: "Thread 1: EXC_BAD_ACCESS (code=1, address=0x0)" in GLFW / GLAD default C application

我是 GLFW 的新手,我尝试在 C 中使用 GLFW 和 OpenGL 制作最基本的应用程序。我从 GLFW 文档中获取了示例代码:https://www.glfw.org/documentation.html. It worked. However when I include GLAD at the top of my program it crashes at glClear(GL_COLOR_BUFFER_BIT); with Thread 1: EXC_BAD_ACCESS (code=1, address=0x0). When code isn't running no errors appear and build succeeds. I've tried GLADs from both https://gen.glad.sh/ and http://glad.dav1d.de/。两者的构建仅包括版本 4.6 的 GL,核心而不是兼容性。

我现在使用的是装有 M1 Pro、MacOS Monterey 12.0.1 的 Macbook Pro。使用 brew install.

安装 GLFW

截图:

Xcode project setup screenshot

Build Phases screenshot

Screenshot of an error while running a program

此外,我是 Xcode 的新手,而且我一直使用 CLion 进行编程,所以我可能在尝试设置所有这些时搞砸了一些东西。

Jowever when I include GLAD at the top of my program it crashes at glClear(GL_COLOR_BUFFER_BIT);

因为您现在正在调用地址 NULL 的函数。 glad header 所做的是为每个 GL 函数名称(如 glClear)定义一个 预处理器宏 到 glad 的内部函数指针:

typedef void (GLAD_API_PTR *PFNGLCLEARPROC)(GLbitfield   mask);
GLAD_API_CALL PFNGLCLEARPROC glad_glClear;
#define glClear glad_glClear

您实际上需要调用 gladLoadGLLoader 以在运行时加载所有这些函数指针,在您创建并使当前的 GL 上下文 之后您要使用.

因为使用了GLFW,所以可以直接使用glfwGetProcAddress作为_loader函数:

if (!gladLoadGLLoader((GLADloadproc) glfwGetProcAddress)) {
    // error out
}

the glad readme 中所述。