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