【问题标题】:Crash on using the opengl graphics system使用 opengl 图形系统时崩溃
【发布时间】:2013-03-31 12:37:01
【问题描述】:

我制作了一个 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:

我正在尝试安装一些驱动程序并注意到在我完成后direct rendering: No 更改为Yes

【问题讨论】:

  • 您使用的是什么GLFormat 设置?您的目标是什么 OpenGL 版本?
  • 在 glxinfo 中得到这个:server glx version string: 1.4 Mesa 8.0.4
  • 补充一下,我得到direct rendering: No !?

标签: qt opengl qml


【解决方案1】:

听起来您没有为您的 GPU 安装 OpenGL 驱动程序,因此您正在退回到软件光栅化模式,即 sloooooowglxinfo 的相关行是OpenGL renderer stringOpenGL version stringGLX 字符串是无趣的,因为 GLX 只是 OpenGL 命令在网络上的传输,X11 协议扩展用于创建 OpenGL 上下文,并且大部分独立于 GPU 及其驱动程序。

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

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

【讨论】:

  • 我分别得到了OpenGL version string: 2.1 Mesa 8.0.4 OpenGL shading language version string: 1.20 00:02.0 VGA compatible controller: Intel Corporation Ivy Bridge Graphics Controller (rev 09)。另外,我试图安装一些驱动程序,并注意到Direct Rendering: No 之后转到Yes
  • Direct Rendering: Yes 总是一个好兆头。 No 说明不了多少,但 Yes 表示状况良好。无论如何,除了驱动程序之外,可能还需要配置系统以使用新的 OpenGL 后端。
  • @AmitTomar:OpenGL renderer string 是什么?这才是真正有趣的部分。
  • OpenGL vendor string: Brian Paul OpenGL renderer string: Mesa X11 OpenGL version string: 2.1 Mesa 8.0.4 OpenGL shading language version string: 1.20
  • @AmitTomar:您必须安装的驱动程序位于包libdrm-intel1xserver-xorg-video-intel 中。您可以使用find / -name 'libGL.so*'在您的系统上找到libGL.so*
猜你喜欢
  • 2019-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-15
  • 1970-01-01
相关资源
最近更新 更多