これは非常に単純なコードです..唯一のことは、詳細なデバッグのために同じコードを何度も繰り返したことです。詳細情報: OpenGL バージョン 3.3.0、Windows 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 非表示ウィンドウを使用してコードをテストしました。また、目的のためにフレームバッファ オブジェクトを使用する必要があることもお伝えします。したがって、描画と表示に同じデフォルト ウィンドウを使用することはできません。