Xcode:GLFW / GLAD 默认 C 应用程序中的“线程 1:EXC_BAD_ACCESS(代码=1,地址=0x0)”

问题描述 投票:0回答:2

我是 GLFW 的新手,我尝试用 C 语言使用 GLFW 和 OpenGL 制作最基本的应用程序。我从 GLFW 文档中获取了示例代码:https://www.glfw.org/documentation.html。有效。然而,当我在程序顶部包含 GLAD 时,它会在

glClear(GL_COLOR_BUFFER_BIT);
Thread 1: EXC_BAD_ACCESS (code=1, address=0x0)
处崩溃。当代码未运行时,不会出现错误并且构建成功。我已经尝试过来自 https://gen.glad.sh/http://glad.dav1d.de/ 的 GLAD。两者的构建仅包含版本 4.6 的 GL、Core 而不是 Compatibility。

我现在使用的是 Macbook Pro 和 M1 Pro,MacOS Monterey 12.0.1。已安装 GLFW,

brew install

截图:

Xcode project setup screenshot

Build Phases screenshot

Screenshot of an error while running a program

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

c xcode opengl glfw glad
2个回答
2
投票

然而,当我在程序顶部添加 GLAD 时,它会在

glClear(GL_COLOR_BUFFER_BIT);

处崩溃

因为您现在正在地址

NULL
处调用函数。 happy 头文件的作用是对于每个 GL 函数名称(如
glClear
),它将定义一个 预处理器宏 到 happy 的内部函数指针:

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
}

正如高兴的自述文件中所记录的那样。


0
投票

我刚刚遇到了和你一样的问题,但是看了唯一的答案后,我仍然不知道如何解决这个问题?你能给我更多关于这个问题的细节吗?比如我是否需要在这个主文件中添加一些代码?或者我必须将这个“glClear()”函数名称更改为gladLoadGLLoader?我不知道。 如果您能回复我,我将不胜感激。

© www.soinside.com 2019 - 2024. All rights reserved.