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

3.2 KiB

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

cmake --preset vs2022-debug
cmake --build --preset build-debug
ctest --preset test-debug

Integration build

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:

$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.