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:
1 2 3
|
rendu->SetPoints(maListeDePoints);
rendu->Draw(TRIANGLE); |
Voici les différentes primitives qu'on peut afficher:
Code:
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:
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:
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:
1 2 3
|
rendu->SetPoints(maListeDePoints);
rendu->Draw(); |
Draw ressemblera à ça
Code:
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