You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

引入GLAD后调用glClear()导致GLFW崩溃问题求助

OpenGL 3.3 Core Profile 初始化异常及glClear崩溃问题

一开始使用GLFW基础示例代码,运行后能正常显示标题为“Hello World”的黑色窗口:

#include <GLFW/glfw3.h>

int main(void)
{
    GLFWwindow* window;

    /* Initialize the library */
    if (!glfwInit())
        return -1;

    /* Create a windowed mode window and its OpenGL context */
    window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL);
    if (!window)
    {
        glfwTerminate();
        return -1;
    }

    /* Make the window's context current */
    glfwMakeContextCurrent(window);

    /* Loop until the user closes the window */
    while (!glfwWindowShouldClose(window))
    {
        /* Render here */
        glClear(GL_COLOR_BUFFER_BIT);

        /* Swap front and back buffers */
        glfwSwapBuffers(window);

        /* Poll for and process events */
        glfwPollEvents();
    }

    glfwTerminate();
    return 0;
}

但进行以下修改后出现一系列问题:

  • 添加GLAD头文件(需在GLFW之前引入):
#include <glad/glad.h>
#include <GLFW/glfw3.h>
  • 设置OpenGL版本与核心配置的窗口提示:
// 指定使用的OpenGL版本
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

此时窗口初始化直接失败,添加苹果平台兼容代码后:

#ifdef __APPLE__
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
#endif

窗口可以正常创建,但调用glClear(GL_COLOR_BUFFER_BIT)时程序崩溃,报错:

'./Voxel Game' terminated by signal SIGSEGV (Address boundary error)

如果移除上述苹果兼容代码,程序能正常运行,但无法执行屏幕清除操作。

当前完整代码如下:

#include <iostream>
#include <glad/glad.h>
#include <GLFW/glfw3.h>
#define SCREEN_WIDTH 640
#define SCREEN_HIEGHT 480

int main()
{
    GLFWwindow* window;

    // 初始化GLFW库
    if (!glfwInit()) 
    {
        std::cout << "Failed to initalize GLFW" << std::endl;
        return -1;
    }
    
    // 指定使用的OpenGL版本
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

#ifdef __APPLE__
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
#endif


    // 创建窗口及OpenGL上下文
    window = glfwCreateWindow(SCREEN_WIDTH, SCREEN_HIEGHT, "Voxel Game", NULL, NULL);
    if (!window)
    {
        std::cout << "Failed create GLFW window" << std::endl;
        glfwTerminate();
        return -1;
    }

    // 将窗口上下文设为当前
    glfwMakeContextCurrent(window);

    // 窗口循环,直到用户关闭窗口
    while (!glfwWindowShouldClose(window))
    {
        // 渲染操作
        //glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
        glClear(GL_COLOR_BUFFER_BIT);

        // 交换前后缓冲区
        glfwSwapBuffers(window);

        // 处理事件
        glfwPollEvents();
    }

    glfwTerminate();
    return 0;
}

内容的提问来源于stack exchange,提问作者Regin.hd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 13:24:27