我想从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,其他部分将填充灰色。
答案 0 :(得分:3)
渲染并阅读FBO,以免与pixel ownership test发生冲突:
因为默认帧缓冲区由外部资源拥有 OpenGL,有可能是默认的特定像素 framebuffer不归OpenGL所有。因此,OpenGL不能 写入那些像素。因此,针对这种像素的碎片 在管道的这个阶段丢弃。
一般来说,如果您要渲染的窗口是部分的 被另一个窗口遮挡,其他窗口覆盖的像素是 不再拥有OpenGL,因此无法通过所有权测试。任何 覆盖这些像素的片段将被丢弃。这也是 包括帧缓冲清除操作。
请注意,此测试仅会影响对默认帧缓冲区的渲染。 渲染到Framebuffer对象时,所有片段都通过了此测试。