Bonsoir, j'essaye de mettre à jour un vbo (enfin, juste une portion de ce vbo, cad les positions) avec glBufferSubData
Les données ont été allouées, je peux dessiner l'objet correctement, la mise à jour des positions en RAM fonctionne, mais la mise à jour du vbo ne donne rien (je l'effectue juste avant le rendu)
(mes buffers de données sont stockés dans une map, chaque buffer possède un vecteur de donnée (data), une taille (datasize) et un pointeur void *sur data, data_adress
lors de l'allocation, je les alloue avec glBufferData et glBuffersubdata les uns après les autres dans un unique vbo (et un autre pour les indices bien sûr))
dans cette fonction j'essaye de les mettre à jour de la même façon que l'allocation :
je ne comprends pas, il me semblait que glBufferSubData devrait suffir, non ?
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 void Renderer::UpdateVBOs(GLuint VBObuffersId[], map<attribute_name, VertexBufferBase*> VertexBuffers) { map<attribute_name, VertexBufferBase*>::iterator it; VertexBufferBase* vbb; int accusize = 0; glBindBuffer(GL_ARRAY_BUFFER, _VBObuffersId[0]); for(it = VertexBuffers.begin(); it != VertexBuffers.end(); ++it) { vbb = it->second; //jusque là les données du buffer ont été mises à jour, j'ai vérifié if(it->first == POSITION) { glBufferSubData(GL_ARRAY_BUFFER, accusize, vbb->Get_datasize(), vbb->Get_data_adress()); } accusize = accusize + vbb->Get_datasize(); } glBindBuffer(GL_ARRAY_BUFFER,0); vbb = NULL; }![]()
Partager