【问题标题】:XOrg server code that draws the mouse pointer绘制鼠标指针的 XOrg 服务器代码
【发布时间】:2016-08-23 00:06:34
【问题描述】:
我正在使用 Xlib 和 GLX 在 Linux 中编写一个 OpenGL 应用程序。我想使用鼠标指针在窗口中绘制和拖动对象。但无论我使用什么方法来绘制或移动图形对象,在实际鼠标指针位置(由 X 服务器绘制)和我使用从中获得的指针坐标绘制的对象的位置之间总是存在非常明显的滞后Xlib(XQueryPointer 或 X 事件)或直接从 /dev/input/event* 读取
所以我的问题是:XOrg 服务器使用什么代码在屏幕上实际绘制鼠标指针?所以我可以使用相同类型的代码将图形放置在屏幕上,并使鼠标指针和图形对象的位置始终完美对齐。
即使是指向 XOrg 相关源文件的指针也很棒。
【问题讨论】:
标签:
linux
pointers
opengl
mouse
xorg
【解决方案1】:
所以我的问题是:XOrg 服务器使用什么代码在屏幕上实际绘制鼠标指针?
如果一切顺利,则根本没有代码绘制鼠标指针。所谓的“硬件光标”支持已经存在了几十年。本质上,它是硬件中所谓的“精灵引擎”,它拍摄一些小图片和一对值(x,y),它应该出现在屏幕上。在图形硬件发送到显示器的每一帧中,光标图像都会覆盖在特定位置。
图形系统会根据输入设备的移动不断更新位置值。
当然也有没有这种“精灵引擎”的图形硬件。但这里的诀窍是,经常更新,更新快,更新晚。
但是无论我使用什么方法来绘制或移动图形对象,在实际的鼠标指针位置(由 X 服务器绘制)和我使用指针坐标绘制的对象的位置之间总是存在非常明显的滞后我从 Xlib(XQueryPointer 或 X 事件)获取或直接从 /dev/input/event* 读取
是的,如果您在错误的时间将其集成到您的图像中,就会发生这种情况。最小化延迟的关键因素是尽可能晚地绘制并尽可能长时间地集成尽可能多的输入,然后您绝对必须绘制东西以满足 V-Sync 截止日期。最重要的技巧不是画过去的东西,而是画出画面出现在屏幕上的那一刻的事态。 IE。您必须预测接下来绘制的几帧的输入并使用它。
卡尔曼滤波器已成为事实上的标准方法。