C++ 临时锁定帧缓冲区

C++ 临时锁定帧缓冲区,c++,system-calls,framebuffer,ioctl,C++,System Calls,Framebuffer,Ioctl,我以前也问过类似的问题 更一般地说,我想知道如何阻止覆盖帧缓冲区。 我的帧缓冲区由3层组成,我想访问最底层的帧缓冲区 我使用系统/硬件调用ioctl函数直接从硬件获取帧缓冲区。 while(1){ // for each frame glUseProgram(redShader); //write red color into framebuffer drawRed(); //draw red color with shape... getFrameBuffer();//&l

我以前也问过类似的问题
更一般地说,我想知道如何阻止覆盖帧缓冲区。
我的帧缓冲区由3层组成,我想访问最底层的帧缓冲区
我使用系统/硬件调用ioctl函数直接从硬件获取帧缓冲区。

while(1){ // for each frame
   glUseProgram(redShader); //write red color into framebuffer
   drawRed(); //draw red color with shape... 
   getFrameBuffer();//<--------Access framebuffer here
   glUseProgram(0);

   glUseProgram(greenShader); //Then write green to framebuffer
   drawGreen();
   glUseProgram(0);

   glUseProgram(blueShader); // Then write blue to framebuffer
   drawBlue(); // This will be displayed
   glUseProgram(0);
}

maemo5,这是一个移动开发。好吧,你的代码片段是绝对没有意义的。如何写入帧缓冲区,如何实际读取(在设置mmap之后)。你有没有试着实际阅读(2)?谢谢。我更详细地编辑了这个问题。我基本上使用了GLSL着色器,它将使用gl_FragColor调用自动写入帧缓冲区…等等。我有一种感觉,可能整个事情都没有同步,这就是为什么它返回蓝色而不是红色?好吧,如果你想阻止等待GL函数完成,也许你可以调用
glFinish()
。一般来说,GL调用是异步的
glFinish()
只需阻塞并等待绘图完成;然后它又回来了,一切都很顺利。是的,您应该将它放在
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");
//Here, write image...to check before munmap and it gives me whole Blue
munmap(fbp,screensize);