opengl - 简单的 opengl 代码(渲染到纹理)适用于 Mac,但不适用于 ubuntu

标签 opengl ubuntu nvidia

我在 qt 4.8 中用 cpp 编写了一个简单的 opengl 代码,用于 gl 上下文,使用 qt-creator。

代码使用 FBO 进行一些渲染到纹理,然后在屏幕上显示纹理。渲染到纹理涉及顶点缓冲区数组。然后使用一些老式的立即渲染(glPushMatrixglBegin(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~precise1-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.

如果值得的话,我使用的是 opengl 命令,最后不带 _EXT 后缀..

我对 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

最佳答案

GEFORCE GTX 660, and gl version 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

应该可以解决问题。

关于opengl - 简单的 opengl 代码(渲染到纹理)适用于 Mac,但不适用于 ubuntu,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17855602/

相关文章:

c++ - OpenGL:创建复杂且平滑的多边形

c++ - 使用 GLM 和 GTK 制作简单的 3D 绘图

perl - 为什么我在升级到 Intrepid Ibex Ubuntu 后找不到 Perl 模块?

opencv - 为什么 OpenCV Gpu 模块的性能比 VisionWorks 快?

Iphone 应用程序 PNG 序列动画 - 如何在不崩溃的情况下以最佳方式使用 OPENgle

c++ - 无法将纹理应用于 Qt OpenGL 中的顶点网格

linux - 我可以删除root用户主目录下的Matlab安装文件吗

java - 类似于 Ubuntu 中的环境变量

c - 如何确定缓冲区是在 GPU 还是 CPU 上?

c - 为什么在opencl中缓冲区内存分配错误