Wie trennt man Spielelogik und Rendering? Ich weiß, dass es hier anscheinend bereits Fragen gibt, die genau das fragen, aber die Antworten sind für mich nicht zufriedenstellend.
Soweit ich weiß, besteht der Sinn der Trennung in verschiedene Threads darin, dass die Spielelogik sofort mit dem nächsten Tick beginnen kann, anstatt auf den nächsten vsync zu warten, bei dem das Rendern schließlich vom Swapbuffer-Aufruf zurückkehrt, auf dem es blockiert wurde.
Aber speziell welche Datenstrukturen werden verwendet, um Race-Bedingungen zwischen dem Game-Logic-Thread und dem Rendering-Thread zu verhindern. Vermutlich benötigt der Rendering-Thread Zugriff auf verschiedene Variablen, um herauszufinden, was zu zeichnen ist, aber die Spielelogik könnte dieselben Variablen aktualisieren.
Gibt es eine De-facto-Standardtechnik zur Behandlung dieses Problems? Vielleicht möchten Sie die vom Rendering-Thread benötigten Daten nach jeder Ausführung der Spielelogik kopieren. Was auch immer die Lösung ist, wird der Overhead der Synchronisation oder was auch immer geringer sein, als nur alles mit einem einzigen Thread auszuführen?