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 :

glBindTexture et performances


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Mucho
    Inscrit en
    Décembre 2005
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 221
    Par défaut glBindTexture et performances
    Salut, salut,


    j'ai des petits problèmes de performances :

    j'affiche de nombreux objets formés d'une ligne et de texte
    lorsque j'affiche objet par objet donc :
    -Affichage de la ligne (glTranslate + DisplayList)
    - glBindTexture (Texture correspondant à la police)
    - glQuads (glDisplayLists : les caractères)
    et ce pour chaque objet


    les performances ne sont pas terribles.

    Par contre si j'utilise l'algorithme :
    - Afficher les lignes de tout les objets.
    - glBindTexture (police)
    - Affichage de tout les textes


    Les performances sont trois fois meilleures !!!

    J'ai aussi éssayé :
    - Afficher la ligne de chaque objet
    - Puis pour chaque objet :
    - glBindTexture + Afficher le texte


    Et les performances sont les mêmes (bonnes).

    Donc j'imagine que l'implementation openGl de ma carte graphique est suffisament maline pour savoir que le glBindTexture ne fait rien puisqu'elle est déjà chargée.

    Mais alors pourquoi ne le fait-elle pas dans le premier cas ? (puisque ma displayList contient juste glBegin(GL_LINES) et des glVertex donc aucun chargement de texture. )

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Ce n'est pas forcément glBindTexture. Par exemple dans ton premier code, tu alternes sans arrêt entre deux display list, alors que dans le troisième tu utilises X fois la première puis X fois la seconde. Si le driver élimine les changements d'états redondants, alors ça revient à ne changer que deux fois d'état.

    Globalement, il faut viser deux choses essentielles pour avoir des performances optimales :
    - Minimiser les changements d'états (donc les regrouper autant que possible)
    - Maximiser la géometrie envoyée à la carte par appel (1000 rendus de 2 triangles seront énormément plus lents que 2 rendus de 1000 triangles).

    Ceci-dit le second code est sans conteste le meilleur des trois

  3. #3
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Par défaut
    Citation Envoyé par Laurent Gomila
    Ceci-dit le second code est sans conteste le meilleur des trois
    absolument.
    je rajouterais aussi qu'il ne faut pas negliger le role du cache de la carte graphique la dedans.
    meme si le driver ne verifie pas si la texture/display list est deja chargé, elle sera en cache, et donc la lecture de la meme information sera plus rapide tout simplement
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  4. #4
    Membre confirmé Avatar de Mucho
    Inscrit en
    Décembre 2005
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 221
    Par défaut
    Merci.

    Citation Envoyé par Tout le monde
    Ceci-dit le second code est sans conteste le meilleur des trois
    La dessus tout le monde est d'accord il n'y a pas de doute.

    Ce qui m'étonnais c'était la différence énorme de performances.

    Citation Envoyé par Laurent Gomila
    Ce n'est pas forcément glBindTexture. Par exemple dans ton premier code, tu alternes sans arrêt entre deux display list, alors que dans le troisième tu utilises X fois la première puis X fois la seconde.
    Hum, hum, je n'avais pas pensé à ça mais j'ai un peu du mal à comprendre, en effet :
    pour chaque objet j'affiche une ligne et un texte, le texte étant affiché avec glf celui-ci utilise plusieurs displayLists.

    et pour chaque ligne j'utilise deux displayLists, une dans laquelle j'ai placé un glScale et un glRotate et l'autre qui affiche la ligne.

    Citation Envoyé par Laurent Gomila
    alors ça revient à ne changer que deux fois d'état
    donc j'ai du mal à comprendre de quels états il s'agit.

Discussions similaires

  1. [maintenance][performance] Que faire comme maintenance ?
    Par woodwai dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 06/11/2003, 15h39
  2. Performance xml
    Par MicKCanE dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 07/07/2003, 06h41
  3. [ POSTGRESQL ] Problème de performance
    Par Djouls64 dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 26/05/2003, 16h18
  4. [JDBC][connexion persistante] performances avec JDBC
    Par nawac dans le forum Connexion aux bases de données
    Réponses: 6
    Dernier message: 06/05/2003, 10h37
  5. performance entre 3DS, ase, asc ...
    Par amaury pouly dans le forum OpenGL
    Réponses: 3
    Dernier message: 24/03/2003, 11h41

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