我想知道如何正确地双重缓冲帧缓冲以避免撕裂。我已经对这个主题进行了大量研究,似乎找不到任何东西。
我尝试过FBIO_WAITFORVSYNC。但根据这个帖子:How to query Vsync phase in Linux似乎这不起作用。
该线程建议使用不同的驱动程序(vesafb)来解决错误。我设法在我的机器上安装uvesafb,但“无效参数”错误没有消失。
对此主题的任何帮助都会非常感激!
由于请求,这里是我希望开始工作的代码:
fb0 = open("/dev/fb0", O_RDWR);
if(fb0 == 0)
error("Could not open framebuffer located in /dev/fb0!");
if (ioctl(fb0, FBIOGET_FSCREENINFO, &screeninfo_fixed) == -1)
error("Could not retrive fixed screen info!");
if (ioctl(fb0, FBIOGET_VSCREENINFO, &screeninfo_var) == -1)
error("Could not retrive variable screen info!");
screeninfo_var.xres_virtual = screeninfo_var.xres;
screeninfo_var.yres_virtual = screeninfo_var.yres * 2;
screeninfo_var.width = screeninfo_var.xres;
screeninfo_var.height = screeninfo_var.yres;
screeninfo_var.xoffset = 0;
screeninfo_var.yoffset = 0;
if (ioctl(fb0, FBIOPUT_VSCREENINFO, &screeninfo_var) == -1)
error("Could not set variable screen info!");
这将始终打印“无法设置变量屏幕信息!”由于某些问题扩展了虚拟帧缓冲区大小。