OpenGL copier renderbuffer sur framebuffer
Bonjour à tous,
Je code actuellement un programme OpenGL où j'aurais besoin de faire un premier rendu dans un renderbuffer, traiter l'image et ensuite l'afficher dans le framebuffer à l'écran.
Le code que j'utilise est le suivant, pour l'init des buffers :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| glGenRenderbuffers(1, &renderBuffer);
glBindRenderbuffer(GL_RENDERBUFFER, renderBuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA, SCREEN_WIDTH, SCREEN_HEIGHT);
glGenFramebuffers(1, &fbo);
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, renderBuffer);
int status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
if(status != GL_FRAMEBUFFER_COMPLETE)
{
fprintf(stderr, "Can't complete Framebuffer\n");
} |
Et ensuite pour l'affichage :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
// DRAW
/*............................*/
GLvoid* pixels;
pixels = new GLvoid*[SCREEN_WIDTH][SCREEN_HEIGHT][4];
//GLvoid* pixels[SCREEN_WIDTH][SCREEN_HEIGHT][4];
glPixelStoref(GL_UNPACK_ALIGNMENT, 1);
glReadBuffer(GL_COLOR_ATTACHMENT0);
glReadPixels(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, GL_RGBA, GL_FLOAT, pixels);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER, 0.5);
glRasterPos2d(0, 0);
glDrawPixels(SCREEN_WIDTH, SCREEN_HEIGHT, GL_RGBA, GL_FLOAT, pixels);
glFlush();
SDL_GL_SwapBuffers();
glDisable(GL_BLEND); |
J'obtiens un écran noir. La ligne :
Code:
pixels = new GLvoid*[SCREEN_WIDTH][SCREEN_HEIGHT][4];
semble faire planter le programme.
Y aurait il des initiés à OpenGL qui pourraient m'expliquer la procédure pour les framebuffer object et renderbuffer ?