Зелёная фаза: записаны ДВА условия корректности копии второй страницы
Новый раздел §4: копия годится только если (1) запечка ограничена копируемым прямоугольником — иначе то, что легло вне него, на второй странице остаётся прежним и страницы расходятся (мерцание торцов, ур.1 к.6, кнопка (0,2)); и (2) содержимое тайла между двумя кадрами не менялось — у кнопки с идущим таймером пометка обновляется каждый кадр. Перечёркнут прежний вывод «окно клипа в pop_floor_bake — только вред»: по скорости да, но оно ОБЯЗАТЕЛЬНО как условие (1). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -190,9 +190,51 @@ file-scope, что у `draw_tile`.
|
||||
|
||||
---
|
||||
|
||||
## 4. Отрицательные результаты — НЕ повторять
|
||||
## 4. Копия второй страницы — и почему она ТРЕБУЕТ окна клипа
|
||||
|
||||
### Окно клипа в `pop_floor_bake` — проверено ТРИ раза, каждый раз хуже
|
||||
Точечные запечки ставятся с `pages = 2`, срабатывают два кадра подряд (по разу
|
||||
на страницу дабл-буфера) и оба раза считают одно и то же. После первого раза
|
||||
нужный прямоугольник уже лежит в ОЗУ-копии первой страницы, и его можно
|
||||
скопировать: `gfx_copy_page` берёт источником ОЗУ-копию НЕактивной страницы
|
||||
(то есть ЧИСТЫЙ фон — спрайты рисуются банком без тени и в копию не попадают),
|
||||
а приёмник обновляет и в видео-ОЗУ, и в ОЗУ-копии. Идея пользователя: тот же
|
||||
приём, что при перевороте экрана (зелёное зелье), только без зеркала.
|
||||
|
||||
| | полная запечка | копия |
|
||||
|---|---:|---:|
|
||||
| щебень / кнопка (60×39) | 179 914 | ~35 000 |
|
||||
| колодец полосы потолка (64×9) | 138 318 | ~17 500 |
|
||||
|
||||
**ДВА УСЛОВИЯ КОРРЕКТНОСТИ.** Оба нарушались и оба дали видимые баги.
|
||||
|
||||
1. **Запечка обязана быть ОГРАНИЧЕНА копируемым прямоугольником.**
|
||||
`draw_tile` рисует тайлы ЦЕЛИКОМ, то есть пишет ШИРЕ бара; копия переносит
|
||||
ровно бар, и всё, что легло вне него, на второй странице остаётся прежним —
|
||||
страницы расходятся, это видно как МЕРЦАНИЕ через кадр. У полосы потолка
|
||||
окно стояло с самого начала (G1), у `pop_floor_bake` — нет, и он мерцал
|
||||
торцами полов, плит и кнопок (найдено пользователем 2026-08-17: уровень 1,
|
||||
комната 6, Кид на кнопке (0,2)). Поэтому в `pop_floor_bake` окно теперь
|
||||
стоит КАК УСЛОВИЕ КОРРЕКТНОСТИ, хотя по скорости само по себе убыточно
|
||||
(см. §5) — снимать его нельзя.
|
||||
2. **Копия годится только если содержимое тайла между двумя кадрами не
|
||||
изменилось.** У анимированного тайла (кнопка с идущим таймером связи)
|
||||
пометка обновляется КАЖДЫЙ кадр и картинка каждый раз другая. Поэтому
|
||||
`pop_set_redraw`/`pop_set_redraw_above` гасят слот копии при ПЕРЕпометке
|
||||
(`pop_bake_slot_reset*`).
|
||||
|
||||
Плюс слот `bake_pg`/`bake_pg_above` помнит, НА КАКОЙ странице сделана первая
|
||||
запечка: копируем только если первая была на ДРУГОЙ странице и дабл-буфер
|
||||
включён. Это покрывает переплетение двух запечек в одном кадре, однобуфер
|
||||
(чит SPACE) и смену комнаты (`pop_bake_forget`).
|
||||
|
||||
---
|
||||
|
||||
## 5. Отрицательные результаты — НЕ повторять
|
||||
|
||||
### Окно клипа в `pop_floor_bake` — по СКОРОСТИ проверено ТРИ раза, каждый раз хуже
|
||||
|
||||
**Но оно всё равно стоит на месте: без него ломается копия второй страницы
|
||||
(§4).** Ниже — только про скорость самого окна.
|
||||
|
||||
| попытка | было | стало |
|
||||
|---|---:|---:|
|
||||
@@ -223,7 +265,7 @@ file-scope, что у `draw_tile`.
|
||||
|
||||
---
|
||||
|
||||
## 5. Журнал правок
|
||||
## 6. Журнал правок
|
||||
|
||||
| дата | что сделано | зелёная: покой / дрожь / пик | коммит |
|
||||
|---|---|---|---|
|
||||
@@ -233,3 +275,6 @@ file-scope, что у `draw_tile`.
|
||||
| 2026-08-17 | G3 `blit_b_clip` байты + file-scope | — / 335 400 / **575 730** | `a3c473d` |
|
||||
| 2026-08-17 | `pop_blit_b` file-scope; пакетная пометка кусков | — / — / **557 706** | `b2da0b8` |
|
||||
| 2026-08-17 | коридор heal по высоте композита | 35 760 / 335 400 / **546 900** | `9a50ab2` |
|
||||
| 2026-08-17 | **копия второй страницы вместо второй запечки** | — / — / **423 558** | `5ef721e` |
|
||||
| 2026-08-17 | `mob_tick_one` в file-scope; снята оснастка из горячих путей | 35 760 / 326 130 / **414 456** | `18ee60e` |
|
||||
| 2026-08-17 | фикс мерцания: окно клипа в `pop_floor_bake` как условие корректности копии | замер после фикса — ниже | `35b7cd5` |
|
||||
|
||||
Reference in New Issue
Block a user