0

以前、 ioctlで同様の質問をして、操作をブロックしました。
より一般的には、フレームバッファの上書きをブロックする方法を知りたいです。 私のフレームバッファーは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);
}

opencvとは何の関係もありません。私は他の方法を試しましたが、これまでのところ、同じように機能します。基本的にフレームバッファは全体が青色で返されますが、赤色にしたいです。Red()を呼び出す前にロックし、getFrameBuffer()の後にロックを解除する必要があるということですか?とにかく、データを取得するまでフレームバッファの書き込みをブロックしますか?

編集:ioctlアプローチの前に、getFrameBuffer()で、glReadPixelsを使用しましたが、正常に動作します。赤い色を返します。しかし、速度が遅すぎて、ioctl呼び出しを使用して速度を向上させたいと思っていました。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);
4

0 に答える 0