好我的实际问题是:
当我开始一个自编的简单OpenGL
应用程序时,我的粉丝会发疯。首先我认为我的显卡太糟糕了。但是,当我注意到我的笔记本电脑硬件更差,运行该程序没有任何问题,我开始想知道。
所以我现在在两台不同的笔记本电脑上运行我的程序。
其中一个是Fedora笔记本电脑,带有一个带有板载图形卡的内核I7,另一个带有带有板载图形卡的Intelcore I5的Debian。
与我的期望相反,我的fedoras粉丝完全疯了,所以我开始做一些研究来找到问题。
我读到了关于GLX
渲染和direct rendering
linux的内容。
所以我接下来做的是检查了
glxinfo |grep render
输出告诉我在两台机器上都启用了direct rendering
。
唯一的区别是OpenGL renderer string
。
在我的debian上它包含类似
的内容mesa dri
或类似的东西。 在我的fedora上它说
Gallium 0.4 on llvmpipe (LLVM 3.5, 256 bits)
顺便说一句......他们两个都在运行KDE。
好的,我检查了/dev
文件系统。
在我的debian上,正如我在dri/card0
文件系统中预期的设备文件/dev
,当然在我的fedora上它已经丢失了。
我也看过lsmod ......
模块drm
及其辅助模块在两台机器上加载。
两台机器都使用i915模块作为图形卡。
我的第一个想法是Fedora不使用直接渲染,因为没有'card0'。
我使用linux工具strace
来找出实际发生的情况。
我得到的结果并不令人惊讶
Debian加载drm library
和其他一些东西。然后它使用/dev/dri/card0
系统调用检查是否存在stat
。然后打开它。
并开始使用大量ioctl
命令。
那就是dri
机制应该如何运作。
所以对fedora的'strace'带来了以下结果。
它也会打开drm library
。但它不检查是否有/dev/dri/card0
它开始生成futex
次调用的输出。
我用Google搜索,futex调用似乎提供了监视特定RAM地址或多个RAM地址更改的功能。
所以必须有一个原因,我的fedora只是不想使用dri
机制。
PS结果在两台机器上看起来都是一样的。 但我真的想知道如何解决这个问题。