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?


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.


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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.