次のコードは正常に動作します
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 を関数に転送すると、最初の呼び出しでは正常に動作しますが、2 回目の呼び出しでは何も失敗/読み取りません:(
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();
}
数点:糸も同じです。バッファは 1 つしかありません。フレームバッファ オブジェクト (FBO) と glut ウィンドウで同じ動作をします。glPushClientAttrib(GL_CLIENT_ALL_ATTRIB_BITS) も試してみましたが、コードがコメントされていることがわかりました。glClear(GL_COLOR_BUFFER_BIT); も呼び出しました。RenderObject() で。
どこが間違っている可能性がありますか?
編集:クリスチャン..ありがとう!あなたは正しいです。しかし、なぜそれが起こっているのか。image.data にバッファのリンクがありませんか? 読み終わった後?それとも...表示ウィンドウがglバッファの所有権を引き継いでおり、それを破棄している間に何か問題が発生していますか?