mirror of
https://github.com/Toastconcern/FrameStudio.git
synced 2026-10-29 03:02:30 +01:00
v0.2.0: splats, copy/paste, faster homes, seat facing, and a full bug sweep
Frame Studio - Gaussian splats (PLY, SPZ v2-v4), PLY vertex colours, panorama skies - Copy, cut, paste and duplicate for objects, splats and world items - Walkable-area rebake moved off the UI thread; viewport one frame sooner; refresh-locked pacing (FS_PACE=timer for the old one) - Fixed: bundle thumbnail use-after-free crash, auto-save deleting environments, saves into scratch copies, edits lost on non-ASCII paths, unopenable manifests with inf/nan, bundle save data loss, opening a home marking it changed, gizmo NaN, long paths, many malformed-file crashes - Updater verifies sha256, journals the swap and never leaves the exe missing Frame Home - Seats turn you to face their way - Draw batching (Hand Tutorials up to ~20% less GPU time), cut-out EQUAL pass, late head-pose read before submit - Proper queue-family hand-over to the compositor layer; layer descriptor generations and seqlocked slots; structural SPIR-V check - Fixed: hangs/crashes on damaged .fenv files and shaders, render-pass validation error, sync hazard in the foveation smoothing pass, unverified update downloads, half-done installs Tests: tests_loco/env_share/spv_check wired into CMake (FRAME_TESTS) and CI. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VsaXGU27gsrXjDoFtyFJP9
This commit is contained in:
1 parent
d8e5d9e71e
commit
6d0b4fcd2f
544 files changed
+210660
-796
No files matched your search
+19
-16
@@ -152,26 +152,29 @@ int run(const std::string& commandLine, const fs::path& workingDir, std::string&
|
||||
// Both ends close on exec: a command started meanwhile by another thread (Send to Frame and Install run at once)
|
||||
// must not inherit this pipe, or its reader never sees the end. The child's own copies (dup2) stay open.
|
||||
int pipeFds[2];
|
||||
{
|
||||
static std::mutex creating; // (no pipe2 on macOS: made and marked as one step)
|
||||
std::lock_guard<std::mutex> lock(creating);
|
||||
if (::pipe(pipeFds) != 0) return -1;
|
||||
::fcntl(pipeFds[0], F_SETFD, FD_CLOEXEC);
|
||||
::fcntl(pipeFds[1], F_SETFD, FD_CLOEXEC);
|
||||
}
|
||||
posix_spawn_file_actions_t actions;
|
||||
posix_spawn_file_actions_init(&actions);
|
||||
posix_spawn_file_actions_addopen(&actions, 0, "/dev/null", O_RDONLY, 0);
|
||||
posix_spawn_file_actions_adddup2(&actions, pipeFds[1], 1);
|
||||
posix_spawn_file_actions_adddup2(&actions, pipeFds[1], 2);
|
||||
posix_spawn_file_actions_addclose(&actions, pipeFds[0]);
|
||||
posix_spawn_file_actions_addclose(&actions, pipeFds[1]);
|
||||
// (the working directory through the shell: posix_spawn_file_actions_addchdir isn't everywhere yet)
|
||||
const std::string line = workingDir.empty() ? commandLine : "cd " + shellQuote(workingDir.string()) + " && " + commandLine;
|
||||
const char* argv[] = {"/bin/sh", "-c", line.c_str(), nullptr};
|
||||
pid_t pid = -1;
|
||||
const int spawned = posix_spawn(&pid, "/bin/sh", &actions, nullptr, const_cast<char* const*>(argv), environ);
|
||||
posix_spawn_file_actions_destroy(&actions);
|
||||
int spawned;
|
||||
{
|
||||
// (no pipe2 on macOS: made, marked and handed to the child as one step, so another thread's spawn can't
|
||||
// catch the pipe in between, still inheritable, and keep it open)
|
||||
static std::mutex creating;
|
||||
std::lock_guard<std::mutex> lock(creating);
|
||||
if (::pipe(pipeFds) != 0) return -1;
|
||||
::fcntl(pipeFds[0], F_SETFD, FD_CLOEXEC);
|
||||
::fcntl(pipeFds[1], F_SETFD, FD_CLOEXEC);
|
||||
posix_spawn_file_actions_t actions;
|
||||
posix_spawn_file_actions_init(&actions);
|
||||
posix_spawn_file_actions_addopen(&actions, 0, "/dev/null", O_RDONLY, 0);
|
||||
posix_spawn_file_actions_adddup2(&actions, pipeFds[1], 1);
|
||||
posix_spawn_file_actions_adddup2(&actions, pipeFds[1], 2);
|
||||
posix_spawn_file_actions_addclose(&actions, pipeFds[0]);
|
||||
posix_spawn_file_actions_addclose(&actions, pipeFds[1]);
|
||||
spawned = posix_spawn(&pid, "/bin/sh", &actions, nullptr, const_cast<char* const*>(argv), environ);
|
||||
posix_spawn_file_actions_destroy(&actions);
|
||||
}
|
||||
::close(pipeFds[1]);
|
||||
if (spawned != 0) { ::close(pipeFds[0]); out = "could not start: " + commandLine; return -1; }
|
||||
char buf[4096];
|
||||
|
||||
Reference in new issue
Block a user