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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ?