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 :
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 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"); }
J'obtiens un écran noir. La ligne :
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);
semble faire planter le programme.
Code : Sélectionner tout - Visualiser dans une fenêtre à part pixels = new GLvoid*[SCREEN_WIDTH][SCREEN_HEIGHT][4];
Y aurait il des initiés à OpenGL qui pourraient m'expliquer la procédure pour les framebuffer object et renderbuffer ?
Partager