OPENGL glReadPixels如何获得更大的窗口内容?

时间:2017-05-10 10:09:32

标签: opengl

我想从OpenGL到OpenCV获取窗口内容。下面使用的代码:

    unsigned char* buffer = new unsigned char[ Win_width * Win_height * 4];
    glReadPixels(0, 0, Win_width, Win_height, GL_BGRA, GL_UNSIGNED_BYTE, buffer);
    cv::Mat image_flip(Win_height, Win_width, CV_8UC4, buffer);

窗口尺寸小时。一切都好。 但是当Win_width和Win_height大于1080p时,图​​像将调整为1080p,其他部分将填充灰色。

1 个答案:

答案 0 :(得分:3)

渲染并阅读FBO,以免与pixel ownership test发生冲突:

  

因为默认帧缓冲区由外部资源拥有   OpenGL,有可能是默认的特定像素   framebuffer不归OpenGL所有。因此,OpenGL不能   写入那些像素。因此,针对这种像素的碎片   在管道的这个阶段丢弃。

     

一般来说,如果您要渲染的窗口是部分的   被另一个窗口遮挡,其他窗口覆盖的像素是   不再拥有OpenGL,因此无法通过所有权测试。任何   覆盖这些像素的片段将被丢弃。这也是   包括帧缓冲清除操作。

     

请注意,此测试会影响对默认帧缓冲区的渲染。   渲染到Framebuffer对象时,所有片段都通过了此测试。