Miközben a fények kezelésén agyaltam a mai nap bevillant egy gondolat, miszerint teljesítményt kellene mérnem az engine-mmel. Vagyis melyik függvényben tölti a cpu az idejét leginkább. A mérést debug módban végeztem.
A mainloop:
- A swapbuffers végzett első helyen kb 87%-kal, ami ugye nem más, mint a renderelés kb 99%a.
- Második helyen az advance nevű függvényem szerepel közel 7%-kal.
- A dobogó utolsó helyére egy titokzatos unknown függvény került 3%-kal.
- A negyedik helyet a render szerezte meg a maga 1,6 %-ával.
- Az ötödik helyen az input lekérdezése áll 0.3%-kal.
Most vesézzük ki az advance függvényt.
- Na most jön a meglepetés: 80%-kal a NpGetPhysicsSDK nevezetű függvény viszi a pálmát.
- Második helyen a scenegraph-ban mozgatást végző függvény áll szerény 8.2%-kal.
- Harmadik helyen a szereplők tevékenységéért felelős Do függvény áll 6,5%-kal
- A negyedik helyre az aktív szereplők scenegraph-ban elvégzett műveleteit végrehajtó függvény jutott kerek 4,9%-kal.
Nézzük mit rejt a 2. helyen végzett függvény:
- Az első helyen a scenegraph csomópontjait aktivizáló függvény van, de mindössze 54%-kal!
- A második helyen 46%-kal a free függvény áll.
Ez a free függvény eredetileg egy delete operátor volt és akkor az arányok is mások voltak: első helyen a delete operátor állt 57%-kal a második helyre szorítva a "lényeges" függvényt...
Vessünk közelebbi pillantást a Do függvény mélyére, ahol a szereplőnek update függvénye található:
- Első helyen a fizikai test információit lekérdező függvény végzett 41%-kal, amelyben 100%-ot egy NxMat34 utasítás visz el. Gyanítom ezt is érdemes lenne lecserélni....
- Második helyre ismét egy egzotikum került NxCreateCoreSDK névvel. Ő szerény 30%-ba kerül.
- Az utolsó két helyre sikerült felkapaszkodnia két saját matematikai függvényemnek is 17 és 11%-kal.
Utoljára az utolsó függvénybe ássuk bele magunkat:
- 76%-kal az aabb-aabb átfedést vizsgáló művelet nyert, ami nem meglepő.
- Második helyen viszont egy kivonás(!) végzett 17%-kal.
- A harmadik helyre pedig egy értékadás került.
Az advance függény után vessünk még egy futó pillantást a renderelésre:
Itt az aranyérmes a frustum cull lett 77%-kal, a többi idő a renderelésre fordítódik. A frustum cullból pedig 91% aabb aabb átfedés vizsgálatban telik el.
Valószínűleg sikerült megtalálni a sebességkritikus kódrészeket, amelyeken -ha lehet- érdemes tovább optimalizálni.