【问题标题】:Can't run my own OpenGL 3 programs on Ubuntu无法在 Ubuntu 上运行我自己的 OpenGL 3 程序
【发布时间】:2013-08-12 17:12:11
【问题描述】:

我正在试验 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* 包。

这是一些驱动程序信息(我没有专有驱动程序,集成 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 不是一个很好的开发环境,但请不要建议我更改发行版。一定有办法!

【问题讨论】:

  • glewInit() 是否返回 GLEW_OK

标签: linux opengl ubuntu opengl-3 mesa


【解决方案1】:

我的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;
}

【讨论】:

  • 谢谢。这是否意味着在创建每个新上下文后我应该 glewInit ?
  • 如果您想使用多个上下文,请使用GLEW MX
猜你喜欢
  • 2015-06-16
  • 2014-08-08
  • 1970-01-01
  • 2016-02-23
  • 2011-05-29
  • 1970-01-01
  • 1970-01-01
  • 2021-06-05
  • 2016-05-06
相关资源
最近更新 更多