【发布时间】:2011-06-17 13:38:58
【问题描述】:
这是非常简单的代码.. 唯一的问题是我多次重复相同的代码以进行详细调试。详细信息:OpenGL 版本 3.3.0,Window 7 OS 和 VS2008,OpenCV 2.2.0。
RenderObject();
//glPushClientAttrib(GL_CLIENT_ALL_ATTRIB_BITS);
Mat image;
image.create(screenHeight,screenWidth, CV_8UC3);
glReadPixels(0, 0, screenWidth, screenHeight, GL_BGR, GL_UNSIGNED_BYTE, (uchar*)image.data);
int error_code1 = glGetError(); // Error Code: 0, NO Error, Also output is good/as expected!
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
int error_code8 = glGetError(); // Error Code: 0, NO Error
//flip(image, image, 0);
//glPopClientAttrib();
const char *title = "glReadPixels Output";
cv::namedWindow(title);
int error_code2 = glGetError(); // Error Code: 1282, GL_INVALID_OPERATION
imshow(title, image);
int error_code3 = glGetError(); // Error Code: 1282, GL_INVALID_OPERATION
waitKey(5000);
int error_code4 = glGetError(); // Error Code: 0, NO Error
destroyWindow(title);
int error_code5 = glGetError(); // Error Code: 1282, GL_INVALID_OPERATION
image.release();
int error_code6 = glGetError(); // Error Code: 1282, GL_INVALID_OPERATION
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fboId);
glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT);
glReadBuffer(GL_COLOR_ATTACHMENT0_EXT);
int error_code7 = glGetError(); // Error Code: 1282, GL_INVALID_OPERATION
这里发生了一些事情。那是什么? ...好吧,即使 OpenCV 窗口正在接管默认缓冲区,至少 error_code7 应该为 0(即没有错误)。我用帧缓冲对象和默认的 glut 隐藏窗口测试了代码。还让我告诉你,我必须使用帧缓冲区对象来达到我的目的。所以,不能使用相同的默认窗口来绘制和显示。
【问题讨论】:
标签: opengl opencv rendering buffer framebuffer