aboutsummaryrefslogtreecommitdiff
path: root/docs/tomes
diff options
context:
space:
mode:
authorValentin Popov <valentin@popov.link>2026-10-19 21:59:36 +0300
committerValentin Popov <valentin@popov.link>2026-10-19 21:59:36 +0300
commitbf1f330379c20103d6b2aba1ff61d9ea3cd15989 (patch)
treee3a82a323b1e34aa91d2310477f21b5343bff721 /docs/tomes
parent84ebd259ea552e278173db5d842ae16a929411ff (diff)
downloadfparkan-bf1f330379c20103d6b2aba1ff61d9ea3cd15989.tar.xz
fparkan-bf1f330379c20103d6b2aba1ff61d9ea3cd15989.zip
fix(render): refresh viewport after swapchain recreation
Diffstat (limited to 'docs/tomes')
-rw-r--r--docs/tomes/05-render.md23
1 files changed, 17 insertions, 6 deletions
diff --git a/docs/tomes/05-render.md b/docs/tomes/05-render.md
index 545aa1a..84de6ee 100644
--- a/docs/tomes/05-render.md
+++ b/docs/tomes/05-render.md
@@ -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.