C + Linux:如何接管帧缓冲区
C + Linux: How to takeover the framebuffer
我有一个直接渲染到帧缓冲区的 OpenGL 应用程序。
如果我从终端启动应用程序,有时我会看到光标在我的应用程序后面闪烁。同样,如果我从 X 中的终端仿真器内部启动它,如果我四处移动鼠标,我会瞥见鼠标在后面移动。
我的应用程序目前以 45fps 的速度呈现,因此低帧率应该不是问题。
我注意到当 X 启动时它似乎在开始渲染之前清除 shell 但是当你稍后关闭 X 服务器时,发送到 stdout 的诊断内容又回来了所以我怀疑它正在发布明确的命令。
我想做的事情是如何完成的?你能简单地渲染到 fb1 并告诉视频输出从 fb1 显示而不争夺 fb0 吗?然后,当您的应用程序死机时,您可以 return 显示到 fb0 吗?
编辑:
需要说明的是,该应用程序是针对 ARM SoC(飞思卡尔 i.MX6)上的嵌入式系统开发的,配备 Vivante GPU 和 运行 ArchLinux ARM。
I have an OpenGL application that renders directly to the framebuffer.
澄清一下:您是使用 KMS + DRI/DRM + GBM 对吗?
If I start the application from the shell, at times I will see a glimpse of the cursor flashing behind my application.
您在这里混淆了一些术语。 shell 是为您提供诸如作业控制、stdio 重定向、脚本支持等命令的程序。您可能指的是 Linux 内核虚拟终端控制台 (Linux VT)。
当启动直接使用帧缓冲设备的程序时,您必须将您的进程使用的虚拟终端设置为graphics mode (KDSETMODE)。
Likewise, if I start it from inside a terminal emulator in X, I get glimpses of the mouse moving behind if I move the mouse around.
在从 X11 环境启动时,X11 服务器是 VT 和图形模式的独占所有者。所有图形操作都必须通过 X11 服务器。就系统设计而言,任何试图接触不属于它的 fbdev 的程序都应该被打脸(立即发送 SIGSEGV)。不要这样做。期间,不讨论。 X11 服务器拥有 VT,当 VT 处于活动状态时,fbdev。
您可以做的是为您的程序分配一个自己的 VT,并让它使用它。但是,只有当 X11 服务器不是 运行 并且控制台切换到程序的 VT 时,您才会获得图形输出。
我有一个直接渲染到帧缓冲区的 OpenGL 应用程序。
如果我从终端启动应用程序,有时我会看到光标在我的应用程序后面闪烁。同样,如果我从 X 中的终端仿真器内部启动它,如果我四处移动鼠标,我会瞥见鼠标在后面移动。
我的应用程序目前以 45fps 的速度呈现,因此低帧率应该不是问题。
我注意到当 X 启动时它似乎在开始渲染之前清除 shell 但是当你稍后关闭 X 服务器时,发送到 stdout 的诊断内容又回来了所以我怀疑它正在发布明确的命令。
我想做的事情是如何完成的?你能简单地渲染到 fb1 并告诉视频输出从 fb1 显示而不争夺 fb0 吗?然后,当您的应用程序死机时,您可以 return 显示到 fb0 吗?
编辑:
需要说明的是,该应用程序是针对 ARM SoC(飞思卡尔 i.MX6)上的嵌入式系统开发的,配备 Vivante GPU 和 运行 ArchLinux ARM。
I have an OpenGL application that renders directly to the framebuffer.
澄清一下:您是使用 KMS + DRI/DRM + GBM 对吗?
If I start the application from the shell, at times I will see a glimpse of the cursor flashing behind my application.
您在这里混淆了一些术语。 shell 是为您提供诸如作业控制、stdio 重定向、脚本支持等命令的程序。您可能指的是 Linux 内核虚拟终端控制台 (Linux VT)。
当启动直接使用帧缓冲设备的程序时,您必须将您的进程使用的虚拟终端设置为graphics mode (KDSETMODE)。
Likewise, if I start it from inside a terminal emulator in X, I get glimpses of the mouse moving behind if I move the mouse around.
在从 X11 环境启动时,X11 服务器是 VT 和图形模式的独占所有者。所有图形操作都必须通过 X11 服务器。就系统设计而言,任何试图接触不属于它的 fbdev 的程序都应该被打脸(立即发送 SIGSEGV)。不要这样做。期间,不讨论。 X11 服务器拥有 VT,当 VT 处于活动状态时,fbdev。
您可以做的是为您的程序分配一个自己的 VT,并让它使用它。但是,只有当 X11 服务器不是 运行 并且控制台切换到程序的 VT 时,您才会获得图形输出。