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.
Voici les différentes primitives qu'on peut afficher:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 rendu->SetPoints(maListeDePoints); rendu->Draw(TRIANGLE);
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 enum PRIMITIVE_TYPE { TRIANGLE, LIGNE, POINT }
Parfois, la primitive nécessitera une addition (ex: les triangles strip).
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 }
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
puis
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; } }
Draw ressemblera à ça
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 rendu->SetPoints(maListeDePoints); rendu->Draw();
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
Partager