C++ 基本OpenGL程序崩溃,但可与gdb一起使用

C++ 基本OpenGL程序崩溃,但可与gdb一起使用,c++,c,opengl,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_BUFFE

我复制了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;
}

真是帮了大忙。有什么想法吗?我的配置可能有问题,所以请询问。

我不确定,因为我从未使用过glut,但网站似乎建议像这样调用glutInitDisplayMode

glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE)

你这样叫它

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB)

比较这两个参数,我想知道你是否应该切换这两个参数

编辑:

别理我,我是弱智。当然,这不是两个参数,它们是简单的OR。现在是早上9点,我还没睡,所以请原谅我的愚蠢:我不确定,因为我从未使用过glut,但该网站似乎建议像这样调用glutInitDisplayMode

glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE)

你这样叫它

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB)

比较这两个参数,我想知道你是否应该切换这两个参数

编辑:

别理我,我是弱智。当然,这不是两个参数,它们是简单的OR。现在是早上9点,我还没睡,所以请原谅我的愚蠢:在Linux上,如果使用开源驱动程序,OpenGL总是更容易调试。这与开源政治无关,甚至与访问源代码无关(无论多么好)。开源驱动程序更稳定,而且通常是Valgrind-clean。而且,这个程序看起来不错,适合我。因此,这是尝试安装不同驱动程序的另一个原因。
glxgears
是否适用于您的系统?(
apt get install mesa utils
)在Linux上,如果使用开源驱动程序,OpenGL总是更容易调试。这与开源政治无关,甚至与访问源代码无关(无论多么好)。开源驱动程序更稳定,而且通常是Valgrind-clean。而且,这个程序看起来不错,适合我。因此,这是尝试安装不同驱动程序的另一个原因。
glxgears
是否适用于您的系统?(
apt get install mesa utils
)关于您对删除的关于“安装OpenGL”的答案的评论,是的,可以安装或卸载OpenGL实现。它只是一个用户空间库,如LibPNG或GTK——您可以从系统中添加或删除文件。在我的系统上,我有三种实现可供选择——一种是ATI的错误实现,一种是Mesa的功能不完整实现,还有一种是软件实现。是的,OpenGL库与驱动程序是分开的。当然,您可以删除这些文件,甚至可以下载这些文件并将它们复制到编译器的lib文件夹中。但在我看来,这与安装不一样,因为安装所涉及的不仅仅是运行am可执行文件。是的,我知道,安装程序基本上只是将一些文件解压缩并复制到某个文件夹中,在这方面你是完全正确的:)“安装”意味着准备程序或库以供使用。“安装程序”是一种安装程序或库的程序,但它不是安装东西的唯一方法。您可以通过复制文件手动安装库或程序。我猜你是Windows用户,因为Linux和OS X上的大多数程序都是在没有运行安装程序的情况下安装的——手动复制文件、运行makefile目标或使用包管理器。此外,将其称为编译器的lib文件夹也是错误的。我知道的所有OpenGL实现都必须安装在系统库目录中,加载程序可以在该目录中找到它们。甚至可能没有安装编译器。编译器有一个单独的库目录,您可以在其中找到一些运行时代码。OpenGL不会安装在此目录中,因为OpenGL不是编译器提供的运行时的一部分。关于您对“安装OpenGL”的删除答案的评论,是的,可以安装或卸载OpenGL实现。它只是一个用户空间库,如LibPNG或GTK——您可以从系统中添加或删除文件。在我的系统上,我有三种实现可供选择——一种是ATI的错误实现,一种是Mesa的功能不完整实现,还有一种是软件实现。是的,OpenGL库与驱动程序是分开的。当然,您可以删除这些文件,甚至可以下载这些文件并将它们复制到编译器的lib文件夹中。但在我看来,这与安装不一样,因为安装所涉及的不仅仅是运行am可执行文件。是的,我知道,安装程序基本上只是将一些文件解压缩并复制到某个文件夹中,在这方面你是完全正确的:)“安装”意味着准备程序或库以供使用。“安装程序”是一种安装程序或库的程序,但它不是安装东西的唯一方法。您可以通过复制文件手动安装库或程序。我猜你是Windows用户,因为Linux和OS X上的大多数程序都是在没有运行安装程序的情况下安装的——手动复制文件、运行makefile目标或使用包管理器。此外,将其称为编译器的lib文件夹也是错误的。我知道的所有OpenGL实现都必须安装在系统库目录中,加载程序可以在该目录中找到它们。甚至可能没有安装编译器。编译器有一个单独的库目录,您可以在其中找到一些运行时代码。OpenGL不会安装在此目录中,因为OpenGL不是编译器提供的运行时的一部分。
Program terminated with signal 11, Segmentation fault.
#0  0x00007f9ee3a5815c in ?? ()