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 中所述。
我是 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
.
截图:
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 中所述。