0

我是 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。

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

截图:

Xcode 项目设置截图

构建阶段截图

运行程序时出现错误的屏幕截图

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

4

1 回答 1

0

但是当我在程序顶部包含 GLAD 时,它会崩溃glClear(GL_COLOR_BUFFER_BIT);

因为你现在在 address 调用一个函数NULL。对于每个 GL 函数名称,glad 标头所做的是,它会为glad 的内部函数指针glClear定义一个预处理器宏:

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
}

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

于 2022-01-01T17:35:33.007 回答