OpenGL“分段错误”错误

Posted

技术标签:

【中文标题】OpenGL“分段错误”错误【英文标题】:OpenGL "Segmentation fault" error 【发布时间】:2017-08-09 19:21:52 【问题描述】:

我最近一直在玩OpenGL和Ubuntu,似乎遇到了错误。

我已尝试关注与问题完全相同的其他线程。

简单地说,我没有工作......

这是我的错误:

Segmentation fault (core dumped)

我使用这个“build.sh”脚本编译程序

g++ -o exec main.cpp -I/usr/include/libdrm -lglfw -I/usr/include/libdrm -lGL -I/usr/include/libdrm -lGLEW -lGLU -lGL

这是我的“main.cpp”

#include <GL/glew.h>
#include <GLFW/glfw3.h>

int main()

    if(!glfwInit())
        //error
    

    glewExperimental = GL_TRUE;

    glewInit();

    GLFWwindow* window = glfwCreateWindow(640, 480, "Title", NULL, NULL);

    if(!window)
        //error
    

    glfwMakeContextCurrent(window);

    glClearColor(0.2f, 0.3f, 0.3f, 1.0f);

    float vertices[] = 
        -0.5f, -0.5f, 0.0f,
         0.5f, -0.5f, 0.0f,
         0.0f,  0.5f, 0.0f
    ;  

    unsigned int VBO;

    glGenBuffers(1, &VBO);

    while(!glfwWindowShouldClose(window))

        glfwPollEvents();   

        glClear(GL_COLOR_BUFFER_BIT);

        glfwSwapBuffers(window);
    

    glfwDestroyWindow(window);

    glfwTerminate();

    return 0;

编辑

问题已解决。 对于像我这样的人,您需要在makeContextCurrent() 之后致电glewInit()

【问题讨论】:

在调试器中运行,看看是哪一行导致了问题。 只是一个简单的问题——您是否处于嵌入式或其他不寻常的环境中(例如 unsigned int 的大小可能小于 32 位)。 (现在不太可能,但你永远不知道......) 我正在运行 64 位 Ubuntu。有问题的行是 glGenBuffers(1, &VBO) 你为什么打电话给glewInit() 之前 glfwMakeContextCurrent()?如果没有当前的 GL 上下文,它不会做任何有用的事情。 它从来没有说过在哪里放置 glewInit() 【参考方案1】:

真的很简单,我只需要输入

glewExperimental = GL_TRUE;
glewInit();

glfwMakeContextCurrent()之后

【讨论】:

以上是关于OpenGL“分段错误”错误的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL“分段错误”错误

std::string 的声明导致 OpenGL 出现分段错误

使用 SDL_CreateWindow 时出现 SDL OpenGL 分段错误

OpenGL glGetIntegerv GL_MAX_VERTEX_ATTRIBS 分段错误

collect2:错误:ld 以信号 11 [分段错误] 终止,核心转储

这段代码一次执行良好,另一次出现分段错误