cs_alpha
Messages postés19Date d'inscriptionsamedi 17 novembre 2001StatutMembreDernière intervention13 juillet 2012 4 janv. 2008 à 14:54
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 ;-)
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 20086 4 janv. 2008 à 14:28
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);
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 20086 4 janv. 2008 à 14:26
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.
cs_alpha
Messages postés19Date d'inscriptionsamedi 17 novembre 2001StatutMembreDernière intervention13 juillet 2012 4 janv. 2008 à 13:11
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 ;-)
cs_alpha
Messages postés19Date d'inscriptionsamedi 17 novembre 2001StatutMembreDernière intervention13 juillet 2012 4 janv. 2008 à 12:26
Effectivement avec:
if (frames)
{
for (int i = 0; i < numFrames; i++)
{
if (frames[i].pVertices)
{
glDeleteBuffersARB(1, &frames[i].vboVertices);
delete [] frames[i].pVertices;
frames[i].pVertices = NULL;
}
if (frames[i].pNormales)
{
glDeleteBuffersARB(1, &frames[i].vboNormales);
delete [] frames[i].pNormales;
frames[i].pNormales = NULL;
}
if (frames[i].pTexCoords)
{
glDeleteBuffersARB(1, &frames[i].vboTexCoords);
delete [] frames[i].pTexCoords;
frames[i].pTexCoords = NULL;
}
}
delete [] frames;
frames = NULL;
}
J'ai plus de probléme merci... Mais vu que je débute en vbo je comprend pas pourquoi je fais un glDeleteBuffersARB(1, &frames[i]....); pour chaque frame vu qu'à l'initialisation j'ai créé que pour la frames[0] ?!
Sinon oui ma source montre juste des vbos standard comme tu dis avec une frame, mais je voulais savoir si ya des méthode plus éfficacé (pour plus de rapidité ou qualité) voila
merci encor ;-)
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 20086 4 janv. 2008 à 11:07
Bon alors, tu peux nous expliquer ce qu'il fait de spécial ton code. Je vois juste des vbos on ne peut plus standard non ?
Tu détruits tes vbos après avoir "delete" frames. De plus frames est un tableau, donc, tu devrais plutot avoir:
if (frames)
{
for (int i = 0; i < numFrames; i++)
{
....
glDeleteBuffersARB(1, frames[i].vboVertices);
glDeleteBuffersARB(1, frames[i].vboNormales);
glDeleteBuffersARB(1, frames[i].vboTexCoords);
}
delete [] frames;
frames = NULL;
}
cs_alpha
Messages postés19Date d'inscriptionsamedi 17 novembre 2001StatutMembreDernière intervention13 juillet 2012 4 janv. 2008 à 02:46
Ha ba je voulais mettre wglext (je crois que c'est ça que tu voulais dire?!) mais je pensais qu'il aurait été plus dur a trouver ;-)
Merci quand meme du conseil.
acx01b
Messages postés280Date d'inscriptiondimanche 7 septembre 2003StatutMembreDernière intervention 8 juillet 20146 4 janv. 2008 à 02:36
salut
moi j'utilise glew pour charger les extensions,
et je dois dire que pour trouver la bonne version de glext.h pour ton projet (je n'ai pas trouvé de wglext.h qui soit assez récent) j'ai mis 5 min sur google
alors que glew le premier lien sur google et c'est dans la poche
4 janv. 2008 à 14:54
4 janv. 2008 à 14:28
"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);
4 janv. 2008 à 14:26
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.
4 janv. 2008 à 13:11
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 ;-)
4 janv. 2008 à 12:26
if (frames)
{
for (int i = 0; i < numFrames; i++)
{
if (frames[i].pVertices)
{
glDeleteBuffersARB(1, &frames[i].vboVertices);
delete [] frames[i].pVertices;
frames[i].pVertices = NULL;
}
if (frames[i].pNormales)
{
glDeleteBuffersARB(1, &frames[i].vboNormales);
delete [] frames[i].pNormales;
frames[i].pNormales = NULL;
}
if (frames[i].pTexCoords)
{
glDeleteBuffersARB(1, &frames[i].vboTexCoords);
delete [] frames[i].pTexCoords;
frames[i].pTexCoords = NULL;
}
}
delete [] frames;
frames = NULL;
}
J'ai plus de probléme merci... Mais vu que je débute en vbo je comprend pas pourquoi je fais un glDeleteBuffersARB(1, &frames[i]....); pour chaque frame vu qu'à l'initialisation j'ai créé que pour la frames[0] ?!
Sinon oui ma source montre juste des vbos standard comme tu dis avec une frame, mais je voulais savoir si ya des méthode plus éfficacé (pour plus de rapidité ou qualité) voila
merci encor ;-)
4 janv. 2008 à 11:07
Sinon pour ton problème:
# delete [] frames;
# frames = NULL;
# }
# //==========================================
# // !!! Probléme:
# glDeleteBuffersARB(1, &frames->vboVertices);
# glDeleteBuffersARB(1, &frames->vboNormales);
# glDeleteBuffersARB(1, &frames->vboTexCoords);
Tu détruits tes vbos après avoir "delete" frames. De plus frames est un tableau, donc, tu devrais plutot avoir:
if (frames)
{
for (int i = 0; i < numFrames; i++)
{
....
glDeleteBuffersARB(1, frames[i].vboVertices);
glDeleteBuffersARB(1, frames[i].vboNormales);
glDeleteBuffersARB(1, frames[i].vboTexCoords);
}
delete [] frames;
frames = NULL;
}
4 janv. 2008 à 02:46
Merci quand meme du conseil.
4 janv. 2008 à 02:36
moi j'utilise glew pour charger les extensions,
et je dois dire que pour trouver la bonne version de glext.h pour ton projet (je n'ai pas trouvé de wglext.h qui soit assez récent) j'ai mis 5 min sur google
alors que glew le premier lien sur google et c'est dans la poche