bonjour,
J'essaye d utiliser le VBO pour afficher les coordonnée que j'ai calculer dans mon FBO. J'ai utiliser ce tutoriel :
http://www.devmaster.net/forums/showthread.php?t=7457 (pour les personne qui sont interéssé, il est pas mal!)
J'ai choisis la deuxieme solution qui est copier a le frame buffer au pixel buffer et de le copier au VBO pour effectué le rendu
Je ne sait pas trop si c la solution la plus efficace mais en tout cas sa ne marche pas...![]()
![]()
est ce que je fait les choses dans le bon ordre??? voici mon code:
les fonction VBO/PBO sont les meme que dans le tutoriel:
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 void DrawGLScene() { if (!p1->check() || !p2->check() || !p3->check() || !p4->check()){ // Calling glFinish() is only neccessary to get accurate timings, // and we need a high number of iterations to avoid timing noise. glFinish(); start = clock(); p1->resetForce(); p2->resetForce(); p3->resetForce(); p4->resetForce(); p1->computeForce(); p2->computeForce(); p3->computeForce(); p4->computeForce(); bindToText(); initFBO(); performComputation(); transferFromTexture(data,0); transferFromTexture(data2,1); transferFromTexture(force,2); setParticle(); copyFBOtoPBO(); drawVBO(); glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT,GL_COLOR_ATTACHMENT0_EXT, target, 0, 0); glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT,GL_COLOR_ATTACHMENT1_EXT, target, 0, 0); glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); glFinish(); end = clock(); total += (end-start); printf("total time = %lf\n",total); } }
et j'initialise le VBO dans le main avec :
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 void copyFBOtoPBO(void){ glReadBuffer(attachmentpoints[flag]); glBindBufferARB(GL_PIXEL_PACK_BUFFER_EXT, vbo_vertices_handle); glReadPixels(0, 0, texSize, texSize, GL_RGBA, GL_FLOAT, 0); glReadBuffer(GL_NONE); glBindBufferARB(GL_PIXEL_PACK_BUFFER_EXT, 0 ); } void drawVBO(void){ glBindBufferARB(GL_ARRAY_BUFFER_ARB, vbo_vertices_handle); glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer ( 4, GL_FLOAT,4*sizeof(float), (char *) 0); glDisable(GL_LIGHTING); glColor3f(1, 1, 1); glDrawArrays( GL_TRIANGLES, 0,texSize*texSize ); glEnable(GL_LIGHTING); glDisableClientState(GL_VERTEX_ARRAY); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 void initVBO(void){ glGenBuffersARB(1, &vbo_vertices_handle); glBindBufferARB(GL_PIXEL_PACK_BUFFER_EXT, vbo_vertices_handle); glBufferDataARB(GL_PIXEL_PACK_BUFFER_EXT, texSize*texSize*4*sizeof(float),NULL, GL_STREAM_DRAW_ARB ); }
sans le VBO, quand je transfere les donnée a parti de la texture,j'obtien les bonne chose dans "data" mais quand j'utilise le VBO c'est pas bon.
Je pense que je doit pas ecrire dans les bon buffer ou j'ai msi sa dans le mauvais ordre..
si qqun a une idée merci bien!!!!!!
Partager