framebuffer输出图形撕裂,FBIO_WAITFORVSYNC和FBIOPAN_DISPLAY失败
问题描述:
这个问题是关于linux framebuffer的,图形在撕裂。framebuffer输出图形撕裂,FBIO_WAITFORVSYNC和FBIOPAN_DISPLAY失败
最近我为输出桌面工作到SDI图形卡,然后我想到了使用framebuffer的想法。没关系,它输出成功,但它有一个大问题,图形撕裂。 我想使用FBIO_WAITFORVSYNC和FBIOPAN_DISPLAY来解决它,但他们都返回-1。 的ioctl(FD,FBIO_WAITFORVSYNC,0)错误号:25(用于设备不适当的ioctl) 的ioctl(FB,FBIOPAN_DISPLAY,& vi)中,错误号:22(无效的参数)
我使用OS是Ubuntu的12.04,后安装在fbset中,我发现两个ioctl命令都包含在fb.h中。 现在的问题是如何让FBIO_WAITFORVSYNC和FBIOPAN_DISPLAY正常工作。 有一些建议吗?
答
是不是错误代码交换? 如果是的话,你可以尝试:
int zero = 0;
ioctl(fd, FBIO_WAITFORVSYNC, &zero);
如果FBIOPAN_DISPLAY不支持和帧缓冲区的大小至少为2米的屏幕(检查fixInfo.smem_len对分辨率和像素深度),然后尝试:
static int bufferNumber = 0;
//Assume the frame buffer has more memory than
//just just 1 screen - either set xoffset or
//yoffset to flip to another page.
varInfo.yoffset = varInfo.yres * bufferNumber;
ioctl(fd, FBIOPUT_VSCREENINFO, &varInfo);
//now flip the buffer to which to render to
bufferNumber = 1 - bufferNumber;
//now render to appropriate frame-buffer page
//assuming we change yoffset to switch pages
pageBuffer = fixInfo.smem_start +
(bufferNumber *
(fixInfo.line_length/(varInfo.bits_per_pixel/8) *
varInfo.yres));