¿Cómo se separa la lógica y la representación del juego? Sé que parece que ya hay preguntas aquí que preguntan exactamente eso, pero las respuestas no me satisfacen.
Por lo que entiendo hasta ahora, el punto de separarlos en diferentes subprocesos es para que la lógica del juego pueda comenzar a ejecutarse para el siguiente tic inmediatamente, en lugar de esperar al próximo vsync, donde el renderizado finalmente regresa de la llamada swapbuffer en la que se ha bloqueado.
Pero específicamente qué estructuras de datos se utilizan para evitar condiciones de carrera entre el hilo lógico del juego y el hilo de renderizado. Presumiblemente, el hilo de renderizado necesita acceso a varias variables para descubrir qué dibujar, pero la lógica del juego podría estar actualizando estas mismas variables.
¿Existe una técnica estándar de facto para manejar este problema? Tal vez, como copiar los datos que necesita el hilo de renderizado después de cada ejecución de la lógica del juego. Cualquiera sea la solución, ¿será la sobrecarga de la sincronización o lo que sea menor que simplemente ejecutar todo con un solo subproceso?