我制作了一个在光栅模式下工作正常的Qt / Qml应用程序。
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位 - Intel i5 - Qt 4.8
编辑1:
我尝试了使用this approach mention on SO 的方法。它确实有效,但即使有这样一个强大的平台,我的表现也是最糟糕的!?
我有什么遗失的吗?有人可以列出在平台上应该确保的一切,以确保应用程序实际上在opengl模式下工作,而不是回退到本机模式。
例如。显卡/驱动程序/ opengl支持等?
编辑2:
当我尝试运行glxinfo命令时,其中一行说:direct rendering: No
这是我应该担心的事情吗?
编辑3:
我正在尝试安装一些驱动程序,并注意到{I}完成后direct rendering: No
已更改为Yes
。
答案 0 :(得分:1)
听起来你没有安装GPU的OpenGL驱动程序,所以你要回到软件光栅化模式,即 sloooooow 。 glxinfo
的相关行是OpenGL renderer string
和OpenGL version string
。 GLX 字符串是无趣的,因为GLX只是网络上OpenGL命令的传输,X11协议扩展用于创建OpenGL上下文,而且大部分独立于GPU及其驱动程序。
/usr/sbin/lspci | egrep 'VGA|Graphics'
的输出是什么?
在系统上执行时,Direct Rendering: No
中安装的GPU是一个警告标志,表示OpenGL驱动程序安装不完整。但是,您也可以通过远程连接使用OpenGL,并且使用编写良好的程序,这甚至可以非常高效(不是通过拨号,而是在LAN中)。