我正在尝试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 *软件包。

这是一些驱动程序信息(我没有专有的驱动程序,集成了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版才引入?

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

我得到的印象是我没有真正实现该API的库和/或驱动程序,但是好像我根据glxinfo所做的那样,这使我认为开发库出了点问题,但是我没有关于那里发生的事情的连贯图片。

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

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

最佳答案



不。在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;
}

09-10 00:59
查看更多