2013-04-09 138 views
0

我做了一个Qt/Qml应用程序,在光栅模式下工作正常。使用opengl图形系统崩溃

QApplication::setGraphicsSystem("raster"); 

但只要我把它改为OpenGL的,它具有以下消息崩溃:

hijackWindow() context created for QmlApplicationViewer(0xbfce6e5c) 1 
QGLContext::makeCurrent(): Failed. 
QGLFramebufferObject: Unable to resolve framebuffer object extensions - make sure there is a current context when creating the framebuffer object. 
QGLWindowSurface: Failed to create valid FBO, falling back 
QGLPixelBuffer: Unable to find a context/format match - giving up. 
QGLWindowSurface: Failed to create valid pixelbuffer, falling back 
QGLContext::makeCurrent(): Failed. 
QGLWindowSurface: Using plain widget as window surface QGLWindowSurface(0x932b428) 
QGLContext::makeCurrent(): Failed. 
QGLShader: could not create shader 
Vertex shader for simpleShaderProg (MainVertexShader & PositionOnlyVertexShader) failed to compile 
QGLShader: could not create shader 
Fragment shader for simpleShaderProg (MainFragmentShader & ShockingPinkSrcFragmentShader) failed to compile 
QGLShaderProgram: could not create shader program 
Errors linking simple shader: "" 
QGLShader: could not create shader 
Vertex shader for blitShaderProg (MainWithTexCoordsVertexShader & UntransformedPositionVertexShader) failed to compile 
QGLShader: could not create shader 
Fragment shader for blitShaderProg (MainFragmentShader & ImageSrcFragmentShader) failed to compile 
QGLShaderProgram: could not create shader program 
Errors linking blit shader: "" 
QGLContext::makeCurrent(): Failed. 
QGLShader: could not create shader 
Warning: "" failed to compile! 
QGLContext::makeCurrent(): Failed. 
QGLContext::makeCurrent(): Failed. 
QGLShader: could not create shader 
Warning: "" failed to compile! 
QGLContext::makeCurrent(): Failed. 
QGLContext::makeCurrent(): Failed. 
QGLContext::makeCurrent(): Failed. 
QGLContext::makeCurrent(): Failed. 
The program has unexpectedly finished. 

平台:Ubuntu的12.04 - 32位 - 英特尔酷睿i5 - Qt的4.8


编辑1:

我试着绕过使用this approach mention on SO。它确实奏效,但即使拥有如此强大的平台,我的表现也是最糟糕的!

有什么我失踪?有人可以列出平台上所有应该确保的内容,以确保应用程序实际上在opengl模式下工作,而不会回退到本机模式。

例如。图形卡/驱动程序/ opengl支持等?


编辑2:

当我试图运行glxinfo命令,该行的人说:direct rendering: No 有什么事情我应该担心?


编辑3:

我试图安装一些驱动程序,发现direct rendering: No改为Yes我做了。

+0

你正在使用什么'GLFormat'设置?你打算使用哪种OpenGL版本? – cmannett85 2013-04-09 07:50:13

+0

在glxinfo得到这个:'服务器glx版本字符串:1.4 Mesa 8.0.4' – 2013-04-09 08:45:27

+0

要添加,我得到'直接呈现:没有'!? – 2013-04-09 08:47:36

回答

1

听起来你没有安装GPU的OpenGL驱动程序,所以你要回落到软件光栅化器模式,即sloooooooglxinfo的相关行是OpenGL renderer stringOpenGL version string。由于GLX仅仅是通过网络传输OpenGL命令的传输,所以X11协议扩展用于创建OpenGL上下文,而且这些扩展大多独立于GPU及其驱动程序,因此字符串并不令人感兴趣。

/usr/sbin/lspci | egrep 'VGA|Graphics'的输出是什么?

在系统上执行时,您的GPU安装在Direct Rendering: No中是一个警告标志,表示OpenGL驱动程序安装不完整。但是,您也可以通过远程连接使用OpenGL,并且编写良好的程序时甚至可以非常高效(不是通过拨号,而是通过LAN)。

+0

我得到了'OpenGL版本字符串:2.1 Mesa 8.0.4 OpenGL着色语言版本字符串:1.20 '和'00:02.0 VGA兼容控制器:Intel Corporation Ivy Bridge图形控制器(rev 09)'。此外,我正在尝试安装一些驱动程序,并注意到'Direct Rendering:No'后来转到了'Yes'。 – 2013-04-09 10:22:28

+0

'直接渲染:是'总是一个好兆头。一个'不''不能说很多,但'是'表示良好的条件。无论如何,除了驱动程序之外,可能还需要将系统配置为使用新的OpenGL后端。 – datenwolf 2013-04-09 10:54:54

+0

@AmitTomar:什么是OpenGL渲染器字符串?这是非常有趣的部分。 – datenwolf 2013-04-09 10:55:21