Ubuntu 帧缓冲区输出图形撕裂、FBIO_WAITFORVSYNC和FBIOPAN_显示失败
问题是关于linux帧缓冲区,图形正在撕裂 最近,我为将桌面输出到SDI图形卡而工作,然后我领会了使用帧缓冲区的想法。没关系,它输出成功,但它有一个大问题,图形撕裂。 我想使用FBIO_WAITFORVSYNC和FBIOPAN_显示来解析它,但它们都返回-1。 ioctl(fd,FBIO_WAITFORVSYNC,0)错误号:25(设备的ioctl不正确) ioctl(fb、FBIOPAN_显示和vi),错误号:22(参数无效) 我使用的操作系统是Ubuntu12.04,在安装fbset之后,我发现fb.h中包含了两个ioctl命令。 现在的问题是如何让FBIO_WAITFORVSYNC和FBIOPAN_显示正常工作。Ubuntu 帧缓冲区输出图形撕裂、FBIO_WAITFORVSYNC和FBIOPAN_显示失败,ubuntu,framebuffer,ioctl,tearing,Ubuntu,Framebuffer,Ioctl,Tearing,问题是关于linux帧缓冲区,图形正在撕裂 最近,我为将桌面输出到SDI图形卡而工作,然后我领会了使用帧缓冲区的想法。没关系,它输出成功,但它有一个大问题,图形撕裂。 我想使用FBIO_WAITFORVSYNC和FBIOPAN_显示来解析它,但它们都返回-1。 ioctl(fd,FBIO_WAITFORVSYNC,0)错误号:25(设备的ioctl不正确) ioctl(fb、FBIOPAN_显示和vi),错误号:22(参数无效) 我使用的操作系统是Ubuntu12.04,在安装fbset之后,我
有什么建议吗 错误代码没有交换吗? 如果是这样,您可以尝试:
int zero = 0;
ioctl(fd, FBIO_WAITFORVSYNC, &zero);
如果不支持FBIOPAN_显示,且帧缓冲区大小至少为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 ));