Projects, Assets, And Serialization
June 16, 2026 ยท View on GitHub
Projects
Projects use .eveproj files. They can carry launch metadata used by EvoEngineLauncher and EvoEngineEditor:
application_namepreferred_editorstartup_runtime_packages
The generic editor reads package names from this metadata before project assets load, so package-backed projects can be opened from the launcher without hardcoding an app-specific entry point. Launcher-created projects write this metadata before the editor starts.
Assets And Metadata
Assets are handle-based and managed by the asset, file, and project managers. Projects use asset sidecars such as:
.evefilemeta.evefoldermeta
Asset references serialize by handle and type name, then resolve through the asset manager.
Interactive project asset loading dispatches scanned assets as an AssetManager batch instead of resolving one pending asset per frame. The asset-service path owns per-handle in-flight state, progress snapshots, and blocking sync access, so concurrent requests wait for the first loader instead of creating duplicate asset instances.
Assets can opt into staged async loading by producing a CPU-only payload on the asset-IO executor and applying it later on the bounded main-thread finalization lane. GPU-backed staged assets can also register GPU readiness work; those loads remain GpuPending until the tracked GPU jobs complete, and sync access blocks until the asset is fully ready.
Texture2D uses staged loading so pixel decoding is separated from asynchronous GPU upload. Runtime texture data updates use the same GPU-service-backed upload path while readback/export waits for pending texture GPU work.
SDK staged assets also include shader/JSON source assets, scene and native prefab YAML, strands, point clouds, and SDK YAML-backed render assets that deserialize through the default IAsset path. Legacy non-staged paths, especially imported model prefab formats that still run through Assimp and create engine objects during import, continue to finalize on the main thread.
Headless tools and focused tests that only need project scanning or asset metadata can set:
ApplicationInitializationSettings::load_default_resources = falseApplicationInitializationSettings::load_project_start_scene = falseApplicationInitializationSettings::load_project_assets = false
Serialization
Persistent engine types must be registered with the serialization system. New persistent types usually need:
- a type registration such as
AssetRegistration,PrivateComponentRegistration,DataComponentRegistration, or system registration - concrete
SerializeandDeserializemethods, or explicit serialization registry handlers - a concrete
OnInspectmethod or explicit inspector registry handler when editor editing is useful - concrete asset-reference collection and relink methods, or explicit support handlers, when the type stores
AssetRef,EntityRef, or component/entity handles