0

问题是关于 linux framebuffer,图形正在撕裂。

最近我为 SDI 显卡的输出桌面工作,然后我想到了使用帧缓冲区。没关系,它输出成功,但它有一个大问题,图形撕裂。我想使用 FBIO_WAITFORVSYNC 和 FBIOPAN_DISPLAY 来解决它,但它们都返回-1。ioctl(fd, FBIO_WAITFORVSYNC, 0) errno: 25 (不适合设备的 ioctl) ioctl(fb, FBIOPAN_DISPLAY, &vi) ,errno: 22 (无效参数)

我使用的操作系统是 Ubuntu 12.04,安装 fbset 后,我​​发现两个 ioctl 命令都包含在 fb.h 中。现在的问题是如何让 FBIO_WAITFORVSYNC 和 FBIOPAN_DISPLAY 正常工作。有什么建议吗?

4

1 回答 1

0

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

    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 ));
于 2014-11-30T19:13:00.817 回答