Jul*_*ian 5 c framebuffer xorg raspberry-pi
我有一个带 GPIO 显示的 Raspberry Pi。我目前将它设置为 /dev/fb1 中的帧缓冲设备。有没有办法让它成为 X 窗口的默认或主要显示?我最终试图为它绘制图形,我最初计划使用 DirectFB 和 SDL,但 DirectFB 是 pi 的 alpha。我也尝试过使用 SDL1.2,因为它支持帧缓冲,但我不知道如何让 SDL 选择要绘制的帧缓冲设备而不使用 DirectFB。
我考虑使用 SDL 将我的简单 GUI 的每一帧准备为原始图像,并使用 mmap 将其 blit 到 /dev/fb1 而不是使用 SDL 的内置绘图函数,但我觉得这是实现我的目标的一种糟糕方式。
我认为如果我可以让 xorg 使用我的帧缓冲设备作为主监视器,我就不必担心做任何特殊的事情来让 SDL 绘制我的图像文件。但我不太确定 xorg 是如何工作的,以及这是否可能。
任何人的任何见解或帮助都会有很大帮助!一个星期以来,我一直在解决这个问题,寻找不同的可能性。
小智 0
使用 Raspbian 上的 SDL2,您可以直接在帧缓冲区上绘图,而无需使用 X。图形窗口始终是全屏的。您可以从控制台模式启动代码(X 停止或从 LXDE 运行 X,其想法是 SDL2 不会使用 X)。
不幸的是,Raspbian 没有附带 SDL2(Jessie 的 SDL2 不起作用),因此您需要自己构建它(大约需要一个小时)。下面描述一下构建SDL2的过程:
sudo apt-get install build-essential libfreeimage-dev libopenal-dev libpango1.0-dev libsndfile-dev libudev-dev libasound2-dev
Run Code Online (Sandbox Code Playgroud)
从https://www.libsdl.org/download-2.0.php下载 SDL2 的源代码。假设您下载的文件名为 SDL2*.tar.gz,您可以使用以下命令构建并安装它:
cd ~/Downloads
tar zxvf SDL2*.tar.gz
cd SDL2*
./configure --disable-video-x11
make
sudo make install
Run Code Online (Sandbox Code Playgroud)
之后,您应该能够将任何 C++ 程序与 SDL2 链接,例如:
g++ my_program.cpp -lSDL2 -o my_program
./my_program
Run Code Online (Sandbox Code Playgroud)