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 :

Remplacer les glBegin


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 396
    Par défaut Remplacer les glBegin
    Hello

    Dans mon mini moteur 3d, j'utilise parfois des glBegin mais j'ai vu qu'ils allaient disparaître dans Opengl 3. Donc comment m'en débarrasser ?

    Par exemple dans mon moteur 3d, j'utilise des glBegin(GL_QUADS) pour afficher des boutons, fenêtres, champs texte, etc de ma GUI.
    J'ai pensé à 2 solutions mais je ne sais pas la quel est la meilleure :

    Utiliser un vertex buffer pour chaque bouton, fenêtre, etc. : simple à mettre en oeuvre mais peut-être pas très performant ?!

    Utiliser un std::vector de coordonnées pour tous les composants de ma GUI. Mais dans ce cas je vois 2 problèmes (enfin il me semble) :
    - Si le std::vector devient trop petit niveau mémoire, il va devoir faire une ré-allocation mémoire et une copie du vector dans le nouvel emplacement mémoire et ce peut-être à chaque frame...bref ça ne risque pas d'être trop lent ?!
    - Si ma mémoire est bonne, on ne peut utiliser qu'une texture par vertex buffer et moi j'ai une texture pour chaque composant de la GUI !

    Merci d'avance...

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mars 2005
    Messages : 249
    Par défaut
    Pour moi la solution "logique" serait de mettre un VBO par entité graphique, donc ta solution n°1. Je ne pense pas que ça puisse entrainer de perte de performance, au contraire les VBO sont sensés être bien plus performants que les glBegin/End.

  3. #3
    Membre Expert
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 583
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 583
    Par défaut
    salut,

    les vertex buffers ne sont pas limités à une seule texture et ils sont plus performants que les glBegin/glEnd

    quand au std::vector, tu peux lui donner une taille avec "reserve"
    lorsque tu charges un objet (ou une gui) tu sais d'avance combien de vertex tu devras charger, donc pas de réallocation dynamique si ton "moteur" est bien pensé
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 396
    Par défaut
    Merci pour vos réponses, je vais utiliser un vertex buffer object pour chaque composants de ma GUI, je pense que c'est nettement plus simple.

    Par contre j'ai une petite question à propos des modes des VBO. Si j'ai bien compris :
    - STREAM_DRAW : a chaque frame on envois les informations à la carte graphique.
    - STATIC_DRAW : on envois les informations qu'une seule fois à la carte graphique et les informations restent dans la mémoire de la carte graphique.

    1) Si j'utilise du STREAM_DRAW et que je n'appel pas la fonction suivante à chaque frame, est ce que ça devrait bugger ? Parce chez moi ça ne semble pas bugger :
    glBufferData(GL_ARRAY_BUFFER, size, vertexArray, GL_STREAM_DRAW);
    Doit-je en conclure que même en STREAM_DRAW, les informations son gardé dans la mémoire de la carte graphique ?

    2) Si les données de mon vertexArray ne change que 2/3 fois à la minute en moyenne, quel mode doit-je utiliser ?

    Merci...

Discussions similaires

  1. Souci pour remplacer les Retours chariot par <BR>
    Par ahage4x4 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 01/06/2005, 11h24
  2. [String][JDK1.3]Remplacer les espaces
    Par klael dans le forum Langage
    Réponses: 9
    Dernier message: 07/04/2005, 11h08
  3. [C#] Remplacer les boutons d'un DataGrid par une image
    Par PascalL dans le forum Windows Forms
    Réponses: 17
    Dernier message: 04/04/2005, 16h07
  4. [langage] remplacer les %3A, %2F...
    Par ma2th dans le forum Langage
    Réponses: 2
    Dernier message: 13/08/2004, 11h04
  5. [langage] remplacer les caractères d'une chaine
    Par perlaud dans le forum Langage
    Réponses: 14
    Dernier message: 12/05/2004, 11h05

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