Ubuntu 帧缓冲区输出图形撕裂、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之后,我

问题是关于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_显示正常工作。
有什么建议吗

错误代码没有交换吗? 如果是这样,您可以尝试:

    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 ));