Az elmúlt időben sokat foglalkozva a csontváz alapú animálással sokféle optimalizálási lehetőség felmerült. Legtöbbjük csak korlátozottan vagy speciális helyzetekben volt alkalmazható. Utolsó választásom a probléma többszálúsításra esett mivel manapság egyre inkább elterjedtté válnak a két- ill. többmagos cpu-k.
Ha teljesítményfokozásra szeretnénk használni a másik szálat akkor óvatosnak kell lennünk. Előfordulhat ugyanis, hogy a kétszálas megoldás lassabb lehet, mint az eredeti változat. Különösen igaz ez akkor, ha a két szálat szinkronizálnunk kell várakozás beiktatásával vagyis úgy tünik, hogy a szinkronizálás ezen formája teljesítményfokozás céljából mindenképp kerülendő (bár nem ástam magam mélyre a szálazás rejtelmeibe a szinkronizálás másfajta lehetőségeiért).
Azonban viszonylag egyszerűen kiiktathatjuk a várakozás szükségességét, ha a két szál által használt adatot dupla buffereljük. Mint legtöbb esetben ez itt is azt jelenti, hogy az egyik szál az egyik bufferból csak olvas, míg a másik szál a másik bufferbe csak ír. Amikor a másik szál végzett az írással (mivel gyakorta ez a lassabb művelet) akkor a buffereket felcseréljük. Így sosem fordulhat elő, hogy az írás alatt álló buffer kerül olvasásra. Megjegyzendő, hogy a bufferváltás csak egy utasításból állhat! Ellenkező esetben a bufferváltás közben bizonyos ideig ugyanazon buffert használhatja vagy ugyanazt az adatot láthatja a két szál (ezen hiba felismerése majdnem 2 órámba került).
Két gyakorlati alkalmazás az esetemben:
- a renderelés mindig nem abból a vertex bufferből történik, amelynek a vertexeit számoljuk vagyis a fő szál olvas és az animáló szál ír
- az animálandó modellek listája is szintén dupla bufferelt, de itt a fő szál ír és az animáló szál olvas