Juego multiproceso: actualización, renderizado y cómo dividirlos


8

Desde la publicación StackOverflow (se recomendó mover esto):

Entonces, estoy trabajando en un motor de juego y he progresado bastante bien. Sin embargo, mi motor es de un solo subproceso, y las ventajas de dividir la actualización y el procesamiento en subprocesos separados parecen una muy buena idea.

¿Cómo debería hacer esto? Los motores de juego de un solo subproceso son (conceptualmente) muy fáciles de hacer, tiene un bucle donde actualiza -> render -> sleep -> repetir. Sin embargo, no puedo pensar en una buena manera de separar la actualización y el procesamiento, especialmente si cambio sus velocidades de actualización (digamos que paso por el ciclo de actualización 25 veces por segundo y tengo 60 fps para el procesamiento), ¿qué pasa si empiezo a actualizar a la mitad? a través de un bucle de renderizado, o viceversa?


Respuestas:


6

Querrá duplicar / triplicar cualquier búfer de datos necesarios para el procesamiento que se altere en el pase de actualización. De esa manera, no se renderizará con algo que se haya modificado parcialmente. La razón por la que probablemente necesite triplicar el búfer es la necesidad de 1) la copia que está actualizando, 2) la última copia que actualizó por completo y 3) la copia que se está utilizando actualmente para representar que no desea cambiar .

La parte más difícil es encontrar la mejor manera de organizar sus datos para esto.


4

Este sitio web discute el problema y ha implementado una solución de triple buffer como Roger sugirió:

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/

Es silencioso, difícil de implementar, pero el sitio web tiene una distribución fuente y binaria de la implementación si está interesado.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.