Checkpoint 4: harden native paths, authoring workflows and Player lifecycle
This commit is contained in:
@@ -74,9 +74,17 @@ mesh datablocks remain shared. Repair deliberately duplicated material IDs in
|
||||
Blender's Custom Properties. Save the `.blend` again.
|
||||
|
||||
Removing an exported output produces an import conflict. Faset keeps the old
|
||||
generation active. Inspect the diagnostics and update affected references before
|
||||
explicitly importing with `allow_removed_outputs: true`. This accepts removal;
|
||||
it does not automatically remap references. A normal GLB without persistent custom
|
||||
generation active. In **Jobs**, choose **Review removals** to open **Conflicts**.
|
||||
Review the removed stable IDs and their last-good names; **Copy removed IDs** helps
|
||||
locate references. Update affected references, then use **Accept reviewed removal**.
|
||||
If source data or the active generation has changed since review, the acceptance
|
||||
fails safely; use **Reimport / review again** and inspect the new result.
|
||||
|
||||
The same explicit API action uses `allow_removed_outputs: true`, with
|
||||
`expected_generation` and `expected_active_generation` taken from the reviewed
|
||||
job's `result.generation` and `result.previous_generation`. Use the same source and
|
||||
settings. This accepts removal; it does not automatically remap references or delete
|
||||
scene components. A normal GLB without persistent custom
|
||||
IDs uses structural matching, which cannot guarantee identity after rename or
|
||||
restructuring.
|
||||
|
||||
@@ -118,3 +126,7 @@ For an end-to-end example, open `examples/projects/collect-3d`. Its exit arch in
|
||||
a `.blend`, reproducible Blender script and a published bundle. The repository's
|
||||
`tools/verify_blender_roundtrip.py` runs the actual Blender helper and Editor imports
|
||||
to check rename, geometry changes, removal conflicts and failure preservation.
|
||||
Pass `--ui-probe build/linux-debug/faset_blender_editor_probe` to also test two
|
||||
instances in one live editor session: both receive new geometry while preserving
|
||||
placement, tint, opaque gameplay fields and the authoring revision. This additional
|
||||
probe requires Vulkan and produces before/after captures.
|
||||
|
||||
@@ -80,9 +80,12 @@ and package execution tests; that is separate from physical GPU-driver testing.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
**Unknown component or schema version:** enable/register the missing runtime module
|
||||
and rebuild. The Editor preserves its data as opaque authoring fields, but export
|
||||
requires a matching runtime implementation.
|
||||
**Unknown component:** enable/register the missing runtime module and rebuild. A
|
||||
data-only custom component still needs a schema; it does not need callbacks.
|
||||
|
||||
**Schema version mismatch:** match the linked gameplay schema to the document or
|
||||
apply an explicit data migration, then rebuild. The Editor preserves future or
|
||||
missing component data as opaque fields; export requires a matching schema.
|
||||
|
||||
**Missing asset:** import the original source or Blender manifest again. Preserve its
|
||||
sidecar so the AssetId remains stable. A cache copied from another project is not a
|
||||
|
||||
@@ -23,8 +23,9 @@ resolution, validation activation, fixed ticks and timestep. A bounded run advan
|
||||
one synthetic fixed timestep per frame; it does not reproduce a real-time input
|
||||
session. Keep that distinction when comparing runs.
|
||||
|
||||
Startup starts at `main()` and ends at the first completed frame. OS process loading
|
||||
before `main()` is excluded. Frame wall times exclude writing the final profile and
|
||||
Startup starts at the Player application entry after platform argument normalization
|
||||
and ends at the first completed frame. OS process loading and Windows `wmain` UTF-8
|
||||
argument conversion are excluded. Frame wall times exclude writing the final profile and
|
||||
capture files. Simulation and scene-snapshot times are separate from the renderer
|
||||
call. Renderer CPU wall duration includes GPU waits and readback; it is **not CPU
|
||||
utilization**. GPU timestamps measure the submitted graphics work and can be null
|
||||
|
||||
@@ -1,5 +1,10 @@
|
||||
# Editor workspace
|
||||
|
||||
The Editor follows the window's display scale. Text is rasterized at that scale;
|
||||
panel dimensions are saved in logical units so the layout remains usable when
|
||||
moving between displays. A scale change preserves focused text and cancels an
|
||||
unfinished numeric, divider or gizmo drag without committing an edit.
|
||||
|
||||
The Editor edits saved scene data and previews it in a Vulkan viewport. **Play**
|
||||
opens a separate Player process. Gameplay movement and spawned objects stay in that
|
||||
process; stopping it leaves the authoring scene unchanged.
|
||||
|
||||
Reference in New Issue
Block a user