Bonjour tout le monde.
J'ai un problème avec l'inline de fonction, j'ai l'impression qu'il ne fonctionne pas correctement. Je dis ca suite a un calcul du fps sur mon code car je voulais tester quelques opti.
en gros je suis en train de coder un moteur de particule en openGL et j'ai besoin d'initialiser un tableau statique avec des valeurs par défaut a chaque update de mes particules :
Avec ce code et 100000 particules (donc 100000 updates par frame) j'obtiens environ 50fps.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 //particle.h ... static float valuesBuffer[NB_PARAMS]; ... //particle.cpp ... int Particle::update(int timeDelta) { valuesBuffer[0] = 1; valuesBuffer[1] = 0; valuesBuffer[2] = 1; valuesBuffer[3] = 1; valuesBuffer[4] = 1; valuesBuffer[5] = 1; valuesBuffer[6] = 0; // traitement... } ...
Maintenant si je fais ca :
J'obtiens environ 43fps. donc la je comprend pas ! Je pensais que ces 2 bouts de code une fois compilé était equivalent ce qui n'est manifestement pas le cas. Quelqu un pourrait m'expliquer ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 //particle.h ... static float valuesBuffer[NB_PARAMS]; inline static void initValuesBuffer() { valuesBuffer[0] = 1; valuesBuffer[1] = 0; valuesBuffer[2] = 1; valuesBuffer[3] = 1; valuesBuffer[4] = 1; valuesBuffer[5] = 1; valuesBuffer[6] = 0; } ... //particle.cpp ... int Particle::update(int timeDelta) { initValuesBuffer(); // traitement... } ...
C'est assez problématique parceque je ne veux pas que les valeurs par défaut soient en dur dans la méthode update.
Au début je faisai une copie d'un tableau DEFAULT_VALUES dans valuesBuffer et j'arrivai a 43 environ également.
J'ai testé pleins de trucs différents et j'ai jamais reussi a atteindre plus de 43/44 fps.
Quelqu un a une idée pour combiner performance et code bien structuré ? Je pensais que l'inline marcherait et je suis assez surpris du resultat.
Merci
Partager