Sprechen im Kontext eines Spiels, das auf openGL-Renderer basiert:
Nehmen wir an, es gibt zwei Themen:
Aktualisiert die Spiellogik und -physik usw. für die Objekte im Spiel
Lässt openGL für jedes Spielobjekt Aufrufe basierend auf Daten in den Spielobjekten zeichnen (dieser Thread 1 wird ständig aktualisiert).
Sofern Sie nicht zwei Kopien jedes Spielobjekts im aktuellen Status des Spiels haben, müssen Sie Thread 1 anhalten, während Thread 2 die Draw-Aufrufe ausführt. Andernfalls werden die Spielobjekte während eines Draw-Aufrufs für dieses Objekt aktualisiert ist unerwünscht!
Das Stoppen von Thread 1, um sicher Draw-Aufrufe von Thread 2 zu tätigen, macht jedoch den gesamten Zweck von Multithreading / Parallelität zunichte
Gibt es dafür einen besseren Ansatz als die Verwendung von Hunderten oder Tausenden oder die Synchronisierung von Objekten / Zäunen, damit die Multicore-Architektur für die Leistung genutzt werden kann?
Ich weiß, dass ich weiterhin Multithreading zum Laden von Texturen und zum Kompilieren von Shadern für Objekte verwenden kann, die noch nicht Teil des aktuellen Spielstatus sind. Wie kann ich dies jedoch für die aktiven / sichtbaren Objekte tun, ohne Konflikte beim Zeichnen und Aktualisieren zu verursachen?
Was ist, wenn ich in jedem Spielobjekt eine separate Synchronisierungssperre verwende? Auf diese Weise blockiert jeder Thread nur ein Objekt (Idealfall) und nicht den gesamten Aktualisierungs- / Zeichnungszyklus! Aber wie teuer ist es, jedes Objekt zu sperren (das Spiel kann tausend Objekte haben)?