3

我正在试验 OpenGL 2.x 和 3.x 教程。这些程序编译并链接,但随后在看似无辜的行上出现段错误,例如

glGenBuffers (1, &m_buffer);

我的以和main()开头。OpenGL 1 程序编译运行良好,似乎只是 glew 包装的新功能。glewInitglutInit

一个教程说我应该在尝试其他任何事情之前进行此测试:

if (false == glewIsSupported ("GL_VERSION_2_0"))

此测试总是失败,即使我将版本字符串更改为GL_VERSION_1_0.

#define GL_VERSION_1_3 1是 GL/gl.h 中最高的此类定义,并且没有 GL/gl3.h 或 GL/GL3 目录。

apt说我安装了 freeglut3 和 freeglut3-dev,还安装了 mesa-common-dev、libglew-1.6 和 libgl1-mesa-dev,但似乎没有任何可用的 libgl3* 包。

这是一些驱动程序信息(我没有专有驱动程序,集成 Intel Ivy Bridge 显卡和 Nvidia 额外卡,我相信两者都兼容 OpenGL 1.4)

#> glxinfo | grep version
server glx version string: 1.4
client glx version string: 1.4
GLX version: 1.4
OpenGL version string: 3.0 Mesa 9.0
OpenGL shading language version string: 1.30

这一切都让我很困惑。

是否有我应该安装的特定 OpenGL2/3/4 包,或者理论上它是对所有人都相同的开发包(对于 Ubuntu)?

为什么 GL_VERSION_1_3 是最高定义的版本,而 glGenBuffers 直到 1.5 版才引入?

为什么即使对于 1.0 版 glewIsSupported 也会失败?

我得到的印象是我没有实际实现 API 的库和/或驱动程序,但似乎我根据 glxinfo 做了,这让我觉得开发库有问题,但我没有那里正在发生的事情的连贯画面。

基本上,我该怎么做才能让我的程序编译/链接/运行?

我知道 Ubuntu 不是一个很好的开发环境,但请不要建议我更改发行版。一定有办法!

4

1 回答 1

3

我的main()开头是glewInitglutInit

没有。在返回之前,您不会获得当前的 GL 上下文glutCreateWindow()。你可以打电话glewInit()glewIsSupported()然后。

像这样的东西:

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

...

int main( int argc, char** argv )
{
    glutInit( &argc, argv );
    glutInitDisplayMode( GLUT_RGBA | GLUT_DOUBLE );
    glutInitWindowSize( 300, 300 );
    glutCreateWindow( "OpenGL" );
    glewInit();
    ...
    return 0;
}
于 2013-08-12T17:25:59.293 回答