c++ - 基本 OpenGL 程序崩溃,但适用于 gdb

标签 c++ c opengl

我复制了 OpenGL 引用指南中的第一个程序,作为一个非常基本的 GLUT OpenGL 程序。

我正在使用 Code::Blocks IDE 并在 Ubuntu 12.10 上运行。

我正在使用带有 fglrx 驱动程序的 ATI Mobile Radeon 4670。

我正在使用此代码来确保我的环境正常工作。 这是代码:

#include <GL/glut.h>
#include <stdlib.h>

void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT);

    glBegin(GL_POLYGON);
        glVertex3f(0.25,0.25,0.0);
        glVertex3f(0.75,0.25,0.0);
        glVertex3f(0.75,0.75,0.0);
        glVertex3f(0.25,0.75,0.0);
    glEnd();

    glFlush();
}

void init(void)
{
    glClearColor(0.0,0.0,0.0,0.0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0.0,1.0,0.0,1.0,-1.0,1.0);
}

int main(int argc, char** argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(250,250);
    glutInitWindowPosition(100,100);
    glutCreateWindow("hello");
    init();
    glutDisplayFunc(display);
    glutMainLoop();
    return 0;
}

我认为这是我可以运行并希望能够编译的最简单的代码。在与 include/ 进行了一番纠缠之后和 lib/目录( /usr/include/usr/lib/x86_64-linux-gnu ),我设法让它编译没有错误。

当从 Code::Blocks 内或使用终端运行时,我遇到了段错误。出现一个窗口的影子,但随后它被销毁,程序退出。

真正奇怪的部分是当我尝试调试它时。从 Code::Blocks 中选择“调试”或在命令行上自己使用 gdb(运行 gdb <program> 然后 run),它运行得很好。没有遇到任何错误或问题,并且按预期执行。

这让我很难找出问题所在。我让 gdb 检查生成的核心文件是否正常执行,但它只说了

Program terminated with signal 11, Segmentation fault.
#0  0x00007f9ee3a5815c in ?? ()

真正的帮助。有任何想法吗?我的配置可能有问题,所以尽管问。

最佳答案

我不确定,因为我从来没有用过 glut,但是 this网站似乎建议像这样调用 glutInitDisplayMode

glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);

当你这样调用它的时候

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);

比较两者让我想知道你是否应该切换你的两个参数?

编辑:
别管我,我是弱智。当然,这些不是 2 个参数 >< 它们只是简单的或运算。现在是早上 9 点,我还没睡,请原谅我的愚蠢:<

关于c++ - 基本 OpenGL 程序崩溃,但适用于 gdb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14098884/

相关文章:

c++ - 从 QGLWidget 转移到 QWindow

c++ - openGL 聚光灯问题

c# - 如何使用共享内存将 int[] 从 C# 传递到 C++

c++ - c++11 shared_ptr 的简单示例无法编译

c - fwrite,但在 C 中为字符串而不是文件

c - 如何通过 if 循环指向一个数组

c++ - C++中的多重继承

c++ - c++中没有参数的数组

c - 这种洪水填充算法有什么问题?

opengl - 疯狂的闪烁窗口OpenGL GLFW