我正在试验 OpenGL 2.x 和 3.x 教程。这些程序编译并链接,但随后在看似无辜的行上出现段错误,例如
glGenBuffers (1, &m_buffer);
我的以和main()
开头。OpenGL 1 程序编译运行良好,似乎只是 glew 包装的新功能。glewInit
glutInit
一个教程说我应该在尝试其他任何事情之前进行此测试:
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 不是一个很好的开发环境,但请不要建议我更改发行版。一定有办法!