0

我正在使用ioctl函数访问framebuffer
问题是对于每一帧,我都写了三次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() 时,我得到红色?

4

0 回答 0