我正在使用ioctl函数来访问framebuffer
问题是,对于每一帧,我正在写帧缓冲三次
例如,每个帧,我首先用红色填充框架,做一些计算,填充绿色,然后再做一次计算,然后填充蓝色。
换句话说,每一帧,我有三层,红色作为底部,绿色,然后蓝色作为顶部。因此,红色和绿色是看不见的,我只能看到蓝色
现在,我的问题是,当我使用ioctl调用时,它似乎无法识别红色和绿色但只能识别蓝色。
对于每一帧,我做了类似的事情:
Red(); //Frame buffer will be all Red
getFrameBuffer(); // ioctl call
Green();
Blue();
我的getFrameBuffer()类似于:
int fd = open("/dev/fb0",O_RDWR);
if (fd == -1)
printf("Could not open framebuffer\n");
struct fb_var_screeninfo screen_info;
struct fb_fix_screeninfo fixed_info;
if (ioctl(fd, FBIOGET_FSCREENINFO, &fixed_info))
printf("Error reading fixed information.\n");
if (ioctl(fd, FBIOGET_VSCREENINFO, &screen_info))
printf("Could not read variable screen info.\n");
size_t screensize = fixed_info.line_length*screen_info.yres;
unsigned char *fbp = (unsigned char *)mmap(0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
if ((int)fbp == -1)
printf("Cannot mapped\n");
munmap(fbp,screensize);
到目前为止,当我调用getFrameBuffer()时,它会返回所有蓝色。无论如何也许阻止写帧缓冲或类似的事情,以便当我调用getFrameBuffer()时,我得到红色?