FBO からウィンドウのフレームバッファにコピーしようとしています。私の知る限り、ウィンドウフレームバッファはR、G、B、Aそれぞれ8ビットで、デプスバッファ(おそらく24ビット)を持っています。FBO には単一のテクスチャ アタッチメント (フォーマット RGBA8) があり、レンダー バッファーはありません。
問題は、FBO を画面にブリットしようとすると、アクセス違反 (SIGSEGV の Windows 用語) が発生することです。ブリットコード:
//Earlier: const int screen_rect[4] = {0,0,512,512};
glBindFramebuffer(GL_READ_FRAMEBUFFER,fbo->framebuffer);
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
glFinish();
//checking GL errors here gives no error
glBlitFramebuffer(
screen_rect[0],screen_rect[1],screen_rect[2],screen_rect[3],
screen_rect[0],screen_rect[1],screen_rect[2],screen_rect[3],
GL_COLOR_BUFFER_BIT,
GL_NEAREST //EDIT: I've also tried GL_LINEAR
);
glFinish();
//never reaches here
glBindFramebuffer(GL_DRAW_FRAMEBUFFER,0);
glBindFramebuffer(GL_READ_FRAMEBUFFER,0);
FBO は GL_FRAMEBUFFER_COMPLETE_EXT であり、どの時点でも GL エラーは発生しません。FBO とウィンドウ フレーム バッファーは同じサイズです。
NVIDIA GeForce 580M GTX とドライバー 301.42 (現在まで、最新) で実行。
なぜこれが起こっているのでしょうか?
[編集: データがコピーされていないように見えますが、FBO から別の FBO にブリットしても問題は発生しないことがわかりました]