mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-21 22:59:19 +02:00
Stream visual scenery in the driver (play starts after infrastructure pass)
Splits the progressive load across modes: the loader runs only the first (infrastructure) pass and then hands off to the driver, so play begins as soon as tracks/traction/events/signals/the player train are ready. The deferred visual nodes (3d models, terrain shapes/lines) then stream in from the driver, a small budget per frame, so the world fills in without a long up-front wait. - state_serializer: the infrastructure pass now returns to the caller (instead of chaining the visual pass), restarting the twin for the visual pass; the visual pass uses a small ~8 ms/frame budget and marks the load done at the end. A text/compile load (no twin) stays single-pass and finishes as before. - state_manager: retains the load state across the loader->driver hand-off and exposes loading_visuals()/continue_loading_visuals(). - driver_mode::update(): advances the deferred visual load each frame. Verified on td.scn (playable in ~2 s, visuals complete a few seconds later, no duplicate objects) and on the large tomaszewo scenery (flora/terrain/models deferred while infrastructure loads). Inserts run on the main thread before the render step, so progressive loading needs no locking. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -55,6 +55,12 @@ public:
|
||||
// continues deserialization for given context, amount limited by time, returns true if needs to be called again
|
||||
bool
|
||||
deserialize_continue(std::shared_ptr<deserializer_state> state);
|
||||
// progressive load: true while deferred visual nodes are still streaming in (driver phase)
|
||||
bool
|
||||
loading_visuals() const;
|
||||
// advances the deferred visual-node load by one budgeted step (call once per frame)
|
||||
void
|
||||
continue_loading_visuals();
|
||||
// stores class data in specified file, in legacy (text) format
|
||||
void
|
||||
export_as_text( std::string const &Scenariofile ) const;
|
||||
@@ -62,6 +68,7 @@ public:
|
||||
private:
|
||||
// members
|
||||
state_serializer m_serializer;
|
||||
std::shared_ptr<deserializer_state> m_loadstate; // retained across loader->driver for visual streaming
|
||||
struct {
|
||||
std::shared_ptr<TMemCell> weather, time, date;
|
||||
} m_scriptinginterface;
|
||||
|
||||
Reference in New Issue
Block a user