ここでは非常に簡単なコードです。詳細なデバッグのために同じコードを何度も繰り返しています。詳細情報:OpenGLバージョン3.3.0、Window 7 OSおよびVS2008、OpenCV 2.2.0。OpenCV 2.2のウィンドウでOpenGLの問題が発生する
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(つまりエラーなし)でなければなりません。私はframebufferオブジェクトとデフォルトのglut hiddenウィンドウを使ってコードをテストしました。私の目的のためにフレームバッファオブジェクトを使用しなければならないことも教えてください。したがって、描画と表示に同じデフォルトのウィンドウを使用することはできません。
OpenGLバージョン3.3.0、ウィンドウ7 OS、VS2008。また、 'glBindFramebufferEXT(GL_FRAMEBUFFER_EXT、0);の後に' glGetError() 'をチェックしましたが、エラーはありません。それに応じて質問も更新しました。ありがとう。最終的には問題の根源となる解決策がいくつかあります。 – Rudi
ありがとう! – Rudi