无法在Ubuntu上运行我自己的OpenGL 3程序

时间:2013-08-12 17:12:12

标签: linux opengl ubuntu opengl-3 mesa

我正在尝试使用OpenGL 2.x和3.x教程。这些程序编译和链接,然后在看似无辜的行上进行段落,例如

glGenBuffers (1, &m_buffer);

我的main()glewInitglutInit开头。 OpenGL 1程序编译运行正常,它似乎是由glew包装的新函数。

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

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 *包可用。< / p>

以下是一些驱动程序信息(我没有专有驱动程序,集成了带有Nvidia附加卡的Intel Ivy Bridge图形,两者都相信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不是一个很好的开发环境,但请不要建议我更改发行版。一定有办法!

1 个答案:

答案 0 :(得分:4)

  

我的main()glewInitglutInit

开头

不。在glutCreateWindow()返回之前,您不会获得当前的GL上下文。您可以在此之后致电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;
}