我有一个简单的opengl代码,用qt 4.8编写,用于gl上下文,使用qt-creator。
代码使用FBO进行一些渲染到纹理,然后在屏幕上显示纹理。渲染到纹理涉及顶点缓冲区数组。然后一些老派立即渲染(glPushMatrix
,glBegin(GL_POINTS)
,glVertex
等)进行调试。
在macbookpro中。没问题,代码工作正常。
然后我试图在ubuntu上移植它。 .pro文件中的一些更改:
LIBS += -lglut -lGLU -lGL -lGLEW #linux
LIBS += -framework GLUT -framework OpenGL -lGLEW # mac
并在标题中:
// linux
#include <GL/glew.h>
#include <GL/gl.h>
#include <GL/glu.h>
// mac
#include <GL/glew.h>
#include <gl.h>
#include <glu.h>
在ubuntu中,即时渲染工作,它显示它必须做什么,但纹理是空的(当我在屏幕上绘制它们时,如果我从纹理缓冲区到QImage进行像素传输,以及在mac中效果很好。
macbookpro有一个 Intel HD Graphics 4000 512MB,以及gl版本2.1 INTEL-8.12.47 ,而Ubuntu(12.04,3.5.0-36-generic#57~precision1-Ubuntu)机器有一个 GEFORCE GTX 660和gl版本1.4(2.1.2 NVIDIA 319.23)。
我认为gl / nvidia驱动程序存在一些问题,因为当我运行qt应用程序时,我有这个警告:
libGL error: failed to load driver: swrast
libGL error: Try again with LIBGL_DEBUG=verbose for more details.
如果值得的话,我最后使用的是没有_EXT
后缀的opengl命令..
我对opengl和卡功能以及(特别是)在linux下安装驱动程序不实用。
如果按照建议,我尝试使用调试详细标记调用glewinfo:
libGL: screen 0 does not appear to be DRI2 capable
libGL: OpenDriver: trying /usr/lib/i386-linux-gnu/dri/tls/swrast_dri.so
libGL: OpenDriver: trying /usr/lib/i386-linux-gnu/dri/swrast_dri.so
libGL error: failed to load driver: swrast
答案 0 :(得分:2)
GEFORCE GTX 660和gl版本1.4(2.1.2 NVIDIA 319.23)。
基本上尖叫说没有安装正确的OpenGL驱动程序。 GeForce 660GTX支持OpenGL-4。
确保正确安装了NVidia二进制驱动程序(开源nouveau驱动程序正在取得进展,但它们在功能和性能方面仍远远落后)。
apt-get install nvidia-glx nvidia-kernel-source nvidia-vdpau-driver libgl1-nvidia-glx libglx-nvidia-alternatives
应该这样做。