MetaCore/README.md
2026-03-19 18:01:50 +08:00

86 lines
3.2 KiB
Markdown

# MetaCore
MetaCore is a new pure C++ editor/runtime workspace scaffolded from the EG redesign plan.
## Current status
- New greenfield project structure under `D:\MetaCore`
- Clear module boundaries for `foundation`, `platform`, `engine`, `MetaEditor`, and `MetaPlayer`
- JSON-based project and scene persistence without external dependencies
- Panda3D 1.10.16 SDK, Dear ImGui, ImGuizmo, and RmlUi are now wired into the integration build
- Stable runtime path currently uses a safe Panda-linked platform adapter and shell abstractions
- `DearImGuiEditorShell` is now a real integration handoff point, with a default stable mode and an experimental headless ImGui frame mode
- simplepbr shader resource mirror directory for the future `MetaRender` implementation
## What is implemented now
- Top-level CMake project and presets
- Core domain objects: project, scene, assets, editor state, render interfaces
- Minimal `MetaEditor` and `MetaPlayer` entry points
- Project bootstrap that creates:
- `MetaCore.project.json`
- `Scenes/Main.mcscene.json`
- `Library/AssetDB.json`
- default editor layout cache
- Basic tests covering project persistence, scene serialization, and command stack behavior
## Dependency strategy
The project still supports a dependency-light scaffold build, and now also supports an integration build with the
installed SDKs and packages. The real integrations are isolated behind:
- `MetaCore/platform/panda`
- `MetaCore/engine/runtime_ui`
- `MetaCore/engine/render`
- `MetaEditor/IEditorShell.h`
- `MetaEditor/NullEditorShell.cpp`
- `MetaEditor/DearImGuiEditorShell.cpp`
This keeps project, scene, asset, and editor-domain code isolated while the platform and GUI backends evolve.
## Suggested next steps
1. Replace the safe Panda-linked adapter with real Panda window/context creation and message pumping.
2. Replace the current `DearImGuiEditorShell` fallback path with a real Dear ImGui renderer/backend pair.
3. Bind ImGuizmo to `TransformGizmoService` and the editor viewport state.
4. Add RmlUi backend glue into `MetaPlayer`.
5. Replace the current placeholder Panda render backend with a real `MetaRender`.
6. Copy the full simplepbr shader set and integrate the first PBR pass.
## Configure
```powershell
cmake --preset vs2022-debug
cmake --build --preset build-debug
ctest --preset test-debug
```
## Integration build
```powershell
cmake --preset vs2022-integration-debug
cmake --build --preset build-integration-debug
ctest --preset test-integration-debug
```
`MetaEditor` shell selection:
- default shell: `NullEditorShell`
- Dear shell: set `METACORE_EDITOR_SHELL=dearimgui`
Experimental headless ImGui frame generation can be toggled with:
```powershell
$env:METACORE_ENABLE_HEADLESS_IMGUI = "1"
```
This mode is still treated as experimental and is not part of the stable runtime path yet.
Optional runtime toggles:
- enable Panda window bootstrap: `METACORE_ENABLE_PANDA_WINDOW=1`
- limit editor frame count for automation/headless runs: `METACORE_EDITOR_FRAME_COUNT=<n>`
When Panda window bootstrap is enabled and `METACORE_EDITOR_FRAME_COUNT` is not set, `MetaEditor` now keeps running
until the window is closed. For automation, set an explicit frame count to force exit after a bounded number of frames.