【问题标题】:What is hardware cursor and how does it work?什么是硬件光标,它是如何工作的?
【发布时间】:2011-08-05 13:26:33
【问题描述】:

有没有人可以解释硬件光标如何精确工作?它与我在屏幕上绘制的图形有什么关系?我是用OpenGL来画的,硬件光标和OpenGL图形有什么关系?

编辑:对于那些将来可能对此感兴趣的人,我刚刚实现了用硬件显示光标所需的内容。该实现在内核中,使用它简单的 ioctl 就足够了。完美运行。

【问题讨论】:

  • 嗨 Luca,我很想看看你的代码在没有 X11 的情况下使用硬件光标的 ioctls!您可以链接您的代码或描述如何操作的页面/手册页吗?谢谢。
  • 专有代码,对不起。我只能添加有关我如何实现它的信息。
  • 我希望看到任何此类信息!即,请参考 Linux 回答您自己的问题,我会为您投票 :)(或给我发送消息 sam@nipl.net)
  • 几年前我已经在问题中添加了相关信息。我使用系统调用在屏幕上移动指针并将与图像相关的数据设置为显示为光标。我在我的环境的光标驱动程序中实现了这一点,当时是 Qt for Embedded Linux。我觉得没什么好说的了,很简单。

标签: opengl graphics


【解决方案1】:

硬件光标意味着,GPU 提供在屏幕帧缓冲区上绘制(小)覆盖图片,该位置可以通过 GPU 上的两个寄存器(左右)进行更改。因此,围绕指针移动不需要重新绘制之前被阻塞的帧缓冲区部分。

与 OpenGL 的关系:无!

【讨论】:

  • 与 OpenGL 无关意味着写入帧缓冲区的内容并不重要,我可以使用 OpenGL、X11 或其他任何东西,并且指针将以相同的方式放置在链的末尾。这是正确的吗?感谢您的回答!
  • @Luca:确实。 OpenGL 只是绘制到屏幕帧缓冲区的一种方式。但无论哪种方式,硬件光标的工作都独立于此。
  • 您认为这是为需要高性能图形的设备提供光标的最佳方式吗?或者,也许只是用加速的 OpenGL 实现来渲染一个光标会更好?谢谢!
  • @Luca:显然硬件加速光标是最好的解决方案。硬件加速与否,在 OpenGL 场景中更改一点需要重新渲染整个事物(或使用缓存纹理)。硬件游标可以正常工作,并且易于使用;只需使用图形系统的标准光标图像设置功能(Windows 中的 SetCursor,X11 中的 XCursor,MacOS X 我不知道,但手册知道;) - 使用正确安装的图形驱动程序,您将自动获得硬件加速光标。跨度>
  • 不幸的是,我没有使用 Windows、X11 或 MacOS X :-) 这就是为什么这个主题的细节与我相关。谢谢!
【解决方案2】:

OpenGL 不渲染或不支持硬件光标。一些小硬件将它覆盖在从显示连接器输出的任何图像上——它在每帧扫描输出时直接插入比特流。因此,可以通过更改包含其坐标的一对硬件寄存器来移动它。在过去,这些被称为精灵,并且不同系统支持不同数量的精灵。

【讨论】:

  • 您认为这是高性能图形界面显示光标的常用或最佳方式吗?谢谢!
【解决方案3】:

硬件光标具有更少的延迟,因此可以提供更好的体验,因为它们与您的游戏或引擎帧速率无关,而是与屏幕刷新率相关。

但是,在渲染循环期间由您渲染为屏幕空间精灵的软件光标必须以游戏引擎的速度运行。因此,如果您的游戏出现延迟或以其他方式低于目标 fps,则光标延迟会变得更糟。游戏 fps 的轻微下降通常是可以接受的,但光标延迟的轻微下降作为“缓慢的光标”是非常明显的。

您可以通过在保持硬件光标打开的同时渲染软件光标来轻松测试这一点。 (仅供参考,在 Windows API 中,硬件光标函数是 ShowCursor)。您会发现软件光标落后于硬件光标。

【讨论】:

    猜你喜欢
    • 2010-11-08
    • 2013-02-13
    • 2018-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    • 2011-12-09
    相关资源
    最近更新 更多