5 Commits
Author SHA1 Message Date
西风逍遥游 63246b8c68 fix: complete architecture consolidation contracts 2026-08-28 00:01:55 +08:00
西风逍遥游 a8b8e83128 refactor: consolidate engine architecture contracts 2026-08-27 12:54:48 +08:00
西风逍遥游 328e37e8ec feat(editor): complete P0 and P1 authoring services 2026-08-24 22:47:23 +08:00
西风逍遥游 bed4ce5cd2 fix(graphics): rebuild Vulkan surface/swapchain and ImGui context when native window is recreated
Repeatedly closing/reopening a window and re-initializing the render system
(single-process unit_test run) crashed because:

- The Vulkan surface/swapchain stayed bound to the destroyed native window.
  SDL can hand back the same pointer for a recreated window, so pointer
  identity could not detect the stale surface; present() then hit
  getSurfaceCapabilitiesKHR: ErrorUnknown.
- The ImGui context and Vulkan present-overlay survived the window, so a
  later present() drew into an unrelated window via the stale overlay.
- headlessImGuiWalk destroyed the ImGui context while the UI backend's real
  context was still current (CreateContext only auto-switches current when
  GImGui is NULL), leaving a dangling context for later present() calls.

Fix:
- Window::close() calls Graphics::onNativeWindowDestroyed(); the Vulkan
  backend drops the surface/swapchain and fires registered window-destroyed
  callbacks (UI backend tears down its ImGui context here).
- initWithWindow() rebuilds the swapchain synchronously and no longer relies
  on pointer identity to detect a stale surface.
- ImGuiBackend owns its ImGui context explicitly and shuts it down via the
  window-destroyed hook; shutdown() switches to its own context first.
- headlessImGuiWalk switches to and from its private ImGui context.

Test-only fixes exposed once the suite can run to completion:
- animation_skinned: Animation::create() returns the process-wide singleton;
  do not wrap it in unique_ptr (delete left a dangling ModuleManager pointer).
- particles attach tests: emitters live in a process-wide ECS; detach (and
  clear skin sources) before local skeletons are destroyed.
2026-08-15 00:26:06 +08:00
sunxfancyandCursor 73c779f87f feat: implement file watching functionality in the filesystem module
- Added methods for file watching, including `watch`, `unwatch`, `unwatchAll`, `getWatchCount`, `pollWatch`, `getLastWatchPath`, and `getLastWatchRealPath`.
- Enhanced the `Filesystem` class to support monitoring file changes, allowing for real-time updates.
- Updated the `physfs` implementation to handle file watch targets and events.
- Improved documentation and added unit tests to validate the new file watching features.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-06 14:51:07 +08:00