Я пытаюсь скопировать из FBO в фреймбуфер окна. Насколько мне известно, фреймбуфер окна имеет 8 бит для каждого из R, G, B и A и имеет буфер глубины (возможно, 24 бит). FBO имеет единственное прикрепление текстуры (формат RGBA8) и без рендеринга.glBlitFramebuffer, вызывающий нарушение доступа
Проблема в том, что когда я пытаюсь разжечь FBO на экране, я получаю нарушение доступа (термин Windows для SIGSEGV). Blit код:
//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 (на сегодняшний день, последний раз).
Любые идеи, почему это может произойти?
[EDIT: Я обнаружил, что проблема не возникает, когда блиттинг из FBO в другой FBO, хотя нет данных, кажется, скопированы]
Вы уверены, что screen_rect переменная все еще указывает на достоверных данных при вызове функции glBlitFramebuffer? –
Это хорошая проверка, но да, я проверял это с помощью отладчика. – imallett