IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenGL Discussion :

Vertex Buffer Object et performance


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 31
    Par défaut Vertex Buffer Object et performance
    Bonjour, j'ai ecrit un code en c++ et j'ai fait deux versions, une avec un affichage direct :
    glBegin(GL_TRIANGLES);
    ...
    glEnd();

    et un avec les VBO, seulement une fois terminé je teste le fps de chacun et je me rend compte que les VBO sont plus lents (environ 30fps de moins), est ce que vous auriez une idée ?

  2. #2
    Expert confirmé
    Avatar de raptor70
    Inscrit en
    Septembre 2005
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2005
    Messages : 3 173
    Par défaut
    Tout dépend du nombre de face que tu dessines et le mode de VBO choisi...

    Envoi tu tes données à openGL, pour les VBO, toutes les frames ? ou une seule fois à l'initialisation ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 31
    Par défaut
    Mon modele à 15842 triangles, a l'initialisation j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    glGenBuffers(1, &VertexBuffer[0].Obj[i].VBOPosition);
    glBindBuffer(GL_ARRAY_BUFFER, VertexBuffer[0].Obj[i].VBOPosition);
    glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * Model.Mesh.nbrVertex[i] *  3, NULL, GL_STATIC_DRAW);
    glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(GLfloat) * Model.Mesh.nbrVertex[i]*3, VertexBuffer[0].Obj[i].Position);
    puis pour le rendu (pour chaque fps):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    glGenBuffers(1, &VertexBuffer[0].Obj[i].VBOPosition);
    glBindBuffer(GL_ARRAY_BUFFER, VertexBuffer[0].Obj[i].VBOPosition);
    glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * Model.Mesh.nbrVertex[i] *  3, NULL, GL_STREAM_DRAW);
    glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(GLfloat) * Model.Mesh.nbrVertex[i]*3, VertexBuffer[0].Obj[i].Position);
     
    glDrawArrays(GL_TRIANGLES, 0, 3);
    Mes vertices ne sont pas encore indexés, et je fais de meme pour les normales, et coordonnées de textures.

  4. #4
    Expert confirmé
    Avatar de raptor70
    Inscrit en
    Septembre 2005
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2005
    Messages : 3 173
    Par défaut
    juste, tu recréé un buffer à chaque frame, donc c'est normal que ca ralentisse ...

    Est ce que c'est justifié de re-envoyer la données de géométrie à chaque frame ?

    L'idéal, c'est ca pour le rendu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    glBindBuffer(GL_ARRAY_BUFFER, VertexBuffer[0].Obj[i].VBOPosition);
    glVertexPointer(3, GL_FLOAT, 0, 0);
    glDrawArrays(GL_TRIANGLES, 0, 3);
    ou un truc comme ca ... pour ne faire qu'utiliser ton buffer. de la même manière que pour les textures

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 31
    Par défaut
    Oups j'ai fait une erreur de copier/coller pour le rendu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    glBindBuffer(GL_ARRAY_BUFFER, VertexBuffer[nbrModel-1].Obj[j].VBOPosition);
    glVertexPointer(3, GL_FLOAT, 0, 0);
    glEnableClientState(GL_VERTEX_ARRAY);
    glDrawArrays(GL_TRIANGLES, 0, Model.Mesh.nbrVertex[j]);
    glDisableClientState(GL_VERTEX_ARRAY);

  6. #6
    Expert confirmé
    Avatar de raptor70
    Inscrit en
    Septembre 2005
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2005
    Messages : 3 173
    Par défaut
    C'est surprenant alors ... je ne vois pas du tout ..

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 31
    Par défaut
    Si quelqu'un a une idée, ou si vous voulez plus de code dites le moi, je suis dans l'incompréhension la

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. performance vertex buffer object
    Par firebird_dev dans le forum OpenGL
    Réponses: 5
    Dernier message: 06/08/2010, 23h04
  2. Problème dans un vertex Buffer Object
    Par baperpere dans le forum OpenGL
    Réponses: 0
    Dernier message: 01/03/2009, 00h26
  3. Debogage Vertex Buffer Object
    Par Robert Dumarais dans le forum OpenGL
    Réponses: 5
    Dernier message: 02/08/2008, 16h16
  4. Vertex Buffer Object avec de grands maillages
    Par Vinc35 dans le forum OpenGL
    Réponses: 8
    Dernier message: 25/10/2007, 19h46
  5. [Problème] Vertex Buffer Object
    Par Soznor dans le forum OpenGL
    Réponses: 20
    Dernier message: 19/07/2007, 18h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo