这个问题是关于linux帧缓冲区的,这张图是撕裂的。
最近我的工作是将桌面输出到SDI显卡,然后我就有了使用帧缓冲的想法。这是好的,它输出成功,但它有一个大问题,图形是撕裂的。我想使用FBIO_WAITFORVSYNC和FBIOPAN_DISPLAY来解决它,但它们都返回-1。ioctl(fd,FBIO_WAITFORVSYNC,0)错误号: 25 (设备的ioctl不合适) ioctl(fb,FBIOPAN_DISPLAY,&vi),错误号: 22 (无效参数)
我使用的操作系统是Ubuntu 12.04,安装fbset后,我发现fb.h中包含了两个ioctl命令。现在的问题是如何让FBIO_WAITFORVSYNC和FBIOPAN_DISPLAY很好地工作。有什么建议吗?
发布于 2014-12-01 03:13:01
错误代码不是互换的吗?如果是这样,您可以尝试:
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 ));https://stackoverflow.com/questions/26291050
复制相似问题