Update plugins and examples#323
Merged
waynemwashuma merged 1 commit intoMay 26, 2026
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Objective
Introduce explicit
CoreSystemsscheduling groups across engine plugins to establish deterministic execution phases for startup, input, asset processing, rendering, diagnostics, and cleanup systems. Previously, many systems were registered into schedules without explicit ordering groups, relying on insertion order or incidental topology. This standardizes system placement into well-defined execution phases.Solution
Root cause
A large portion of engine systems were registered without explicit scheduling groups creating several issues:
As the engine ecosystem grew, implicit ordering became increasingly fragile.
Changes made
Startup initialization: Initialization and registration systems now consistently execute at the beginning of startup/update flows. Examples include type registration, asset registration, parser registration, renderer setup, input initialization and window registration
Runtime input and timing: Input and timing updates now execute early in the frame lifecycle. Examples include keyboard updates, mouse updates, touch updates, virtual clock updates, timer updates and render buffer registration. This guarantees downstream gameplay and rendering systems observe fresh frame state.
Rendering pipeline: Rendering preparation and rendering execution were moved into post-main phase. Examples render bin generation, render pipeline initialization, canvas rendering, mesh queueing and rendering submission. This separates gameplay/update logic from rendering execution more cleanly.
Note
This will later be moved into its own schedule
Cleanup and deferred processing: Late-frame systems now consistently execute at the end of the frame.This ensures deferred operations occur after gameplay and rendering preparation phases. Examples command execution, asset event propagation, dropped asset unloading, event clearing, diagnostics updates, profiler updates and scene spawning.
Added startup command execution: Command flushing now also runs in the end of
AppSchedule.Startup: allowing deferred startup commands to run deterministically during initialization.Why this approach
Alternative approaches considered:
These approaches scale poorly as subsystem interactions increase.
Using shared core scheduling phases provides:
without significantly increasing scheduling complexity.
Showcase
N/A
Migration guide
Behavioral changes
Systems that previously relied on implicit plugin registration order may now execute in different relative positions due to explicit phase assignment.
This primarily affects:
Plugin authors
Custom plugins can now integrate more predictably by targeting appropriate core phases:
Checklist