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 :

Mise à jour VBOs


Sujet :

OpenGL

  1. #1
    Membre habitué
    Profil pro
    Dev
    Inscrit en
    Mai 2009
    Messages
    257
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Mai 2009
    Messages : 257
    Points : 190
    Points
    190
    Par défaut Mise à jour VBOs
    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 :

    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;
    }
    je ne comprends pas, il me semblait que glBufferSubData devrait suffir, non ?

  2. #2
    Membre habitué
    Profil pro
    Dev
    Inscrit en
    Mai 2009
    Messages
    257
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Mai 2009
    Messages : 257
    Points : 190
    Points
    190
    Par défaut
    je viens de m'apercevoir de mon erreur : j'ai fait

    glBindBuffer(GL_ARRAY_BUFFER, _VBObuffersId[0]);

    au lieu de

    glBindBuffer(GL_ARRAY_BUFFER, VBObuffersId[0]);

    cad que j'ai utilisé le buffer id tampon qu'utilise le renderer à l'allocation

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

Discussions similaires

  1. mise à jour VBO pour une animation
    Par Bousk dans le forum OpenGL
    Réponses: 3
    Dernier message: 09/02/2013, 18h49
  2. Mise à jour d'un VBO
    Par GLDavid dans le forum OpenGL
    Réponses: 0
    Dernier message: 11/09/2009, 15h41
  3. Vertex mapping ? Mise à jour VBO ?
    Par Yno dans le forum OpenGL
    Réponses: 3
    Dernier message: 24/01/2007, 10h01
  4. mise à jour de champs time (interbase)
    Par pram dans le forum XMLRAD
    Réponses: 6
    Dernier message: 04/03/2003, 10h25
  5. Réponses: 2
    Dernier message: 12/02/2003, 15h26

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