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 :

Meilleur matériel, performances pires.


Sujet :

OpenGL

  1. #1
    Invité(e)
    Invité(e)
    Par défaut Meilleur matériel, performances pires.
    Bonjour,

    Je développe en ce moment une appli permettant de faire de l'affichage d'images et la sur-impression de données dessus (rectangle, polygones...).

    J'utilise opengl pour me simplifier la vie, j'affiche les images avec glDrawPixels et les info supplémentaires avec des simples glVertex2x.

    le soft fonctionne plutôt bien sur mon poste de dev : Vista, core 2 duo et chipset intel Q965/Q963 en gise de CG.

    J'ai voulu mettre le même soft sur un pc plus récent : XP, core 2 duo et NVidia quadro 2700M. Le soft s'est mis à tourner beaucoup plus lentement et je n'ai plus retrouver des performances acceptables qu'en baissant presqu'au minimum l'accélération de l'affichage par la CG.


    Je me demandais donc d'où pouvait venir le problème. Les drivers ont l'air à jour, le soft et les images utilisées sont les mêmes...

    Des idées ?

    Merci d'avance

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 118
    Points : 118
    Points
    118
    Par défaut
    Je n'ai pas trop d'idées...

    Moi j'essayerai plutôt d'éviter d'utiliser glDrawPixel et, à la place, de créer un objet de texture contenant ton image et de la rendre dans le buffer en affichant un quad texturé en utilisant une projection orthographique. Dans ce cas, tu sera sur que l'accélération hardware sera utilisée. En effet, je ne suis pas sur que glDrawPixel soit accéléré de façon hardware sur toutes les cartes.

    à voir...
    JC est bien notre dieu...(non non pas jesus christ mais John Carmack!!!)

  3. #3
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par sebh Voir le message
    Moi j'essayerai plutôt d'éviter d'utiliser glDrawPixel et, à la place, de créer un objet de texture contenant ton image et de la rendre dans le buffer en affichant un quad texturé en utilisant une projection orthographique. Dans ce cas, tu sera sur que l'accélération hardware sera utilisée. En effet, je ne suis pas sur que glDrawPixel soit accéléré de façon hardware sur toutes les cartes.
    J4ai voulu utiliser des texture il y a quelques temps, mais la qualité n'était pas au rendez-vous.

    Il faut savoir que l'image reçue est grande (10000(ou plus) x 300), il n'y a pas moyen de la faire tenir dans une seule texture.

    J'ai bien pensé -mais pas réalisé, faute de temps- à découper l'image sur une quarantaine de textures (textures limitées à 256x256 non ?) mais je ne sais pas du tout si cette solution est viable.

    l'images est découpée en plusieurs bouts, miniaturisée ici, affiché sur un disque là pour au final occuper tout l'écran sur 5 contextes de rendu opengl.

    EDIT : manque un 0 à la largeur.
    Dernière modification par Invité(e) ; 09/01/2009 à 09h13.

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

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    les textures ne sont pas limitées à 256x256, ou alors sur es très vieilles cartes (et encore)
    il est possible via un glGet de connaitre la taille maximale de texture supportée par la carte
    la majorité des cartes aujourd'hui acceptent du 4096x4096 et des nouvelles cartes acceptent aussi du 8192x8192

    il est clair que glDrawPixels doit être quelque peu lent
    mais de là à être responsable d'une lenteur sur une config plus récente ça m'étonnerai

    de toute façon, glDrawPixels est clairement la commande à abandonner
    reprends tes recherches sur les textures pour accélérer tout ça

    je ne sais pas quelle bibliothèque de fenêtrage tu utilises (SDL, Glut ?)
    si tu veux te simplifier la vie tu peux regarder la SFML, elle gère les images à l'aide d'opengl
    en gros, ce que tu devrais faire est déjà fait dans la SFML
    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.

  5. #5
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par shenron666 Voir le message
    les textures ne sont pas limitées à 256x256, ou alors sur es très vieilles cartes (et encore)
    il est possible via un glGet de connaitre la taille maximale de texture supportée par la carte
    la majorité des cartes aujourd'hui acceptent du 4096x4096 et des nouvelles cartes acceptent aussi du 8192x8192

    il est clair que glDrawPixels doit être quelque peu lent
    mais de là à être responsable d'une lenteur sur une config plus récente ça m'étonnerai

    de toute façon, glDrawPixels est clairement la commande à abandonner
    reprends tes recherches sur les textures pour accélérer tout ça
    Après la livraison client de la fin du mois alors...
    Cela dit, que se passera-t-il se je demande à la CG de stoquer 3Mo de textures mais qu'un seul Mo est disponible ? La mémoire centrale prend elle le relais de manière transparente ?

    Citation Envoyé par shenron666 Voir le message
    je ne sais pas quelle bibliothèque de fenêtrage tu utilises (SDL, Glut ?)
    si tu veux te simplifier la vie tu peux regarder la SFML, elle gère les images à l'aide d'opengl
    en gros, ce que tu devrais faire est déjà fait dans la SFML
    En fait, les images proviennent d'une caméra.
    J'utilise borland c++ builder 5 pour mon bazar. (pas trop le choix en fait)

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

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    Citation Envoyé par mabu Voir le message
    Cela dit, que se passera-t-il se je demande à la CG de stoquer 3Mo de textures mais qu'un seul Mo est disponible ? La mémoire centrale prend elle le relais de manière transparente ?
    oui
    pour exemple la majorité des chipset intégrés n'ont pas de mémoire vidéo et se servent uniquement de la mémoire centrale
    les cartes vidéo ont une mémoire dédiée plus rapide et évitent de passer par le bus (pci, agp, pci-express) jugé très lent comparé au taux de transfert de leur mémoire mais si la carte tombe à cours de place mémoire elle se servira de la mémoire centrale
    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.

  7. #7
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par shenron666 Voir le message
    les textures ne sont pas limitées à 256x256, ou alors sur es très vieilles cartes (et encore)
    il est possible via un glGet de connaitre la taille maximale de texture supportée par la carte
    la majorité des cartes aujourd'hui acceptent du 4096x4096 et des nouvelles cartes acceptent aussi du 8192x8192
    Bon, j'ai pris le temps d'effectuer quelques tests, et apparemment, l'utilisation de textures à l'air plus simple que je ne pensais.

    Cela dit, ça m'oblige à revoir une grosse partie de mon système affichage...

    Voilà comment j'ai testé la chose : j'ai une texture, disons 10000x300 en entrée (à raffraichir chaque seconde), je regarde quelle est la taille max de texture et découpe l'image sur un nombre correspondant de textures : si la limite est à 2048 pixels, j'ai 5 textures de 2048x512.

    Je remplis mes textures de la façon suivante : à partir de la grande image, je crée une sous image de taille (2048x512), je me décale dans la grande image pour remplir le petite.

    Après quoi, j'initialise la texture avec cette petite image.

    C'est un peu barbare, mais ça fonctionne...

    Bon, je ne vais pas avoir le temps de développer cette solution pour la prochaine livraison, mais pour la suivante, ça sera top.

Discussions similaires

  1. Conseil clé primaire pour les meilleurs performances ?
    Par ites dans le forum Optimisations
    Réponses: 23
    Dernier message: 04/07/2008, 10h36
  2. [Matériel] Performances des MacBook 2008
    Par RaelRiaK dans le forum Apple
    Réponses: 10
    Dernier message: 23/04/2008, 08h12
  3. Complexité pire-cas et meilleur-cas de mon algo
    Par sorry60 dans le forum Algorithmes et structures de données
    Réponses: 14
    Dernier message: 16/10/2006, 16h45
  4. Conseils pour meilleur performance serveur
    Par orelero dans le forum Développement
    Réponses: 6
    Dernier message: 24/05/2006, 15h29
  5. POO : pour le meilleur et oublions le pire
    Par punkscum dans le forum Langages de programmation
    Réponses: 11
    Dernier message: 24/04/2006, 23h53

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