Depuis le post StackOverflow (il était recommandé de déplacer cela):
Donc, je travaille sur un moteur de jeu et j'ai fait de bons progrès. Cependant, mon moteur est monothread, et les avantages de diviser la mise à jour et le rendu en threads séparés semblent être une très bonne idée.
Comment dois-je procéder? Les moteurs de jeu à thread unique sont (conceptuellement) très faciles à faire, vous avez une boucle où vous mettez à jour -> rendre -> dormir -> répéter. Cependant, je ne peux pas penser à un bon moyen de séparer la mise à jour et le rendu, surtout si je modifie leurs taux de mise à jour (disons que je passe par la boucle de mise à jour 25x par seconde et que j'ai 60 images par seconde pour le rendu) - et si je commence la mise à jour à mi-chemin à travers une boucle de rendu, ou vice versa?
la source
Réponses:
Vous allez vouloir doubler / tripler la mémoire tampon toutes les données nécessaires au rendu qui sont modifiées dans la passe de mise à jour. De cette façon, vous ne rendrez pas avec quelque chose qui a été partiellement modifié. La raison pour laquelle vous devrez probablement tripler le tampon est nécessaire 1) la copie que vous mettez à jour, 2) la dernière copie que vous avez entièrement mise à jour et 3) la copie actuellement utilisée pour le rendu que vous ne souhaitez pas modifier .
La partie la plus difficile est probablement de trouver la meilleure façon d'organiser vos données à cet effet.
la source
Ce site Web discute du problème et a mis en place une solution à triple tampon comme Roger l'a suggéré:
http://blog.slapware.eu/game-engine/programming/multithreaded-renderloop-part1/ http://blog.slapware.eu/game-engine/programming/multithreaded-renderloop-part2/ http: // blog. slapware.eu/game-engine/programming/multithreaded-renderloop-part3/ http://blog.slapware.eu/game-engine/programming/multithreaded-renderloop-part4/
Il est difficile à implémenter, mais le site Web a une source et une distribution binaire de l'implémentation si vous êtes intéressé.
la source