以下代码工作正常
const char *title = "glReadOutput";
Mat out1, out2;
out1.create(screenHeight,screenWidth, CV_8UC3);
out2.create(screenHeight,screenWidth, CV_8UC3);
RenderObject();
glReadPixels(0, 0, screenWidth, screenHeight, GL_BGR, GL_UNSIGNED_BYTE, (uchar*)out1.data);
//flip(out1, out1, 0);
imshow(title, out1);
waitKey(5000);
RenderObject();
glReadPixels(0, 0, screenWidth, screenHeight, GL_BGR, GL_UNSIGNED_BYTE, (uchar*)out2.data);
//flip(image, out2, 0);
imshow(title, out2);
waitKey(5000);
但是,当我将 glReadPixels 转移到函数时,它在第一次调用时工作正常,但在第二次调用时失败/读取任何内容:(
RenderObject();
displayImage(out1);
RenderObject();
displayImage(out2);
.
.
void displayImage(Mat& image) {
//glReadBuffer(GL_FRONT);
//glPushClientAttrib(GL_CLIENT_ALL_ATTRIB_BITS);
glReadPixels(0, 0, screenWidth, screenHeight, GL_BGR, GL_UNSIGNED_BYTE, (uchar*)image.data);
//flip(image, image, 0);
//glPopClientAttrib();
const char *title = "glReadPixels";
imshow(title, image);
waitKey(5000);
destroyWindow(title);
//image.release();
}
几点:线程也一样。只有一个缓冲区。与帧缓冲区对象 (FBO) 以及过剩窗口的行为相同。我也试过 glPushClientAttrib(GL_CLIENT_ALL_ATTRIB_BITS),你可以看到代码被注释了。我也叫 glClear(GL_COLOR_BUFFER_BIT); 在渲染对象()上。
你能帮我吗,哪里可能出错?
编辑:克里斯蒂安..谢谢!你是对的。但是为什么会这样。image.data 上没有带缓冲区的链接,对吗?读完之后?还是...显示窗口接管了 gl 缓冲区的所有权,而我们破坏它时发生了什么问题?