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