a render3d program's window is opened by its renderer, not by the runtime before main

rt_init opened every windowed program's window before main, and render3d's gvk_open then only
retitled it. win_open makes the window when there is none (cocoa.ll and win32.ll alike), so for a
program that has gvk_open the runtime now leaves it (window_later(), an intrinsic: windowed and
render3d present): a process that never reaches the renderer - Maroon Lake's launcher watcher, which
only spawns the game and waits - never makes a window, an NSApplication or AppKit's heap.

Audited every window native reachable before the renderer opens (settings, telemetry, rescue, the
watcher reach App.* and Input.*): on macOS each that loads W_win / W_app / W_view / W_mtl / W_glctx
checks it for null; win_close, win_running, win_text, win_held, win_cursor_mode, win_gl_scale and the
pad and touch reads load none. On Windows each that loads W_hwnd / W_hdc checks it; the rest load none.

Measured, windowed, R3D_DEV=1 R3D_PLAYTEST=2, both killed after:
- the game straight to play: the window, the Vulkan swapchain (1920x1080) and the valley's models
  come up, alive at 30 s;
- the launcher (R3D_GAME=launcher): the watcher 11 MB -> 3.7 MB, its launcher window alive at 10 s.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Orkun ÇAKILKAYA 2026-09-29 14:19:10 +03:00
parent 30a641d249
commit 84d754a4e9
4 changed files with 43894 additions and 43785 deletions

View file

@ -85,7 +85,7 @@ function rt_init(rt_core_st: mut RtCoreState, rt_image_st: mut RtImageState, rt_
rt_tt_init(rt_truetype_st)
rt_ui_init(rt_ui_st)
rt_clear(rt_core_st, rt_rng_st, 0)
if is_windowed() {
if is_windowed() and not window_later() {
win_open(rt_fbw, rt_fbh, 3, game_title())
}
}