2016-08-23 23 views
0

我在使用Xlib和GLX的Linux中编写OpenGL应用程序。我想用鼠标指针绘制并拖动窗口中的对象。但是无论用什么方法绘制或移动图形对象,实际的鼠标指针位置(由X服务器绘制)与我用从我得到的指针坐标绘制的对象的位置之间始终存在非常明显的滞后Xlib(XQueryPointer或X事件)或直接从/ dev/input/event读取*绘制鼠标指针的XOrg服务器代码

所以我的问题是:XOrg服务器使用什么代码实际在屏幕上绘制鼠标指针?所以我可以使用相同类型的代码将图形放置在屏幕上,并使鼠标指针和图形对象位置始终完美对齐。

即使是指向XOrg的相关源文件的指针也会很棒。

回答

2

所以我的问题是:XOrg服务器使用什么代码实际在屏幕上绘制鼠标指针?

如果一切顺利,没有任何代码正在绘制鼠标指针。所谓的“硬件光标”支持已经存在了几十年。本质上,它被称为硬件中的“精灵引擎”,它会在屏幕上显示一些小图片和一对值(x,y)。在每一帧处,图形硬件向显示器发送光标图像叠加在特定位置。

图形系统不断更新基于输入设备移动的位置值。

当然,也有没有这种“精灵引擎”的图形硬件。但这里的诀窍在于,经常更新,以便更新更快并更新得更晚。

但无论用什么方法绘制或移动图形对象,实际鼠标指针位置(由X服务器绘制)和我绘制的对象的位置之间始终存在非常明显的滞后指针坐标我从Xlib的(XQueryPointer或X事件)获得,或直接从/ dev /输入/事件*

是的,如果你读它在在错误的时间将它集成到你的形象出现这种情况读书。尽量缩短延迟的关键因素是尽可能晚地绘制,并尽可能长地整合尽可能多的输入,然后再绝对地绘制事物以符合V-Sync期限。最重要的诀窍不是画出过去的画面,而是画出画面出现时的状态。即你必须预测下一帧画出的输入并使用它。

卡尔曼滤波器已成为事实上的标准方法。