gpt4 book ai didi

C + Linux : How to takeover the framebuffer

转载 作者:太空狗 更新时间:2023-10-29 11:08:09 25 4
gpt4 key购买 nike

我有一个直接渲染到帧缓冲区的 OpenGL 应用程序。

如果我从终端启动应用程序,有时我会看到光标在我的应用程序后面闪烁。同样,如果我从 X 中的终端仿真器内部启动它,当我四处移动鼠标时,我会瞥见鼠标在后面移动。

我的应用程序目前以 45fps 的速度呈现,因此低帧率不应该是问题。

我注意到当 X 启动时,它似乎在开始呈现之前清除了 shell,但是当您稍后关闭 X 服务器时,发送到 stdout 的诊断内容又回来了,所以我怀疑它是否发出了清晰的命令。

我想做的事情是如何完成的?你能简单地渲染到 fb1 并告诉视频输出从 fb1 显示而不争夺 fb0 吗?然后,当您的应用程序死机时,您可以将显示返回到 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 时,您才会获得图形输出。

关于C + Linux : How to takeover the framebuffer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32620019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com