[DEV-C++] -> OPENGL : VBO'S (KEYFRAME)

Signaler
Messages postés
280
Date d'inscription
dimanche 7 septembre 2003
Statut
Membre
Dernière intervention
8 juillet 2014
-
Messages postés
19
Date d'inscription
samedi 17 novembre 2001
Statut
Membre
Dernière intervention
13 juillet 2012
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/45297-dev-c-opengl-vbo-s-keyframe

Messages postés
19
Date d'inscription
samedi 17 novembre 2001
Statut
Membre
Dernière intervention
13 juillet 2012

Merci pour toute ces information ça va m'aider et je vais aller me documenter sur les vbo's et je reviendrais mettre à jour cette source ;-)
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
J'ai fais une petite erreur: "glGenBuffersARB(1, &frames[0].vboVertices);" bien sur et non:
"glGenBuffersARB(1, frames[0].vboVertices);"

De meme après, c'est des pointeurs que prend la fonction glDeleteBuffers:
if (frames[i].vboVertices != 0)
glDeleteBuffersARB(1, &frames[i].vboVertices);
if (frames[i].vboNormales != 0)
glDeleteBuffersARB(1, &frames[i].vboNormales);
if (frames[i].vboTexCoords != 0)
glDeleteBuffersARB(1, &frames[i].vboTexCoords);
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Oulala, j'avais pas vu en effet.
Tu fais ca: "glGenBuffersARB(1, &frames->vboVertices);"
Tu devrais faire ca: "glGenBuffersARB(1, frames[0].vboVertices);" (bien que ce soit rigoureusement équivalement)

Mais il faut initialiser tous les membres de la structure quand tu la créés et pas laisser des champs indéterminés. Si tu utilises pas frames[1].vboVertices, mets lui la valeur 0:
frames[1].vboVertices = 0;
frames[1].vboNormales = 0;
frames[1].vboTexCoords = 0;

Et lors de la destruction, tu ne détruits que les vbos qui ont été créé.
if (frames[i].vboVertices != 0)
glDeleteBuffersARB(1, frames[i].vboVertices);
if (frames[i].vboNormales != 0)
glDeleteBuffersARB(1, frames[i].vboNormales);
if (frames[i].vboTexCoords != 0)
glDeleteBuffersARB(1, frames[i].vboTexCoords);

Peut etre que la fonction glDeleteBuffers ne fait rien si l'id du buffer vaut 0 mais on sait jamais. On voit ici l'intéret d'initialiser les ids de tes vbos a 0 si tu les utilises pas.

Pour les vbos en général, tu peux utiliser soit glLock/UnlockBuffer ou glBufferData. En première approche, c'est pareil. (glBufferData parfois un poil plus rapide).

"glLockArraysEXT, glUnlockArraysEXT"
=> Il me semble que ces fonctions ne concernent que les vertex arrays, donc pas les vbos.

"je trouve trop de solution differente je suis un peu perdu"
=> Oui c'est le bordel. Et on peut donc te reprocher de poster une source sur les vbos sans les maitriser totalement puisque ca peut induire en erreur des personnes qui regarderaient ton code.
Messages postés
19
Date d'inscription
samedi 17 novembre 2001
Statut
Membre
Dernière intervention
13 juillet 2012

glLockArraysEXT, glUnlockArraysEXT : j'ai trouvé des exemples utilisant ces fonctions
alors la je suis perdu à sa sert de les rajouté à ma source?! Je trouve par la meilleur méthode pour utilisé les vbo je trouve trop de solution differente je suis un peu perdu si quelqu'un pourrai m'aider sa serai gentil, merci ;-)
Afficher les 8 commentaires