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

C++ Discussion :

Eviter des calculs redondants


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut Eviter des calculs redondants
    Bonjour à tous,

    Je suis en traind e créer une application graphique. Je possède une classe qui se charge de dessiner des objets:

    -> On positionne les points
    -> On demande d'afficher un type de primitive.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    rendu->SetPoints(maListeDePoints);
    rendu->Draw(TRIANGLE);
    Voici les différentes primitives qu'on peut afficher:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    enum PRIMITIVE_TYPE
    {
        TRIANGLE,
        LIGNE,
        POINT
    }
    Dans la méthode draw, j'ai besoin de ressortir le nombre de primitives qui vont être affichées qui va varier en fonction du type (par exemple, des triangles nécéssiterons 3 points, des lignes 2 et des points 1).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    void Draw(PRIMITIVE_TYPE eType)
    {
         unsigned long ulCountPrimitive = m_MaListeDePoints.size();
         switch(eType)
         {
              case TRIANGLE:
                   ulCountPrimitive /= 3; break;
              case LIGNE:
                   ulCountPrimitive /= 2; break;
              case POINT: break;
         }
    // rendu
    }
    Parfois, la primitive nécessitera une addition (ex: les triangles strip).

    Ce code va être exécuté à chaque dessin de la scène, ce qui pourrai faire baisser le nombre de FPS d'une manière non négligeable. Je cherche donc un moyen d'éviter ça.

    Par contre, la liste de points est construite une fois pour toute. Comme j'imagine improbable de construire une liste de points pour afficher différentes primitives, j'ai envie d'encapsuler le type de primitives destinée à être dessiné par ces points, et calculer l'occurence de celles-ci une fois pour toute.

    Ca produirait ce genre de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    maListDePoint(PRIMITIVE_TYPE eType, point* data, unsigned long count)
    {
         unsigned long ulPrimitiveCount = count;
         switch(eType)
         {
              case TRIANGLE:
                   ulPrimitiveCount /= 3; break;
              case LIGNE:
                   ulPrimitiveCount /= 2; break;
              case POINT: break;
         }
    }
    puis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    rendu->SetPoints(maListeDePoints);
    rendu->Draw();
    Draw ressemblera à ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void Draw()
    {
        unsigned long ulPrimitiveCount = m_MaListeDePoints.PrimitiveCount();
        // rendu
    }

    Est-ce que ça vous semble correct où y aurait-il une autre solution?


    Merci beaucoup,

    A bientôt

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    Citation Envoyé par mister3957 Voir le message
    Ce code va être exécuté à chaque dessin de la scène, ce qui pourrai faire baisser le nombre de FPS d'une manière non négligeable.
    A mon avis tant que tu n'as pas vraiment teste et que ca n'a pas ete formellement identifie comme goulet d'etranglement, ce n'est pas la peine de se preoccuper d'essayer d'optimiser ca...

    MAT.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut
    Ok merci beaucoup

    J'effectuerai quelques tests voir si c'est nécessaire de faire quelque chose ou pas.

    Merci beaucoup

  4. #4
    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 code va être exécuté à chaque dessin de la scène, ce qui pourrai faire baisser le nombre de FPS d'une manière non négligeable. Je cherche donc un moyen d'éviter ça.
    C'est à peu près le code le moins cher que tu auras dans toute ton application, surtout qu'il s'agit d'une appli graphique. Si tu commences à te poser des questions sur ce genre de code t'es pas arrivé

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

Discussions similaires

  1. [formulaire] faire des calculs
    Par gyzmo5 dans le forum IHM
    Réponses: 7
    Dernier message: 08/02/2006, 13h43
  2. [Système] Problème pour effectuer des calculs
    Par tissard dans le forum Langage
    Réponses: 10
    Dernier message: 09/12/2005, 14h07
  3. [Sécurité] Eviter des erreurs de textures ....
    Par cyber_N dans le forum OpenGL
    Réponses: 14
    Dernier message: 09/09/2005, 16h49
  4. Faire des calculs automatiques en JavaScript
    Par yoyot dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 28/02/2005, 10h31
  5. Réponses: 8
    Dernier message: 18/09/2002, 03h20

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