fix(render): refresh viewport after swapchain recreation
Docs Deploy / Build and Deploy MkDocs (push) Successful in 45s

This commit is contained in:
Valentin Popov committed 2026-10-19 22:59:36 +04:00
1 parent 84ebd259ea
commit bf1f330379
3 files changed
+562 -150

No files matched your search

+17 -6
View File
@@ -1035,15 +1035,25 @@ WEAR и MAT0 до объединения геометрии. Индексы GPU
animation phase; object batches сохраняют их legacy blend/depth/alpha state.
После загрузки world path создаёт интерактивную free-flight камеру (`WASD`,
`E/Q`, `Shift`, `Ctrl`, RMB relative-look), обновляет listener и на каждом
кадре собирает environment frame. После шага движения камера проверяет высоту
`E/Q`, `Shift`, `Ctrl`, RMB relative-look), обновляет listener и собирает
environment frame для каждого подготовленного кадра. Event loop один раз
сэмплирует камеру, общий animation clock, геометрию и окружение перед запросом
redraw; redraw потребляет это состояние. Если surface требует пересоздать
swapchain, тот же sample времени и состояние мира отправляются повторно.
Перед повторной отправкой projection камеры и viewport-зависимые environment
и shadow geometry обновляются для нового размера без продвижения сцены.
Счётчик и replay clock продвигаются только после результата `Presented`.
После шага движения камера проверяет высоту
`TerrainWorld`: над конечной поверхностью сохраняется начальный просвет, а вне
поверхности высота не ограничивается. Mission-local `sky.ske`/`sky.wea` выбирают
атмосферное расписание и sky materials, `effects.rlb/env_lightning` даёт
lightning visual; weather particles, flares, sun/moon, point lights,
projected shadows и audio events обновляются вместе с камерой и временем.
`--atmosphere-seconds` задаёт старт времени, `--frames 0` оставляет цикл
бесконечным, а `--preview-roots` служит только диагностическим ограничителем.
бесконечным, `--control-clock-ms N` воспроизводит общий clock анимации MSH и
материалов вместе с окружением от нуля до `N` за заданное число кадров и требует
как минимум два кадра.
`--preview-roots` служит только диагностическим ограничителем.
`--legacy-camera-capture` выбирает воспроизводимую камеру без free-flight
управления: запись selector 0 задаёт D3D7 transform, clip параметры и native
viewport RECT `[left, top, right, bottom]`. Путь сохраняет оси basis из view
@@ -1052,14 +1062,15 @@ matrix вместе с roll, переносит полученный `clip_from_
и отклоняет несовпадение размера при
создании или resize вместо растягивания кадра. Результат нужно сравнивать с
тем же crop исходного PNG `[left, top, right, bottom]`. Контроллер
`FreeFlightCamera` в этом режиме не создаётся, но redraw продолжает обновлять
`FreeFlightCamera` в этом режиме не создаётся. Подготовка кадра обновляет
environment и projected shadows от captured camera. Перед environment update и
его audio events listener получает position, forward и up captured camera;
начальная сортировка world draw использует её же position. Phase capture может
содержать наблюдаемый mission path и проверенный `atmosphere_seconds`; viewer
использует эту абсолютную фазу по умолчанию, если не указан явный CLI override,
и удерживает sample атмосферы на ней через readback frames. FX по-прежнему
получает реальный frame time. Это не полное simulation time: `weather`, RNG и
и удерживает sample атмосферы на ней через readback frames. Без
`--control-clock-ms` FX получает реальный frame time; с параметром environment
и материалы используют replay clock. Это не полное simulation time: `weather`, RNG и
остальное mission state остаются неизвестными, поэтому совпадение камеры и
фазы не доказывает visual parity с native frame.