有人能准确地解释一下硬件光标是如何工作的吗?它与我在屏幕上绘制的图形有什么关系?我正在使用OpenGL进行绘制,硬件光标与OpenGL图形有什么关系?
编辑:对于将来可能感兴趣的人,我刚刚实现了使用硬件显示光标所需的内容。 实现在内核中进行,只需使用简单的ioctl即可。 完美运行。
硬件光标是指GPU提供的绘制在屏幕帧缓冲区上的(小型)覆盖图像,其位置可以通过GPU上的两个寄存器(或者其他方式)进行更改。因此,移动指针不需要重新绘制先前被遮挡的帧缓冲区部分。
与OpenGL的关系:没有!
硬件光标并不是由OpenGL渲染或支持的。某些小型硬件会将其覆盖在输出显示器上的任何图像上 - 它会直接插入到每个帧的扫描输出位流中。因此,可以通过更改包含其坐标的一对硬件寄存器来移动它。在早期,它们被称为“sprites”,并且在不同系统上支持不同数量的它们。
硬件光标具有较低的延迟,因此提供更好的体验,因为它们不受您的游戏或引擎帧率的限制,而是与屏幕刷新率相对应。
然而,软件光标由您在渲染循环期间呈现为屏幕空间精灵,并且必须以您的游戏引擎速率运行。因此,如果您的游戏经历延迟或其他情况导致帧率低于目标fps,则光标延迟将变得更糟。游戏fps的轻微下降通常是可以接受的,但是光标延迟的轻微下降非常明显,会表现为“缓慢的光标”。
您可以通过在保留硬件光标的同时呈现软件光标来轻松测试此功能。(FYI,在Windows API中,硬件光标函数是ShowCursor)。您会发现软件光标落后于硬件光标。
drm-kms(7)
,"Cursors",drmModeSetCursor()
/drmModeMoveCursor()
- genpfault