Add a self-contained, thread-safe crash/error log (common/CrashLog) that
survives process death, plus instrumentation at key lifecycle points so a
crash log reveals the system state that led to it.
- CrashLog.{h,cpp}: append-only eve.log recorder with initSystemLogging,
recordLogEvent, recordCrashEvent (try-lock safe for crash handlers) and
crashLogPath. EVE_LOG_DIR overrides the location.
- CrashHandler.h: unhandled-exception backtrace is now also written to
eve.log, not only stderr.
- main.cpp: open the log before anything can fail.
- Run.cpp: record run start + top-level failures; bind eve.log() so scripts
share the same crash log.
- vulkan/Graphics.cpp: log GPU identity/driver/caps and graphics init
milestones (swapchain/pipelines) - the likeliest hard-crash area.
- load.nut: boot milestones (modules, window+vulkan, game script) and a
periodic frame-count marker to locate how far the loop got.
- test/crashlog.cpp: init/record/crash coverage.
- eve package now keys off the target SDK (share/eve/TARGET_PLATFORM): win32
targets get bin/eve.exe, linux/macosx get bin/eve, so a Linux/macOS host can
produce a Windows game folder without a Visual Studio install.
- win32 SDKs bundle vulkan-1.dll + the VC redistributable next to eve.exe
(cmake/win32_bundle_runtime.cmake), making packaged games self-contained and
letting any host copy them into a package; eve package prefers those bundled
DLLs and only falls back to a local VS redist on Windows hosts.
- main.cpp makes stdout unbuffered so startup markers from eve_init are visible
in redirected CI logs (previously buffered and lost on force-kill).
Verified end-to-end on this machine: the packaged win32 game mounts game.eve,
loads config/main.nut, runs eve_init (EVE_VERIFY_OK) and presents the first
frame.
- EVENGINE_ENABLE_STRICT_WARNINGS option: MSVC /W4 /WX, GCC/Clang
-Wall -Wextra -Werror, with documented noise suppressions and
-isystem/-external:I for third-party headers; enabled on the
Windows/Linux debug CI jobs.
- Fix warnings across engine, modules and tests exposed by the gate,
including real bugs (incomplete-type deletes, Timespan microsecond
overflow, overload hiding, enum switch gaps, dead code).
- Add Linux ASan+UBSan job, example smoke step, python-tools test
job, ruff config (scripts+tools), weekly Linux coverage job and a
CodeQL workflow.
Stage 1 (CPU indirect draw) produced no geometry for the second draw:
- mesh3d_gpudriven.vert added pc.firstInstance on top of gl_InstanceIndex,
which already includes VkDrawIndexedIndirectCommand.firstInstance per the
Vulkan spec; the second command read instance 2 instead of 1 and sampled
garbage matrices. Drop the push-constant indirection entirely.
- gpuDrivenSubmitOpaque never bound vertex/index buffers; each GpuMesh owns
its own buffer pair (vertexBase/firstIndex are 0), so draws ran against
whatever the legacy path left bound. Track meshRecordOwners_ parallel to
the GPU mesh table and bind per-mesh at bucket boundaries.
Test: GpuDriven.opaqueForwardParityMultiTexture now uses a distinct bindless
slot-1 albedo on the second sphere; all 5 GpuDriven tests + IndirectBuilder
tests pass (integrated GPU). Also add the shared Windows crash-backtrace
handler (CrashHandler.h) to unit_test and document the repo debugging
playbook (incl. stale-object/layout pitfalls with unscanned Ninja deps) in
AGENTS.md.
Install an unhandled-exception filter (backward-cpp/DbgHelp) that prints the exception code and a symbolized stack trace. backward-cpp is provided by the EVEngine/third-party repo and consumed from the prebuilt third-party install tree. EVE_TEST_CRASH=1 forces a crash for verifying the handler.
Makefile: defer the WSL capability probe so make run no longer cold-starts the WSL VM (use wsl -l -q for make all). filesystem: file() now fails when the file is missing so file_exists() returns false (eve run from a dir without config.nut no longer dies at dofile). Add temporary [startup] stage timers and EVE_BOOT_BENCH auto-exit to profile boot time.
- Added support for the WebGPU backend in the CMake configuration, enabling builds for Emscripten and native Dawn.
- Implemented conditional compilation for WebGPU-specific features, including shader management and file system handling.
- Updated the build process to exclude unnecessary modules and dependencies for WebGPU, optimizing the engine for browser environments.
- Enhanced the installation script to include WebGPU-related files and directories in the output.
- Refactored existing modules to accommodate WebGPU, ensuring compatibility and performance improvements across the engine.
- Introduced new compile options and configurations tailored for WebGPU builds, including handling of third-party libraries and assets.
Add an iOS Ninja toolchain for deps, use STATIC libs under Xcode to avoid
hashed OBJECT link failures, stub system()/ios namespace clashes, and allow
unsigned local builds when IOS_DEVELOPMENT_TEAM is unset.
Co-authored-by: Cursor <cursoragent@cursor.com>
Inject bundle game launch args, share Android-style resume surface rebuild, and skip validation layers for the first device bring-up.
Co-authored-by: Cursor <cursoragent@cursor.com>
Unpack APK game assets into internal storage, route SDL_main into the engine cmdline entry, and keep Android filesystem paths aligned with the runtime root.
Co-authored-by: Cursor <cursoragent@cursor.com>