我試圖從FBO到窗口的幀緩衝區拷貝。據我所知,窗口幀緩衝器對R,G,B和A中的每一個都有8位,並且有一個深度緩衝器(可能是24位)。 FBO有一個紋理附件(格式爲RGBA8),沒有渲染緩衝區。glBlitFramebuffer導致訪問衝突
的問題是,當我嘗試做塊的FBO到屏幕上,我得到一個訪問衝突(的Windows期限爲SIGSEGV)。閃爍代碼:
//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 GTX 580M與驅動程序301.42(到目前爲止,最新的)。
任何想法,爲什麼會發生這種情況?
[編輯:我發現從FBO到另一個FBO塊傳輸的時候,雖然沒有數據似乎被複制不會發生的問題]
確定screen_rect變量,當你調用glBlitFramebuffer功能仍指向有效的數據嗎? –
這是一個很好的檢查,但是,我已通過調試器驗證了這一點。 – imallett