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 :

VBO et buffer à double utilisation


Sujet :

OpenGL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 216
    Points : 74
    Points
    74
    Par défaut VBO et buffer à double utilisation
    hello.

    Première question : quel est la commande Opengl qui met le buffer dans la VRAM:
    1) glBufferData
    2) glNormalPointer/glVertexPointer/...

    Deuxième question, J'ai ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    struct normalTang
    {
    	Vector3<float> normal;
    	Vector3<float> tangent;
    };
    normalTang *var = new normalTang[numVert];
    //init de var
    Comment dois-je faire pour mettre les normal et les tagent en mémoire ? Je doit utiliser 1 ou 2 buffer ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    glBindBuffer(GL_ARRAY_BUFFER, bufferID[NORMAL]);
    glBufferData(GL_ARRAY_BUFFER, numVert*sizeof(normalTang), var, GL_STATIC_DRAW);
     
    glBindBuffer(GL_ARRAY_BUFFER, bufferID[TANGENT]);
    glBufferData(GL_ARRAY_BUFFER, numVert*sizeof(normalTang), var[0].tangent, GL_STATIC_DRAW);
    Y a t-il moyen de n'utiliser qu'un seul buffer ? Si oui, comment faire pour les méthode glNormalPointer et glVertexAttribPointer ?

    Si il n'y a pas moyen d'utiliser qu'un seul buffer, est-ce que j'aurais avantage au niveau mémoire à séparer ma struct normalTang en 2 ?

    merci

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 3 173
    Points : 6 812
    Points
    6 812
    Par défaut
    Citation Envoyé par casafa Voir le message
    7Première question : quel est la commande Opengl qui met le buffer dans la VRAM:
    1) glBufferData
    2) glNormalPointer/glVertexPointer/...
    C'est glBufferData qui va envoyer tes informations de vertex au buffer courant ( glGenBuffer et glBindBuffer utilisé avant ).
    gl*Pointer te sert a definir où ce situe tes données. Dans le cas des VBO, on ne désigne que la position dans le buffer courant (offset). Dans le cas des VertexArray, cela défini le pointeur mémoire utilisé.

    Citation Envoyé par casafa Voir le message
    Deuxième question, J'ai ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    struct normalTang
    {
    	Vector3<float> normal;
    	Vector3<float> tangent;
    };
    normalTang *var = new normalTang[numVert];
    //init de var
    Comment dois-je faire pour mettre les normal et les tagent en mémoire ? Je doit utiliser 1 ou 2 buffer ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    glBindBuffer(GL_ARRAY_BUFFER, bufferID[NORMAL]);
    glBufferData(GL_ARRAY_BUFFER, numVert*sizeof(normalTang), var, GL_STATIC_DRAW);
     
    glBindBuffer(GL_ARRAY_BUFFER, bufferID[TANGENT]);
    glBufferData(GL_ARRAY_BUFFER, numVert*sizeof(normalTang), var[0].tangent, GL_STATIC_DRAW);
    Y a t-il moyen de n'utiliser qu'un seul buffer ? Si oui, comment faire pour les méthode glNormalPointer et glVertexAttribPointer ?
    Oui, tu peux utiliser un seul tableau, et tu devras définir avec gl*Pointer, les offset de chacun de tes tableaux. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #define BUFFER_OFFSET(i) ((char*)NULL + (i))
    glColorPointer(3, GL_UNSIGNED_BYTE, sizeof(SVertex), BUFFER_OFFSET(ColorOffset));
    glVertexPointer(2, GL_FLOAT, sizeof(SVertex), BUFFER_OFFSET(VertexOffset));
    L'offset se défini par rapport au pointeur NULL.
    Mes Tutos DirectX, OpenGL, 3D : http://raptor.developpez.com/

Discussions similaires

  1. [XL-2003] La textbox en double utilisation
    Par brownthefou dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 25/05/2012, 10h06
  2. Cellule double utilisation (formule+valeure)
    Par lucazzo dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/10/2008, 15h37
  3. [PDO] Double utilisation impossible d'un résultat execute()
    Par Tchupacabra dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 23/11/2007, 09h30
  4. Je n'arrive pas à utiliser le Double buffering
    Par Yann39 dans le forum AWT/Swing
    Réponses: 43
    Dernier message: 21/01/2007, 22h14
  5. Double utilisation de l'interpréteur
    Par Bayard dans le forum Général Python
    Réponses: 4
    Dernier message: 07/11/2004, 11h16

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