Jeu multithread - mise à jour, rendu et comment les diviser

8

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?

CodeBunny
la source

Réponses:

6

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.

Roger Perkins
la source
4

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é.

Alex de Vries
la source