ReX*_*357 3 c linux opengl framebuffer
我有一个直接渲染到帧缓冲区的 OpenGL 应用程序。
如果我从终端启动应用程序,有时我会看到光标在我的应用程序后面闪烁。同样,如果我从 X 中的终端仿真器内部启动它,如果我四处移动鼠标,我会瞥见鼠标向后移动。
我的应用程序目前以 45fps 呈现,因此低帧率应该不是问题。
我注意到当 X 启动时,它似乎在开始渲染之前清除了外壳,但是当您稍后关闭 X 服务器时,发送到 stdout 的诊断内容又回来了,所以我怀疑它是否发出了明确的命令。
我想做的事情如何完成?你能简单地渲染到 fb1 并告诉视频输出从 fb1 显示而不是争夺 fb0 吗?那么当您的应用程序死亡时,您可以将显示返回到 fb0 吗?
编辑:
为澄清起见,该应用程序正在为配备 Vivante GPU 并在 ArchLinux ARM 上运行的 ARM SoC (Freescale i.MX6) 上的嵌入式系统开发。
我有一个直接渲染到帧缓冲区的 OpenGL 应用程序。
只是为了澄清:您是使用 KMS + DRI/DRM + GBM 来执行此操作的,对吗?
如果我从 shell 启动应用程序,有时我会看到光标在我的应用程序后面闪烁。
你在这里混淆了几个术语。一个外壳是为您提供了象,作业控制,标准输入输出重定向,脚本支持等命令的程序。您可能指的是 Linux 内核虚拟终端控制台 (Linux VT)。
启动直接使用帧缓冲设备的程序时,必须将进程使用的虚拟终端置于图形模式(KDSETMODE)。
同样,如果我从 X 中的终端仿真器内部启动它,如果我四处移动鼠标,我会瞥见鼠标向后移动。
在从 X11 环境启动时,X11 服务器是 VT 和图形模式的唯一所有者。所有的图形操作都必须通过 X11 服务器。就系统设计而言,任何试图接触它不拥有的 fbdev 的程序都应该被击中(立即发送一个 SIGSEGV)。不要这样做。期间,不讨论。X11 服务器拥有 VT,而当 VT 处于活动状态时 fbdev。
您可以做的是为您的程序分配一个自己的 VT,并让它使用它。但是,只有当 X11 服务器没有运行并且控制台切换到程序的 VT 时,您才会获得图形输出。