我正在尝试从 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 和窗口帧缓冲区大小相同。
在带有驱动程序 301.42(迄今为止,最新)的 NVIDIA GeForce 580M GTX 上运行。
任何想法为什么会发生这种情况?
[编辑:我发现从一个 FBO 到另一个 FBO 时不会出现问题,尽管似乎没有数据被复制]